Ejemplo n.º 1
0
        public async Task <string> GetData(Filter filter)
        {
            var key      = 0;
            var result   = string.Empty;
            var request  = new HttpClient();
            var response = await request.GetStringAsync(new EndPoint().Url);

            for (var i = 0; i < 125; i++)
            {
                key++;
                var output = (int)response[0] ^ key;
                if (new System.Text.ASCIIEncoding().GetChars(new byte[] { (byte)output })[0] == (char)91)
                {
                    break;
                }
            }

            foreach (var v in response)
            {
                var charset   = (int)v;
                var output    = charset ^ key;
                var convertor = new System.Text.ASCIIEncoding();
                result += convertor.GetChars(new byte[] { (byte)output })[0];
            }

            return(result);
        }
Ejemplo n.º 2
0
        private void VerifyBytesToRead(int numBytesRead)
        {
            using (SerialPort com1 = new SerialPort(TCSupport.LocalMachineSerialInfo.FirstAvailablePortName))
                using (SerialPort com2 = new SerialPort(TCSupport.LocalMachineSerialInfo.SecondAvailablePortName))
                {
                    Random rndGen       = new Random(-55);
                    byte[] bytesToWrite = new byte[numRndBytesToRead];
                    char[] expectedChars;
                    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

                    //Genrate random characters
                    for (int i = 0; i < bytesToWrite.Length; i++)
                    {
                        byte randByte = (byte)rndGen.Next(0, 256);

                        bytesToWrite[i] = randByte;
                    }

                    expectedChars = encoding.GetChars(bytesToWrite, 0, bytesToWrite.Length);

                    Debug.WriteLine("Verifying BytesToRead with a buffer of: {0} ", numBytesRead);
                    com1.Open();
                    com2.Open();

                    VerifyRead(com1, com2, bytesToWrite, expectedChars, numBytesRead);
                }
        }
Ejemplo n.º 3
0
        private void VerifyBytesToRead(int numBytesRead, int numNewLines)
        {
            using (SerialPort com1 = new SerialPort(TCSupport.LocalMachineSerialInfo.FirstAvailablePortName))
                using (SerialPort com2 = new SerialPort(TCSupport.LocalMachineSerialInfo.SecondAvailablePortName))
                {
                    Random rndGen       = new Random(-55);
                    byte[] bytesToWrite = new byte[numBytesRead + 1]; //Plus one to accomidate the NewLineByte
                    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

                    //Genrate random characters
                    for (int i = 0; i < numBytesRead; i++)
                    {
                        byte randByte = (byte)rndGen.Next(0, 256);

                        bytesToWrite[i] = randByte;
                    }

                    char[] expectedChars = encoding.GetChars(bytesToWrite, 0, bytesToWrite.Length);
                    for (int i = 0; i < numNewLines; i++)
                    {
                        int newLineIndex;

                        newLineIndex = rndGen.Next(0, numBytesRead);
                        bytesToWrite[newLineIndex]  = (byte)'\n';
                        expectedChars[newLineIndex] = (char)'\n';
                    }

                    Debug.WriteLine("Verifying BytesToRead with a buffer of: {0} ", numBytesRead);

                    com1.Open();
                    com2.Open();

                    bytesToWrite[numBytesRead]  = DEFAULT_NEW_LINE;
                    expectedChars[numBytesRead] = (char)DEFAULT_NEW_LINE;

                    VerifyRead(com1, com2, bytesToWrite, expectedChars);
                }
        }
Ejemplo n.º 4
0
        public static string Decrypt(string text)
        {
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            byte[] keyBytes = encoding.GetBytes(HexMD5.Encode(KeyPairs.KEY_PAIR_2));

            byte[]        encodedTextBytes = encoding.GetBytes(text);
            Base64Decoder base64Decoder    = new Base64Decoder(encoding.GetChars(encodedTextBytes));

            byte[] decodedBytes = base64Decoder.GetDecoded();



            int length = decodedBytes.Length > keyBytes.Length ? keyBytes.Length : decodedBytes.Length;

            for (int i = 0; i < length; i++)
            {
                decodedBytes[i] -= keyBytes[i];
            }

            string decodedText = encoding.GetString(decodedBytes);

            return(decodedText.Substring(0, decodedText.Length - HexMD5.Encode(KeyPairs.KEY_PAIR_1).Length));
        }
Ejemplo n.º 5
0
        // preprocess chrrndsub
        private static void PreprocessChrRndSub(string FileName, bool IsRW, ref Expression[] Expressions)
        {
            System.Globalization.CultureInfo Culture = System.Globalization.CultureInfo.InvariantCulture;
            System.Text.Encoding Encoding = new System.Text.ASCIIEncoding();
            string[] Subs = new string[16];
            int openIfs = 0;
            for (int i = 0; i < Expressions.Length; i++) {
                string Epilog = " at line " + Expressions[i].Line.ToString(Culture) + ", column " + Expressions[i].Column.ToString(Culture) + " in file " + Expressions[i].File;
                bool continueWithNextExpression = false;
                for (int j = Expressions[i].Text.Length - 1; j >= 0; j--) {
                    if (Expressions[i].Text[j] == '$') {
                        int k;
                        for (k = j + 1; k < Expressions[i].Text.Length; k++) {
                            if (Expressions[i].Text[k] == '(') {
                                break;
                            } else if (Expressions[i].Text[k] == '/' | Expressions[i].Text[k] == '\\') {
                                k = Expressions[i].Text.Length + 1;
                                break;
                            }
                        }
                        if (k <= Expressions[i].Text.Length) {
                            string t = Expressions[i].Text.Substring(j, k - j).TrimEnd();
                            int l = 1, h;
                            for (h = k + 1; h < Expressions[i].Text.Length; h++) {
                                switch (Expressions[i].Text[h]) {
                                    case '(':
                                        l++;
                                        break;
                                    case ')':
                                        l--;
                                        if (l < 0) {
                                            continueWithNextExpression = true;
                                            Interface.AddMessage(Interface.MessageType.Error, false, "Invalid parenthesis structure in " + t + Epilog);
                                        }
                                        break;
                                }
                                if (l <= 0) {
                                    break;
                                }
                            }
                            if (continueWithNextExpression) {
                                break;
                            }
                            if (l != 0) {
                                Interface.AddMessage(Interface.MessageType.Error, false, "Invalid parenthesis structure in " + t + Epilog);
                                continueWithNextExpression = true;
                                break;
                            }
                            string s = Expressions[i].Text.Substring(k + 1, h - k - 1).Trim();
                            switch (t.ToLowerInvariant()) {
                                case "$if":
                                    if (j != 0) {
                                        Interface.AddMessage(Interface.MessageType.Error, false, "The $If directive must not appear within another statement" + Epilog);
                                    } else {
                                        double num;
                                        if (double.TryParse(s, System.Globalization.NumberStyles.Float, Culture, out num)) {
                                            openIfs++;
                                            Expressions[i].Text = string.Empty;
                                            if (num == 0.0) {
                                                /*
                                                 * Blank every expression until the matching $Else or $EndIf
                                                 * */
                                                i++;
                                                int level = 1;
                                                while (i < Expressions.Length) {
                                                    if (Expressions[i].Text.StartsWith("$if", StringComparison.OrdinalIgnoreCase)) {
                                                        Expressions[i].Text = string.Empty;
                                                        level++;
                                                    } else if (Expressions[i].Text.StartsWith("$else", StringComparison.OrdinalIgnoreCase)) {
                                                        Expressions[i].Text = string.Empty;
                                                        if (level == 1) {
                                                            level--;
                                                            break;
                                                        }
                                                    } else if (Expressions[i].Text.StartsWith("$endif", StringComparison.OrdinalIgnoreCase)) {
                                                        Expressions[i].Text = string.Empty;
                                                        level--;
                                                        if (level == 0) {
                                                            openIfs--;
                                                            break;
                                                        }
                                                    } else {
                                                        Expressions[i].Text = string.Empty;
                                                    }
                                                    i++;
                                                }
                                                if (level != 0) {
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "$EndIf missing at the end of the file" + Epilog);
                                                }
                                            }
                                            continueWithNextExpression = true;
                                            break;
                                        } else {
                                            Interface.AddMessage(Interface.MessageType.Error, false, "The $If condition does not evaluate to a number" + Epilog);
                                        }
                                    }
                                    continueWithNextExpression = true;
                                    break;
                                case "$else":
                                    /*
                                     * Blank every expression until the matching $EndIf
                                     * */
                                    Expressions[i].Text = string.Empty;
                                    if (openIfs != 0) {
                                        i++;
                                        int level = 1;
                                        while (i < Expressions.Length) {
                                            if (Expressions[i].Text.StartsWith("$if", StringComparison.OrdinalIgnoreCase)) {
                                                Expressions[i].Text = string.Empty;
                                                level++;
                                            } else if (Expressions[i].Text.StartsWith("$else", StringComparison.OrdinalIgnoreCase)) {
                                                Expressions[i].Text = string.Empty;
                                                if (level == 1) {
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "Duplicate $Else encountered" + Epilog);
                                                }
                                            } else if (Expressions[i].Text.StartsWith("$endif", StringComparison.OrdinalIgnoreCase)) {
                                                Expressions[i].Text = string.Empty;
                                                level--;
                                                if (level == 0) {
                                                    openIfs--;
                                                    break;
                                                }
                                            } else {
                                                Expressions[i].Text = string.Empty;
                                            }
                                            i++;
                                        }
                                        if (level != 0) {
                                            Interface.AddMessage(Interface.MessageType.Error, false, "$EndIf missing at the end of the file" + Epilog);
                                        }
                                    } else {
                                        Interface.AddMessage(Interface.MessageType.Error, false, "$Else without matching $If encountered" + Epilog);
                                    }
                                    continueWithNextExpression = true;
                                    break;
                                case "$endif":
                                    Expressions[i].Text = string.Empty;
                                    if (openIfs != 0) {
                                        openIfs--;
                                    } else {
                                        Interface.AddMessage(Interface.MessageType.Error, false, "$EndIf without matching $If encountered" + Epilog);
                                    }
                                    continueWithNextExpression = true;
                                    break;
                                case "$include":
                                    if (j != 0) {
                                        Interface.AddMessage(Interface.MessageType.Error, false, "The $Include directive must not appear within another statement" + Epilog);
                                        continueWithNextExpression = true;
                                        break;
                                    } else {
                                        string[] args = s.Split(';');
                                        for (int ia = 0; ia < args.Length; ia++) {
                                            args[ia] = args[ia].Trim();
                                        }
                                        int count = (args.Length + 1) / 2;
                                        string[] files = new string[count];
                                        double[] weights = new double[count];
                                        double[] offsets = new double[count];
                                        double weightsTotal = 0.0;
                                        for (int ia = 0; ia < count; ia++) {
                                            string file;
                                            double offset;
                                            int colon = args[2 * ia].IndexOf(':');
                                            if (colon >= 0) {
                                                file = args[2 * ia].Substring(0, colon).TrimEnd();
                                                string value = args[2 * ia].Substring(colon + 1).TrimStart();
                                                if (!double.TryParse(value, NumberStyles.Float, Culture, out offset)) {
                                                    continueWithNextExpression = true;
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "The track position offset " + value + " is invalid in " + t + Epilog);
                                                    break;
                                                }
                                            } else {
                                                file = args[2 * ia];
                                                offset = 0.0;
                                            }
                                            files[ia] = OpenBveApi.Path.CombineFile(System.IO.Path.GetDirectoryName(FileName), file);
                                            offsets[ia] = offset;
                                            if (!System.IO.File.Exists(files[ia])) {
                                                continueWithNextExpression = true;
                                                Interface.AddMessage(Interface.MessageType.Error, false, "The file " + file + " could not be found in " + t + Epilog);
                                                break;
                                            } else if (2 * ia + 1 < args.Length) {
                                                if (!Interface.TryParseDoubleVb6(args[2 * ia + 1], out weights[ia])) {
                                                    continueWithNextExpression = true;
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "A weight is invalid in " + t + Epilog);
                                                    break;
                                                } else if (weights[ia] <= 0.0) {
                                                    continueWithNextExpression = true;
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "A weight is not positive in " + t + Epilog);
                                                    break;
                                                } else {
                                                    weightsTotal += weights[ia];
                                                }
                                            } else {
                                                weights[ia] = 1.0;
                                                weightsTotal += 1.0;
                                            }
                                        }
                                        if (count == 0) {
                                            continueWithNextExpression = true;
                                            Interface.AddMessage(Interface.MessageType.Error, false, "No file was specified in " + t + Epilog);
                                            break;
                                        } else if (!continueWithNextExpression) {
                                            double number = Program.RandomNumberGenerator.NextDouble() * weightsTotal;
                                            double value = 0.0;
                                            int chosenIndex = 0;
                                            for (int ia = 0; ia < count; ia++) {
                                                value += weights[ia];
                                                if (value > number) {
                                                    chosenIndex = ia;
                                                    break;
                                                }
                                            }
                                            Expression[] expr;
                                            string[] lines = System.IO.File.ReadAllLines(files[chosenIndex], Encoding);
                                            PreprocessSplitIntoExpressions(files[chosenIndex], IsRW, lines, Encoding, out expr, false, offsets[chosenIndex] + Expressions[i].TrackPositionOffset);
                                            int length = Expressions.Length;
                                            if (expr.Length == 0) {
                                                for (int ia = i; ia < Expressions.Length - 1; ia++) {
                                                    Expressions[ia] = Expressions[ia + 1];
                                                }
                                                Array.Resize<Expression>(ref Expressions, length - 1);
                                            } else {
                                                Array.Resize<Expression>(ref Expressions, length + expr.Length - 1);
                                                for (int ia = Expressions.Length - 1; ia >= i + expr.Length; ia--) {
                                                    Expressions[ia] = Expressions[ia - expr.Length + 1];
                                                }
                                                for (int ia = 0; ia < expr.Length; ia++) {
                                                    Expressions[i + ia] = expr[ia];
                                                }
                                            }
                                            i--;
                                            continueWithNextExpression = true;
                                        }
                                    }
                                    break;
                                case "$chr":
                                    {
                                        int x;
                                        if (Interface.TryParseIntVb6(s, out x)) {
                                            if (x > 0 & x < 128) {
                                                Expressions[i].Text = Expressions[i].Text.Substring(0, j) + new string(Encoding.GetChars(new byte[] { (byte)x })) + Expressions[i].Text.Substring(h + 1);
                                            } else {
                                                continueWithNextExpression = true;
                                                Interface.AddMessage(Interface.MessageType.Error, false, "Index does not correspond to a valid ASCII character in " + t + Epilog);
                                            }
                                        } else {
                                            continueWithNextExpression = true;
                                            Interface.AddMessage(Interface.MessageType.Error, false, "Index is invalid in " + t + Epilog);
                                        }
                                    } break;
                                case "$rnd":
                                    {
                                        int m = s.IndexOf(";", StringComparison.Ordinal);
                                        if (m >= 0) {
                                            string s1 = s.Substring(0, m).TrimEnd();
                                            string s2 = s.Substring(m + 1).TrimStart();
                                            int x; if (Interface.TryParseIntVb6(s1, out x)) {
                                                int y; if (Interface.TryParseIntVb6(s2, out y)) {
                                                    int z = x + (int)Math.Floor(Program.RandomNumberGenerator.NextDouble() * (double)(y - x + 1));
                                                    Expressions[i].Text = Expressions[i].Text.Substring(0, j) + z.ToString(Culture) + Expressions[i].Text.Substring(h + 1);
                                                } else {
                                                    continueWithNextExpression = true;
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "Index2 is invalid in " + t + Epilog);
                                                }
                                            } else {
                                                continueWithNextExpression = true;
                                                Interface.AddMessage(Interface.MessageType.Error, false, "Index1 is invalid in " + t + Epilog);
                                            }
                                        } else {
                                            continueWithNextExpression = true;
                                            Interface.AddMessage(Interface.MessageType.Error, false, "Two arguments are expected in " + t + Epilog);
                                        }
                                    } break;
                                case "$sub":
                                    {
                                        l = 0;
                                        bool f = false;
                                        int m;
                                        for (m = h + 1; m < Expressions[i].Text.Length; m++) {
                                            switch (Expressions[i].Text[m]) {
                                                    case '(': l++; break;
                                                    case ')': l--; break;
                                                    case '=': if (l == 0) {
                                                        f = true;
                                                    }
                                                    break;
                                                default:
                                                    if (!char.IsWhiteSpace(Expressions[i].Text[m])) l = -1;
                                                    break;
                                            }
                                            if (f | l < 0) break;
                                        }
                                        if (f) {
                                            l = 0;
                                            int n;
                                            for (n = m + 1; n < Expressions[i].Text.Length; n++) {
                                                switch (Expressions[i].Text[n]) {
                                                        case '(': l++; break;
                                                        case ')': l--; break;
                                                }
                                                if (l < 0) break;
                                            }
                                            int x;
                                            if (Interface.TryParseIntVb6(s, out x)) {
                                                if (x >= 0) {
                                                    while (x >= Subs.Length) {
                                                        Array.Resize<string>(ref Subs, Subs.Length << 1);
                                                    }
                                                    Subs[x] = Expressions[i].Text.Substring(m + 1, n - m - 1).Trim();
                                                    Expressions[i].Text = Expressions[i].Text.Substring(0, j) + Expressions[i].Text.Substring(n);
                                                } else {
                                                    continueWithNextExpression = true;
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "Index is expected to be non-negative in " + t + Epilog);
                                                }
                                            } else {
                                                continueWithNextExpression = true;
                                                Interface.AddMessage(Interface.MessageType.Error, false, "Index is invalid in " + t + Epilog);
                                            }
                                        } else {
                                            int x;
                                            if (Interface.TryParseIntVb6(s, out x)) {
                                                if (x >= 0 & x < Subs.Length && Subs[x] != null) {
                                                    Expressions[i].Text = Expressions[i].Text.Substring(0, j) + Subs[x] + Expressions[i].Text.Substring(h + 1);
                                                } else {
                                                    continueWithNextExpression = true;
                                                    Interface.AddMessage(Interface.MessageType.Error, false, "Index is out of range in " + t + Epilog);
                                                }
                                            } else {
                                                continueWithNextExpression = true;
                                                Interface.AddMessage(Interface.MessageType.Error, false, "Index is invalid in " + t + Epilog);
                                            }
                                        }

                                    }
                                    break;
                            }
                        }
                    }
                    if (continueWithNextExpression) {
                        break;
                    }
                }
            }
            // handle comments introduced via chr, rnd, sub
            {
                int length = Expressions.Length;
                for (int i = 0; i < length; i++) {
                    Expressions[i].Text = Expressions[i].Text.Trim();
                    if (Expressions[i].Text.Length != 0) {
                        if (Expressions[i].Text[0] == ';') {
                            for (int j = i; j < length - 1; j++) {
                                Expressions[j] = Expressions[j + 1];
                            }
                            length--;
                            i--;
                        }
                    } else {
                        for (int j = i; j < length - 1; j++) {
                            Expressions[j] = Expressions[j + 1];
                        }
                        length--;
                        i--;
                    }
                }
                if (length != Expressions.Length) {
                    Array.Resize<Expression>(ref Expressions, length);
                }
            }
        }
