コード例 #1
0
 public CFor(Value seed, ParameterBlock whileBlock, ParameterBlock increment)
 {
     this.seed       = seed;
     this.increment  = increment;
     this.whileBlock = whileBlock;
     current         = null;
 }
コード例 #2
0
        private void Deserialize(Stream input)
        {
            if (input.ReadValueU32(Endian.Big) != 0x44435800) // 'DCX\0'
            {
                throw new FormatException();
            }

            if (input.ReadValueU32(Endian.Big) != 0x10000)
            {
                throw new FormatException();
            }

            var headerSize = input.ReadValueU32(Endian.Big);

            if (headerSize != 24)
            {
                throw new FormatException();
            }

            var unknown0C = input.ReadValueU32(Endian.Big);
            var unknown10 = input.ReadValueU32(Endian.Big);
            var unknown14 = input.ReadValueU32(Endian.Big);

            this._Size = new SizeBlock();
            this._Size.Deserialize(input);

            this._Setup = new ParameterBlock();
            this._Setup.Deserialize(input);

            this._Extra = new ExtraBlock();
            this._Extra.Deserialize(input);
        }
コード例 #3
0
        public override Value Evaluate()
        {
            var stack = Runtime.State.Stack;
            var limit = stack.Pop(true, LOCATION);
            var seed  = stack.Pop(true, LOCATION);

            return(new ArrayStream(seed, ParameterBlock.FromExecutable(limit)));
        }
コード例 #4
0
        private void CreateDefaultParameterBlock()
        {
            var parameterBlock = new ComObjectParameterBlock_T();

            parameterBlock.Name = "ParameterPage";
            parameterBlock.Text = Ressources.CommonParameters;
            ParameterBlock.Add(parameterBlock);
        }
コード例 #5
0
ファイル: ArrayStream.cs プロジェクト: toddcoder/Orange
 public ArrayStream(Value seed, ParameterBlock next, Region region = null)
 {
     this.seed   = seed;
     this.next   = next;
     this.region = Region.CopyCurrent(region);
     limit       = Runtime.MAX_ARRAY;
     ifBlock     = defaultIf();
     current     = null;
     count       = 0;
 }
コード例 #6
0
        public override Verb CreateVerb(string[] tokens)
        {
            Color(position, tokens[1].Length, KeyWords);
            var macroName = tokens[2];

            Color(macroName.Length, Variables);
            Color(tokens[3].Length, Structures);
            var parametersParser = new ParametersParser();

            if (parametersParser.Parse(source, NextPosition).If(out var parameters, out var index) &&
                bodyParser.Parse(source, index).If(out var block, out var newIndex))
            {
                var parameterBlock = new ParameterBlock(parameters, block, parameters.Splatting);
                overridePosition = newIndex;
                return(new CreateMacro(macroName, parameterBlock));
            }

            return(null);
        }
コード例 #7
0
        public override Value Evaluate()
        {
            PseudoRecursion pseudoRecursion;

            if (Regions.VariableExists(name))
            {
                var value = Regions[name];
                if (!(value is PseudoRecursion))
                {
                    pseudoRecursion = new PseudoRecursion(name);
                    Regions[name]   = pseudoRecursion;
                }
                else
                {
                    pseudoRecursion = (PseudoRecursion)value;
                }
            }
            else
            {
                pseudoRecursion = new PseudoRecursion(name);
                Regions.CreateVariable(name);
                Regions[name] = pseudoRecursion;
            }
            if (parameters.Length == 0)
            {
                pseudoRecursion.Initialization = block;
            }
            else
            {
                var parameterBlock = new ParameterBlock(parameters, block, parameters.Splatting);
                if (pseudoRecursion.TerminalExpression == null)
                {
                    pseudoRecursion.TerminalExpression = parameterBlock;
                }
                else
                {
                    pseudoRecursion.Main = parameterBlock;
                    pseudoRecursion.Initialize();
                }
            }
            result = ToString();
            return(null);
        }
コード例 #8
0
        private void Open(object param)
        {
            try
            {
                if (_model != null)
                {
                    var cancel = AskSaveCancel();
                    if (cancel)
                    {
                        return;
                    }
                }

                var filePath = _dialogService.ChooseFileToOpen(_fileExtension, _fileFilter);
                if (filePath == null)
                {
                    return;
                }

                _openFile = filePath;

                XmlSerializer serializer = new XmlSerializer(typeof(KNX));
                using (var reader = new StreamReader(_openFile))
                {
                    _model = (KNX)serializer.Deserialize(reader);
                }

                if (File.Exists("knx_master.xml"))
                {
                    using (var reader = new StreamReader("knx_master.xml"))
                    {
                        var masterData = (KNX)serializer.Deserialize(reader);
                        _model.MasterData = masterData.MasterData;
                    }
                }

                _manufacturerData   = _model.ManufacturerData.First();
                _hardware           = _manufacturerData.Hardware.First();
                _product            = _hardware.Products.First();
                _catalogSection     = _manufacturerData.Catalog.First();
                _catalogItem        = _catalogSection.CatalogItem.First();
                _hardware2Program   = _hardware.Hardware2Programs.First();
                _applicationProgram = _manufacturerData.ApplicationPrograms.First();
                _appProgRef         = _hardware2Program.ApplicationProgramRef.First();
                _codeSegment        = _applicationProgram.Static.Code.RelativeSegment.First();

                Parameters.Clear();
                foreach (var item in _applicationProgram.Static.Parameters.Parameter)
                {
                    item.AllTypes  = ParameterTypes;
                    item.Type      = ParameterTypes.First(t => t.Id == item.ParameterType);
                    item.AllBlocks = ParameterBlock;
                    item.Block     = ParameterBlock.FirstOrDefault(t => t.ParameterRefRef.FirstOrDefault(o => _applicationProgram.Static.ParameterRefs.FirstOrDefault(p => o.RefId == p.Id)?.RefId == item.Id) != null);
                    if (item.Block == null)
                    {
                        if (ParameterBlock.Count == 0)
                        {
                            CreateDefaultParameterBlock();
                        }
                        item.Block = ParameterBlock.First();
                    }
                    Parameters.Add(item);
                }

                RaiseChanged();
            }
            catch (Exception ex)
            {
                ClearData();
                _dialogService.ShowMessage(ex.ToString());
            }
        }
コード例 #9
0
ファイル: Sequence.cs プロジェクト: toddcoder/Orange
 public IfItem(ParameterBlock parameterBlock) => this.parameterBlock = parameterBlock;
コード例 #10
0
ファイル: CreateMacro.cs プロジェクト: toddcoder/Orange2
 public CreateMacro(string macroName, ParameterBlock parameterBlock)
 {
     this.macroName      = macroName;
     this.parameterBlock = parameterBlock;
 }
コード例 #11
0
ファイル: ArrayStream.cs プロジェクト: toddcoder/Orange
 public CFor CFor(ParameterBlock incrementBlock) => new CFor(seed, next, incrementBlock);