Annotation of 43BSD/usr.bin/learn/mem.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)mem.c      4.3     (Berkeley)      5/15/86";
        !             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:        {"hint",        HINT},
        !            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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.