Fixed minor bugs and made the library thread safe
This commit is contained in:
parent
433ec4eb81
commit
2c849eb01b
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
*.flac
|
||||
12
ReadMe.md
Normal file
12
ReadMe.md
Normal file
@ -0,0 +1,12 @@
|
||||
ParseManagerCS Version!
|
||||
TODO:
|
||||
- [ ] Allow the use of functions in arguments (Tough)
|
||||
- [ ] Allow the use of statements in conditionals: `if num+5>=GETAGE()-1 then STOP(song)|SKIP(0)` (Tough)
|
||||
- [ ] Add other cool built in things (Fun)
|
||||
- [ ] Add object support (Tough)
|
||||
- [ ] Improve audio support (Simple)
|
||||
- [ ] Add simple threading (Alright)
|
||||
- [ ] Fix Bugs! (Death)
|
||||
|
||||
Maybe:
|
||||
- [ ] Add While/for loops (With labels this can easily be done. So it isn't really needed, I may add it in the future though!)
|
||||
BIN
packages/CSCore.1.2.1.1/CSCore.1.2.1.1.nupkg
vendored
Normal file
BIN
packages/CSCore.1.2.1.1/CSCore.1.2.1.1.nupkg
vendored
Normal file
Binary file not shown.
25234
packages/CSCore.1.2.1.1/lib/net35-client/CSCore.XML
vendored
Normal file
25234
packages/CSCore.1.2.1.1/lib/net35-client/CSCore.XML
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Resource.Embedder.1.2.4/Resource.Embedder.1.2.4.nupkg
vendored
Normal file
BIN
packages/Resource.Embedder.1.2.4/Resource.Embedder.1.2.4.nupkg
vendored
Normal file
Binary file not shown.
19
packages/Resource.Embedder.1.2.4/build/Resource.Embedder.targets
vendored
Normal file
19
packages/Resource.Embedder.1.2.4/build/Resource.Embedder.targets
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<EmbedderSignAssembly Condition="$(EmbedderSignAssembly) == '' Or $(EmbedderSignAssembly) == '*Undefined*'">$(SignAssembly)</EmbedderSignAssembly>
|
||||
<IntermediateDir>$(ProjectDir)$(IntermediateOutputPath)</IntermediateDir>
|
||||
<EmbedderPath Condition="$(EmbedderPath) == '' Or $(EmbedderPath) == '*Undefined*'">$(MSBuildThisFileDirectory)..\</EmbedderPath>
|
||||
</PropertyGroup>
|
||||
<UsingTask TaskName="ResourceEmbedder.MsBuild.SatelliteAssemblyEmbedderTask" AssemblyFile="$(EmbedderPath)ResourceEmbedder.MsBuild.dll" />
|
||||
<UsingTask TaskName="ResourceEmbedder.MsBuild.SatelliteAssemblyCleanupTask" AssemblyFile="$(EmbedderPath)ResourceEmbedder.MsBuild.dll" />
|
||||
<!-- We want to run as soon as the satellite assemblies are generated -->
|
||||
<Target AfterTargets="GenerateSatelliteAssemblies" Name="EmbedderTarget" DependsOnTargets="$(EmbedderDependsOnTargets)">
|
||||
<ResourceEmbedder.MsBuild.SatelliteAssemblyEmbedderTask AssemblyPath="@(IntermediateAssembly)" ProjectDirectory="$(ProjectDir)" TargetPath="$(TargetPath)" SignAssembly="$(EmbedderSignAssembly)" References="@(ReferencePath)" DebugSymbols="$(DebugSymbols)" DebugType="$(DebugType)" />
|
||||
</Target>
|
||||
<!--Cleanup after generating -->
|
||||
<Target AfterTargets="AfterBuild" Name="CleanupTarget" DependsOnTargets="$(EmbedderDependsOnTargets)">
|
||||
<ResourceEmbedder.MsBuild.SatelliteAssemblyCleanupTask AssemblyPath="@(IntermediateAssembly)" ProjectDirectory="$(ProjectDir)" TargetPath="$(TargetPath)" SignAssembly="$(EmbedderSignAssembly)" />
|
||||
</Target>
|
||||
|
||||
</Project>
|
||||
4
packages/repositories.config
Normal file
4
packages/repositories.config
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<repositories>
|
||||
<repository path="..\parseManager\packages.config" />
|
||||
</repositories>
|
||||
@ -7,54 +7,92 @@
|
||||
* To change this template use Tools | Options | Coding | Edit Standard Headers.
|
||||
*/
|
||||
using System;
|
||||
using parseManager; // IMPORTANT
|
||||
using System.Threading;
|
||||
using CSCore;
|
||||
using CSCore.Codecs;
|
||||
using CSCore.SoundOut;
|
||||
using parseManagerCS;
|
||||
public class define : standardDefine // If you want the standard methods you must include this, Also this class cannot be static!
|
||||
{
|
||||
public void testM(object arg1,object arg2)
|
||||
double count;
|
||||
ISoundOut GetSoundOut()
|
||||
{
|
||||
Console.WriteLine(arg1+"\t"+arg2);
|
||||
if (WasapiOut.IsSupportedOnCurrentPlatform)
|
||||
return new WasapiOut();
|
||||
else
|
||||
return new DirectSoundOut();
|
||||
}
|
||||
public void testM2(string arg1)
|
||||
IWaveSource GetSoundSource(string path)
|
||||
{
|
||||
Console.WriteLine(arg1 + " it works!!!");
|
||||
return CodecFactory.Instance.GetCodec(path);
|
||||
}
|
||||
public void TEST()
|
||||
public void _play()
|
||||
{
|
||||
var test=GLOBALS.GetPM();
|
||||
var env=test.GetENV();
|
||||
Console.WriteLine(env["test"]);
|
||||
string path = (string)GLOBALS.GetData("__MUSIC");
|
||||
double id = (double)GLOBALS.GetData("__MUSICH");
|
||||
using (IWaveSource soundSource = GetSoundSource(path)) {
|
||||
using (ISoundOut soundOut = GetSoundOut()) {
|
||||
soundOut.Initialize(soundSource);
|
||||
GLOBALS.AddData("__MUSICH" + id, soundOut);
|
||||
soundOut.Play();
|
||||
soundOut.WaitForStopped();
|
||||
}
|
||||
}
|
||||
}
|
||||
public void TEST2(object msg)
|
||||
public void STOP(parseManager PM, double id)
|
||||
{
|
||||
Console.WriteLine(msg);
|
||||
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
|
||||
sound.Stop();
|
||||
}
|
||||
public void TEST3(double msg, string msg2)
|
||||
public void RESUME(parseManager PM, double id)
|
||||
{
|
||||
Console.WriteLine(msg + "|" + msg2);
|
||||
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
|
||||
sound.Resume();
|
||||
}
|
||||
public double TEST4(double num){
|
||||
return num+1;
|
||||
public void SETV(parseManager PM, double id, double vol)
|
||||
{
|
||||
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
|
||||
sound.Volume = (float)vol;
|
||||
}
|
||||
public void PAUSE(parseManager PM, double id)
|
||||
{
|
||||
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
|
||||
sound.Pause();
|
||||
}
|
||||
public double PLAY(parseManager PM, string filepath)
|
||||
{
|
||||
GLOBALS.AddData("__MUSIC", filepath);
|
||||
GLOBALS.AddData("__MUSICH", count++);
|
||||
var oThread = new Thread(new ThreadStart(_play));
|
||||
oThread.Start();
|
||||
return count - 1;
|
||||
}
|
||||
}
|
||||
namespace parseManager
|
||||
namespace parseManagerCS
|
||||
{
|
||||
class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
parseManager test = new parseManager("parsetest2.txt","define"); // define is where your methods will be held
|
||||
if (args.Length == 0) {
|
||||
Console.Write("Please Include a file path!");
|
||||
Console.ReadLine();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
parseManager test = new parseManager(args[0], "define"); // define is where your methods will be held
|
||||
|
||||
//parseManager test = new parseManager("parsetest2.txt","define");
|
||||
|
||||
nextType next = test.Next(); // TODO implement the next method
|
||||
string type;
|
||||
while(next.GetCMDType()!="EOF"){
|
||||
while (next.GetCMDType() != "EOF") {
|
||||
type = next.GetCMDType();
|
||||
if(type=="line"){
|
||||
if (type == "line") {
|
||||
Console.Write(next.GetText());
|
||||
Console.ReadLine();
|
||||
}
|
||||
next = test.Next();
|
||||
}
|
||||
Console.Write("Press any key to continue . . . ");
|
||||
Console.ReadKey(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
25234
parseManager/bin/Debug/CSCore.xml
Normal file
25234
parseManager/bin/Debug/CSCore.xml
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,56 +1,13 @@
|
||||
[TEST]{
|
||||
"Jump was successful!"
|
||||
--GOTO("HERE")
|
||||
}
|
||||
ENTRY START
|
||||
[START]{
|
||||
"Test 1:"
|
||||
-- t=15
|
||||
-- test=2*100
|
||||
-- test2=[1,2,3,4,"HI"]
|
||||
-- test2[5]="HELLO"
|
||||
-- "test2 = $test2$"
|
||||
-- "test = $test$"
|
||||
-- c=5
|
||||
-- ::HERE::
|
||||
-- a,b="sdf",true
|
||||
-- "a,b,c = $a$ $b$ $c$"
|
||||
-- food="yum"
|
||||
-- test=true
|
||||
-- stop=21
|
||||
-- "food = $food$"
|
||||
-- "test = $test$"
|
||||
-- "stop = $stop$"
|
||||
-- "Test 2:"
|
||||
-- "test2[1] = $test2[1]$"
|
||||
-- testM(2+2,"Test")
|
||||
-- testM(2+2,test2[5])
|
||||
-- count=0
|
||||
-- ::loop::
|
||||
-- "Count = $count$"
|
||||
-- count=count+1
|
||||
-- if count>10 then GOTO("end")|GOTO("loop")
|
||||
-- ::end::
|
||||
-- "Done!"
|
||||
--JUMP("CallMe")
|
||||
env=CreateENV()
|
||||
msg="Hi"
|
||||
SetENV(env)
|
||||
"BEFORE_CHANGE: $msg$"
|
||||
msg=21+7
|
||||
"IN_HERE $msg$"
|
||||
env=GetDefualtENV()
|
||||
SetENV(env)
|
||||
"OUT_HERE $msg$"
|
||||
test=CallMe("This","is a test!")
|
||||
"FENV: $test$"
|
||||
"Did it work!"
|
||||
"HMMM"
|
||||
test=CallMe("This","is a test too!")
|
||||
"FENV: $test$"
|
||||
EXIT()
|
||||
"Hello"
|
||||
song=PLAY("test.flac")
|
||||
print("Hello!")
|
||||
"Don't hit enter!"
|
||||
"Am I still going?"
|
||||
PAUSE(song)
|
||||
"I'm alive!"
|
||||
"Lets resume"
|
||||
RESUME(song)
|
||||
":)"
|
||||
}
|
||||
[CallMe:function(args1,args2)]{
|
||||
"function was called!"
|
||||
"CALL_TEST: $args1$ $args2$"
|
||||
}
|
||||
-- (count==stop and name=="bob") ? GOTO(end) : GOTO(loop)
|
||||
25234
parseManager/bin/Release/CSCore.xml
Normal file
25234
parseManager/bin/Release/CSCore.xml
Normal file
File diff suppressed because it is too large
Load Diff
1
parseManager/bin/Release/Merge.bat
Normal file
1
parseManager/bin/Release/Merge.bat
Normal file
@ -0,0 +1 @@
|
||||
ILRepack.exe /target:exe /targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.x" /out:MergedFile.exe parsemanagertester.exe cscore.dll
|
||||
6
parseManager/bin/Release/MergedFile.exe.config
Normal file
6
parseManager/bin/Release/MergedFile.exe.config
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" standalone="yes"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
|
||||
</startup>
|
||||
</configuration>
|
||||
6
parseManager/bin/Release/parseManagerTester.exe.config
Normal file
6
parseManager/bin/Release/parseManagerTester.exe.config
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
|
||||
</startup>
|
||||
</configuration>
|
||||
BIN
parseManager/bin/Release/savedata.dat
Normal file
BIN
parseManager/bin/Release/savedata.dat
Normal file
Binary file not shown.
6
parseManager/bin/Release/test.exe.config
Normal file
6
parseManager/bin/Release/test.exe.config
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" standalone="yes"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
|
||||
</startup>
|
||||
</configuration>
|
||||
50
parseManager/bin/Release/test.txt
Normal file
50
parseManager/bin/Release/test.txt
Normal file
@ -0,0 +1,50 @@
|
||||
ENTRY TESTSTART
|
||||
[TESTSTART]{
|
||||
"Hello (Press Enter)"
|
||||
print("PLAY SONG (1)")
|
||||
print("MESSAGE (2)")
|
||||
print("An Adventure (3)")
|
||||
print("QUIT (4)")
|
||||
::choice::
|
||||
write("Choose: ")
|
||||
choice=GetInput()
|
||||
if choice=="1" then JUMP("SONG")|SKIP(0)
|
||||
if choice=="2" then JUMP("YO")|SKIP(0)
|
||||
if choice=="4" then QUIT()|SKIP(0)
|
||||
if choice=="3" then SKIP(2)|SKIP(0)
|
||||
GOTO("choice")
|
||||
"We are here now! Time for some fun..."
|
||||
write("Please enter your name: ")
|
||||
name=GetInput()
|
||||
if name=="" then SKIP(-3)|SKIP(0)
|
||||
print("So your name is $name$ huh...")
|
||||
"I won't judge haha"
|
||||
"Anyway let's get controls for that song"
|
||||
print("Stop (s)")
|
||||
print("Play (t)")
|
||||
print("Pause (a)")
|
||||
print("Resume (r)")
|
||||
print("Quit (q)")
|
||||
::control::
|
||||
write("Choose: ")
|
||||
choice=GetInput()
|
||||
if choice=="s" then STOP(song)|SKIP(0)
|
||||
if choice=="t" then JUMP("PLAYS")|SKIP(0)
|
||||
if choice=="a" then PAUSE(song)|SKIP(0)
|
||||
if choice=="r" then RESUME(song)|SKIP(0)
|
||||
if choice=="q" then QUIT()|SKIP(0)
|
||||
GOTO("control")
|
||||
}
|
||||
[PLAYS]{
|
||||
PAUSE(song)
|
||||
song=PLAY("test.flac")
|
||||
GOTO("control")
|
||||
}
|
||||
[SONG]{
|
||||
song=PLAY("test.flac")
|
||||
GOTO("choice")
|
||||
}
|
||||
[YO]{
|
||||
"How are you doing?"
|
||||
GOTO("choice")
|
||||
}
|
||||
36
parseManager/bin/Release/test2.txt
Normal file
36
parseManager/bin/Release/test2.txt
Normal file
@ -0,0 +1,36 @@
|
||||
ENABLE leaking
|
||||
[START]{
|
||||
loaded = LOAD()
|
||||
if loaded==true then print("Loaded!")|print("No save file found!")
|
||||
write("Hello! Please enter your name: ")
|
||||
name=GetInput()
|
||||
if name=="" then SKIP(-3)|SKIP(0)
|
||||
print("So your name is $name$ Cool!")
|
||||
}
|
||||
[Test]{
|
||||
SAVE()
|
||||
"In here now"
|
||||
Choice("Choose: ")
|
||||
}
|
||||
[Test2]{
|
||||
SAVE()
|
||||
"Over here lol"
|
||||
Choice("Choose: ")
|
||||
}
|
||||
[Tired]{
|
||||
SAVE()
|
||||
"Done now!"
|
||||
Choice("Choose: ")
|
||||
"We are done!"
|
||||
}
|
||||
[Choice:function(msg)]{
|
||||
print("Keep Playing (k)")
|
||||
print("Quit (q)")
|
||||
::control::
|
||||
write(msg)
|
||||
choice=GetInput()
|
||||
if choice=="k" then GOTO("end")|SKIP(0)
|
||||
if choice=="q" then QUIT()|SKIP(0)
|
||||
GOTO("control")
|
||||
::end::
|
||||
}
|
||||
4
parseManager/bin/Release/test3.txt
Normal file
4
parseManager/bin/Release/test3.txt
Normal file
@ -0,0 +1,4 @@
|
||||
[START]{
|
||||
print("Testing")
|
||||
"Done!"
|
||||
}
|
||||
@ -4,3 +4,5 @@ C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Debu
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Debug\parseManagerTester.pdb
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\obj\Debug\parseManagerTester.exe
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\obj\Debug\parseManagerTester.pdb
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Debug\CSCore.dll
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Debug\CSCore.xml
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Release\parseManagerTester.exe.config
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Release\parseManagerTester.exe
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Release\CSCore.dll
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\bin\Release\CSCore.xml
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\obj\Release\parseManagerTester.csprojResolveAssemblyReference.cache
|
||||
C:\Users\Ryan\Documents\SharpDevelop Projects\parseManager\parseManager\obj\Release\parseManagerTester.exe
|
||||
@ -1,4 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="CSCore" version="1.2.1.1" targetFramework="net40" />
|
||||
<package id="MediaToolkit" version="1.1.0.1" targetFramework="net40" />
|
||||
<package id="Resource.Embedder" version="1.2.4" targetFramework="net40" developmentDependency="true" />
|
||||
</packages>
|
||||
@ -4,13 +4,13 @@
|
||||
* Time: 11:54 AM
|
||||
*/
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Reflection;
|
||||
using parseManager;
|
||||
namespace parseManager
|
||||
using parseManagerCS;
|
||||
using System.Threading;
|
||||
namespace parseManagerCS
|
||||
{
|
||||
/// The parseManager is an Advance Config Script
|
||||
/// It allows the user to run code while also definine variables
|
||||
@ -28,12 +28,16 @@ namespace parseManager
|
||||
object _defineClassObject;
|
||||
chunk _currentChunk;
|
||||
chunk _lastChunk = null;
|
||||
readonly ENV _mainENV = new ENV();
|
||||
ENV _mainENV = new ENV();
|
||||
public ENV _defualtENV;
|
||||
Stack<ENV> _fStack = new Stack<ENV>();
|
||||
Dictionary<string, bool> _flags = new Dictionary<string, bool>();
|
||||
Dictionary<string, chunk> _chunks = new Dictionary<string, chunk>();
|
||||
Dictionary<string, string> _methods = new Dictionary<string, string>();
|
||||
public void _SetDENV(ENV env)
|
||||
{
|
||||
_mainENV = env;
|
||||
}
|
||||
public parseManager(string filepath)
|
||||
{
|
||||
InitFlags();
|
||||
@ -74,7 +78,7 @@ namespace parseManager
|
||||
}
|
||||
return false;
|
||||
}
|
||||
void debug(object msg)
|
||||
public void debug(object msg)
|
||||
{
|
||||
if (_flags["debugging"])
|
||||
Console.WriteLine("DEBUGGING: " + msg);
|
||||
@ -90,6 +94,9 @@ namespace parseManager
|
||||
foreach (Match m in Regex.Matches(data, @"ENTRY ([a-zA-Z0-9_\./]+)")) {
|
||||
_entry = m.Groups[1].ToString();
|
||||
}
|
||||
// foreach (Match m in Regex.Matches(data, @"USING ([a-zA-Z0-9_\./]+)")) {
|
||||
// m.Groups[1].ToString();
|
||||
// }
|
||||
var match = Regex.Matches(data, @"\[(.+)\][\r\n]*?\{([^\0]+?)\}");
|
||||
var count = 0;
|
||||
foreach (Match m in match) {
|
||||
@ -154,7 +161,10 @@ namespace parseManager
|
||||
public bool isRegisteredFunction(string method, out chunk o)
|
||||
{
|
||||
if (_chunks.TryGetValue(method, out o)) {
|
||||
return true;
|
||||
if (o.isFunction()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -177,7 +187,7 @@ namespace parseManager
|
||||
PushError("Stack Overflow!");
|
||||
}
|
||||
_defualtENV = fEnv;
|
||||
def.JUMP(method);
|
||||
def.JUMP(this,method);
|
||||
return fEnv; // TODO Handle returns
|
||||
}
|
||||
public object InvokeR(string method, object[] args)
|
||||
@ -188,7 +198,7 @@ namespace parseManager
|
||||
}
|
||||
try {
|
||||
_defineMethod = _defineType.GetMethod(method);
|
||||
return _defineMethod.Invoke(_defineClassObject, args);
|
||||
return _defineMethod.Invoke(_defineClassObject, tackBArgs(this, args));
|
||||
} catch {
|
||||
PushError("Invalid method: " + method);
|
||||
return null;
|
||||
@ -200,17 +210,25 @@ namespace parseManager
|
||||
if (isRegisteredFunction(method, out c)) {
|
||||
InvokeI(method, args, c);
|
||||
return 0;
|
||||
} else {
|
||||
try {
|
||||
_defineMethod = _defineType.GetMethod(method);
|
||||
_defineMethod.Invoke(_defineClassObject, args);
|
||||
return 0;
|
||||
} catch {
|
||||
PushError("Invalid method: " + method);
|
||||
}
|
||||
}
|
||||
try {
|
||||
_defineMethod = _defineType.GetMethod(method);
|
||||
_defineMethod.Invoke(_defineClassObject, tackBArgs(this, args));
|
||||
return 0;
|
||||
} catch {
|
||||
PushError("Invalid method: " + method);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
public object[] tackBArgs(object o,object[] args){
|
||||
var len = args.Length;
|
||||
var newargs=new object[len+1];
|
||||
for(int i = 0;i<len;i++){
|
||||
newargs[i+1]=args[i];
|
||||
}
|
||||
newargs[0]=o;
|
||||
return newargs;
|
||||
}
|
||||
public void SetBlock(string BLOCK)
|
||||
{
|
||||
chunk cchunk;
|
||||
@ -253,8 +271,9 @@ namespace parseManager
|
||||
}
|
||||
public void PushError(string err)
|
||||
{
|
||||
Console.WriteLine(err);
|
||||
def.EXIT();
|
||||
Console.WriteLine(err + "\nPress Enter!");
|
||||
Console.ReadLine();
|
||||
def.EXIT(this);
|
||||
}
|
||||
public nextType Next(string BLOCK)
|
||||
{
|
||||
@ -284,6 +303,11 @@ namespace parseManager
|
||||
tempReturn.SetText("Reached the end of the file!");
|
||||
return tempReturn;
|
||||
}
|
||||
if (!_active) {
|
||||
tempReturn.SetCMDType("EOF");
|
||||
tempReturn.SetText("Reached the end of the file!");
|
||||
return tempReturn;
|
||||
}
|
||||
var type = cCMD.GetCMDType();
|
||||
stuff = cCMD.GetArgs();
|
||||
if (type == "LOGIC") {//{conds,andors,_funcif,_resultif,_funcelse,_resultelse}
|
||||
@ -319,10 +343,8 @@ namespace parseManager
|
||||
}
|
||||
var truth = truths[0];
|
||||
if (truths.Length == 1 && truth) {
|
||||
//Console.WriteLine(funcif+"|"+ResolveVar(argsif)[0]);
|
||||
InvokeNR(funcif, ResolveVar(argsif));
|
||||
} else if (truths.Length == 1) {
|
||||
//Console.WriteLine(funcelse + "|"+ResolveVar(argselse)[0]);
|
||||
InvokeNR(funcelse, ResolveVar(argselse));
|
||||
} else {
|
||||
for (int i = 1; i < andors.Length; i++) {
|
||||
@ -335,10 +357,8 @@ namespace parseManager
|
||||
}
|
||||
}
|
||||
if (truth) {
|
||||
//Console.WriteLine(funcif);
|
||||
InvokeNR(funcif, ResolveVar(argsif));
|
||||
} else {
|
||||
//Console.WriteLine("|" + funcelse + "|");
|
||||
InvokeNR(funcelse, ResolveVar(argselse));
|
||||
}
|
||||
}
|
||||
@ -346,18 +366,8 @@ namespace parseManager
|
||||
tempReturn.SetText("test turned out to be: " + truth);
|
||||
return tempReturn;
|
||||
} else if (type == "LABEL") {
|
||||
cCMD = _currentChunk.GetCLine();
|
||||
if (cCMD == null) {
|
||||
if (_flags["leaking"] && _active) {
|
||||
SetBlock(_currentChunk.GetNextChunk());
|
||||
return Next();
|
||||
}
|
||||
tempReturn.SetCMDType("EOF");
|
||||
tempReturn.SetText("Reached the end of the file!");
|
||||
return tempReturn;
|
||||
}
|
||||
type = cCMD.GetCMDType();
|
||||
stuff = cCMD.GetArgs();
|
||||
tempReturn.SetCMDType("label");
|
||||
tempReturn.SetText("Jumped to a label!");
|
||||
return tempReturn;
|
||||
}
|
||||
if (type == "FUNC") {
|
||||
@ -463,6 +473,13 @@ namespace parseManager
|
||||
ex = evaluater.Evaluate(v[i]);
|
||||
else
|
||||
ex = double.NaN;
|
||||
if (v[i].Length == 0 && len == 1) {
|
||||
return new object[]{ };
|
||||
}
|
||||
if (v[i] == "[]") {
|
||||
args[i] = new ENV();
|
||||
continue;
|
||||
}
|
||||
if (v[i].StartsWith("[")) {
|
||||
var result = GLOBALS.Split(v[i].Substring(1, v[i].Length - 2)); // TODO make ENV
|
||||
var res = ResolveVar(result);
|
||||
@ -619,10 +636,10 @@ namespace parseManager
|
||||
var argselse = Regex.Match(tempelse, @"^([a-zA-Z0-9_]+)\s?\((.*)\)");
|
||||
string _funcif = (argsif.Groups[1]).ToString();
|
||||
var _argsif = (argsif.Groups[2]).ToString();
|
||||
string[] _resultif = Regex.Split(_argsif, ",(?=(?:[^\"'\\[\\]]*[\"'\\[\\]][^\"'\\[\\]]*[\"'\\[\\]])*[^\"'\\[\\]]*$)");
|
||||
string[] _resultif = GLOBALS.Split(_argsif);
|
||||
string _funcelse = (argselse.Groups[1]).ToString();
|
||||
var _argselse = (argselse.Groups[2]).ToString();
|
||||
string[] _resultelse = Regex.Split(_argselse, ",(?=(?:[^\"'\\[\\]]*[\"'\\[\\]][^\"'\\[\\]]*[\"'\\[\\]])*[^\"'\\[\\]]*$)");
|
||||
string[] _resultelse = GLOBALS.Split(_argselse);
|
||||
var mm = Regex.Matches(condition, "(.+?)([and ]+?[or ]+)");
|
||||
var conds = new string[(mm.Count + 1) * 3];
|
||||
var andors = new string[mm.Count];
|
||||
@ -664,8 +681,8 @@ namespace parseManager
|
||||
var var1 = (FuncWReturn.Groups[1]).ToString();
|
||||
var func = (FuncWReturn.Groups[2]).ToString();
|
||||
var args2 = (FuncWReturn.Groups[3]).ToString();
|
||||
var retargs = var1.Split(',');
|
||||
var result = Regex.Split(args2, ",(?=(?:[^\"'\\[\\]]*[\"'\\[\\]][^\"'\\[\\]]*[\"'\\[\\]])*[^\"'\\[\\]]*$)");
|
||||
var retargs = GLOBALS.Split(var1);
|
||||
var result = GLOBALS.Split(args2);
|
||||
_compiledlines.Add(new CMD("FUNC_R", new object[] {
|
||||
retargs,
|
||||
func,
|
||||
@ -674,12 +691,12 @@ namespace parseManager
|
||||
} else if (FuncWOReturn.ToString() != "") {
|
||||
var func = (FuncWOReturn.Groups[1]).ToString();
|
||||
var args2 = (FuncWOReturn.Groups[2]).ToString();
|
||||
var result = Regex.Split(args2, ",(?=(?:[^\"'\\[\\]]*[\"'\\[\\]][^\"'\\[\\]]*[\"'\\[\\]])*[^\"'\\[\\]]*$)");
|
||||
var result = GLOBALS.Split(args2);
|
||||
_compiledlines.Add(new CMD("FUNC", new object[]{ func, result }));
|
||||
} else if (pureLine.ToString() != "") {
|
||||
_compiledlines.Add(new CMD("LINE", new object[]{ pureLine.ToString() }));
|
||||
} else if (assignment.ToString() != "") {
|
||||
var vars = Regex.Split(assignment.Groups[1].ToString(), ",(?=(?:[^\"']*[\"'][^\"']*[\"'])*[^\"']*$)");
|
||||
var vars = GLOBALS.Split(assignment.Groups[1].ToString());
|
||||
var tabTest = assignment.Groups[2].ToString();
|
||||
string[] vals = GLOBALS.Split(tabTest);
|
||||
//vals = Regex.Split(assignment.Groups[2].ToString(), ",(?=(?:[^\"'\\[\\]]*[\"'\\[\\]][^\"'\\[\\]]*[\"'\\[\\]])*[^\"'\\[\\]]*$)");
|
||||
@ -694,7 +711,7 @@ namespace parseManager
|
||||
args = GLOBALS.Split(func.Groups[1].Value);
|
||||
_compiledlines.Add(new CMD("FUNC", new object[] {
|
||||
"TRACEBACK",
|
||||
new string[]{}
|
||||
new string[]{ }
|
||||
})); // Append the traceback method to the chunk
|
||||
}
|
||||
}
|
||||
@ -825,6 +842,9 @@ namespace parseManager
|
||||
public static double Evaluate(string cmd, double v)
|
||||
{
|
||||
double test;
|
||||
if (cmd.Length == 0) {
|
||||
return double.NaN;
|
||||
}
|
||||
if (double.TryParse(cmd, out test)) {
|
||||
return test;
|
||||
}
|
||||
@ -871,6 +891,7 @@ namespace parseManager
|
||||
return v; // TODO grab current ENV and does the calculation
|
||||
}
|
||||
}
|
||||
[Serializable]
|
||||
public class ENV
|
||||
{
|
||||
ENV _Parent;
|
||||
@ -880,6 +901,16 @@ namespace parseManager
|
||||
{
|
||||
_Parent = other;
|
||||
}
|
||||
public object[] GetList()
|
||||
{
|
||||
var temp = new object[_varsI.Count];
|
||||
var count = 0;
|
||||
foreach (KeyValuePair<int, object> entry in _varsI) {
|
||||
temp[count] = entry.Value;
|
||||
count++;
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
public override string ToString()
|
||||
{
|
||||
string str = "(";
|
||||
@ -1010,6 +1041,20 @@ namespace parseManager
|
||||
static parseManager _current;
|
||||
static readonly ENV _env = new ENV();
|
||||
static List<string> _numvars = new List<string>();
|
||||
public static void WriteToBinaryFile(string filePath, ENV objectToWrite, bool append = false)
|
||||
{
|
||||
using (Stream stream = File.Open(filePath, append ? FileMode.Append : FileMode.Create)) {
|
||||
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
||||
binaryFormatter.Serialize(stream, objectToWrite);
|
||||
}
|
||||
}
|
||||
public static ENV ReadFromBinaryFile(string filePath)
|
||||
{
|
||||
using (Stream stream = File.Open(filePath, FileMode.Open)) {
|
||||
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
||||
return (ENV)binaryFormatter.Deserialize(stream);
|
||||
}
|
||||
}
|
||||
public static object GetData(string ind)
|
||||
{
|
||||
return _env[ind];
|
||||
@ -1095,102 +1140,156 @@ namespace parseManager
|
||||
}
|
||||
public class standardDefine
|
||||
{
|
||||
public void TRACEBACK()
|
||||
public void SAVE(parseManager PM)
|
||||
{
|
||||
var test = GLOBALS.GetPM();
|
||||
ENV env = test.Pop();
|
||||
test.SetBlock((string)env[0]);
|
||||
var c = test.GetCurrentChunk();
|
||||
var env = PM.GetDENV();
|
||||
var c = PM.GetCurrentChunk();
|
||||
env["__CurrentChunkName"] = c.GetName();
|
||||
env["__CurrentChunkPos"] = c.GetPos();
|
||||
env["__DefualtENV"] = PM.GetENV();
|
||||
GLOBALS.WriteToBinaryFile("savedata.dat", env);
|
||||
}
|
||||
public bool LOAD(parseManager PM)
|
||||
{
|
||||
try {
|
||||
ENV env = GLOBALS.ReadFromBinaryFile("savedata.dat");
|
||||
var name = (string)env["__CurrentChunkName"];
|
||||
var pos = (int)env["__CurrentChunkPos"];
|
||||
var denv = (ENV)env["__DefualtENV"];
|
||||
PM._SetDENV(env);
|
||||
PM.SetENV(denv);
|
||||
PM.SetBlock(name);
|
||||
PM.GetCurrentChunk().SetPos(pos);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public void TRACEBACK(parseManager PM)
|
||||
{
|
||||
ENV env = PM.Pop();
|
||||
PM.SetBlock((string)env[0]);
|
||||
var c = PM.GetCurrentChunk();
|
||||
c.SetPos((int)env[1]);
|
||||
SetENV((ENV)env[3]);
|
||||
SetENV(PM,(ENV)env[3]);
|
||||
}
|
||||
public void EXIT()
|
||||
public void EXIT(parseManager PM)
|
||||
{
|
||||
GLOBALS.GetPM().Deactivate();
|
||||
PM.Deactivate();
|
||||
}
|
||||
public void QUIT()
|
||||
public void QUIT(parseManager PM)
|
||||
{
|
||||
Environment.Exit(0);
|
||||
}
|
||||
public void SetENV(ENV env)
|
||||
public void SetENV(parseManager PM, ENV env)
|
||||
{
|
||||
var test = GLOBALS.GetPM();
|
||||
test.SetENV(env);
|
||||
PM.SetENV(env);
|
||||
}
|
||||
public ENV GetENV()
|
||||
public ENV GetENV(parseManager PM)
|
||||
{
|
||||
var test = GLOBALS.GetPM();
|
||||
return test.GetENV();
|
||||
return PM.GetENV();
|
||||
}
|
||||
public ENV GetDefualtENV()
|
||||
public ENV GetDefualtENV(parseManager PM)
|
||||
{
|
||||
var test = GLOBALS.GetPM();
|
||||
return test.GetDENV();
|
||||
return PM.GetDENV();
|
||||
}
|
||||
public ENV CreateENV()
|
||||
public ENV CreateENV(parseManager PM)
|
||||
{
|
||||
var temp = new ENV();
|
||||
var PM = GLOBALS.GetPM();
|
||||
temp.SetParent(PM.GetENV());
|
||||
return temp;
|
||||
}
|
||||
public int GOTO(string label)
|
||||
public string GetInput(parseManager PM)
|
||||
{
|
||||
var test = GLOBALS.GetPM();
|
||||
var c = test.GetCurrentChunk();
|
||||
return Console.ReadLine();
|
||||
}
|
||||
public int GOTO(parseManager PM, string label)
|
||||
{
|
||||
var c = PM.GetCurrentChunk();
|
||||
int pos;
|
||||
if (c.TryGetLabel(label, out pos)) {
|
||||
c.SetPos(pos);
|
||||
return 0;
|
||||
} else if (test.GetFlag("forseelabels")) {
|
||||
var chunks = test.GetChunks();
|
||||
} else if (PM.GetFlag("forseelabels")) {
|
||||
var chunks = PM.GetChunks();
|
||||
for (int i = 0; i < chunks.Length; i++) {
|
||||
if (chunks[i].TryGetLabel(label, out pos)) {
|
||||
test.SetBlock(chunks[i].GetName());
|
||||
PM.SetBlock(chunks[i].GetName());
|
||||
chunks[i].SetPos(pos);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
test.PushError("Unable to GOTO a non existing label: " + label + "!");
|
||||
PM.PushError("Unable to GOTO a non existing label: " + label + "!");
|
||||
return 0;
|
||||
}
|
||||
public void JUMP(string block)
|
||||
public double LEN(parseManager PM, object o)
|
||||
{
|
||||
var test = GLOBALS.GetPM();
|
||||
var c = test.GetCurrentChunk();
|
||||
c.ResetPos();
|
||||
test.SetBlock(block);
|
||||
string type = o.GetType().ToString();
|
||||
if (type.Contains("String")) {
|
||||
return (double)((string)o).Length;
|
||||
}
|
||||
if (type.Contains("ENV")) {
|
||||
return (double)((ENV)o).GetList().Length;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
public void SKIP(double n)
|
||||
public void JUMP(parseManager PM, string block)
|
||||
{
|
||||
var test = GLOBALS.GetPM();
|
||||
var c = test.GetCurrentChunk();
|
||||
var c = PM.GetCurrentChunk();
|
||||
c.ResetPos();
|
||||
PM.SetBlock(block);
|
||||
}
|
||||
public void SKIP(parseManager PM, double n)
|
||||
{
|
||||
var c = PM.GetCurrentChunk();
|
||||
var pos = c.GetPos();
|
||||
c.SetPos(pos + (int)n);
|
||||
}
|
||||
public double ADD(double a, double b)
|
||||
public double tonumber(parseManager PM, string strn)
|
||||
{
|
||||
double d;
|
||||
if (double.TryParse(strn, out d)) {
|
||||
return d;
|
||||
}
|
||||
PM.debug("Cannot convert to a number!");
|
||||
return double.NaN;
|
||||
}
|
||||
public void SLEEP(parseManager PM, double n)
|
||||
{
|
||||
int i = int.Parse(n.ToString()) * 1000;
|
||||
Thread.Sleep(i);
|
||||
}
|
||||
public double ADD(parseManager PM, double a, double b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
public double SUB(double a, double b)
|
||||
public double SUB(parseManager PM, double a, double b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
public double MUL(double a, double b)
|
||||
public double MUL(parseManager PM, double a, double b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
public double DIV(double a, double b)
|
||||
public double DIV(parseManager PM, double a, double b)
|
||||
{
|
||||
return a / b;
|
||||
}
|
||||
public double MOD(double a, double b)
|
||||
public double MOD(parseManager PM, double a, double b)
|
||||
{
|
||||
return a % b;
|
||||
}
|
||||
public double CALC(string ex)
|
||||
public double CALC(parseManager PM, string ex)
|
||||
{
|
||||
return evaluater.Evaluate(ex);
|
||||
}
|
||||
public void print(parseManager PM, object o)
|
||||
{
|
||||
Console.WriteLine(o);
|
||||
}
|
||||
public void write(parseManager PM, object o)
|
||||
{
|
||||
Console.Write(o);
|
||||
}
|
||||
}
|
||||
@ -31,6 +31,9 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="CSCore">
|
||||
<HintPath>..\packages\CSCore.1.2.1.1\lib\net35-client\CSCore.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
@ -57,4 +60,5 @@
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="..\packages\Resource.Embedder.1.2.4\build\Resource.Embedder.targets" Condition="Exists('..\packages\Resource.Embedder.1.2.4\build\Resource.Embedder.targets')" />
|
||||
</Project>
|
||||
Loading…
x
Reference in New Issue
Block a user