home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <ctype.h>
- #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]);
- }
-