int parseList(token *tok, char **s) { int firstLine, lastLine; int line; int print = 0; char *prog; firstLine = lastLine = 0; if (matchList(tok, s)) { matchWhiteSpace(tok, s); if (matchNumber(tok, s)) { firstLine = lastLine = tok->n; matchWhiteSpace(tok, s); if (matchComma(&testToken, s)) { matchWhiteSpace(tok, s); if (matchNumber(tok, s)) lastLine = tok->n; else return 0; } } prog = programGetProgram(); if (!prog) { errorSet(ERROR_OUT_OF_MEMORY); return 0; } while (*prog) { line = atoi(prog); if (lastLine && (line > lastLine)) break; if (line >= firstLine) print = 1; do { if (print) putchar(*prog); ++prog; } while (*prog != '\n'); if (print) putchar(*prog); ++prog; } return 1; } return 0; }
int parseCommand(token *tok, char **s) { int line; int r; if (matchNumber(tok, s)) { line = tok->n; if (!matchWhiteSpace(tok, s)) // delete line return deleteLine(line); else // add line { matchString(tok, s); return insertLine(line, tok->s); } } if (matchSize(tok, s)) { puts(itos(programGetSize())); return 1; } if (matchFree(tok, s)) { puts(itos(programGetFree())); return 1; } if (matchClear(tok, s)) { programInit(); return 1; } if (matchBye(tok, s)) { exit(0); } if (parseRun(tok, s)) return 1; else if (errorGet() != ERROR_OK) return 0; if (parseList(tok, s)) return 1; else if (errorGet() != ERROR_OK) return 0; programSetMode(progModeImmediate); r = parseLine(tok, s); programSetMode(progModeStored); return r; }
int parseRun(token *tok, char **s) { int line = 0; if (matchRun(tok, s)) { if (matchWhiteSpace(tok, s)) { if (matchNumber(tok, s)) line = tok->n; else return 0; } return programRun(line); } return 0; }
inline bool isLiteral(TToken &tk) { return matchNumber(tk)||matchBool(tk)|| matchChar(tk)|| matchString(tk); }