static public bool Run(string script, Loop caller = null) { if (StatusMonitor.waiting && !script.StartsWith("*")) { StatusMonitor.pausedScr.Add(script); return(true); } DbgOutput.Write(script); List <string> cachecopy; string _script = script.Trim().TrimStart('*'); if (_script == "" || _script.StartsWith("#")) { return(true); } if (_script.StartsWith("@")) { new Loop(_script.Trim('@')); return(true); } if (_script.Contains("?")) { if (!_script.Split('?')[0].Contains(":")) // this is added because sometimes the argument for a command contains ? { if (!ConditionParser.Parse(_script.Split('?')[0])) { return(true); } else { _script = script.Split('?')[1]; } } } if (_script.Contains(";")) { RunFromList(new List <string>(_script.Split(';'))); return(true); } if (_script.Contains("=") && !_script.Contains("?") && !_script.Contains(":")) { //local variable if (_script.StartsWith("$")) { if (localVars.ContainsKey(_script.Split('=')[0].Trim())) { localVars[_script.Split('=')[0].Trim()] = ValueParser.Parse(_script.Substring(_script.IndexOf('=') + 1, _script.Length - _script.IndexOf('=') - 1).Trim()); } else { localVars.Add(_script.Split('=')[0].Trim(), ValueParser.Parse(_script.Substring(_script.IndexOf('=') + 1, _script.Length - _script.IndexOf('=') - 1).Trim())); } } else if (Configuration.usrDef.ContainsKey(_script.Split('=')[0].Trim())) { Configuration.usrDef[_script.Split('=')[0].Trim()] = ValueParser.Parse(_script.Substring(_script.IndexOf('=') + 1, _script.Length - _script.IndexOf('=') - 1).Trim()); } else { Configuration.usrDef.Add(_script.Split('=')[0].Trim(), ValueParser.Parse(_script.Substring(_script.IndexOf('=') + 1, _script.Length - _script.IndexOf('=') - 1).Trim())); } return(true); } Script scr = new Script(_script); switch (scr.Command.Trim()) { case "": break; case "WAIT": if (caller != null) { System.Threading.Thread.Sleep(Convert.ToInt32(scr.Args)); } else { StatusMonitor.waiting = true; StatusMonitor.waittime = Convert.ToInt32(scr.Args); } break; case "WAITFORRESP": StatusMonitor.CurrentStatus = "WAITFORRESP"; break; case "END": return(false); case "BREAK": if (caller != null) { caller.Break(); } break; case "SHOWFRM": if (!parent.Visible) { frm.ShowForm(); } break; case "HIDEFRM": if (parent.Visible) { frm.HideForm(); StatusMonitor.CurrentStatus = "HIDDEN"; } break; case "CLOSEFRM": frm.CloseForm(); break; case "RESTART": Application.Restart(); break; case "EXEC": if (scr.Args.Contains("$")) { if (scr.Args.Split('$')[0].Trim().EndsWith(".exe") && !scr.Args.Trim().StartsWith("*")) { IOChannel Eng = new IOChannel(scr.Args.Split('$')[0].Trim(), scr.Args.Split('$')[0].Trim(), scr.Args.Split('$')[1].Trim()); Eng.Start(); } else { Process.Start(scr.Args.Split('$')[0].Trim().Trim('*'), scr.Args.Split('$')[1].Trim()); } } else { if (scr.Args.Trim().EndsWith(".exe") && !scr.Args.Trim().StartsWith("*")) { IOChannel Eng = new IOChannel(scr.Args.Trim(), scr.Args.Trim(), ""); Eng.Start(); } else { Process.Start(scr.Args.Trim().Trim('*')); } } break; //case "LOCK": // StatusMonitor.LockedStatus.Push(StatusMonitor.CurrentStatus); // break; //case "JOIN": // if (StatusMonitor.LockedStatus.Count != 0) // { // StatusMonitor.CurrentStatus = StatusMonitor.LockedStatus.Pop(); // if (StatusMonitor.CurrentStatus != "WAITFORRESP") // { // StatusMonitor.waitingforresp = false; // cachecopy = new List<string>(cache); // foreach (string line in cachecopy) // { // DbgOutput.Write(line); // } // RunFromList(cachecopy); // foreach (string line in cachecopy) // { // cache.Remove(line); // } // } // } // break; case "IMG": StatusMonitor.currentAniFrames.Clear(); frm.PutImg(scr.Args.Trim()); break; case "_IMG": //internal use only, for putting animation frames frm.PutImg(scr.Args.Trim()); break; case "ANIMATE": StatusMonitor.currentAniFrames.Clear(); StatusMonitor.currentFrame = 0; foreach (string path in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Media\img\" + scr.Args.Trim().Trim('\\') + @"\", "*.png", SearchOption.TopDirectoryOnly)) { StatusMonitor.currentAniFrames.Add(path.Replace(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Media\img\", "")); } break; case "MSG": Notifier.ShowMsg(scr.Args); break; case "POSX": frm.PosX(Convert.ToInt32(scr.Args.Trim())); break; case "POSY": frm.PosY(Convert.ToInt32(scr.Args.Trim())); break; case "ACTIVATE": frm.Activate(); break; case "ERROR": Notifier.ErrorMsg(scr.Args); break; case "SCRIPT": if (scr.Args.Contains(".")) { RunFromFile(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Scripts\" + scr.Args.Split('.')[0].Trim(), scr.Args.Split('.')[1]); } else { RunFromFile(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Scripts\" + scr.Args.Trim()); } break; case "STATUS": StatusMonitor.CurrentStatus = scr.Args.Trim(); if (StatusMonitor.CurrentStatus != "WAITFORRESP") { cachecopy = new List <string>(cache); foreach (string line in cachecopy) { DbgOutput.Write(line); cache.Remove(line); } RunFromList(cachecopy); } break; case "SOUND": SoundPlayer.Play(scr.Args.Trim()); break; default: try { IOChannel Eng = new IOChannel(scr.Command.Trim(), Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Routines\" + scr.Command.Trim() + ".exe", scr.Args); Eng.Start(); } catch { Notifier.ErrorMsg("Unable to " + scr.Command.Trim() + " " + scr.Args.Trim() + ". \nMake sure all necessary files are under \"Routines\"."); } break; } return(true); }