}defnonly(s) /* warn if illegal definition */ char *s;{ if (!indef) execerror(s, "used outside definition");}yyerror(s) /* report compile-time error */ char *s;{ warning(s, (char *)0);}execerror(s, t) /* recover from run-time error */ char *s, *t;{ warning(s, t); fseek(fin, 0L, 2); /* flush rest of file */ longjmp(begin, 0);}fpecatch() /* catch floating point exceptions */{ execerror("floating point exception", (char*)0);}main(argc, argv) /* hoc6 */ char *argv[];{ int i, fpecatch(); progname = argv[0]; if (argc == 1) { /* fake an argument list */ static char *stdinonly[] = { "-" }; gargv = stdinonly; gargc = 1; } else { gargv = argv+1; gargc = argc-1; } init(); while (moreinput()) run(); return 0;}moreinput() { if (gargc-- <= 0) return 0; if (fin && fin != stdin) fclose(fin); infile = *gargv++; lineno = 1; if (strcmp(infile, "-") == 0) { fin = stdin; infile = 0; } else if ((fin=fopen(infile, "r")) == NULL) { fprintf (stderr, "%s: can't open %s\n", progname, infile); return moreinput(); } return 1;}run() /* execute until EOF */{ setjmp(begin); signal(SIGFPE, fpecatch); for (initcode(); yyparse(); initcode()) execute(progbase);}warning(s, t) /* print warning message */ char *s, *t;{ fprintf(stderr, "%s: %s", progname, s); if (t) fprintf(stderr, " %s", t); if (infile) fprintf(stderr, " in %s", infile); fprintf(stderr, " near line %d\n", lineno); while (c != '\n' && c != EOF) с = getc(fin); /* flush rest of input line */ if (c == '\n') lineno++;}3.7.15
init.c#include "hoc.h"#include "y.tab.h"#include <math.h>extern double Log(), Log10(), Sqrt(), Exp(), integer();static struct { /* Keywords */ char *name; int kval;} keywords[] = { "proc", PROC, "func", FUNC, "return", RETURN, "if", IF, "else", ELSE, "while", WHILE, "print", PRINT, "read", READ, 0, 0,};static struct { /* Constants */ char *name; double eval;} consts[] = { "PI", 3.14159265358979323846, "E", 2.71828182845904523536, "GAMMA", 0.57721566490153286060, /* Euler */ "DEG", 57.29577951308232087680, /* deg/radian */