Annotation of coherent/g/usr/bin/me/ext.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * This program builds the emacs' comtab.c and bind.doc
        !             3:  */
        !             4: #include <stdio.h>
        !             5: #include <ed.h>
        !             6: /*
        !             7:  * Table of function names and comments.
        !             8:  */
        !             9: static char *nameCom[] = {
        !            10: #if    EXKEYS
        !            11: "ignore",              " Ignore this function          ",
        !            12: #endif
        !            13: 
        !            14: "ctrlg",               " Abort out of things           ",
        !            15: "quit",                        " Quit                          ",
        !            16: "ctlxlp",              " Begin macro                   ",
        !            17: "ctlxrp",              " End macro                     ",
        !            18: "ctlxe",               " Execute macro         ",
        !            19: "fileread",            " Get a file, read only ",
        !            20: "filevisit",           " Get a file, read write        ",
        !            21: "*",                   " Also F2 ",
        !            22: "filewrite",           " Write a file                  ",
        !            23: "*",                   " Also F2 ",
        !            24: "filesave",            " Save current file             ",
        !            25: "filename",            " Adjust file name              ",
        !            26: "gotobol",             " Move to start of line ",
        !            27: "*",                   " Also HOME KEY ",
        !            28: "forwchar",            " Move forward by characters    ",
        !            29: "*",                   " Also RIGHT ARROW ",
        !            30: "gotoeol",             " Move to end of line           ",
        !            31: "*",                   " Also END KEY ",
        !            32: "backchar",            " Move backward by characters   ",
        !            33: "*",                   " Also LEFT ARROW ",
        !            34: "forwline",            " Move forward by lines ",
        !            35: "*",                   " Also DOWN ARROW ",
        !            36: "backline",            " Move backward by lines        ",
        !            37: "*",                   " Also UP ARROW ",
        !            38: "forwpage",            " Move forward by pages ",
        !            39: "*",                   " Also PAGE DOWN ",
        !            40: "backpage",            " Move backward by pages        ",
        !            41: "*",                   " Also PAGE UP ",
        !            42: "gotobob",             " Move to start of buffer       ",
        !            43: "gotoeob",             " Move to end of buffer ",
        !            44: "setfillcol",          " Set fill column to current col ",
        !            45: "*",                   " ctl-u n set fill col to n     ",
        !            46: "*",                   " ctl-u 0 turn off word wrap    ",
        !            47: "fillregion",          " apply fillcol to a region",
        !            48: "setmark",             " Set mark                      ",
        !            49: "swapmark",            " Swap '.' and mark             ",
        !            50: "forwsearch",          " Search forward                ",
        !            51: "*",                   " Also F3 ",
        !            52: "*",                   " ALT F3 is continue search ",
        !            53: "forwisearch",         " forward incremental search    ",
        !            54: "backisearch",         " backward incremental search   ",
        !            55: "queryrepl",           " query/replace         ",
        !            56: "*",                   " Also F5 ",
        !            57: "searchagain",         " find next occurrance          ",
        !            58: "backsearch",          " Search backwards              ",
        !            59: "*",                   " Also F4 ",
        !            60: "showcpos",            " Show the cursor position      ",
        !            61: "nextwind",            " Move to the next window       ",
        !            62: "*",                   " Also F6 ",
        !            63: "prevwind",            " Move to the previous window   ",
        !            64: "onlywind",            " Make current window only one  ",
        !            65: "*",                   " Also F10 ",
        !            66: "splitwind",           " Split current window          ",
        !            67: "*",                   " Also ALT F1 ",
        !            68: "mvdnwind",            " Move window down              ",
        !            69: "mvupwind",            " Move window up                ",
        !            70: "enlargewind",         " Enlarge display window.       ",
        !            71: "shrinkwind",          " Shrink window.                ",
        !            72: "listbuffers",         " Display list of buffers       ",
        !            73: "usebuffer",           " Switch a window to a buffer   ",
        !            74: "killbuffer",          " Make a buffer go away.        ",
        !            75: "reposition",          " Reposition dot to line ctl-u  ",
        !            76: "*",                   " if ctl-u 0 center             ",
        !            77: "*",                   " if ctl-u < 0 repos from bottom ",
        !            78: "refresh",             " Refresh the screen            ",
        !            79: "*",                   " with ctl-u recenter           ",
        !            80: "twiddle",             " Twiddle characters            ",
        !            81: "tab",                 " Insert tab                    ",
        !            82: "*",                   " ctl-u n  use n spaces per tab ",
        !            83: "*",                   " ctl-u -n tab is n spaces      ",
        !            84: "newline",             " Insert CR-LF                  ",
        !            85: "*",                   " Same as ctl-j in autoindent mode ",
        !            86: "indent",              " Insert CR-LF, then indent     ",
        !            87: "openline",            " Open up a blank line          ",
        !            88: "deblank",             " Delete blank lines            ",
        !            89: "quote",               " Insert literal                ",
        !            90: "quoteval",            " Insert decimal literal        ",
        !            91: "backword",            " Backup by words               ",
        !            92: "forwword",            " Advance by words              ",
        !            93: "forwdel",             " Forward delete                ",
        !            94: "*",                   " Also DELETE KEY ",
        !            95: "backdel",             " Backward delete               ",
        !            96: "kill",                        " Kill forward from dot         ",
        !            97: "*",                   " if ctl-u 0 or less backward   ",
        !            98: "yank",                        " Yank back from killbuffer.    ",
        !            99: "loadBinds",           " Load flexable bindings from file. ",
        !           100: "nameMac",             " Bind current macro to binding. ",
        !           101: "initMac",             " Bind current macro to initial macro ",
        !           102: "setPrefix",           " Set prefix codes              ",
        !           103: "bindFun",             " Bind function to old function. ",
        !           104: "storBinds",           " Store flexable bindings on a file. ",
        !           105: "upperword",           " Upper case word.              ",
        !           106: "lowerword",           " Lower case word.              ",
        !           107: "upperregion",         " Upper case region.            ",
        !           108: "lowerregion",         " Lower case region.            ",
        !           109: "capword",             " Initial capitalize word.      ",
        !           110: "delfword",            " Delete forward word.          ",
        !           111: "delbword",            " Delete backward word. ",
        !           112: "killregion",          " Kill region.                  ",
        !           113: "copyregion",          " Copy region to kill buffer.   ",
        !           114: "spawncli",            " Run CLI in a subjob.          ",
        !           115: "spawn",               " Run a command in a subjob.    ",
        !           116: "quickexit",           " low keystroke style exit.     ",
        !           117: "gotoline",            " goto line given as arg        ",
        !           118: "gotofline",           " goto line in file.            ",
        !           119: "setfold",             " set case-fold on search flag  ",
        !           120: "displaymod",          " toggle display mode switch   ",
        !           121: "autoind",             " toggle autoindent flag       ",
        !           122: "*",                   " Also ALT F10 ",
        !           123: "nexterr",             " Seek the next error           ",
        !           124: "preverr",             " Seek the previous error       ",
        !           125: "bracketsearch",       " seek matching bracket char    ",
        !           126: "bracketsw",           " toggle bracket mode           ",
        !           127: #if    LIBHELP
        !           128: "lookupword",          " Lookup a word...              ",
        !           129: "*",                   " Also F1 ",
        !           130: "promptlook",          " Prompt for a word to look up  ",
        !           131: "zaphelp",             " Zap help window               ",
        !           132: "hlpindex",            " Help index generator          ",
        !           133: #endif
        !           134: "zapwind",             " Zap current window            ",
        !           135: #if    GEM
        !           136: "grabmem",             " Grab memory                   ",
        !           137: #endif
        !           138: NULL, NULL
        !           139: };
        !           140: 
        !           141: /*
        !           142:  * Table of control characters and function names.
        !           143:  */
        !           144: typedef struct control control;
        !           145: struct control {
        !           146:        int  key;
        !           147:        char *keyn;
        !           148:        char *fun;
        !           149: };
        !           150: control ctlName[] = {
        !           151: CTRL|'@',      "CTRL|'@'",             "setmark",
        !           152: CTRL|'A',      "CTRL|'A'",             "gotobol",
        !           153: CTRL|'B',      "CTRL|'B'",             "backchar",
        !           154: CTRL|'C',      "CTRL|'C'",             "spawncli",
        !           155: CTRL|'D',      "CTRL|'D'",             "forwdel",
        !           156: CTRL|'E',      "CTRL|'E'",             "gotoeol",
        !           157: CTRL|'F',      "CTRL|'F'",             "forwchar",
        !           158: CTRL|'G',      "CTRL|'G'",             "ctrlg",
        !           159: CTRL|'H',      "CTRL|'H'",             "backdel",
        !           160: CTRL|'I',      "CTRL|'I'",             "tab",
        !           161: CTRL|'J',      "CTRL|'J'",             "indent",
        !           162: CTRL|'K',      "CTRL|'K'",             "kill",
        !           163: CTRL|'L',      "CTRL|'L'",             "refresh",
        !           164: CTRL|'M',      "CTRL|'M'",             "newline",
        !           165: CTRL|'N',      "CTRL|'N'",             "forwline",
        !           166: CTRL|'O',      "CTRL|'O'",             "openline",
        !           167: CTRL|'P',      "CTRL|'P'",             "backline",
        !           168: CTRL|'Q',      "CTRL|'Q'",             "quote",
        !           169: CTRL|'R',      "CTRL|'R'",             "backisearch",
        !           170: CTRL|'S',      "CTRL|'S'",             "forwisearch",
        !           171: CTRL|'T',      "CTRL|'T'",             "twiddle",
        !           172: CTRL|'V',      "CTRL|'V'",             "forwpage",
        !           173: CTRL|'W',      "CTRL|'W'",             "killregion",
        !           174: CTRL|'Y',      "CTRL|'Y'",             "yank",
        !           175: CTRL|'Z',      "CTRL|'Z'",             "quickexit",
        !           176: PFX1|CTRL|'B', "PFX1|CTRL|'B'",                "listbuffers",
        !           177: PFX1|CTRL|'C', "PFX1|CTRL|'C'",                "quit",
        !           178: PFX1|CTRL|'F', "PFX1|CTRL|'F'",                "filename",
        !           179: PFX1|CTRL|'L', "PFX1|CTRL|'L'",                "lowerregion",
        !           180: PFX1|CTRL|'O', "PFX1|CTRL|'O'",                "deblank",
        !           181: PFX1|CTRL|'N', "PFX1|CTRL|'N'",                "mvdnwind",
        !           182: PFX1|CTRL|'P', "PFX1|CTRL|'P'",                "mvupwind",
        !           183: PFX1|CTRL|'R', "PFX1|CTRL|'R'",                "fileread",
        !           184: PFX1|CTRL|'S', "PFX1|CTRL|'S'",                "filesave",
        !           185: PFX1|CTRL|'U', "PFX1|CTRL|'U'",                "upperregion",
        !           186: PFX1|CTRL|'V', "PFX1|CTRL|'V'",                "filevisit",
        !           187: PFX1|CTRL|'W', "PFX1|CTRL|'W'",                "filewrite",
        !           188: PFX1|CTRL|'X', "PFX1|CTRL|'X'",                "swapmark",
        !           189: PFX1|CTRL|'Z', "PFX1|CTRL|'Z'",                "shrinkwind",
        !           190: PFX1|'!',      "PFX1|'!'",                     "spawn",
        !           191: PFX1|'<',      "PFX1|'<'",                     "preverr",
        !           192: PFX1|'=',      "PFX1|'='",                     "showcpos",
        !           193: PFX1|'>',      "PFX1|'>'",                     "nexterr",
        !           194: PFX1|'(',      "PFX1|'('",                     "ctlxlp",
        !           195: PFX1|')',      "PFX1|')'",                     "ctlxrp",
        !           196: PFX1|'1',      "PFX1|'1'",                     "onlywind",
        !           197: PFX1|'2',      "PFX1|'2'",                     "splitwind",
        !           198: #if    LIBHELP
        !           199: PFX1|'?',      "PFX1|'?'",                     "promptlook",
        !           200: #endif
        !           201: PFX1|'B',      "PFX1|'B'",                     "usebuffer",
        !           202: PFX1|'E',      "PFX1|'E'",                     "ctlxe",
        !           203: PFX1|'F',      "PFX1|'F'",                     "setfillcol",
        !           204: PFX1|'G',      "PFX1|'G'",                     "gotoline",
        !           205: PFX1|'H',      "PFX1|'H'",                     "fillregion",
        !           206: PFX1|'K',      "PFX1|'K'",                     "killbuffer",
        !           207: PFX1|'I',      "PFX1|'I'",                     "initMac",
        !           208: PFX1|'L',      "PFX1|'L'",                     "loadBinds",
        !           209: PFX1|'M',      "PFX1|'M'",                     "nameMac",
        !           210: PFX1|'N',      "PFX1|'N'",                     "nextwind",
        !           211: PFX1|'P',      "PFX1|'P'",                     "prevwind",
        !           212: PFX1|'R',      "PFX1|'R'",                     "bindFun",
        !           213: PFX1|'S',      "PFX1|'S'",                     "storBinds",
        !           214: PFX1|'X',      "PFX1|'X'",                     "setPrefix",
        !           215: PFX1|'Z',      "PFX1|'Z'",                     "enlargewind",
        !           216: PFX1|'[',      "PFX1|'['",                     "bracketsearch",
        !           217: PFX1|']',      "PFX1|']'",                     "bracketsw",
        !           218: #ifdef VT52KEYS
        !           219: META|CTRL|'B', "META|CTRL|'B'",                "backword",
        !           220: META|CTRL|'C', "META|CTRL|'C'",                "capword",
        !           221: META|CTRL|'D', "META|CTRL|'D'",                "delfword",
        !           222: #endif
        !           223: META|CTRL|'H', "META|CTRL|'H'",                "delbword",
        !           224: META|CTRL|'R', "META|CTRL|'R'",                "queryrepl",
        !           225: #if    LIBHELP
        !           226: META|CTRL|']', "META|CTRL|']'",                "hlpindex",
        !           227: #endif
        !           228: META|'!',      "META|'!'",             "reposition",
        !           229: META|'.',      "META|'.'",             "setmark",
        !           230: META|'1',      "META|'1'",             "zapwind",
        !           231: META|'2',      "META|'2'",             "zaphelp",
        !           232: #if    GEM
        !           233: META|'+',      "META|'+'",             "grabmem",
        !           234: #endif
        !           235: META|'>',      "META|'>'",             "gotoeob",
        !           236: META|'<',      "META|'<'",             "gotobob",
        !           237: META|'%',      "META|'%'",             "queryrepl",
        !           238: META|'/',      "META|'/'",             "searchagain",
        !           239: #if    LIBHELP
        !           240: META|'?',      "META|'?'",             "lookupword",
        !           241: #endif
        !           242: META|'@',      "META|'@'",             "setfold",
        !           243: #ifdef VT52KEYS
        !           244: META|'A',      "META|'A'",             "backline",
        !           245: META|'B',      "META|'B'",             "forwline",
        !           246: META|'C',      "META|'C'",             "backchar",
        !           247: META|'D',      "META|'D'",             "forwchar",
        !           248: #else
        !           249: META|'B',      "META|'B'",             "backword",
        !           250: META|'C',      "META|'C'",             "capword",
        !           251: META|'D',      "META|'D'",             "delfword",
        !           252: #endif
        !           253: META|'F',      "META|'F'",             "forwword",
        !           254: META|'G',      "META|'G'",             "gotofline",
        !           255: META|'J',      "META|'J'",             "autoind",
        !           256: META|'L',      "META|'L'",             "lowerword",
        !           257: META|'Q',      "META|'Q'",             "quoteval",
        !           258: META|'R',      "META|'R'",             "backsearch",
        !           259: META|'S',      "META|'S'",             "forwsearch",
        !           260: META|'T',      "META|'T'",             "displaymod",
        !           261: META|'U',      "META|'U'",             "upperword",
        !           262: META|'V',      "META|'V'",             "backpage",
        !           263: META|'W',      "META|'W'",             "copyregion",
        !           264: META|0x7F,     "META|0x7F",            "delbword",
        !           265: 0x7F,  "0x7F",                 "backdel"
        !           266: #if    EXKEYS
        !           267: ,FN0,  "FN0",                  "ignore",
        !           268: FN1,   "FN1",                  "ignore",
        !           269: FN2,   "FN2",                  "ignore",
        !           270: FN3,   "FN3",                  "ignore",
        !           271: FN4,   "FN4",                  "ignore",
        !           272: FN5,   "FN5",                  "ignore",
        !           273: FN6,   "FN6",                  "ignore",
        !           274: FN7,   "FN7",                  "ignore",
        !           275: FN8,   "FN8",                  "ignore",
        !           276: FN9,   "FN9",                  "ignore",
        !           277: FNA,   "FNA",                  "ignore",
        !           278: FNB,   "FNB",                  "ignore",
        !           279: FNC,   "FNC",                  "ignore",
        !           280: FND,   "FND",                  "ignore",
        !           281: FNE,   "FNE",                  "ignore",
        !           282: FNF,   "FNF",                  "ignore",
        !           283: FN10,  "FN10",                 "ignore",
        !           284: FN11,  "FN11",                 "ignore",
        !           285: FN12,  "FN12",                 "ignore",
        !           286: FN13,  "FN13",                 "ignore",
        !           287: FN14,  "FN14",                 "ignore",
        !           288: FN15,  "FN15",                 "ignore",
        !           289: FN16,  "FN16",                 "ignore",
        !           290: FN17,  "FN17",                 "ignore",
        !           291: FN18,  "FN18",                 "ignore",
        !           292: FN19,  "FN19",                 "ignore",
        !           293: FN10,  "FN10",                 "ignore",
        !           294: FN11,  "FN11",                 "ignore",
        !           295: FN12,  "FN12",                 "ignore"
        !           296: #endif
        !           297: };
        !           298: 
        !           299: #define CTSIZE (sizeof(ctlName) / sizeof(control))
        !           300: 
        !           301: static FILE *doc;
        !           302: KEYTAB keytab[CTSIZE + HASHP];
        !           303: int error = 0;
        !           304: 
        !           305: /*
        !           306:  * put data to stdout.
        !           307:  */
        !           308: pf(s)
        !           309: char *s;
        !           310: {
        !           311:        printf("%r\n", &s);
        !           312: }
        !           313: 
        !           314: /*
        !           315:  * Lookup function name and return number.
        !           316:  */
        !           317: funNo(name)
        !           318: register char *name;
        !           319: {
        !           320:        register char *p;
        !           321:        register int no;
        !           322:        
        !           323:        for (no = 0; NULL != (p = nameCom[no]); no += 2) {
        !           324:                if (!strcmp(p, name)) {
        !           325:                        *(nameCom[no + 1]) = '*';
        !           326:                        return (no / 2);
        !           327:                }
        !           328:        }
        !           329:        fprintf(stderr, "Cannot find %s\n", name);
        !           330:        error = 1;
        !           331: }
        !           332: 
        !           333: /*
        !           334:  * Adjust number to account for commentary lines.
        !           335:  */
        !           336: trueNo(n)
        !           337: {
        !           338:        register int i, j;
        !           339: 
        !           340:        n *= 2;
        !           341:        for (i = j = 0; i < n; i += 2)
        !           342:                if ('*' == *nameCom[i])
        !           343:                        j++;
        !           344:        return ((i / 2) - j);
        !           345: }
        !           346: 
        !           347: /*
        !           348:  * Build hashed key table.
        !           349:  */
        !           350: buildTab()
        !           351: {
        !           352:        register KEYTAB *k;
        !           353:        register control *p;
        !           354:        int n, i, f, l;
        !           355: 
        !           356:        /* init hash table */
        !           357:        for (k = keytab; k < (keytab + CTSIZE + HASHP); k++)
        !           358:                k->k_code = k->k_synonym = -1;
        !           359: 
        !           360:        fprintf(doc, "PFX1 is initially bound to ctl-x\n");
        !           361:        fprintf(doc, "PFX2 and PFX3 are initially unbound\n\n\n");
        !           362:        fprintf(doc, "%-16s%-16s%s\n", "key binding", "function", "command");
        !           363:        /* load hash table */
        !           364:        l = HASHP;
        !           365:        for (i = 0; i < CTSIZE; i++) {
        !           366:                p = ctlName + i;
        !           367:                k = keytab + (p->key % HASHP);
        !           368:                n = (f = funNo(p->fun)) * 2;
        !           369:                fprintf(doc, "%-16s%-16s%s\n", p->keyn, nameCom[n],
        !           370:                        nameCom[1 + n] + 1);
        !           371:                while ((NULL != nameCom[n += 2]) && ('*' == *nameCom[n]))
        !           372:                        fprintf(doc, "\t\t\t\t%-16s\n", nameCom[n + 1] + 1);
        !           373:                if (-1 != k->k_code) {
        !           374:                         /* to end of chain */
        !           375:                        for (;; k = keytab + k->k_synonym) {
        !           376:                                if (i == k->k_code) {
        !           377:                                        fprintf(stderr, "Duplucate code for %s\n", p->keyn);
        !           378:                                        error = 1;
        !           379:                                }
        !           380:                                if (-1 == k->k_synonym)
        !           381:                                        break;
        !           382:                        }
        !           383:                        k = keytab + (k->k_synonym = l++);
        !           384:                }
        !           385:                k->k_code = i;
        !           386:                k->k_fun  = f;
        !           387:        }
        !           388: 
        !           389:        /* output hash table */
        !           390:        pf("KEYTAB keytab[] = {");
        !           391:        for (i = 0; i < l; i++) {
        !           392:                if (-1 == (k = keytab + i)->k_code)
        !           393:                        pf("{\t-1, 0, -1},\t/* hole in table */");
        !           394:                else {
        !           395:                        p = ctlName + k->k_code;
        !           396:                        pf("{%16s, %3d, %3d },\t/* %-16s %d */",
        !           397:                                p->keyn, trueNo(k->k_fun),
        !           398:                                k->k_synonym, p->fun, i);
        !           399:                }
        !           400:        }
        !           401:        pf("};");
        !           402: }
        !           403: 
        !           404: main()
        !           405: {
        !           406:        register char **p;
        !           407:        int i = 0;
        !           408: 
        !           409:        if (NULL == (doc = fopen("bind.doc", "w")))
        !           410:                exit(1);
        !           411: 
        !           412:        pf("/*");
        !           413:        pf(" * Emacs command tables.");
        !           414:        pf(" * Generated by ext.c");
        !           415:        pf(" * Make any changes by changing ext.c");
        !           416:        pf(" */\n");
        !           417:        pf("#include \"stdio.h\"");
        !           418:        pf("#include \"ed.h\"\n");
        !           419:        for (p = nameCom; NULL != *p; p += 2)
        !           420:                if (**p != '*')
        !           421:                        pf("extern %16s();\t/*%s*/", p[0], p[1]);
        !           422:                else
        !           423:                        pf("\t\t\t\t/*%s*/", p[1]);
        !           424: 
        !           425:        pf("\nFUNTAB funtab[] = {");
        !           426:        for (p = nameCom; NULL != *p; p += 2)
        !           427:                if (**p != '*')
        !           428:                        pf("%16s,\t/* %d */", p[0], i++);
        !           429:        pf("};");
        !           430: 
        !           431:        buildTab();
        !           432:        for (p = nameCom; NULL != p[0]; p += 2)
        !           433:                if (('*' != *p[0]) && ('*' != *p[1])) {
        !           434:                        fprintf(stderr, "unused name %s\n", p[0]);
        !           435:                        error = 1;
        !           436:                }
        !           437:        exit(error);    /* zero if no errors else 1 */
        !           438: }

unix.superglobalmegacorp.com

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