Beispiel #1
0
            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);
            }