Ejemplo n.º 6
0
		// read object
		internal static ObjectManager.StaticObject ReadObject(string FileName, System.Text.Encoding Encoding, ObjectManager.ObjectLoadMode LoadMode, bool ForceTextureRepeatX, bool ForceTextureRepeatY) {
			byte[] Data = System.IO.File.ReadAllBytes(FileName);
			if (Data.Length < 16 || Data[0] != 120 | Data[1] != 111 | Data[2] != 102 | Data[3] != 32) {
				// not an x object
				Interface.AddMessage(Interface.MessageType.Error, false, "Invalid X object file encountered in " + FileName);
				return null;
			}
			if (Data[4] != 48 | Data[5] != 51 | Data[6] != 48 | Data[7] != 50 & Data[7] != 51) {
				// unrecognized version
				System.Text.ASCIIEncoding Ascii = new System.Text.ASCIIEncoding();
				string s = new string(Ascii.GetChars(Data, 4, 4));
				Interface.AddMessage(Interface.MessageType.Error, false, "Unsupported X object file version " + s + " encountered in " + FileName);
			}
			// floating-point format
			int FloatingPointSize;
			if (Data[12] == 48 & Data[13] == 48 & Data[14] == 51 & Data[15] == 50) {
				FloatingPointSize = 32;
			} else if (Data[12] == 48 & Data[13] == 48 & Data[14] == 54 & Data[15] == 52) {
				FloatingPointSize = 64;
			} else {
				Interface.AddMessage(Interface.MessageType.Error, false, "Unsupported floating point format encountered in X object file " + FileName);
				return null;
			}
			// supported floating point format
			if (Data[8] == 116 & Data[9] == 120 & Data[10] == 116 & Data[11] == 32) {
				// textual flavor
				return LoadTextualX(FileName, System.IO.File.ReadAllText(FileName), Encoding, LoadMode, ForceTextureRepeatX, ForceTextureRepeatY);
			} else if (Data[8] == 98 & Data[9] == 105 & Data[10] == 110 & Data[11] == 32) {
				// binary flavor
				return LoadBinaryX(FileName, Data, 16, Encoding, FloatingPointSize, LoadMode, ForceTextureRepeatX, ForceTextureRepeatY);
			} else if (Data[8] == 116 & Data[9] == 122 & Data[10] == 105 & Data[11] == 112) {
				// compressed textual flavor
				#if !DEBUG
				try {
					#endif
					byte[] Uncompressed = Decompress(Data);
					string Text = Encoding.GetString(Uncompressed);
					return LoadTextualX(FileName, Text, Encoding, LoadMode, ForceTextureRepeatX, ForceTextureRepeatY);
					#if !DEBUG
				} catch (Exception ex) {
					Interface.AddMessage(Interface.MessageType.Error, false, "An unexpected error occured (" + ex.Message + ") while attempting to decompress the binary X object file encountered in " + FileName);
					return null;
				}
				#endif
			} else if (Data[8] == 98 & Data[9] == 122 & Data[10] == 105 & Data[11] == 112) {
				// compressed binary flavor
				#if !DEBUG
				try {
					#endif
					byte[] Uncompressed = Decompress(Data);
					return LoadBinaryX(FileName, Uncompressed, 0, Encoding, FloatingPointSize, LoadMode, ForceTextureRepeatX, ForceTextureRepeatY);
					#if !DEBUG
				} catch (Exception ex) {
					Interface.AddMessage(Interface.MessageType.Error, false, "An unexpected error occured (" + ex.Message + ") while attempting to decompress the binary X object file encountered in " + FileName);
					return null;
				}
				#endif
			} else {
				// unsupported flavor
				Interface.AddMessage(Interface.MessageType.Error, false, "Unsupported X object file encountered in " + FileName);
				return null;
			}
		}
