home *** CD-ROM | disk | FTP | other *** search
- # include "stdio.h"
- # include "lrnref"
- # define SAME 0
-
- struct keys {
- char *k_wd;
- int k_val;
- } keybuff[] = {
- {"ready", READY},
- {"answer", READY},
- {"#print", PRINT},
- {"#copyin", COPYIN},
- {"#uncopyin", UNCOPIN},
- {"#copyout", COPYOUT},
- {"#uncopyout", UNCOPOUT},
- {"#pipe", PIPE},
- {"#unpipe", UNPIPE},
- {"#succeed", SUCCEED},
- {"#fail", FAIL},
- {"bye", BYE},
- {"chdir", CHDIR},
- {"cd", CHDIR},
- {"learn", LEARN},
- {"#log", LOG},
- {"yes", YES},
- {"no", NO},
- {"#mv", MV},
- {"#user", USER},
- {"#next", NEXT},
- {"skip", SKIP},
- {"#where", WHERE},
- {"#match", MATCH},
- {"#bad", BAD},
- {"#create", CREATE},
- {"#cmp", CMP},
- {"#goto", GOTO},
- {"#once", ONCE},
- {"#", NOP},
- {NULL, 0}
- };
-
- int *action(s)
- char *s;
- {
- struct keys *kp;
- for (kp=keybuff; kp->k_wd; kp++)
- if (strcmp(kp->k_wd, s) == SAME)
- return(&(kp->k_val));
- return(NULL);
- }
-
- # define NW 100
- # define NWCH 800
- struct whichdid {
- char *w_less;
- int w_seq;
- } which[NW];
- int nwh = 0;
- char whbuff[NWCH];
- char *whcp = whbuff;
-
- setdid(lesson, sequence)
- char *lesson;
- {
- struct whichdid *pw;
- for(pw=which; pw < which+nwh; pw++)
- if (strcmp(pw->w_less, lesson) == SAME)
- {
- pw->w_seq = sequence;
- return;
- }
- pw=which+nwh++;
- if (nwh >= NW) {
- fprintf(stderr, "nwh>=NW\n");
- wrapup(1);
- }
- pw->w_seq = sequence;
- pw->w_less = whcp;
- while (*whcp++ = *lesson++);
- if (whcp >= whbuff + NWCH) {
- fprintf(stderr, "lesson name too long\n");
- wrapup(1);
- }
- }
-
- already(lesson, sequence)
- char *lesson;
- {
- struct whichdid *pw;
- for (pw=which; pw < which+nwh; pw++)
- if (strcmp(pw->w_less, lesson) == SAME)
- return(1);
- return(0);
- }
-