// Methods public void ReadTextStream(TextReader tr, StringBuilder errs) { GcodeOpCode code = null; ArrayList list = new ArrayList(); ArrayList list2 = new ArrayList(); long linenum = 1L; while (true) { GcodeToken token; do { token = GcodeToken.ReadToken(tr, errs, linenum); if (token.ID == 0xffff) { if (code != null) { code.Parameter = (GcodeParameter[])list2.ToArray(typeof(GcodeParameter)); list.Add(code); } goto Label_0150; } }while (token.ID == 'N'); if (token.ID == '\n') { linenum += 1L; if (code != null) { code.Parameter = (GcodeParameter[])list2.ToArray(typeof(GcodeParameter)); list.Add(code); code = null; } } else if ((token.ID == 'G') || (token.ID == 'M')) { if (code != null) { code.Parameter = (GcodeParameter[])list2.ToArray(typeof(GcodeParameter)); list.Add(code); } code = new GcodeOpCode(string.Format("{0}{1:02}", token.ID, token.Value.ToString("00"))); list2.Clear(); } else { if (code == null) { code = new GcodeOpCode(GcodeOpCode.OpCodes.Unknown); } GcodeParameter parameter = new GcodeParameter(token); if (parameter.OpCode != GcodeOpCode.OpCodes.Unknown) { list2.Add(parameter); } } } Label_0150: this.GCodes = (GcodeOpCode[])list.ToArray(typeof(GcodeOpCode)); }
public GcodeParameter(GcodeToken tok) { this.OpCode = GcodeOpCode.ParseOpCode(tok.ID.ToString()); this.Value = tok.Value; }
public static GcodeToken ReadToken(TextReader tr, StringBuilder errs, long linenum) { int num2; int num = 0; GcodeToken token = new GcodeToken(); token.ID = '\uffff'; string s = ""; int num3 = 0; Label_001F: num2 = tr.Peek(); ((char)num2).ToString(); switch (num2) { case -1: if (num3 == 0) { return token; } break; case 40: if (num3 != 0) { break; } tr.Read(); num++; token.ID = '\b'; goto Label_001F; case 0x29: if (num3 == 0) { tr.Read(); num--; if (num < 0) { errs.AppendFormat("Line={0} - Comment bracket mismatch\n", linenum); return token; } goto Label_001F; } break; default: if ((num > 0) && (num3 == 0)) { tr.Read(); goto Label_001F; } switch (num2) { case 0x3b: tr.ReadLine(); if (num3 == 0) { token.ID = '\n'; return token; } break; case 10: if (num3 == 0) { tr.Read(); token.ID = (char)num2; return token; } break; } if (char.IsWhiteSpace((char)num2) || char.IsControl((char)num2)) { if (num3 != 0) { break; } tr.Read(); goto Label_001F; } if (char.IsLetter((char)num2)) { if (num3 != 0) { break; } token.ID = char.ToUpper((char)num2); tr.Read(); num3++; goto Label_001F; } if ((num3 == 0) && ((char.IsDigit((char)num2) || (((ushort)num2) == 0x2d)) || (((ushort)num2) == 0x2d))) { token.ID = '-'; num3++; goto Label_001F; } if (num3 > 0) { if ((num2 == 0x2d) && (num3 == 1)) { tr.Read(); s = s + ((char)num2); num3++; goto Label_001F; } if (char.IsDigit((char)num2)) { if (num3 == 1) { num3++; } tr.Read(); s = s + ((char)num2); goto Label_001F; } if ((num2 == 0x2e) && (num3 < 3)) { num3 = 3; tr.Read(); s = s + ((char)num2); goto Label_001F; } } errs.AppendFormat("Line={0} - Unexpected token '{1}'\n", linenum, (char)num2); return token; } try { token.Value = double.Parse(s); } catch { errs.AppendFormat("Line={0} - Incorrect parameter\n", linenum); } return token; }
public static GcodeToken ReadToken(TextReader tr, StringBuilder errs, long linenum) { int num2; int num = 0; GcodeToken token = new GcodeToken(); token.ID = '\uffff'; string s = ""; int num3 = 0; Label_001F: num2 = tr.Peek(); ((char)num2).ToString(); switch (num2) { case -1: if (num3 == 0) { return(token); } break; case 40: if (num3 != 0) { break; } tr.Read(); num++; token.ID = '\b'; goto Label_001F; case 0x29: if (num3 == 0) { tr.Read(); num--; if (num < 0) { errs.AppendFormat("Line={0} - Comment bracket mismatch\n", linenum); return(token); } goto Label_001F; } break; default: if ((num > 0) && (num3 == 0)) { tr.Read(); goto Label_001F; } switch (num2) { case 0x3b: tr.ReadLine(); if (num3 == 0) { token.ID = '\n'; return(token); } break; case 10: if (num3 == 0) { tr.Read(); token.ID = (char)num2; return(token); } break; } if (char.IsWhiteSpace((char)num2) || char.IsControl((char)num2)) { if (num3 != 0) { break; } tr.Read(); goto Label_001F; } if (char.IsLetter((char)num2)) { if (num3 != 0) { break; } token.ID = char.ToUpper((char)num2); tr.Read(); num3++; goto Label_001F; } if ((num3 == 0) && ((char.IsDigit((char)num2) || (((ushort)num2) == 0x2d)) || (((ushort)num2) == 0x2d))) { token.ID = '-'; num3++; goto Label_001F; } if (num3 > 0) { if ((num2 == 0x2d) && (num3 == 1)) { tr.Read(); s = s + ((char)num2); num3++; goto Label_001F; } if (char.IsDigit((char)num2)) { if (num3 == 1) { num3++; } tr.Read(); s = s + ((char)num2); goto Label_001F; } if ((num2 == 0x2e) && (num3 < 3)) { num3 = 3; tr.Read(); s = s + ((char)num2); goto Label_001F; } } errs.AppendFormat("Line={0} - Unexpected token '{1}'\n", linenum, (char)num2); return(token); } try { token.Value = double.Parse(s); } catch { errs.AppendFormat("Line={0} - Incorrect parameter\n", linenum); } return(token); }