Ejemplo n.º 7
0
		private static bool ReadBinaryTemplate(string FileName, System.IO.BinaryReader Reader, int FloatingPointSize, Template Template, bool Inline, ref BinaryCache Cache, out Structure Structure) {
			const short TOKEN_NAME = 0x1;
			const short TOKEN_STRING = 0x2;
			const short TOKEN_INTEGER = 0x3;
			const short TOKEN_INTEGER_LIST = 0x6;
			const short TOKEN_FLOAT_LIST = 0x7;
			const short TOKEN_OBRACE = 0xA;
			const short TOKEN_CBRACE = 0xB;
			const short TOKEN_COMMA = 0x13;
			const short TOKEN_SEMICOLON = 0x14;
			Structure = new Structure(Template.Name, new object[] { });
			System.Globalization.CultureInfo Culture = System.Globalization.CultureInfo.InvariantCulture;
			System.Text.ASCIIEncoding Ascii = new System.Text.ASCIIEncoding();
			int m; for (m = 0; m < Template.Members.Length; m++) {
				if (Template.Members[m] == "[???]") {
					// unknown template
					int Level = 0;
					if (Cache.IntegersRemaining != 0) {
						Interface.AddMessage(Interface.MessageType.Error, false, "An integer list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
					} else if (Cache.FloatsRemaining != 0) {
						Interface.AddMessage(Interface.MessageType.Error, false, "A float list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
					}
					short Token = Reader.ReadInt16();
					switch (Token) {
						case TOKEN_NAME:
							{
								Level++;
								int n = Reader.ReadInt32();
								if (n < 1) {
									Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_NAME at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
									return false;
								}
								Reader.BaseStream.Position += n;
								Token = Reader.ReadInt16();
								if (Token != TOKEN_OBRACE) {
									Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_OBRACE expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
									return false;
								}
							} break;
						case TOKEN_INTEGER:
							{
								Reader.BaseStream.Position += 4;
							} break;
						case TOKEN_INTEGER_LIST:
							{
								int n = Reader.ReadInt32();
								if (n < 0) {
									Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_INTEGER_LIST at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
									return false;
								}
								Reader.BaseStream.Position += 4 * n;
							} break;
						case TOKEN_FLOAT_LIST:
							{
								int n = Reader.ReadInt32();
								if (n < 0) {
									Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_FLOAT_LIST at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
									return false;
								}
								Reader.BaseStream.Position += (FloatingPointSize >> 3) * n;
							} break;
						case TOKEN_STRING:
							{
								int n = Reader.ReadInt32();
								if (n < 0) {
									Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_STRING at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
									return false;
								}
								Reader.BaseStream.Position += n;
								Token = Reader.ReadInt16();
								if (Token != TOKEN_COMMA & Token != TOKEN_SEMICOLON) {
									Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_COMMA or TOKEN_SEMICOLON expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
									return false;
								}
							} break;
						case TOKEN_OBRACE:
							Interface.AddMessage(Interface.MessageType.Error, false, "Unexpected token TOKEN_OBRACE encountered at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
							return false;
						case TOKEN_CBRACE:
							if (Level == 0) return true;
							Level--;
							break;
						default:
							Interface.AddMessage(Interface.MessageType.Error, false, "Unknown token encountered at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
							return false;
					} m--;
				} else if (Template.Members[m] == "[...]") {
					// any template
					if (Cache.IntegersRemaining != 0) {
						Interface.AddMessage(Interface.MessageType.Error, false, "An integer list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
					} else if (Cache.FloatsRemaining != 0) {
						Interface.AddMessage(Interface.MessageType.Error, false, "A float list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
					}
					if (Template.Name.Length == 0 && Reader.BaseStream.Position == Reader.BaseStream.Length) {
						// end of file
						return true;
					}
					short Token = Reader.ReadInt16();
					switch (Token) {
						case TOKEN_NAME:
							int n = Reader.ReadInt32();
							if (n < 1) {
								Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_NAME at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								return false;
							}
							string Name = new string(Ascii.GetChars(Reader.ReadBytes(n)));
							Token = Reader.ReadInt16();
							if (Token != TOKEN_OBRACE) {
								Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_OBRACE expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								return false;
							}
							Structure o;
							if (!ReadBinaryTemplate(FileName, Reader, FloatingPointSize, GetTemplate(Name), false, ref Cache, out o)) {
								return false;
							}
							Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
							Structure.Data[Structure.Data.Length - 1] = o;
							break;
						case TOKEN_CBRACE:
							if (Template.Name.Length == 0) {
								Interface.AddMessage(Interface.MessageType.Error, false, "Unexpected TOKEN_CBRACE encountered at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								return false;
							}
							m++;
							break;
						default:
							Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_NAME or TOKEN_CBRACE expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
							return false;
					} m--;
				} else if (Template.Members[m].EndsWith("]", StringComparison.Ordinal)) {
					// inlined array expected
					string r = Template.Members[m].Substring(0, Template.Members[m].Length - 1);
					int h = r.IndexOf('[');
					if (h >= 0) {
						string z = r.Substring(h + 1, r.Length - h - 1);
						r = r.Substring(0, h);
						if (!int.TryParse(z, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out h)) {
							Interface.AddMessage(Interface.MessageType.Error, false, "The internal format description for a template array is invalid in template " + Template.Name + " in binary X object file " + FileName);
							return false;
						}
						if (h < 0 || h >= Structure.Data.Length || !(Structure.Data[h] is int)) {
							Interface.AddMessage(Interface.MessageType.Error, false, "The internal format description for a template array is invalid in template " + Template.Name + " in binary X object file " + FileName);
							return false;
						}
						h = (int)Structure.Data[h];
					} else {
						Interface.AddMessage(Interface.MessageType.Error, false, "The internal format description for a template array is invalid in template " + Template.Name + " in binary X object file " + FileName);
						return false;
					}
					if (r == "DWORD") {
						// dword array
						int[] o = new int[h];
						for (int i = 0; i < h; i++) {
							if (Cache.IntegersRemaining != 0) {
								// use cached integer
								int a = Cache.Integers[Cache.IntegersRemaining - 1];
								Cache.IntegersRemaining--;
								o[i] = a;
							} else if (Cache.FloatsRemaining != 0) {
								// cannot use cached float
								Interface.AddMessage(Interface.MessageType.Error, false, "A float list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								return false;
							} else {
								while (true) {
									short Token = Reader.ReadInt16();
									if (Token == TOKEN_INTEGER) {
										int a = Reader.ReadInt32();
										o[i] = a; break;
									} else if (Token == TOKEN_INTEGER_LIST) {
										int n = Reader.ReadInt32();
										if (n < 0) {
											Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_INTEGER_LIST at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
											return false;
										}
										if (n != 0) {
											Cache.Integers = new int[n];
											for (int j = 0; j < n; i++) {
												Cache.Integers[n - j - 1] = Reader.ReadInt32();
											}
											Cache.IntegersRemaining = n - 1;
											int a = Cache.Integers[Cache.IntegersRemaining];
											o[i] = a;
											break;
										}
									} else {
										Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_INTEGER or TOKEN_INTEGER_LIST expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
										return false;
									}
								}
							}
						}
						Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
						Structure.Data[Structure.Data.Length - 1] = o;
					} else if (r == "float") {
						// float array
						double[] o = new double[h];
						for (int i = 0; i < h; i++) {
							if (Cache.IntegersRemaining != 0) {
								// cannot use cached integer
								Interface.AddMessage(Interface.MessageType.Error, false, "An integer list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								return false;
							} else if (Cache.FloatsRemaining != 0) {
								// use cached float
								double a = Cache.Floats[Cache.FloatsRemaining - 1];
								Cache.FloatsRemaining--;
								o[i] = a;
							} else {
								while (true) {
									short Token = Reader.ReadInt16();
									if (Token == TOKEN_FLOAT_LIST) {
										int n = Reader.ReadInt32();
										if (n < 0) {
											Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_FLOAT_LIST at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
											return false;
										}
										if (n != 0) {
											Cache.Floats = new double[n];
											for (int j = 0; j < n; i++) {
												if (FloatingPointSize == 32) {
													Cache.Floats[n - j - 1] = (double)Reader.ReadSingle();
												} else if (FloatingPointSize == 64) {
													Cache.Floats[n - j - 1] = Reader.ReadDouble();
												}
											}
											Cache.FloatsRemaining = n - 1;
											double a = Cache.Floats[Cache.FloatsRemaining];
											o[i] = a;
											break;
										}
									} else {
										Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_FLOAT_LIST expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
										return false;
									}
								}
							}
						}
						Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
						Structure.Data[Structure.Data.Length - 1] = o;
					} else {
						// template array
						Structure[] o = new Structure[h];
						for (int i = 0; i < h; i++) {
							ReadBinaryTemplate(FileName, Reader, FloatingPointSize, GetTemplate(r), true, ref Cache, out o[i]);
						}
						Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
						Structure.Data[Structure.Data.Length - 1] = o;
					}
				} else {
					// inlined template or primitive expected
					switch (Template.Members[m]) {
						case "DWORD":
							// dword expected
							if (Cache.IntegersRemaining != 0) {
								// use cached integer
								int a = Cache.Integers[Cache.IntegersRemaining - 1];
								Cache.IntegersRemaining--;
								Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
								Structure.Data[Structure.Data.Length - 1] = a;
							} else if (Cache.FloatsRemaining != 0) {
								// cannot use cached float
								Interface.AddMessage(Interface.MessageType.Error, false, "A float list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								return false;
							} else {
								// read new data
								while (true) {
									short Token = Reader.ReadInt16();
									if (Token == TOKEN_INTEGER) {
										int a = Reader.ReadInt32();
										Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
										Structure.Data[Structure.Data.Length - 1] = a;
										break;
									} else if (Token == TOKEN_INTEGER_LIST) {
										int n = Reader.ReadInt32();
										if (n < 0) {
											Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_INTEGER_LIST at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
											return false;
										}
										if (n != 0) {
											Cache.Integers = new int[n];
											for (int i = 0; i < n; i++) {
												Cache.Integers[n - i - 1] = Reader.ReadInt32();
											}
											Cache.IntegersRemaining = n - 1;
											int a = Cache.Integers[Cache.IntegersRemaining];
											Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
											Structure.Data[Structure.Data.Length - 1] = a;
											break;
										}
									} else {
										Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_INTEGER or TOKEN_INTEGER_LIST expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
										return false;
									}
								}
							} break;
						case "float":
							// float expected
							if (Cache.IntegersRemaining != 0) {
								// cannot use cached integer
								Interface.AddMessage(Interface.MessageType.Error, false, "An integer list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								return false;
							} else if (Cache.FloatsRemaining != 0) {
								// use cached float
								double a = Cache.Floats[Cache.FloatsRemaining - 1];
								Cache.FloatsRemaining--;
								Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
								Structure.Data[Structure.Data.Length - 1] = a;
							} else {
								// read new data
								while (true) {
									short Token = Reader.ReadInt16();
									if (Token == TOKEN_FLOAT_LIST) {
										int n = Reader.ReadInt32();
										if (n < 0) {
											Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_FLOAT_LIST at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
											return false;
										}
										if (n != 0) {
											Cache.Floats = new double[n];
											for (int i = 0; i < n; i++) {
												if (FloatingPointSize == 32) {
													Cache.Floats[n - i - 1] = (double)Reader.ReadSingle();
												} else if (FloatingPointSize == 64) {
													Cache.Floats[n - i - 1] = Reader.ReadDouble();
												}
											}
											Cache.FloatsRemaining = n - 1;
											double a = Cache.Floats[Cache.FloatsRemaining];
											Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
											Structure.Data[Structure.Data.Length - 1] = a;
											break;
										}
									} else {
										Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_FLOAT_LIST expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
										return false;
									}
								}
							} break;
						case "string":
							{
								// string expected
								if (Cache.IntegersRemaining != 0) {
									Interface.AddMessage(Interface.MessageType.Error, false, "An integer list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								} else if (Cache.FloatsRemaining != 0) {
									Interface.AddMessage(Interface.MessageType.Error, false, "A float list was not depleted at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
								}
								short Token = Reader.ReadInt16();
								if (Token == TOKEN_STRING) {
									int n = Reader.ReadInt32();
									if (n < 0) {
										Interface.AddMessage(Interface.MessageType.Error, false, "count is invalid in TOKEN_STRING at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
										return false;
									}
									string s = new string(Ascii.GetChars(Reader.ReadBytes(n)));
									Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
									Structure.Data[Structure.Data.Length - 1] = s;
									Token = Reader.ReadInt16();
									if (Token != TOKEN_SEMICOLON) {
										Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_SEMICOLON expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
										return false;
									}
								} else {
									Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_STRING expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
									return false;
								}
							} break;
						default:
							// inlined template expected
							Structure o;
							ReadBinaryTemplate(FileName, Reader, FloatingPointSize, GetTemplate(Template.Members[m]), true, ref Cache, out o);
							Array.Resize<object>(ref Structure.Data, Structure.Data.Length + 1);
							Structure.Data[Structure.Data.Length - 1] = o;
							break;
					}
				}
			}
			if (Inline) {
				return true;
			} else {
				string s = Template.Members[Template.Members.Length - 1];
				if (s != "[???]" & s != "[...]") {
					int Token = Reader.ReadInt16();
					if (Token != TOKEN_CBRACE) {
						Interface.AddMessage(Interface.MessageType.Error, false, "TOKEN_CBRACE expected at position 0x" + Reader.BaseStream.Position.ToString("X", Culture) + " in binary X object file " + FileName);
						return false;
					}
				}
				return true;
			}
		}
Ejemplo n.º 8
0
        public void threadFile()
        {
            int          iIndex    = Int32.Parse(Thread.CurrentThread.Name);
            GPSSource    gpsSource = (GPSSource)m_GpsTracker.m_gpsSourceList[iIndex];
            int          iIndexFile;
            int          iIndexNext;
            StreamReader fsGpsFile = null;

            System.Text.ASCIIEncoding asciiEncoder = new System.Text.ASCIIEncoding();
            String sGpsLine = null;
            String sIndex;

            byte []  byNMEA;
            char []  cNMEA    = null;
            char []  cNMEAMsg = new char[512];
            DateTime dtCurrent;
            DateTime dtNext        = new DateTime(0);
            int      iEnd          = 0;
            bool     bRestartTrack = false;

            try
            {
                if (File.Exists(gpsSource.sFileNameSession))
                {
                    while (m_GpsTracker.m_fCloseThreads == false)
                    {
                        bRestartTrack = true;
                        fsGpsFile     = File.OpenText(gpsSource.sFileNameSession);
                        {
                            if (m_GpsTracker.m_fPlayback == true)
                            {
                                m_GpsTracker.LoadSettings(fsGpsFile, false);
                                iIndexFile = iIndex + 1;
                                do
                                {
                                    sIndex = fsGpsFile.ReadLine();
                                    if (sIndex != null)
                                    {
                                        iEnd = sIndex.IndexOf(",");
                                    }
                                    if (sIndex != null && iEnd > 0)
                                    {
                                        iIndexFile = Convert.ToInt32(sIndex.Substring(0, iEnd));
                                        if (iIndexFile == iIndex && sIndex.Length > iEnd + 1)
                                        {
                                            sGpsLine = sIndex.Substring(iEnd + 1);
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        break;
                                    }
                                } while(m_GpsTracker.m_fCloseThreads == false);
                            }
                            else
                            {
                                sIndex     = "dummyindex";
                                iIndexFile = iIndex;
                                sGpsLine   = fsGpsFile.ReadLine();
                            }
                            if (sGpsLine != null)
                            {
                                byNMEA = asciiEncoder.GetBytes(sGpsLine);
                                cNMEA  = asciiEncoder.GetChars(byNMEA);
                                cNMEA.CopyTo(cNMEAMsg, 0);
                                if (m_GpsTracker.m_iPlaybackSpeed > 0)
                                {
                                    dtNext = m_GpsTracker.m_NMEA.GetNMEATime(-1, sGpsLine);
                                }
                            }
                            while (sIndex != null && sGpsLine != null && m_GpsTracker.m_fCloseThreads == false && iIndexFile == iIndex)
                            {
                                if (sGpsLine != "" && sIndex != "")
                                {
                                    try
                                    {
                                        if (m_GpsTracker.m_MessageMonitor != null)
                                        {
                                            m_GpsTracker.m_MessageMonitor.AddMessageFileRaw(sGpsLine);
                                        }
                                    }
                                    catch (Exception)
                                    {
                                        m_GpsTracker.m_MessageMonitor = null;
                                    }

                                    if (m_GpsTracker.ShowGPSIcon(cNMEAMsg, cNMEA.Length, false, iIndex, bRestartTrack, true) == true)
                                    {
                                        if (bRestartTrack)
                                        {
                                            bRestartTrack = false;
                                        }
                                        //Get current NMEA msg time
                                        dtCurrent = dtNext;
                                        while (m_GpsTracker.m_fCloseThreads == false)
                                        {
                                            //Get next line from file
                                            if (m_GpsTracker.m_fPlayback == true)
                                            {
                                                sIndex = fsGpsFile.ReadLine();
                                                if (sIndex != null)
                                                {
                                                    iEnd = sIndex.IndexOf(",");
                                                    if (iEnd > 0 && sIndex.Length > iEnd + 1)
                                                    {
                                                        sGpsLine = sIndex.Substring(iEnd + 1);
                                                        sIndex   = sIndex.Substring(0, iEnd);
                                                    }
                                                    else
                                                    {
                                                        sIndex = "";
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                sIndex   = Convert.ToString(iIndex);
                                                sGpsLine = fsGpsFile.ReadLine();
                                            }
                                            if (sGpsLine == null || sIndex == null)
                                            {
                                                break;
                                            }
                                            else
                                            if (sGpsLine != "" && sIndex != "")
                                            {
                                                iIndexNext = Convert.ToInt32(sIndex);

                                                byNMEA = asciiEncoder.GetBytes(sGpsLine);
                                                cNMEA  = asciiEncoder.GetChars(byNMEA);
                                                cNMEA.CopyTo(cNMEAMsg, 0);

                                                //Check is a valid NMEA message
                                                if (iIndexNext == iIndex && m_GpsTracker.m_NMEA.ParseGPSMessage(cNMEAMsg, cNMEA.Length, true, iIndex) == true)
                                                {
                                                    if (m_GpsTracker.m_iPlaybackSpeed > 0 && gpsSource.iFilePlaySpeed > 0)
                                                    {
                                                        //Get time difference from current msg to next message...
                                                        dtNext = m_GpsTracker.m_NMEA.GetNMEATime(-1, sGpsLine);
                                                        //Check valid times
                                                        if (dtCurrent.Year != 1771 && dtNext.Year != 1771)
                                                        {
                                                            if (dtNext < dtCurrent)
                                                            {
                                                                dtNext = dtNext.AddDays(1);
                                                            }
                                                            TimeSpan tsDelay = dtNext.Subtract(dtCurrent);
                                                            double   dDelay  = tsDelay.TotalMilliseconds;
                                                            //apply selected speed
                                                            double dSpeed = Convert.ToDouble(gpsSource.iFilePlaySpeed);
                                                            dDelay /= dSpeed;
                                                            dDelay /= m_GpsTracker.m_iPlaybackSpeed;
                                                            Thread.Sleep(Convert.ToInt32(dDelay));
                                                            break;
                                                        }
                                                        else
                                                        {
                                                            Thread.Sleep(1);
                                                            break;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        Thread.Sleep(1);
                                                        break;
                                                    }
                                                }
                                                else
                                                {
                                                    Thread.Sleep(1);
                                                }
                                            }
                                            else
                                            {
                                                Thread.Sleep(1);
                                                //break;
                                            }
                                        }                                 //while
                                    }                                     //show
                                    else
                                    {
                                        sIndex     = "dummyindex";
                                        iIndexFile = iIndex;
                                        sGpsLine   = fsGpsFile.ReadLine();
                                        if (sGpsLine != null)
                                        {
                                            byNMEA = asciiEncoder.GetBytes(sGpsLine);
                                            cNMEA  = asciiEncoder.GetChars(byNMEA);
                                            cNMEA.CopyTo(cNMEAMsg, 0);
                                            if (m_GpsTracker.m_iPlaybackSpeed > 0)
                                            {
                                                dtNext = m_GpsTracker.m_NMEA.GetNMEATime(-1, sGpsLine);
                                            }
                                        }
                                        Thread.Sleep(1);
                                    }
                                }                                 // if gpsline
                                else
                                {
                                    if (sGpsLine == "")
                                    {
                                        sGpsLine = fsGpsFile.ReadLine();
                                    }

                                    Thread.Sleep(1);
                                    //break;
                                }
                            }                             //while
                            if (fsGpsFile != null)
                            {
                                fsGpsFile.Close();
                                fsGpsFile = null;
                            }

                            if (gpsSource.iReload == 0 && m_GpsTracker.m_fCloseThreads == false)
                            {
                                Thread.Sleep(3000);
                            }
                            else
                            {
                                break;
                            }
                        }         //using
                    }
                }                 //exists
            }
            catch (Exception)
            {
            }

            if (fsGpsFile != null)
            {
                fsGpsFile.Close();
                fsGpsFile = null;
            }
        }
Ejemplo n.º 9
0
        //
        // File functions
        //

        public void PreprocessFile(int iIndex, String sFileName, string sRealName, bool bCheckPre, bool bForePreprocessing)
        {
            GPSSource gpsSource = (GPSSource)m_GpsTracker.m_gpsSourceList[iIndex];

                        #if !DEBUG
            try
                        #endif
            {
                //check if preprocess exists
                if ((File.Exists(sFileName + ".TrackAtOnce") || IsTrackAtOnce(sFileName)) &&
                    (bForePreprocessing == false || bCheckPre))
                {
                    string sTAOFileName;
                    if (IsTrackAtOnce(sFileName))
                    {
                        sTAOFileName = sFileName;
                    }
                    else
                    {
                        sTAOFileName = sFileName + ".TrackAtOnce";
                    }

                    gpsSource.GpsPos.m_gpsTrack = null;
                    BinaryReader binReader = new BinaryReader(File.Open(sTAOFileName, FileMode.Open));
                    // If the file is not empty,
                    // read it
                    if (binReader.PeekChar() != -1)
                    {
                        gpsSource.GpsPos.m_gpsTrack = new GPSTrack();

                        string  sSign        = "GPSTracker.TrackAtOnce";
                        char [] sSignature   = binReader.ReadChars(sSign.Length);
                        string  sSignCompare = new string(sSignature);
                        if (sSignCompare == sSign)
                        {
                            gpsSource.GpsPos.m_gpsTrack.m_uPointCount = binReader.ReadUInt32();
                            gpsSource.GpsPos.m_gpsTrack.SetSize(gpsSource.GpsPos.m_gpsTrack.m_uPointCount);

                            byte[] byData = new byte[gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8];
                            byData = binReader.ReadBytes((int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);
                            System.Buffer.BlockCopy(byData, 0, gpsSource.GpsPos.m_gpsTrack.m_fLat, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);

                            byData = binReader.ReadBytes((int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);
                            System.Buffer.BlockCopy(byData, 0, gpsSource.GpsPos.m_gpsTrack.m_fLon, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);

                            byData = binReader.ReadBytes((int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 4);
                            System.Buffer.BlockCopy(byData, 0, gpsSource.GpsPos.m_gpsTrack.m_fAlt, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 4);
                        }
                    }
                    binReader.Close();
                }
                else
                {
                    uint         uProgress;
                    uint         uMaxProgress;
                    StreamReader fsGpsFile = null;
                    String       sGpsLine;
                    byte []      byNMEA;
                    char []      cNMEA    = null;
                    char []      cNMEAMsg = new char[512];
                    System.Text.ASCIIEncoding asciiEncoder = new System.Text.ASCIIEncoding();
                    if (File.Exists(sFileName) && !IsTrackAtOnce(sFileName))
                    {
                        FileInfo fInfo = new FileInfo(sFileName);

                        uProgress    = 0;
                        uMaxProgress = (uint)fInfo.Length;
                        m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Processing " + sRealName + ": " + Convert.ToString(uProgress) + " of " + Convert.ToString(uMaxProgress) + " bytes.");

                        fsGpsFile = File.OpenText(sFileName);
                        gpsSource.GpsPos.m_gpsTrack = new GPSTrack();
                        gpsSource.GpsPos.m_gpsTrack.SetSize(500); //set an initial array size for the track
                        uint uResizeArraySize = 500;
                        while (true)
                        {
                            sGpsLine = fsGpsFile.ReadLine();
                            if (sGpsLine == null)
                            {
                                break;
                            }
                            uProgress += (uint)sGpsLine.Length;
                            m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Processing " + sRealName + ": " + Convert.ToString(uProgress) + " of " + Convert.ToString(uMaxProgress) + " bytes.");

                            byNMEA = asciiEncoder.GetBytes(sGpsLine);
                            cNMEA  = asciiEncoder.GetChars(byNMEA);
                            cNMEA.CopyTo(cNMEAMsg, 0);
                            if (m_GpsTracker.m_NMEA.ParseGPSMessage(cNMEAMsg, cNMEA.Length, false, iIndex) == true)
                            {
                                gpsSource.GpsPos.m_gpsTrack.AddPoint(gpsSource.GpsPos.m_fLat, gpsSource.GpsPos.m_fLon, gpsSource.GpsPos.m_fAlt);
                            }

                            //Keep resizing the track array as necessary
                            if (gpsSource.GpsPos.m_gpsTrack.m_uPointCount >= uResizeArraySize)
                            {
                                uResizeArraySize += 100;
                                gpsSource.GpsPos.m_gpsTrack.Resize(uResizeArraySize);
                            }
                        }
                        uProgress = (uint)fInfo.Length;
                        m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Processing " + sRealName + ": " + Convert.ToString(uProgress) + " of " + Convert.ToString(uMaxProgress) + " bytes.");
                        fsGpsFile.Close();

                        //Resize track array to minimum size;
                        gpsSource.GpsPos.m_gpsTrack.Resize(gpsSource.GpsPos.m_gpsTrack.m_uPointCount);

                        m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Creating " + sRealName + ".TrackAtOnce");

                        using (BinaryWriter binWriter = new BinaryWriter(File.Open(sFileName + ".TrackAtOnce", FileMode.Create)))
                        {
                            string  sSign      = "GPSTracker.TrackAtOnce";
                            char [] sSignature = new char[sSign.Length];
                            sSignature = sSign.ToCharArray();
                            binWriter.Write(sSignature);

                            binWriter.Write(gpsSource.GpsPos.m_gpsTrack.m_uPointCount);

                            byte[] byData = new byte[gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8];
                            System.Buffer.BlockCopy(gpsSource.GpsPos.m_gpsTrack.m_fLat, 0, byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);
                            binWriter.Write(byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);

                            System.Buffer.BlockCopy(gpsSource.GpsPos.m_gpsTrack.m_fLon, 0, byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);
                            binWriter.Write(byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 8);

                            System.Buffer.BlockCopy(gpsSource.GpsPos.m_gpsTrack.m_fAlt, 0, byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 4);
                            binWriter.Write(byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount * 4);

                            binWriter.Close();
                        }
                    }
                }
            }
                        #if !DEBUG
            catch (Exception)
            {
                m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("");
                m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Active");
            }
                        #endif
            m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("");
            m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Active");
        }
Ejemplo n.º 10
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string httpMethod = Request.HttpMethod;
                string estateId   = ConvertUtility.Trim(Request.QueryString["id"]);

                if (httpMethod.Equals("get", StringComparison.OrdinalIgnoreCase))
                {
                    EstateFwService estateService = new EstateFwService();
                    this.Estate = estateService.GetEstateById(estateId);
                }
                else
                {
                    //AddData
                    string buildName1 = ConvertUtility.Trim(Request.Form["buildName_B"]);
                    string buildName2 = ConvertUtility.Trim(Request.Form["buildName_E"]);

                    string buildName = ConvertUtility.Trim(Request.Form["buildName"]);
                    string address   = ConvertUtility.Trim(Request.Form["address"]);
                    int    x_cnt     = ConvertUtility.ToInt(Request.Form["x_cnt"]);
                    bool   x_except  = ConvertUtility.ToBoolean(Request.Form["x_except"]);
                    int    y_cnt_b   = ConvertUtility.ToInt(Request.Form["y_cnt_b"]);
                    int    y_cnt_e   = ConvertUtility.ToInt(Request.Form["y_cnt_e"]);
                    bool   y_except  = ConvertUtility.ToBoolean(Request.Form["y_except"]);

                    BuildFwService            buildService = new BuildFwService();
                    System.Text.ASCIIEncoding encoding     = new System.Text.ASCIIEncoding();
                    byte[] b1 = encoding.GetBytes(buildName1.ToUpper());
                    byte[] b2 = encoding.GetBytes(buildName2.ToUpper());
                    int    c  = b2[0] - b1[0];
                    if (c >= 0 && b2[0] < 90 && b1[0] > 64)
                    {
                        for (int idx = b1[0]; idx <= b2[0]; idx++)
                        {
                            char[] name = encoding.GetChars(new byte[] { (byte)idx });
                            buildService.AddBuild(estateId, name[0].ToString() + buildName, address, x_cnt, x_except, y_cnt_b, y_cnt_e, y_except);
                        }
                        Response.Write("true");
                    }
                    else
                    {
                        int buildName_B = ConvertUtility.ToInt(buildName1);
                        int buildName_E = ConvertUtility.ToInt(buildName2);
                        if (buildName_E >= buildName_B)
                        {
                            while (buildName_B <= buildName_E)
                            {
                                buildService.AddBuild(estateId, buildName_B + buildName, address, x_cnt, x_except, y_cnt_b, y_cnt_e, y_except);

                                buildName_B++;
                                if (buildName_B > buildName_E)
                                {
                                    break;
                                }
                            }
                            Response.Write("true");
                        }
                        else
                        {
                            Response.Write("false");
                        }
                    }
                    Response.End();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 11
0
        // preprocess chrrndsub
        private static void PreprocessChrRndSub(string FileName, ref Expression[] Expressions)
        {
            System.Globalization.CultureInfo Culture = System.Globalization.CultureInfo.InvariantCulture;
            System.Text.Encoding Encoding = new System.Text.ASCIIEncoding();
            string[] Subs = new string[16];
            for (int i = 0; i < Expressions.Length; i++) {
                string Epilog = " at line " + Expressions[i].Line.ToString(Culture) + ", column " + Expressions[i].Column.ToString(Culture) + " in file " + FileName;
                bool err = false;
                for (int j = Expressions[i].Text.Length - 1; j >= 0; j--) {
                    if (Expressions[i].Text[j] == '$') {
                        int k;
                        for (k = j + 1; k < Expressions[i].Text.Length; k++) {
                            if (Expressions[i].Text[k] == '(') break;
                        }
                        if (k <= Expressions[i].Text.Length) {
                            string t = Expressions[i].Text.Substring(j, k - j).TrimEnd();
                            int l = 1, h;
                            for (h = k + 1; h < Expressions[i].Text.Length; h++) {
                                switch (Expressions[i].Text[h]) {
                                    case '(':
                                        l++;
                                        break;
                                    case ')':
                                        l--;
                                        if (l < 0) {
                                            err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Invalid parenthesis structure in " + t + Epilog);
                                        }
                                        break;
                                }
                                if (l <= 0) break;
                            }
                            if (err) break;
                            if (l != 0) {
                                Interface.AddMessage(Interface.MessageType.Error, false, "Invalid parenthesis structure in " + t + Epilog);
                                err = true; break;
                            }
                            string s = Expressions[i].Text.Substring(k + 1, h - k - 1).Trim();
                            switch (t.ToLowerInvariant()) {
                                case "$chr":
                                    {
                                        int x; if (Interface.TryParseIntVb6(s, out x)) {
                                            if (x > 0 & x < 128) {
                                                Expressions[i].Text = Expressions[i].Text.Substring(0, j) + new string(Encoding.GetChars(new byte[] { (byte)x })) + Expressions[i].Text.Substring(h + 1);
                                            } else {
                                                err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index does not correspond to a valid ASCII character in " + t + Epilog);
                                            }
                                        } else {
                                            err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index is invalid in " + t + Epilog);
                                        }
                                    } break;
                                case "$rnd":
                                    {
                                        int m = s.IndexOf(";", StringComparison.Ordinal);
                                        if (m >= 0) {
                                            string s1 = s.Substring(0, m).TrimEnd();
                                            string s2 = s.Substring(m + 1).TrimStart();
                                            int x; if (Interface.TryParseIntVb6(s1, out x)) {
                                                int y; if (Interface.TryParseIntVb6(s2, out y)) {
                                                    int z = x + (int)Math.Floor(Game.Generator.NextDouble() * (double)(y - x + 1));
                                                    Expressions[i].Text = Expressions[i].Text.Substring(0, j) + z.ToString(Culture) + Expressions[i].Text.Substring(h + 1);
                                                } else {
                                                    err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index2 is invalid in " + t + Epilog);
                                                }
                                            } else {
                                                err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index1 is invalid in " + t + Epilog);
                                            }
                                        } else {
                                            err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Two arguments are expected in " + t + Epilog);
                                        }
                                    } break;
                                case "$sub":
                                    {
                                        l = 0;
                                        bool f = false;
                                        int m;
                                        for (m = h + 1; m < Expressions[i].Text.Length; m++) {
                                            switch (Expressions[i].Text[m]) {
                                                    case '(': l++; break;
                                                    case ')': l--; break;
                                                    case '=': if (l == 0) {
                                                        f = true;
                                                    }
                                                    break;
                                                default:
                                                    if (!char.IsWhiteSpace(Expressions[i].Text[m])) l = -1;
                                                    break;
                                            }
                                            if (f | l < 0) break;
                                        }
                                        if (f) {
                                            l = 0;
                                            int n;
                                            for (n = m + 1; n < Expressions[i].Text.Length; n++) {
                                                switch (Expressions[i].Text[n]) {
                                                        case '(': l++; break;
                                                        case ')': l--; break;
                                                }
                                                if (l < 0) break;
                                            }
                                            int x;
                                            if (Interface.TryParseIntVb6(s, out x)) {
                                                if (x >= 0) {
                                                    while (x >= Subs.Length) {
                                                        Array.Resize<string>(ref Subs, Subs.Length << 1);
                                                    }
                                                    Subs[x] = Expressions[i].Text.Substring(m + 1, n - m - 1).Trim();
                                                    Expressions[i].Text = Expressions[i].Text.Substring(0, j) + Expressions[i].Text.Substring(n);
                                                } else {
                                                    err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index is expected to be non-negative in " + t + Epilog);
                                                }
                                            } else {
                                                err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index is invalid in " + t + Epilog);
                                            }
                                        } else {
                                            int x;
                                            if (Interface.TryParseIntVb6(s, out x)) {
                                                if (x >= 0 & x < Subs.Length && Subs[x] != null) {
                                                    Expressions[i].Text = Expressions[i].Text.Substring(0, j) + Subs[x] + Expressions[i].Text.Substring(h + 1);
                                                } else {
                                                    err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index is out of range in " + t + Epilog);
                                                }
                                            } else {
                                                err = true; Interface.AddMessage(Interface.MessageType.Error, false, "Index is invalid in " + t + Epilog);
                                            }
                                        }

                                    } break;
                            }
                        }
                    } if (err) continue;
                }
            }
            // handle comments introduced via chr, rnd, sub
            int length = Expressions.Length;
            for (int i = 0; i < length; i++) {
                Expressions[i].Text = Expressions[i].Text.Trim();
                if (Expressions[i].Text.Length != 0) {
                    if (Expressions[i].Text[0] == ';') {
                        for (int j = i; j < length - 1; j++) {
                            Expressions[j] = Expressions[j + 1];
                        }
                        length--;
                        i--;
                    }
                } else {
                    for (int j = i; j < length - 1; j++) {
                        Expressions[j] = Expressions[j + 1];
                    }
                    length--;
                    i--;
                }
            }
            if (length != Expressions.Length) {
                Array.Resize<Expression>(ref Expressions, length);
            }
        }
Ejemplo n.º 12
0
        public bool parse()
        {
            byte[]        token = new byte[4096];
            int           lapg_head = 0, group = 0, lapg_i, lapg_size, chr;
            lapg_symbol[] lapg_m = new lapg_symbol[1024];
            lapg_symbol   lapg_n;
            System.Text.ASCIIEncoding AE = new System.Text.ASCIIEncoding();
            lapg_place    lapg_current;

            lapg_current.offset = 0;
            lapg_current.line = 1;
            lapg_m[0].state = 0; lapg_n.lexem = lapg_n.state = 0;
            chr = buff[l++];

            do {
            lapg_n.pos = lapg_current;
            for( lapg_size = 0, lapg_i = group; lapg_i >= 0; ) {
                if( lapg_size < 4096-1 ) token[lapg_size++] = (byte)chr;
                lapg_i = lapg_lexem[lapg_i,lapg_char2no[chr]];
                if( lapg_i >= -1 && chr != 0 ) {
                    lapg_current.offset++;
                    if( chr == '\n' ) lapg_current.line++;
                    chr = buff[l++];
                }
            }
            lapg_n.endpos = lapg_current;
            token[lapg_size] = 0;

            if( lapg_i == -1 ) {
                error( System.String.Format( "invalid lexem at line {0}: `{1}`, skipped", lapg_n.pos.line, new System.String(AE.GetChars(token,0,lapg_size)) ) );
                continue;
            }

            token[lapg_size-1] = 0;
            lapg_n.lexem = -lapg_i-2;
            lapg_n.sym = null;

            switch( lapg_n.lexem ) {
                case 1:
                    #line 22 "syntax"
                     lapg_n.sym = new System.String(AE.GetChars(token,0,lapg_size-1)); break;
                case 2:
                    #line 26 "syntax"
                     lapg_n.sym = new System.String(AE.GetChars(token,0,lapg_size-1)); break;
                case 3:
                    #line 30 "syntax"
                     lapg_n.sym = new System.String(AE.GetChars(token,0,lapg_size-1)); break;
                case 4:
                    #line 33 "syntax"
                     lapg_n.sym = new System.String(AE.GetChars(token,0,lapg_size-1)); break;
                case 5:
                    #line 34 "syntax"
                     lapg_n.sym = new System.String(AE.GetChars(token,0,lapg_size-1)); break;
                case 6:
                    #line 38 "syntax"
                     lapg_n.sym = "abstract"; break;
                case 7:
                    #line 39 "syntax"
                     lapg_n.sym = "as"; break;
                case 8:
                    #line 40 "syntax"
                     lapg_n.sym = "base"; break;
                case 9:
                    #line 41 "syntax"
                     lapg_n.sym = "bool"; break;
                case 10:
                    #line 42 "syntax"
                     lapg_n.sym = "break"; break;
                case 11:
                    #line 43 "syntax"
                     lapg_n.sym = "byte"; break;
                case 12:
                    #line 44 "syntax"
                     lapg_n.sym = "case"; break;
                case 13:
                    #line 45 "syntax"
                     lapg_n.sym = "catch"; break;
                case 14:
                    #line 46 "syntax"
                     lapg_n.sym = "char"; break;
                case 15:
                    #line 47 "syntax"
                     lapg_n.sym = "checked"; break;
                case 16:
                    #line 48 "syntax"
                     lapg_n.sym = "class"; break;
                case 17:
                    #line 49 "syntax"
                     lapg_n.sym = "const"; break;
                case 18:
                    #line 50 "syntax"
                     lapg_n.sym = "continue"; break;
                case 19:
                    #line 51 "syntax"
                     lapg_n.sym = "decimal"; break;
                case 20:
                    #line 52 "syntax"
                     lapg_n.sym = "default"; break;
                case 21:
                    #line 53 "syntax"
                     lapg_n.sym = "delegate"; break;
                case 22:
                    #line 54 "syntax"
                     lapg_n.sym = "do"; break;
                case 23:
                    #line 55 "syntax"
                     lapg_n.sym = "double"; break;
                case 24:
                    #line 56 "syntax"
                     lapg_n.sym = "else"; break;
                case 25:
                    #line 57 "syntax"
                     lapg_n.sym = "enum"; break;
                case 26:
                    #line 58 "syntax"
                     lapg_n.sym = "event"; break;
                case 27:
                    #line 59 "syntax"
                     lapg_n.sym = "explicit"; break;
                case 28:
                    #line 60 "syntax"
                     lapg_n.sym = "extern"; break;
                case 29:
                    #line 61 "syntax"
                     lapg_n.sym = "false"; break;
                case 30:
                    #line 62 "syntax"
                     lapg_n.sym = "finally"; break;
                case 31:
                    #line 63 "syntax"
                     lapg_n.sym = "fixed"; break;
                case 32:
                    #line 64 "syntax"
                     lapg_n.sym = "float"; break;
                case 33:
                    #line 65 "syntax"
                     lapg_n.sym = "for"; break;
                case 34:
                    #line 66 "syntax"
                     lapg_n.sym = "foreach"; break;
                case 35:
                    #line 67 "syntax"
                     lapg_n.sym = "goto"; break;
                case 36:
                    #line 68 "syntax"
                     lapg_n.sym = "if"; break;
                case 37:
                    #line 69 "syntax"
                     lapg_n.sym = "implicit"; break;
                case 38:
                    #line 70 "syntax"
                     lapg_n.sym = "in"; break;
                case 39:
                    #line 71 "syntax"
                     lapg_n.sym = "int"; break;
                case 40:
                    #line 72 "syntax"
                     lapg_n.sym = "interface"; break;
                case 41:
                    #line 73 "syntax"
                     lapg_n.sym = "internal"; break;
                case 42:
                    #line 74 "syntax"
                     lapg_n.sym = "is"; break;
                case 43:
                    #line 75 "syntax"
                     lapg_n.sym = "lock"; break;
                case 44:
                    #line 76 "syntax"
                     lapg_n.sym = "long"; break;
                case 45:
                    #line 77 "syntax"
                     lapg_n.sym = "namespace"; break;
                case 46:
                    #line 78 "syntax"
                     lapg_n.sym = "new"; break;
                case 47:
                    #line 79 "syntax"
                     lapg_n.sym = "null"; break;
                case 48:
                    #line 80 "syntax"
                     lapg_n.sym = "object"; break;
                case 49:
                    #line 81 "syntax"
                     lapg_n.sym = "operator"; break;
                case 50:
                    #line 82 "syntax"
                     lapg_n.sym = "out"; break;
                case 51:
                    #line 83 "syntax"
                     lapg_n.sym = "override"; break;
                case 52:
                    #line 84 "syntax"
                     lapg_n.sym = "params"; break;
                case 53:
                    #line 85 "syntax"
                     lapg_n.sym = "private"; break;
                case 54:
                    #line 86 "syntax"
                     lapg_n.sym = "protected"; break;
                case 55:
                    #line 87 "syntax"
                     lapg_n.sym = "public"; break;
                case 56:
                    #line 88 "syntax"
                     lapg_n.sym = "readonly"; break;
                case 57:
                    #line 89 "syntax"
                     lapg_n.sym = "ref"; break;
                case 58:
                    #line 90 "syntax"
                     lapg_n.sym = "return"; break;
                case 59:
                    #line 91 "syntax"
                     lapg_n.sym = "sbyte"; break;
                case 60:
                    #line 92 "syntax"
                     lapg_n.sym = "sealed"; break;
                case 61:
                    #line 93 "syntax"
                     lapg_n.sym = "short"; break;
                case 62:
                    #line 94 "syntax"
                     lapg_n.sym = "sizeof"; break;
                case 63:
                    #line 95 "syntax"
                     lapg_n.sym = "stackalloc"; break;
                case 64:
                    #line 96 "syntax"
                     lapg_n.sym = "static"; break;
                case 65:
                    #line 97 "syntax"
                     lapg_n.sym = "string"; break;
                case 66:
                    #line 98 "syntax"
                     lapg_n.sym = "struct"; break;
                case 67:
                    #line 99 "syntax"
                     lapg_n.sym = "switch"; break;
                case 68:
                    #line 100 "syntax"
                     lapg_n.sym = "this"; break;
                case 69:
                    #line 101 "syntax"
                     lapg_n.sym = "throw"; break;
                case 70:
                    #line 102 "syntax"
                     lapg_n.sym = "true"; break;
                case 71:
                    #line 103 "syntax"
                     lapg_n.sym = "try"; break;
                case 72:
                    #line 104 "syntax"
                     lapg_n.sym = "typeof"; break;
                case 73:
                    #line 105 "syntax"
                     lapg_n.sym = "uint"; break;
                case 74:
                    #line 106 "syntax"
                     lapg_n.sym = "ulong"; break;
                case 75:
                    #line 107 "syntax"
                     lapg_n.sym = "unchecked"; break;
                case 76:
                    #line 108 "syntax"
                     lapg_n.sym = "unsafe"; break;
                case 77:
                    #line 109 "syntax"
                     lapg_n.sym = "ushort"; break;
                case 78:
                    #line 110 "syntax"
                     lapg_n.sym = "using"; break;
                case 79:
                    #line 111 "syntax"
                     lapg_n.sym = "virtual"; break;
                case 80:
                    #line 112 "syntax"
                     lapg_n.sym = "void"; break;
                case 81:
                    #line 113 "syntax"
                     lapg_n.sym = "volatile"; break;
                case 82:
                    #line 114 "syntax"
                     lapg_n.sym = "while"; break;
                case 83:
                    #line 118 "syntax"
                     lapg_n.sym = "{"; break;
                case 84:
                    #line 119 "syntax"
                     lapg_n.sym = "}"; break;
                case 85:
                    #line 120 "syntax"
                     lapg_n.sym = "["; break;
                case 86:
                    #line 121 "syntax"
                     lapg_n.sym = "]"; break;
                case 87:
                    #line 122 "syntax"
                     lapg_n.sym = "("; break;
                case 88:
                    #line 123 "syntax"
                     lapg_n.sym = ")"; break;
                case 89:
                    #line 124 "syntax"
                     lapg_n.sym = "."; break;
                case 90:
                    #line 125 "syntax"
                     lapg_n.sym = ","; break;
                case 91:
                    #line 126 "syntax"
                     lapg_n.sym = ":"; break;
                case 92:
                    #line 127 "syntax"
                     lapg_n.sym = ";"; break;
                case 93:
                    #line 128 "syntax"
                     lapg_n.sym = "+"; break;
                case 94:
                    #line 129 "syntax"
                     lapg_n.sym = "-"; break;
                case 95:
                    #line 130 "syntax"
                     lapg_n.sym = "*"; break;
                case 96:
                    #line 131 "syntax"
                     lapg_n.sym = "/"; break;
                case 97:
                    #line 132 "syntax"
                     lapg_n.sym = "%"; break;
                case 98:
                    #line 133 "syntax"
                     lapg_n.sym = "&"; break;
                case 99:
                    #line 134 "syntax"
                     lapg_n.sym = "|"; break;
                case 100:
                    #line 135 "syntax"
                     lapg_n.sym = "^"; break;
                case 101:
                    #line 136 "syntax"
                     lapg_n.sym = "!"; break;
                case 102:
                    #line 137 "syntax"
                     lapg_n.sym = "~"; break;
                case 103:
                    #line 138 "syntax"
                     lapg_n.sym = "="; break;
                case 104:
                    #line 139 "syntax"
                     lapg_n.sym = "<"; break;
                case 105:
                    #line 140 "syntax"
                     lapg_n.sym = ">"; break;
                case 106:
                    #line 141 "syntax"
                     lapg_n.sym = "?"; break;
                case 107:
                    #line 142 "syntax"
                     lapg_n.sym = "++"; break;
                case 108:
                    #line 143 "syntax"
                     lapg_n.sym = "--"; break;
                case 109:
                    #line 144 "syntax"
                     lapg_n.sym = "&&"; break;
                case 110:
                    #line 145 "syntax"
                     lapg_n.sym = "||"; break;
                case 111:
                    #line 146 "syntax"
                     lapg_n.sym = "<<"; break;
                case 112:
                    #line 147 "syntax"
                     lapg_n.sym = ">>"; break;
                case 113:
                    #line 148 "syntax"
                     lapg_n.sym = "=="; break;
                case 114:
                    #line 149 "syntax"
                     lapg_n.sym = "!="; break;
                case 115:
                    #line 150 "syntax"
                     lapg_n.sym = "<="; break;
                case 116:
                    #line 151 "syntax"
                     lapg_n.sym = ">="; break;
                case 117:
                    #line 152 "syntax"
                     lapg_n.sym = "+="; break;
                case 118:
                    #line 153 "syntax"
                     lapg_n.sym = "-="; break;
                case 119:
                    #line 154 "syntax"
                     lapg_n.sym = "*="; break;
                case 120:
                    #line 155 "syntax"
                     lapg_n.sym = "/="; break;
                case 121:
                    #line 156 "syntax"
                     lapg_n.sym = "%="; break;
                case 122:
                    #line 157 "syntax"
                     lapg_n.sym = "&="; break;
                case 123:
                    #line 158 "syntax"
                     lapg_n.sym = "|="; break;
                case 124:
                    #line 159 "syntax"
                     lapg_n.sym = "^="; break;
                case 125:
                    #line 160 "syntax"
                     lapg_n.sym = "<<="; break;
                case 126:
                    #line 161 "syntax"
                     lapg_n.sym = ">>="; break;
                case 127:
                    #line 162 "syntax"
                     lapg_n.sym = "->"; break;
                case 129:
                    #line 168 "syntax"
                     Make.Comment( new System.String(AE.GetChars(token,3,lapg_size-1)), lapg_n); continue;
                case 130:
                    #line 172 "syntax"
                     continue;
                case 131:
                    #line 174 "syntax"
                     group = 1;continue;
                case 132:
                    #line 176 "syntax"
                     continue;
                case 133:
                    #line 178 "syntax"
                     group = 0;continue;
            }

            skip_symbols:
            do {
                lapg_i = lapg_next( lapg_m[lapg_head].state, lapg_n.lexem );

                if( lapg_i >= 0 ) {
                    lapg_symbol lapg_gg;
                    lapg_gg.sym = (lapg_rlen[lapg_i]!=0)?lapg_m[lapg_head+1-lapg_rlen[lapg_i]].sym:null;
                    lapg_gg.lexem = lapg_rlex[lapg_i];
                    lapg_gg.state = 0;
                    #if DEBUG_syntax
                        System.Console.WriteLine( "reduce to {0}", lapg_syms[lapg_rlex[lapg_i]] );
                    #endif
                    lapg_gg.pos = (lapg_rlen[lapg_i]!=0)?lapg_m[lapg_head+1-lapg_rlen[lapg_i]].pos:lapg_n.pos;
                    lapg_gg.endpos = (lapg_rlen[lapg_i]!=0)?lapg_m[lapg_head].endpos:lapg_n.pos;
                    switch( lapg_i ) {
                        case 4:
                            #line 188 "syntax"
                            lapg_gg.sym = rootns = Make.Namespace( null, ((ListNode)lapg_m[lapg_head-1].sym), ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 6:
                            #line 196 "syntax"
                             lapg_gg.sym = Modifiers.New; break;
                        case 7:
                            #line 197 "syntax"
                             lapg_gg.sym = Modifiers.Public; break;
                        case 8:
                            #line 198 "syntax"
                             lapg_gg.sym = Modifiers.Protected; break;
                        case 9:
                            #line 199 "syntax"
                             lapg_gg.sym = Modifiers.Internal; break;
                        case 10:
                            #line 200 "syntax"
                             lapg_gg.sym = Modifiers.Private; break;
                        case 11:
                            #line 201 "syntax"
                             lapg_gg.sym = Modifiers.Abstract; break;
                        case 12:
                            #line 202 "syntax"
                             lapg_gg.sym = Modifiers.Sealed; break;
                        case 13:
                            #line 203 "syntax"
                             lapg_gg.sym = Modifiers.Static; break;
                        case 14:
                            #line 204 "syntax"
                             lapg_gg.sym = Modifiers.Readonly; break;
                        case 15:
                            #line 205 "syntax"
                             lapg_gg.sym = Modifiers.Virtual; break;
                        case 16:
                            #line 206 "syntax"
                             lapg_gg.sym = Modifiers.Override; break;
                        case 17:
                            #line 207 "syntax"
                             lapg_gg.sym = Modifiers.Extern; break;
                        case 18:
                            #line 208 "syntax"
                             lapg_gg.sym = Modifiers.Volatile; break;
                        case 19:
                            #line 209 "syntax"
                             lapg_gg.sym = Modifiers.Unsafe; break;
                        case 20:
                            #line 213 "syntax"
                             lapg_gg.sym = Make.Modifiers( ((int)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 21:
                            #line 214 "syntax"
                             Make.AddModifier( ((ModifiersNode)lapg_gg.sym), ((int)lapg_m[lapg_head-0].sym), lapg_m[lapg_head-0].pos.offset, lapg_gg );break;
                        case 24:
                            #line 222 "syntax"
                             lapg_gg.sym = Make.Literal( LiteralNode.Type.Integer, (string)lapg_m[lapg_head-0].sym, lapg_gg ); break;
                        case 25:
                            #line 223 "syntax"
                             lapg_gg.sym = Make.Literal( LiteralNode.Type.Float, (string)lapg_m[lapg_head-0].sym, lapg_gg ); break;
                        case 26:
                            #line 224 "syntax"
                             lapg_gg.sym = Make.Literal( LiteralNode.Type.Char, (string)lapg_m[lapg_head-0].sym, lapg_gg ); break;
                        case 27:
                            #line 225 "syntax"
                             lapg_gg.sym = Make.Literal( LiteralNode.Type.String, (string)lapg_m[lapg_head-0].sym, lapg_gg ); break;
                        case 28:
                            #line 226 "syntax"
                             lapg_gg.sym = Make.Literal( LiteralNode.Type.Boolean, (string)lapg_m[lapg_head-0].sym, lapg_gg ); break;
                        case 29:
                            #line 227 "syntax"
                             lapg_gg.sym = Make.Literal( LiteralNode.Type.Boolean, (string)lapg_m[lapg_head-0].sym, lapg_gg ); break;
                        case 30:
                            #line 228 "syntax"
                             lapg_gg.sym = Make.Literal( LiteralNode.Type.Null, (string)lapg_m[lapg_head-0].sym, lapg_gg ); break;
                        case 31:
                            #line 236 "syntax"
                             lapg_gg.sym = Make.Ident( ((string)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 32:
                            #line 237 "syntax"
                             Make.AddIdent( ((IdentNode)lapg_gg.sym), "."+((string)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 33:
                            #line 241 "syntax"
                             lapg_gg.sym = Make.Ident( ((string)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 34:
                            #line 248 "syntax"
                             lapg_gg.sym = Make.TypeName( ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 42:
                            #line 265 "syntax"
                             lapg_gg.sym = Util.type_from_expr( ((ExprNode)lapg_m[lapg_head-0].sym) ); break;
                        case 44:
                            #line 267 "syntax"
                             lapg_gg.sym = Make.ListArrayType( ((TypeNode)lapg_m[lapg_head-1].sym), ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 46:
                            #line 272 "syntax"
                             lapg_gg.sym = Make.PointerType( ((TypeNode)lapg_gg.sym), lapg_gg );break;
                        case 47:
                            #line 273 "syntax"
                             lapg_gg.sym = Make.OneArrayType( ((TypeNode)lapg_gg.sym), ((DimSpecNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 48:
                            #line 277 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._object, lapg_gg );break;
                        case 49:
                            #line 278 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._string, lapg_gg );break;
                        case 50:
                            #line 279 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._bool, lapg_gg );break;
                        case 51:
                            #line 280 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._decimal, lapg_gg );break;
                        case 52:
                            #line 281 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._float, lapg_gg );break;
                        case 53:
                            #line 282 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._double, lapg_gg );break;
                        case 55:
                            #line 284 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._void, lapg_gg );break;
                        case 56:
                            #line 288 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._sbyte, lapg_gg );break;
                        case 57:
                            #line 289 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._byte, lapg_gg );break;
                        case 58:
                            #line 290 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._short, lapg_gg );break;
                        case 59:
                            #line 291 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._ushort, lapg_gg );break;
                        case 60:
                            #line 292 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._int, lapg_gg );break;
                        case 61:
                            #line 293 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._uint, lapg_gg );break;
                        case 62:
                            #line 294 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._long, lapg_gg );break;
                        case 63:
                            #line 295 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._ulong, lapg_gg );break;
                        case 64:
                            #line 296 "syntax"
                             lapg_gg.sym = Make.BaseType( BaseTypes._char, lapg_gg );break;
                        case 65:
                            #line 300 "syntax"
                             lapg_gg.sym = Make.PointerType( ((TypeNode)lapg_m[lapg_head-1].sym), lapg_gg );break;
                        case 66:
                            #line 306 "syntax"
                             lapg_gg.sym = Make.List( ((Node)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 67:
                            #line 307 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((Node)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 69:
                            #line 312 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.Ref, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 70:
                            #line 313 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.Out, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 76:
                            #line 325 "syntax"
                             lapg_gg.sym = Make.Expr( Kind.This, lapg_gg ); break;
                        case 77:
                            #line 326 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.BaseDot, ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 78:
                            #line 327 "syntax"
                             lapg_gg.sym = Make.ExprAndList( Kind.BaseIndex, null, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 79:
                            #line 328 "syntax"
                             lapg_gg.sym = Make.TypeAndList( Kind.TypeOf, ((TypeNode)lapg_m[lapg_head-1].sym), null, lapg_gg ); break;
                        case 80:
                            #line 329 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.Checked, ((ExprNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 81:
                            #line 330 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.Unchecked, ((ExprNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 82:
                            #line 331 "syntax"
                             lapg_gg.sym = Make.TypeAndList( Kind.SizeOf, ((TypeNode)lapg_m[lapg_head-1].sym), null, lapg_gg ); break;
                        case 83:
                            #line 332 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PostInc, ((ExprNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 84:
                            #line 333 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PostDec, ((ExprNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 85:
                            #line 334 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Arrow, ((ExprNode)lapg_m[lapg_head-2].sym), ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 86:
                            #line 335 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Dot, ((ExprNode)lapg_m[lapg_head-2].sym), ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 87:
                            #line 336 "syntax"
                             lapg_gg.sym = Make.ExprAndType( Kind.TypeDot, ((IdentNode)lapg_m[lapg_head-0].sym), ((TypeNode)lapg_m[lapg_head-2].sym), lapg_gg ); break;
                        case 90:
                            #line 337 "syntax"
                             lapg_gg.sym = Make.ExprAndList( Kind.Call, ((ExprNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 91:
                            #line 338 "syntax"
                             lapg_gg.sym = Make.ExprAndList( Kind.Index, ((ExprNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 92:
                            #line 339 "syntax"
                             lapg_gg.sym = Make.TypeExpr( ((ExprNode)lapg_gg.sym), ((DimSpecNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 98:
                            #line 344 "syntax"
                             lapg_gg.sym = Make.NewArray( ((TypeNode)lapg_m[lapg_head-5].sym), ((ListNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 99:
                            #line 345 "syntax"
                             lapg_gg.sym = Make.NewArray( ((TypeNode)lapg_m[lapg_head-1].sym), null, null, ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 100:
                            #line 349 "syntax"
                             lapg_gg.sym = Make.TypeAndList( Kind.obj_or_deleg_creation, ((TypeNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 102:
                            #line 354 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.UnPlus, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 103:
                            #line 355 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.UnMinus, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 104:
                            #line 356 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.Not, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 105:
                            #line 357 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.BitNot, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 106:
                            #line 358 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PreInc, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 107:
                            #line 359 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PreDec, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 109:
                            #line 365 "syntax"
                            lapg_gg.sym = lapg_m[lapg_head-1].sym;
                            // HACK
                            if( CastExpr(((ExprNode)lapg_m[lapg_head-1].sym),lapg_n) ) {
                                // perform reduce
                                for( int e = lapg_rlen[lapg_i]; e > 0; e-- ) lapg_m[lapg_head--].sym = null;
                                lapg_m[++lapg_head] = lapg_gg;
                                lapg_m[lapg_head].state = lapg_state_sym( lapg_m[lapg_head-1].state, lapg_gg.lexem );
                                if( lapg_m[lapg_head].state != -1 ) {
                                    // shift cast_token (if possible)
                                    lapg_gg.lexem = (int)Tokens.cast_token;
                                    lapg_gg.sym = null;
                                    lapg_gg.state = lapg_state_sym( lapg_m[lapg_head].state, lapg_gg.lexem );
                                    lapg_gg.pos = lapg_gg.endpos = lapg_n.pos;
                                    if( lapg_gg.state != -1 )
                                        lapg_m[++lapg_head] = lapg_gg;
                                }
                                // skip default reduce code
                                continue;
                            }
                            break;
                        case 110:
                            #line 388 "syntax"
                             lapg_gg.sym = Make.ExprAndType( Kind.Cast, ((ExprNode)lapg_m[lapg_head-0].sym), Util.type_from_expr(((ExprNode)lapg_m[lapg_head-2].sym)), lapg_gg ); break;
                        case 111:
                            #line 389 "syntax"
                             lapg_gg.sym = Make.ExprAndType( Kind.Cast, ((ExprNode)lapg_m[lapg_head-0].sym), ((TypeNode)lapg_m[lapg_head-2].sym), lapg_gg ); break;
                        case 113:
                            #line 394 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Mult, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 114:
                            #line 395 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Div, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 115:
                            #line 396 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Mod, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 117:
                            #line 401 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Plus, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 118:
                            #line 402 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Minus, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 120:
                            #line 407 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Shl, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 121:
                            #line 408 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Shr, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 123:
                            #line 413 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Less, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 124:
                            #line 414 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Greater, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 125:
                            #line 415 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.LessEq, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 126:
                            #line 416 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.GreaterEq, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 127:
                            #line 417 "syntax"
                             lapg_gg.sym = Make.ExprAndType( Kind.Is, ((ExprNode)lapg_m[lapg_head-2].sym), ((TypeNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 128:
                            #line 418 "syntax"
                             lapg_gg.sym = Make.ExprAndType( Kind.As, ((ExprNode)lapg_m[lapg_head-2].sym), ((TypeNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 130:
                            #line 423 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Equal, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 131:
                            #line 424 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.NotEqual, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 133:
                            #line 429 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.And, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 135:
                            #line 434 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Xor, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 137:
                            #line 439 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.Or, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 139:
                            #line 444 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.AndAnd, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 141:
                            #line 449 "syntax"
                             lapg_gg.sym = Make.Binary( Kind.OrOr, ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 143:
                            #line 454 "syntax"
                             lapg_gg.sym = Make.Triplex( ((ExprNode)lapg_m[lapg_head-4].sym), ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 144:
                            #line 458 "syntax"
                             lapg_gg.sym = Make.Assign( ((Kind)lapg_m[lapg_head-1].sym), ((ExprNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 145:
                            #line 462 "syntax"
                             lapg_gg.sym = (int)Kind.Assign; break;
                        case 146:
                            #line 463 "syntax"
                             lapg_gg.sym = (int)Kind.PlusEq; break;
                        case 147:
                            #line 464 "syntax"
                             lapg_gg.sym = (int)Kind.MinusEq; break;
                        case 148:
                            #line 465 "syntax"
                             lapg_gg.sym = (int)Kind.MultEq; break;
                        case 149:
                            #line 466 "syntax"
                             lapg_gg.sym = (int)Kind.DivEq; break;
                        case 150:
                            #line 467 "syntax"
                             lapg_gg.sym = (int)Kind.ModEq; break;
                        case 151:
                            #line 468 "syntax"
                             lapg_gg.sym = (int)Kind.AndEq; break;
                        case 152:
                            #line 469 "syntax"
                             lapg_gg.sym = (int)Kind.OrEq; break;
                        case 153:
                            #line 470 "syntax"
                             lapg_gg.sym = (int)Kind.XorEq; break;
                        case 154:
                            #line 471 "syntax"
                             lapg_gg.sym = (int)Kind.ShlEq; break;
                        case 155:
                            #line 472 "syntax"
                             lapg_gg.sym = (int)Kind.ShrEq; break;
                        case 156:
                            #line 476 "syntax"
                             lapg_gg.sym = Make.List( ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 157:
                            #line 477 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 161:
                            #line 492 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Label, null, ((IdentNode)lapg_m[lapg_head-2].sym), ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 166:
                            #line 500 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Expr, ((ExprNode)lapg_m[lapg_head-1].sym), null, null, null, null, lapg_gg ); break;
                        case 167:
                            #line 501 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Empty, null, null, null, null, null, lapg_gg ); break;
                        case 168:
                            #line 503 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.If, ((ExprNode)lapg_m[lapg_head-2].sym), null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 169:
                            #line 504 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.If, ((ExprNode)lapg_m[lapg_head-4].sym), null, ((StatementNode)lapg_m[lapg_head-2].sym), ((StatementNode)lapg_m[lapg_head-0].sym), null, lapg_gg ); break;
                        case 170:
                            #line 505 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Switch, ((ExprNode)lapg_m[lapg_head-2].sym), null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 171:
                            #line 506 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.While, ((ExprNode)lapg_m[lapg_head-2].sym), null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 172:
                            #line 507 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.DoWhile, ((ExprNode)lapg_m[lapg_head-2].sym), null, ((StatementNode)lapg_m[lapg_head-5].sym), null, null, lapg_gg ); break;
                        case 179:
                            #line 510 "syntax"
                                                                            { lapg_gg.sym = Make.Statement( Kind.For, ((ExprNode)lapg_m[lapg_head-4].sym), null, ((StatementNode)lapg_m[lapg_head-6].sym), ((StatementNode)lapg_m[lapg_head-0].sym), ((ListNode)lapg_m[lapg_head-2].sym), lapg_gg ); break; }
                        case 180:
                            #line 513 "syntax"
                                                                            { lapg_gg.sym = Make.TypedStatement( Kind.ForEach, ((ExprNode)lapg_m[lapg_head-2].sym), ((IdentNode)lapg_m[lapg_head-4].sym), ((StatementNode)lapg_m[lapg_head-0].sym), null, null, ((TypeNode)lapg_m[lapg_head-5].sym), lapg_gg ); break; }
                        case 181:
                            #line 515 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Break, null, null, null, null, null, lapg_gg ); break;
                        case 182:
                            #line 516 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Continue, null, null, null, null, null, lapg_gg ); break;
                        case 183:
                            #line 517 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Goto, null, ((IdentNode)lapg_m[lapg_head-1].sym), null, null, null, lapg_gg ); break;
                        case 184:
                            #line 518 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.GotoCase, ((ExprNode)lapg_m[lapg_head-1].sym), null, null, null, null, lapg_gg ); break;
                        case 185:
                            #line 519 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.GotoDefault, null, null, null, null, null, lapg_gg ); break;
                        case 186:
                            #line 520 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Return, ((ExprNode)lapg_m[lapg_head-1].sym), null, null, null, null, lapg_gg ); break;
                        case 187:
                            #line 521 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Throw, ((ExprNode)lapg_m[lapg_head-1].sym), null, null, null, null, lapg_gg ); break;
                        case 189:
                            #line 524 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Lock, ((ExprNode)lapg_m[lapg_head-2].sym), null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 190:
                            #line 526 "syntax"
                                                                            { lapg_gg.sym = Make.Statement( Kind.UsingSt, null, null, ((StatementNode)lapg_m[lapg_head-2].sym), ((StatementNode)lapg_m[lapg_head-0].sym), null, lapg_gg ); break; }
                        case 191:
                            #line 527 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Unsafe, null, null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 192:
                            #line 528 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.CheckedSt, null, null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 193:
                            #line 529 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.UncheckedSt, null, null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 196:
                            #line 533 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Block, null, null, null, null, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 197:
                            #line 537 "syntax"
                             lapg_gg.sym = Make.List( ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 198:
                            #line 538 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 199:
                            #line 542 "syntax"
                             lapg_gg.sym = Make.TypedStatement( Kind.VarDecl, null, null, null, null, ((ListNode)lapg_m[lapg_head-0].sym), ((TypeNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 200:
                            #line 546 "syntax"
                             lapg_gg.sym = Make.TypedStatement( Kind.ConstDecl, null, null, null, null, ((ListNode)lapg_m[lapg_head-0].sym), ((TypeNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 201:
                            #line 550 "syntax"
                             lapg_gg.sym = Make.List( ((ConstantNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 202:
                            #line 551 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((ConstantNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 203:
                            #line 555 "syntax"
                             lapg_gg.sym = Make.Constant( ((IdentNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 204:
                            #line 559 "syntax"
                             lapg_gg.sym = Make.ExprAndList( Kind.Call, ((ExprNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 207:
                            #line 562 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PostInc, ((ExprNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 208:
                            #line 563 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PostDec, ((ExprNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 209:
                            #line 564 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PreInc, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 210:
                            #line 565 "syntax"
                             lapg_gg.sym = Make.Unary( Kind.PreDec, ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 213:
                            #line 569 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Block, null, null, null, null, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 214:
                            #line 573 "syntax"
                             lapg_gg.sym = Make.List( ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 215:
                            #line 574 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 216:
                            #line 578 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.SwitchSect, null, null, ((StatementNode)lapg_m[lapg_head-0].sym), null, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 217:
                            #line 582 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.StmtList, null, null, null, null, ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 218:
                            #line 586 "syntax"
                             lapg_gg.sym = Make.List( ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 219:
                            #line 587 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 220:
                            #line 591 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.CaseLabel, ((ExprNode)lapg_m[lapg_head-1].sym), null, null, null, null, lapg_gg ); break;
                        case 221:
                            #line 592 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Default, null, null, null, null, null, lapg_gg ); break;
                        case 223:
                            #line 597 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.ExprList, null, null, null, null, ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 224:
                            #line 601 "syntax"
                             lapg_gg.sym = Make.List( ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 225:
                            #line 602 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 226:
                            #line 606 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Try, null, null, ((StatementNode)lapg_m[lapg_head-1].sym), null, ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 228:
                            #line 611 "syntax"
                             lapg_gg.sym = Make.List( ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 229:
                            #line 612 "syntax"
                             Make.AddList( ((ListNode)lapg_m[lapg_head-1].sym), ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 231:
                            #line 617 "syntax"
                             Make.AddList( ((ListNode)lapg_m[lapg_head-1].sym), ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 232:
                            #line 618 "syntax"
                             lapg_gg.sym = Make.List( ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 233:
                            #line 622 "syntax"
                             lapg_gg.sym = Make.List( ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 234:
                            #line 623 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 237:
                            #line 628 "syntax"
                                                                            { lapg_gg.sym = Make.TypedStatement( Kind.Catch, null, ((IdentNode)lapg_m[lapg_head-2].sym), ((StatementNode)lapg_m[lapg_head-0].sym), null, null, ((TypeNode)lapg_m[lapg_head-3].sym), lapg_gg ); break; }
                        case 238:
                            #line 632 "syntax"
                             lapg_gg.sym = Make.TypedStatement( Kind.Catch, null, null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, null, lapg_gg ); break;
                        case 239:
                            #line 636 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Finally, null, null, ((StatementNode)lapg_m[lapg_head-0].sym), null, null, lapg_gg ); break;
                        case 241:
                            #line 641 "syntax"
                             lapg_gg.sym = Make.Statement( Kind.Expr, ((ExprNode)lapg_m[lapg_head-0].sym), null, null, null, null, lapg_gg ); break;
                        case 242:
                            #line 650 "syntax"
                            lapg_gg.sym = Make.Namespace( ((IdentNode)lapg_m[lapg_head-5].sym), ((ListNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-2].sym), lapg_gg ); break;
                        case 243:
                            #line 654 "syntax"
                             lapg_gg.sym = Make.List( ((Node)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 244:
                            #line 655 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((Node)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 245:
                            #line 659 "syntax"
                             lapg_gg.sym = Make.Using( Kind.UsingAlias, ((IdentNode)lapg_m[lapg_head-3].sym), ((IdentNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 246:
                            #line 660 "syntax"
                             lapg_gg.sym = Make.Using( Kind.UsingDir, null, ((IdentNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 247:
                            #line 664 "syntax"
                             lapg_gg.sym = Make.List( ((Node)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 248:
                            #line 665 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((Node)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 262:
                            #line 685 "syntax"
                            lapg_gg.sym = Make.Class( Kind.Class, ((ListNode)lapg_m[lapg_head-6].sym), ((ModifiersNode)lapg_m[lapg_head-5].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-2].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 263:
                            #line 689 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-0].sym; Make.Pos( ref lapg_gg ); break;
                        case 264:
                            #line 693 "syntax"
                             lapg_gg.sym = Make.List( ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 265:
                            #line 694 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 268:
                            #line 698 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-1].sym; Make.Pos( ref lapg_gg ); break;
                        case 269:
                            #line 702 "syntax"
                             lapg_gg.sym = Make.List( ((DeclNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 270:
                            #line 703 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((DeclNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 281:
                            #line 723 "syntax"
                            lapg_gg.sym = Make.Fields( Kind.Const, ((ListNode)lapg_m[lapg_head-4].sym), ((ModifiersNode)lapg_m[lapg_head-3].sym), ((TypeNode)lapg_m[lapg_head-2].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 282:
                            #line 727 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.Const, lapg_gg );break;
                        case 283:
                            #line 728 "syntax"
                             Make.AddModifier( ((ModifiersNode)lapg_m[lapg_head-1].sym), (int)Modifiers.Const, lapg_m[lapg_head-0].pos.offset, lapg_gg );break;
                        case 284:
                            #line 733 "syntax"
                            lapg_gg.sym = Make.Fields( Kind.Fields, ((ListNode)lapg_m[lapg_head-4].sym), ((ModifiersNode)lapg_m[lapg_head-3].sym), ((TypeNode)lapg_m[lapg_head-2].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 285:
                            #line 737 "syntax"
                             lapg_gg.sym = Make.List( ((VariableNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 286:
                            #line 738 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((VariableNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 287:
                            #line 742 "syntax"
                             lapg_gg.sym = Make.Variable( ((IdentNode)lapg_m[lapg_head-0].sym), null, lapg_gg ); break;
                        case 288:
                            #line 743 "syntax"
                             lapg_gg.sym = Make.Variable( ((IdentNode)lapg_m[lapg_head-2].sym), ((InitializerNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 289:
                            #line 747 "syntax"
                             lapg_gg.sym = Make.Initializer( Kind.ExprInit, ((ExprNode)lapg_m[lapg_head-0].sym), null, lapg_gg ); break;
                        case 290:
                            #line 748 "syntax"
                             lapg_gg.sym = Make.Initializer( Kind.ArrayInit, null, ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 293:
                            #line 755 "syntax"
                            lapg_gg.sym = Make.Method( Kind.Method, ((ListNode)lapg_m[lapg_head-7].sym), ((ModifiersNode)lapg_m[lapg_head-6].sym), ((IdentNode)lapg_m[lapg_head-4].sym), ((TypeNode)lapg_m[lapg_head-5].sym), ((ListNode)lapg_m[lapg_head-2].sym), ((StatementNode)lapg_m[lapg_head-0].sym), null, lapg_gg );break;
                        case 294:
                            #line 759 "syntax"
                             lapg_gg.sym = Make.Ident( ((string)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 295:
                            #line 760 "syntax"
                             Make.AddIdent( ((IdentNode)lapg_m[lapg_head-2].sym), "."+((string)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 297:
                            #line 765 "syntax"
                             Make.AddList( ((ListNode)lapg_m[lapg_head-2].sym), ((ParameterNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 298:
                            #line 766 "syntax"
                             lapg_gg.sym = Make.List( ((ParameterNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 299:
                            #line 770 "syntax"
                             lapg_gg.sym = Make.List( ((ParameterNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 300:
                            #line 771 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((ParameterNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 303:
                            #line 776 "syntax"
                            lapg_gg.sym = Make.Parameter( ((ListNode)lapg_m[lapg_head-3].sym), ((ModifiersNode)lapg_m[lapg_head-2].sym), ((TypeNode)lapg_m[lapg_head-1].sym), ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 304:
                            #line 780 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.Ref, lapg_gg );break;
                        case 305:
                            #line 781 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.Out, lapg_gg );break;
                        case 306:
                            #line 785 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.Params, lapg_gg );break;
                        case 307:
                            #line 790 "syntax"
                            lapg_gg.sym = Make.Parameter( ((ListNode)lapg_m[lapg_head-3].sym), ((ModifiersNode)lapg_m[lapg_head-2].sym), ((TypeNode)lapg_m[lapg_head-1].sym), ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 308:
                            #line 797 "syntax"
                            lapg_gg.sym = Make.Property( ((ListNode)lapg_m[lapg_head-6].sym), ((ModifiersNode)lapg_m[lapg_head-5].sym), ((TypeNode)lapg_m[lapg_head-4].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 311:
                            #line 802 "syntax"
                            lapg_gg.sym = Make.List( ((AccessorNode)lapg_m[lapg_head-1].sym), lapg_gg );
                            if( ((AccessorNode)lapg_m[lapg_head-0].sym) != null )
                                Make.AddList( ((ListNode)lapg_gg.sym), ((AccessorNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 312:
                            #line 808 "syntax"
                             lapg_gg.sym = Make.Accessor( ((ListNode)lapg_m[lapg_head-2].sym), ((IdentNode)lapg_m[lapg_head-1].sym), ((StatementNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 314:
                            #line 813 "syntax"
                             lapg_gg.sym = null; break;
                        case 315:
                            #line 818 "syntax"
                            lapg_gg.sym = Make.Event( Kind.EventVars, ((ListNode)lapg_m[lapg_head-5].sym), ((ModifiersNode)lapg_m[lapg_head-4].sym), ((TypeNode)lapg_m[lapg_head-2].sym), null, null, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 316:
                            #line 821 "syntax"
                            lapg_gg.sym = Make.Event( Kind.EventWithAccessors, ((ListNode)lapg_m[lapg_head-7].sym), ((ModifiersNode)lapg_m[lapg_head-6].sym), ((TypeNode)lapg_m[lapg_head-4].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), null, lapg_gg ); break;
                        case 317:
                            #line 826 "syntax"
                            lapg_gg.sym = Make.Indexer( ((ListNode)lapg_m[lapg_head-9].sym), ((ModifiersNode)lapg_m[lapg_head-8].sym), ((TypeNode)lapg_m[lapg_head-7].sym), ((IdentNode)lapg_m[lapg_head-6].sym), ((ListNode)lapg_m[lapg_head-4].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 318:
                            #line 830 "syntax"
                             lapg_gg.sym = Make.Ident( "this", lapg_gg ); break;
                        case 319:
                            #line 831 "syntax"
                             Make.AddIdent( ((IdentNode)lapg_m[lapg_head-2].sym), ".this", lapg_gg ); break;
                        case 320:
                            #line 838 "syntax"
                            lapg_gg.sym = ((MethodDecl)lapg_m[lapg_head-1].sym);
                            ((MethodDecl)lapg_m[lapg_head-1].sym).attributes = ((ListNode)lapg_m[lapg_head-3].sym);
                            if( ((MethodDecl)lapg_m[lapg_head-1].sym).modifiers == null )
                                ((MethodDecl)lapg_m[lapg_head-1].sym).modifiers = ((ModifiersNode)lapg_m[lapg_head-2].sym);
                            else if( ((ModifiersNode)lapg_m[lapg_head-2].sym) != null ) {
                                ((MethodDecl)lapg_m[lapg_head-1].sym).modifiers = Make.SumModifiers( ((ModifiersNode)lapg_m[lapg_head-2].sym), ((MethodDecl)lapg_m[lapg_head-1].sym).modifiers );
                            }
                            ((MethodDecl)lapg_m[lapg_head-1].sym).body = ((StatementNode)lapg_m[lapg_head-0].sym);
                            Make.Pos( ref lapg_gg ); break;
                        case 323:
                            #line 855 "syntax"
                             lapg_gg.sym = Make.Parameter( null, null, ((TypeNode)lapg_m[lapg_head-1].sym), ((IdentNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 324:
                            #line 860 "syntax"
                            lapg_gg.sym = Make.Operator( null, ((TypeNode)lapg_m[lapg_head-4].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((ParameterNode)lapg_m[lapg_head-1].sym), null, lapg_gg ); break;
                        case 325:
                            #line 863 "syntax"
                            lapg_gg.sym = Make.Operator( null, ((TypeNode)lapg_m[lapg_head-6].sym), ((IdentNode)lapg_m[lapg_head-5].sym), ((ParameterNode)lapg_m[lapg_head-3].sym), ((ParameterNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 326:
                            #line 867 "syntax"
                             lapg_gg.sym = Make.Ident( "operator " + ((string)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 349:
                            #line 876 "syntax"
                            lapg_gg.sym = Make.Operator( ((ModifiersNode)lapg_m[lapg_head-5].sym), ((TypeNode)lapg_m[lapg_head-3].sym), null, ((ParameterNode)lapg_m[lapg_head-1].sym), null, lapg_gg ); break;
                        case 350:
                            #line 880 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.Implicit, lapg_gg );break;
                        case 351:
                            #line 881 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.Explicit, lapg_gg );break;
                        case 354:
                            #line 888 "syntax"
                            lapg_gg.sym = Make.Method( Kind.Constructor, ((ListNode)lapg_m[lapg_head-7].sym), ((ModifiersNode)lapg_m[lapg_head-6].sym), ((IdentNode)lapg_m[lapg_head-5].sym), null, ((ListNode)lapg_m[lapg_head-3].sym), ((StatementNode)lapg_m[lapg_head-0].sym), ((ConstructorInitializerNode)lapg_m[lapg_head-1].sym), lapg_gg );break;
                        case 355:
                            #line 892 "syntax"
                             lapg_gg.sym = Make.ConstructorInitializer( Kind.ThisConstructorInit, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 356:
                            #line 893 "syntax"
                             lapg_gg.sym = Make.ConstructorInitializer( Kind.BaseConstructorInit, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 357:
                            #line 897 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.Extern, lapg_gg );break;
                        case 360:
                            #line 902 "syntax"
                            lapg_gg.sym = Make.Method( Kind.Destructor, ((ListNode)lapg_m[lapg_head-6].sym), ((ModifiersNode)lapg_m[lapg_head-5].sym), ((IdentNode)lapg_m[lapg_head-3].sym), null, null, ((StatementNode)lapg_m[lapg_head-0].sym), null, lapg_gg );break;
                        case 363:
                            #line 909 "syntax"
                            lapg_gg.sym = Make.Class( Kind.Struct, ((ListNode)lapg_m[lapg_head-6].sym), ((ModifiersNode)lapg_m[lapg_head-5].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-2].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 364:
                            #line 913 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-0].sym; Make.Pos( ref lapg_gg ); break;
                        case 365:
                            #line 917 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-1].sym; Make.Pos( ref lapg_gg ); break;
                        case 366:
                            #line 923 "syntax"
                             lapg_gg.sym = Make.ListArrayType( ((TypeNode)lapg_m[lapg_head-1].sym), ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 367:
                            #line 927 "syntax"
                             lapg_gg.sym = Make.List( ((DimSpecNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 368:
                            #line 928 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((DimSpecNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 371:
                            #line 932 "syntax"
                             lapg_gg.sym = Make.DimSpec( ( lapg_m[lapg_head-1].sym == null ) ? 1 : ((int)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 372:
                            #line 935 "syntax"
                             lapg_gg.sym = 2; break;
                        case 373:
                            #line 936 "syntax"
                             lapg_gg.sym = ((int)lapg_gg.sym) + 1; break;
                        case 376:
                            #line 940 "syntax"
                             lapg_gg.sym = ((ListNode)lapg_m[lapg_head-1].sym); break;
                        case 377:
                            #line 941 "syntax"
                             lapg_gg.sym = ((ListNode)lapg_m[lapg_head-2].sym); break;
                        case 378:
                            #line 945 "syntax"
                             lapg_gg.sym = Make.List( ((InitializerNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 379:
                            #line 946 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((InitializerNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 382:
                            #line 953 "syntax"
                            lapg_gg.sym = Make.Class( Kind.Interface, ((ListNode)lapg_m[lapg_head-6].sym), ((ModifiersNode)lapg_m[lapg_head-5].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-2].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 383:
                            #line 957 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-0].sym; Make.Pos( ref lapg_gg ); break;
                        case 386:
                            #line 961 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-1].sym; Make.Pos( ref lapg_gg ); break;
                        case 387:
                            #line 965 "syntax"
                             lapg_gg.sym = Make.List( ((Node)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 388:
                            #line 966 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((Node)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 391:
                            #line 971 "syntax"
                            lapg_gg.sym = Make.Method( Kind.Method, ((ListNode)lapg_m[lapg_head-7].sym), ((ModifiersNode)lapg_m[lapg_head-6].sym), ((IdentNode)lapg_m[lapg_head-4].sym), ((TypeNode)lapg_m[lapg_head-5].sym), ((ListNode)lapg_m[lapg_head-2].sym), null, null, lapg_gg );break;
                        case 392:
                            #line 974 "syntax"
                            lapg_gg.sym = Make.Property( ((ListNode)lapg_m[lapg_head-6].sym), ((ModifiersNode)lapg_m[lapg_head-5].sym), ((TypeNode)lapg_m[lapg_head-4].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 393:
                            #line 977 "syntax"
                            lapg_gg.sym = Make.Event( Kind.EventWithAccessors, ((ListNode)lapg_m[lapg_head-5].sym), ((ModifiersNode)lapg_m[lapg_head-4].sym), ((TypeNode)lapg_m[lapg_head-2].sym), ((IdentNode)lapg_m[lapg_head-1].sym), null, null, lapg_gg ); break;
                        case 394:
                            #line 980 "syntax"
                            lapg_gg.sym = Make.Indexer( ((ListNode)lapg_m[lapg_head-9].sym), ((ModifiersNode)lapg_m[lapg_head-8].sym), ((TypeNode)lapg_m[lapg_head-7].sym), ((IdentNode)lapg_m[lapg_head-6].sym), ((ListNode)lapg_m[lapg_head-4].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 395:
                            #line 984 "syntax"
                             lapg_gg.sym = Make.Ident( "this", lapg_gg ); break;
                        case 396:
                            #line 988 "syntax"
                             lapg_gg.sym = Make.Modifiers( (int)Modifiers.New, lapg_gg );break;
                        case 399:
                            #line 993 "syntax"
                            lapg_gg.sym = Make.List( ((AccessorNode)lapg_m[lapg_head-1].sym), lapg_gg );
                            if( ((AccessorNode)lapg_m[lapg_head-0].sym) != null )
                                Make.AddList( ((ListNode)lapg_gg.sym), ((AccessorNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 400:
                            #line 999 "syntax"
                             lapg_gg.sym = Make.Accessor( ((ListNode)lapg_m[lapg_head-2].sym), ((IdentNode)lapg_m[lapg_head-1].sym), null, lapg_gg ); break;
                        case 403:
                            #line 1006 "syntax"
                            lapg_gg.sym = Make.Enum( ((ListNode)lapg_m[lapg_head-6].sym), ((ModifiersNode)lapg_m[lapg_head-5].sym), ((IdentNode)lapg_m[lapg_head-3].sym), ((TypeNode)lapg_m[lapg_head-2].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 404:
                            #line 1010 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-0].sym; Make.Pos( ref lapg_gg ); break;
                        case 407:
                            #line 1014 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-1].sym; Make.Pos( ref lapg_gg ); break;
                        case 408:
                            #line 1015 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-2].sym; Make.Pos( ref lapg_gg ); break;
                        case 409:
                            #line 1019 "syntax"
                             lapg_gg.sym = Make.List( ((EnumValueNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 410:
                            #line 1020 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((EnumValueNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 411:
                            #line 1024 "syntax"
                             lapg_gg.sym = Make.EnumValue( ((ListNode)lapg_m[lapg_head-1].sym), ((IdentNode)lapg_m[lapg_head-0].sym), null, lapg_gg ); break;
                        case 412:
                            #line 1025 "syntax"
                             lapg_gg.sym = Make.EnumValue( ((ListNode)lapg_m[lapg_head-3].sym), ((IdentNode)lapg_m[lapg_head-2].sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 413:
                            #line 1032 "syntax"
                            lapg_gg.sym = Make.Delegate( ((ListNode)lapg_m[lapg_head-8].sym), ((ModifiersNode)lapg_m[lapg_head-7].sym), ((IdentNode)lapg_m[lapg_head-4].sym), ((TypeNode)lapg_m[lapg_head-5].sym), ((ListNode)lapg_m[lapg_head-2].sym), lapg_gg ); break;
                        case 414:
                            #line 1038 "syntax"
                             lapg_gg.sym = Make.List( ((AttributeSectionNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 415:
                            #line 1039 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((AttributeSectionNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 416:
                            #line 1043 "syntax"
                             lapg_gg.sym = Make.AttributeSection( ((IdentNode)lapg_m[lapg_head-4].sym), ((ListNode)lapg_m[lapg_head-2].sym), lapg_gg ); break;
                        case 417:
                            #line 1044 "syntax"
                             lapg_gg.sym = Make.AttributeSection( ((IdentNode)lapg_m[lapg_head-3].sym), ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 418:
                            #line 1045 "syntax"
                             lapg_gg.sym = Make.AttributeSection( null, ((ListNode)lapg_m[lapg_head-2].sym), lapg_gg ); break;
                        case 419:
                            #line 1046 "syntax"
                             lapg_gg.sym = Make.AttributeSection( null, ((ListNode)lapg_m[lapg_head-1].sym), lapg_gg ); break;
                        case 420:
                            #line 1050 "syntax"
                             lapg_gg.sym = Make.Ident( ((string)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 421:
                            #line 1051 "syntax"
                             lapg_gg.sym = Make.Ident( "event", lapg_gg ); break;
                        case 422:
                            #line 1052 "syntax"
                             lapg_gg.sym = Make.Ident( "return", lapg_gg ); break;
                        case 423:
                            #line 1056 "syntax"
                             lapg_gg.sym = Make.List( ((AttributeNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 424:
                            #line 1057 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((AttributeNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                        case 427:
                            #line 1061 "syntax"
                             lapg_gg.sym = Make.Attribute( ((IdentNode)lapg_m[lapg_head-1].sym), ((ListNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 431:
                            #line 1069 "syntax"
                             lapg_gg.sym = lapg_m[lapg_head-1].sym; Make.Pos( ref lapg_gg ); break;
                        case 432:
                            #line 1073 "syntax"
                             lapg_gg.sym = Make.List( ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg ); break;
                        case 433:
                            #line 1074 "syntax"
                             Make.AddList( ((ListNode)lapg_gg.sym), ((ExprNode)lapg_m[lapg_head-0].sym), lapg_gg );break;
                    }
                    for( int e = lapg_rlen[lapg_i]; e > 0; e-- ) lapg_m[lapg_head--].sym = null;
                    lapg_m[++lapg_head] = lapg_gg;
                    lapg_m[lapg_head].state = lapg_state_sym( lapg_m[lapg_head-1].state, lapg_gg.lexem );
                } else if( lapg_i == -1 ) {
                    lapg_m[++lapg_head] = lapg_n;
                    lapg_m[lapg_head].state = lapg_state_sym( lapg_m[lapg_head-1].state, lapg_n.lexem );
                    #if DEBUG_syntax
                        System.Console.WriteLine( "shift: {0} ({1})", lapg_syms[lapg_n.lexem], new System.String(AE.GetChars(token,0,lapg_size-1)) );
                    #endif
                }

            } while( lapg_i >= 0 && lapg_m[lapg_head].state != -1 );

            if( (lapg_i == -2 || lapg_m[lapg_head].state == -1) && lapg_n.lexem != 0 ) {
                break;
            }

            } while( lapg_n.lexem != 0 );

            if( lapg_m[lapg_head].state != 731-1 ) {
            error( System.String.Format( "syntax error before line {0}", lapg_n.pos.line ) );
            return false;
            };
            return true;
        }
Ejemplo n.º 13
0
		//
		// File functions
		//

		public void PreprocessFile(int iIndex, String sFileName, string sRealName, bool bCheckPre, bool bForePreprocessing)
		{
            GPSSource gpsSource = (GPSSource)m_GpsTracker.m_gpsSourceList[iIndex];

			#if !DEBUG
			try
			#endif
			{
				//check if preprocess exists
				if(	(File.Exists(sFileName + ".TrackAtOnce") || IsTrackAtOnce(sFileName)) && 
					(bForePreprocessing==false || bCheckPre))
				{
					string sTAOFileName;
					if (IsTrackAtOnce(sFileName))
						sTAOFileName=sFileName;
					else
						sTAOFileName=sFileName + ".TrackAtOnce";

					gpsSource.GpsPos.m_gpsTrack=null;
					BinaryReader binReader = new BinaryReader(File.Open(sTAOFileName, FileMode.Open));
					// If the file is not empty, 
					// read it
					if(binReader.PeekChar() != -1)
					{
						gpsSource.GpsPos.m_gpsTrack=new GPSTrack();

						string sSign="GPSTracker.TrackAtOnce";
						char [] sSignature = binReader.ReadChars(sSign.Length);
						string sSignCompare = new string(sSignature);
						if (sSignCompare==sSign)
						{
							gpsSource.GpsPos.m_gpsTrack.m_uPointCount=binReader.ReadUInt32();
                            gpsSource.GpsPos.m_gpsTrack.SetSize(gpsSource.GpsPos.m_gpsTrack.m_uPointCount);
						
							byte[] byData = new byte[gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8]; 
							byData=binReader.ReadBytes((int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8);
							System.Buffer.BlockCopy(byData , 0, gpsSource.GpsPos.m_gpsTrack.m_fLat, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8 );
							
							byData=binReader.ReadBytes((int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8);
							System.Buffer.BlockCopy(byData , 0, gpsSource.GpsPos.m_gpsTrack.m_fLon, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8 );
							
							byData=binReader.ReadBytes((int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*4);
							System.Buffer.BlockCopy(byData , 0, gpsSource.GpsPos.m_gpsTrack.m_fAlt, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*4 );
							
							
						}
					}
					binReader.Close();
				}
				else
				{
					uint uProgress;
					uint uMaxProgress;
					StreamReader fsGpsFile = null;
					String sGpsLine;
					byte [] byNMEA;
					char [] cNMEA=null;
					char [] cNMEAMsg = new char[512];
					System.Text.ASCIIEncoding asciiEncoder = new System.Text.ASCIIEncoding();
					if(File.Exists(sFileName) && !IsTrackAtOnce(sFileName))
					{
						FileInfo fInfo = new FileInfo(sFileName);

						uProgress=0;
						uMaxProgress=(uint)fInfo.Length;
						m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Processing " + sRealName + ": " + Convert.ToString(uProgress) +" of " + Convert.ToString(uMaxProgress) + " bytes.");

						fsGpsFile = File.OpenText(sFileName);
						gpsSource.GpsPos.m_gpsTrack= new GPSTrack();
                        gpsSource.GpsPos.m_gpsTrack.SetSize(500); //set an initial array size for the track
                        uint uResizeArraySize=500;
						while(true)
						{
						
							sGpsLine=fsGpsFile.ReadLine();
							if (sGpsLine==null)
								break;
							uProgress+=(uint)sGpsLine.Length;
							m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Processing " + sRealName + ": " + Convert.ToString(uProgress) +" of " + Convert.ToString(uMaxProgress) + " bytes.");
						
							byNMEA =  asciiEncoder.GetBytes(sGpsLine);
							cNMEA =  asciiEncoder.GetChars(byNMEA);
							cNMEA.CopyTo(cNMEAMsg,0);
							if (m_GpsTracker.m_NMEA.ParseGPSMessage(cNMEAMsg,cNMEA.Length,false,iIndex)==true)
								gpsSource.GpsPos.m_gpsTrack.AddPoint(gpsSource.GpsPos.m_fLat,gpsSource.GpsPos.m_fLon,gpsSource.GpsPos.m_fAlt);

                            //Keep resizing the track array as necessary
                            if (gpsSource.GpsPos.m_gpsTrack.m_uPointCount >= uResizeArraySize)
                            {
                                uResizeArraySize += 100;
                                gpsSource.GpsPos.m_gpsTrack.Resize(uResizeArraySize);
                            }
						}
						uProgress=(uint)fInfo.Length;
						m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Processing " + sRealName + ": " + Convert.ToString(uProgress) +" of " + Convert.ToString(uMaxProgress) + " bytes.");
						fsGpsFile.Close();

                        //Resize track array to minimum size;
                        gpsSource.GpsPos.m_gpsTrack.Resize(gpsSource.GpsPos.m_gpsTrack.m_uPointCount);
						
						m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Creating " + sRealName + ".TrackAtOnce");

						using(BinaryWriter binWriter = new BinaryWriter(File.Open(sFileName + ".TrackAtOnce", FileMode.Create)))
						{
							string sSign="GPSTracker.TrackAtOnce";
							char [] sSignature = new char[sSign.Length];
							sSignature = sSign.ToCharArray();
							binWriter.Write(sSignature);

							binWriter.Write(gpsSource.GpsPos.m_gpsTrack.m_uPointCount);

							byte[] byData = new byte[gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8]; 
							System.Buffer.BlockCopy( gpsSource.GpsPos.m_gpsTrack.m_fLat, 0, byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8 );
							binWriter.Write(byData,0,(int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8);
								
							System.Buffer.BlockCopy( gpsSource.GpsPos.m_gpsTrack.m_fLon, 0, byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8 );
							binWriter.Write(byData,0,(int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*8);

							System.Buffer.BlockCopy( gpsSource.GpsPos.m_gpsTrack.m_fAlt, 0, byData, 0, (int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*4 );
							binWriter.Write(byData,0,(int)gpsSource.GpsPos.m_gpsTrack.m_uPointCount*4);

							binWriter.Close();
						}
					}
				}
			}
			#if !DEBUG
			catch(Exception)
			{
				m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("");
				m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Active");
			}
			#endif
			m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("");
			m_GpsTracker.m_gpsTrackerPlugin.pluginShowFixInfo("GPSTracker: Active");

		}
Ejemplo n.º 14
0
		public void threadFile()
		{
			int iIndex= Int32.Parse(Thread.CurrentThread.Name); 
			GPSSource gpsSource = (GPSSource)m_GpsTracker.m_gpsSourceList[iIndex];
			int iIndexFile;
			int iIndexNext; 
			StreamReader fsGpsFile = null;
			System.Text.ASCIIEncoding asciiEncoder = new System.Text.ASCIIEncoding();
			String sGpsLine=null;
			String sIndex;
			byte [] byNMEA;
			char [] cNMEA=null;
			char [] cNMEAMsg = new char[512];
			DateTime dtCurrent;
			DateTime dtNext = new DateTime(0);
			int iEnd=0;
			bool bRestartTrack=false;

			try
			{
				if(File.Exists(gpsSource.sFileNameSession))
				{
					while(m_GpsTracker.m_fCloseThreads==false)
					{
						bRestartTrack=true;
						fsGpsFile = File.OpenText(gpsSource.sFileNameSession);
						{
							if (m_GpsTracker.m_fPlayback==true)
							{
								m_GpsTracker.LoadSettings(fsGpsFile,false);
								iIndexFile=iIndex+1;
								do
								{
									sIndex=fsGpsFile.ReadLine();
									if (sIndex!=null)
										iEnd=sIndex.IndexOf(",");
									if (sIndex!=null && iEnd>0)
									{
										iIndexFile=Convert.ToInt32(sIndex.Substring(0,iEnd));
										if (iIndexFile==iIndex && sIndex.Length>iEnd+1)
										{
											sGpsLine=sIndex.Substring(iEnd+1);
											break;
										}
									}
									else
										break;
								} while(m_GpsTracker.m_fCloseThreads==false);
							}
							else
							{
								sIndex="dummyindex";
								iIndexFile=iIndex;
								sGpsLine=fsGpsFile.ReadLine();
							}
							if (sGpsLine!=null)
							{
								byNMEA =  asciiEncoder.GetBytes(sGpsLine);
								cNMEA =  asciiEncoder.GetChars(byNMEA);
								cNMEA.CopyTo(cNMEAMsg,0);
								if (m_GpsTracker.m_iPlaybackSpeed>0)
									dtNext=m_GpsTracker.m_NMEA.GetNMEATime(-1,sGpsLine);
							}
							while(sIndex!=null && sGpsLine!=null && m_GpsTracker.m_fCloseThreads==false && iIndexFile==iIndex)
							{
								if (sGpsLine!="" && sIndex!="")
								{
									try
									{
										if (m_GpsTracker.m_MessageMonitor!=null)
											m_GpsTracker.m_MessageMonitor.AddMessageFileRaw(sGpsLine);
									}
									catch (Exception)
									{
										m_GpsTracker.m_MessageMonitor=null;
									}

									if (m_GpsTracker.ShowGPSIcon(cNMEAMsg,cNMEA.Length,false,iIndex,bRestartTrack,true)==true)
									{
										if (bRestartTrack)
											bRestartTrack=false;
										//Get current NMEA msg time
										dtCurrent=dtNext;
										while(m_GpsTracker.m_fCloseThreads==false)
										{
											//Get next line from file
											if (m_GpsTracker.m_fPlayback==true)
											{
												sIndex=fsGpsFile.ReadLine();
												if (sIndex!=null)
												{
													iEnd=sIndex.IndexOf(",");
													if (iEnd>0 && sIndex.Length>iEnd+1)
													{
														sGpsLine=sIndex.Substring(iEnd+1);
														sIndex=sIndex.Substring(0,iEnd);
													}
													else 
														sIndex="";
												}
											}
											else
											{
												sIndex=Convert.ToString(iIndex);
												sGpsLine=fsGpsFile.ReadLine();
											}
											if (sGpsLine==null || sIndex==null)
												break;
											else
											if (sGpsLine!="" && sIndex!="")
											{
												iIndexNext=Convert.ToInt32(sIndex);

												byNMEA =  asciiEncoder.GetBytes(sGpsLine);
												cNMEA =  asciiEncoder.GetChars(byNMEA);
												cNMEA.CopyTo(cNMEAMsg,0);
													
												//Check is a valid NMEA message
												if (iIndexNext==iIndex && m_GpsTracker.m_NMEA.ParseGPSMessage(cNMEAMsg,cNMEA.Length,true,iIndex)==true)
												{
													if (m_GpsTracker.m_iPlaybackSpeed>0 && gpsSource.iFilePlaySpeed>0)
													{
														//Get time difference from current msg to next message...
														dtNext=m_GpsTracker.m_NMEA.GetNMEATime(-1,sGpsLine);
														//Check valid times
														if (dtCurrent.Year!=1771 && dtNext.Year!=1771)
														{
															if (dtNext<dtCurrent)
																dtNext=dtNext.AddDays(1);
															TimeSpan tsDelay = dtNext.Subtract(dtCurrent);
															double dDelay=tsDelay.TotalMilliseconds;
															//apply selected speed
															double dSpeed=Convert.ToDouble(gpsSource.iFilePlaySpeed);
															dDelay/=dSpeed;
															dDelay/=m_GpsTracker.m_iPlaybackSpeed;
															Thread.Sleep(Convert.ToInt32(dDelay));
															break;
														}
														else
														{
															Thread.Sleep(1);
															break;
														}
													}
													else
													{
														Thread.Sleep(1);
														break;
													}
												}
												else
													Thread.Sleep(1);
											}
											else
											{
												Thread.Sleep(1);
												//break;
											}
										} //while
									} //show
									else
									{
										sIndex="dummyindex";
										iIndexFile=iIndex;
										sGpsLine=fsGpsFile.ReadLine();
										if (sGpsLine!=null)
										{
											byNMEA =  asciiEncoder.GetBytes(sGpsLine);
											cNMEA =  asciiEncoder.GetChars(byNMEA);
											cNMEA.CopyTo(cNMEAMsg,0);
											if (m_GpsTracker.m_iPlaybackSpeed>0)
												dtNext=m_GpsTracker.m_NMEA.GetNMEATime(-1,sGpsLine);
										}
										Thread.Sleep(1);
									}
								} // if gpsline
								else
								{
									if (sGpsLine=="")
										sGpsLine=fsGpsFile.ReadLine();

									Thread.Sleep(1);
									//break;
								}
							} //while
							if (fsGpsFile!=null)
							{
								fsGpsFile.Close();
								fsGpsFile=null;
							}

							if (gpsSource.iReload==0 && m_GpsTracker.m_fCloseThreads==false)
								Thread.Sleep(3000);
							else
								break;
						} //using
					}
				} //exists
			}
			catch(Exception)
			{
			}

			if (fsGpsFile!=null)
			{
				fsGpsFile.Close();
				fsGpsFile=null;
			}
		}
Ejemplo n.º 15
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string httpMethod = Request.HttpMethod;
                string buildId    = ConvertUtility.Trim(Request.QueryString["id"]);

                if (httpMethod.Equals("get", StringComparison.OrdinalIgnoreCase))
                {
                    BuildFwService buildService = new BuildFwService();
                    this.Build = buildService.GetBuild(buildId);
                }
                else
                {
                    int    x_axis_c      = ConvertUtility.ToInt(Request.Form["x_axis"]);
                    string x_axis_t      = ConvertUtility.Trim(Request.Form["x_axis_t"]);
                    bool   x_axis_except = ConvertUtility.ToBoolean(Request.Form["x_axis_except"]);

                    int  y_axis_b      = ConvertUtility.ToInt(Request.Form["y_axis_b"]);
                    int  y_axis_e      = ConvertUtility.ToInt(Request.Form["y_axis_e"]);
                    bool y_axis_except = ConvertUtility.ToBoolean(Request.Form["y_axis_except"]);

                    int    countf      = ConvertUtility.ToInt(Request.Form["countf"]);
                    int    countt      = ConvertUtility.ToInt(Request.Form["countt"]);
                    int    countw      = ConvertUtility.ToInt(Request.Form["countw"]);
                    int    county      = ConvertUtility.ToInt(Request.Form["county"]);
                    float  area        = ConvertUtility.ToFloat(Request.Form["area"]);
                    string directionTo = ConvertUtility.Trim(Request.Form["directionTo"]);

                    if (y_axis_b <= y_axis_e)
                    {
                        UnitFwService unitService = new UnitFwService();
                        string        x_axis      = string.Empty;
                        string        y_axis      = string.Empty;
                        for (int y = y_axis_b; y <= y_axis_e; y++)
                        {
                            if (y_axis_except && y.ToString().IndexOf("4") >= 0)
                            {
                                continue;
                            }
                            for (int x = 1; x <= x_axis_c; x++)
                            {
                                y_axis = y.ToString();
                                x_axis = x.ToString();
                                if (x_axis_t.Equals("a"))
                                {
                                    int ascii = x + 64;
                                    if (x > 90)
                                    {
                                        continue;
                                    }
                                    else
                                    {
                                        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
                                        char[] chars = encoding.GetChars(new byte[] { (byte)ascii });
                                        x_axis = chars[0].ToString();
                                    }
                                }
                                else
                                {
                                    if (x_axis_except && x.ToString().IndexOf("4") >= 0)
                                    {
                                        continue;
                                    }
                                }
                                unitService.AddUnit(buildId, x_axis, y_axis, countf, countt, countw, county, area, directionTo);
                            }
                        }

                        Response.Write("true");
                    }
                    else
                    {
                        Response.Write("false");
                    }
                    Response.End();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }