#include #include #include "proff.h" #include "debug.h" /* * eval - evaluate defined command (push back definition) * */ eval(buf,defn) char buf[]; char defn[]; { register int j,k; int i; int argptr[10]; for (i = 0; i < 10 ; i++) argptr[i] = 0; buf[0] = '\0'; /* buf[0] is cchar */ dprintf(defn); dprintf("eval "); i = 1; argptr[0] = 1; /* first parm is macro name */ while (buf[i] != ' ' && buf[i] != '\t' && buf[i] != '\n' && buf[i] != '\0') i++; buf[i++] = '\0'; /* EOS terminate */ /* * start scanning remaining macro parameters. * delimiters are blanks or commas. Any string * enclosed with double quotes are accepted as * parameters as well * */ for (j = 1; j < 10; j++) { skipbl(buf, &i); if (buf[i] == '\n' || buf[i] == '\0') break; argptr[j] = i; while (buf[i] != ' ' && buf[i] != '\t' && buf[i] != ',' && buf[i] != '\n' && buf[i] != '\0') i++; buf[i] = '\0'; i++; } for (k = strlen(defn) - 1; k >= 0; k--) if (defn[k-1] != ARGFLAG) putbak(defn[k]); else { if (defn[k] < '0' || defn[k] > '9') putbak(defn[k]); else { i = defn[k] - '0'; i = argptr[i]; pbstr(&buf[i]); k--; /* skip over $ */ } } if (k = 0) /* do the last character */ putbak(defn[k]); }