|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)mem.c 4.2 (Berkeley) 4/25/83"; ! 3: #endif not lint ! 4: ! 5: # include "stdio.h" ! 6: # include "lrnref.h" ! 7: # define SAME 0 ! 8: ! 9: struct keys { ! 10: char *k_wd; ! 11: int k_val; ! 12: } keybuff[] = { ! 13: {"ready", READY}, ! 14: {"answer", READY}, ! 15: {"#print", PRINT}, ! 16: {"#copyin", COPYIN}, ! 17: {"#uncopyin", UNCOPIN}, ! 18: {"#copyout", COPYOUT}, ! 19: {"#uncopyout", UNCOPOUT}, ! 20: {"#pipe", PIPE}, ! 21: {"#unpipe", UNPIPE}, ! 22: {"#succeed", SUCCEED}, ! 23: {"#fail", FAIL}, ! 24: {"bye", BYE}, ! 25: {"chdir", CHDIR}, ! 26: {"cd", CHDIR}, ! 27: {"learn", LEARN}, ! 28: {"#log", LOG}, ! 29: {"yes", YES}, ! 30: {"no", NO}, ! 31: {"again", AGAIN}, ! 32: {"#mv", MV}, ! 33: {"#user", USER}, ! 34: {"#next", NEXT}, ! 35: {"skip", SKIP}, ! 36: {"where", WHERE}, ! 37: {"#match", MATCH}, ! 38: {"#bad", BAD}, ! 39: {"#create", CREATE}, ! 40: {"#cmp", CMP}, ! 41: {"xyzzy", XYZZY}, ! 42: {"#once", ONCE}, ! 43: {"#", NOP}, ! 44: {NULL, 0} ! 45: }; ! 46: ! 47: int *action(s) ! 48: char *s; ! 49: { ! 50: struct keys *kp; ! 51: for (kp=keybuff; kp->k_wd; kp++) ! 52: if (strcmp(kp->k_wd, s) == SAME) ! 53: return(&(kp->k_val)); ! 54: return(NULL); ! 55: } ! 56: ! 57: # define NW 100 ! 58: # define NWCH 800 ! 59: struct whichdid { ! 60: char *w_less; ! 61: int w_seq; ! 62: } which[NW]; ! 63: int nwh = 0; ! 64: char whbuff[NWCH]; ! 65: char *whcp = whbuff; ! 66: static struct whichdid *pw; ! 67: ! 68: setdid(lesson, sequence) ! 69: char *lesson; ! 70: int sequence; ! 71: { ! 72: if (already(lesson)) { ! 73: pw->w_seq = sequence; ! 74: return; ! 75: } ! 76: pw = which+nwh++; ! 77: if (nwh >= NW) { ! 78: fprintf(stderr, "Setdid: too many lessons\n"); ! 79: tellwhich(); ! 80: wrapup(1); ! 81: } ! 82: pw->w_seq = sequence; ! 83: pw->w_less = whcp; ! 84: while (*whcp++ = *lesson++); ! 85: if (whcp >= whbuff + NWCH) { ! 86: fprintf(stderr, "Setdid: lesson names too long\n"); ! 87: tellwhich(); ! 88: wrapup(1); ! 89: } ! 90: } ! 91: ! 92: unsetdid(lesson) ! 93: char *lesson; ! 94: { ! 95: if (!already(lesson)) ! 96: return; ! 97: nwh = pw - which; /* pretend the rest have not been done */ ! 98: whcp = pw->w_less; ! 99: } ! 100: ! 101: already(lesson) ! 102: char *lesson; ! 103: { ! 104: for (pw=which; pw < which+nwh; pw++) ! 105: if (strcmp(pw->w_less, lesson) == SAME) ! 106: return(1); ! 107: return(0); ! 108: } ! 109: ! 110: tellwhich() ! 111: { ! 112: for (pw=which; pw < which+nwh; pw++) ! 113: printf("%3d lesson %7s sequence %3d\n", ! 114: pw-which, pw->w_less, pw->w_seq); ! 115: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.