|
|
1.1 ! root 1: /************************************************************************* ! 2: * This program is copyright (C) 1985, 1986 by Jonathan Payne. It is * ! 3: * provided to you without charge for use only on a licensed Unix * ! 4: * system. You may copy JOVE provided that this notice is included with * ! 5: * the copy. You may not sell copies of this program or versions * ! 6: * modified for use on microcomputer systems, unless the copies are * ! 7: * included with a Unix system distribution and the source is provided. * ! 8: *************************************************************************/ ! 9: ! 10: #include "jove.h" ! 11: #include <sys/ioctl.h> ! 12: ! 13: #ifndef TXT_TO_C ! 14: extern int ! 15: EscPrefix(), ! 16: CtlxPrefix(), ! 17: MiscPrefix(), ! 18: UnbindC(), ! 19: ShowVersion(), ! 20: WVisSpace(), ! 21: #ifdef ANSICODES ! 22: AnsiCodes(), ! 23: #endif ! 24: AppReg(), ! 25: Apropos(), ! 26: BackChar(), ! 27: BSexpr(), ! 28: BackWord(), ! 29: Bof(), ! 30: Bol(), ! 31: Bos(), ! 32: Bow(), ! 33: BindAKey(), ! 34: BindMac(), ! 35: BufPos(), ! 36: CasRegLower(), ! 37: CasRegUpper(), ! 38: CapChar(), ! 39: CapWord(), ! 40: LowWord(), ! 41: UppWord(), ! 42: #ifdef CHDIR ! 43: Chdir(), ! 44: prCWD(), ! 45: prDIRS(), ! 46: Pushd(), ! 47: Popd(), ! 48: #endif ! 49: prCTIME(), ! 50: ChrToOct(), ! 51: ClAndRedraw(), ! 52: MakeErrors(), ! 53: CopyRegion(), ! 54: BufSelect(), ! 55: DelBlnkLines(), ! 56: DelNChar(), ! 57: DelNWord(), ! 58: OneWindow(), ! 59: DelPChar(), ! 60: DelPWord(), ! 61: DelReg(), ! 62: KillSome(), ! 63: DelWtSpace(), ! 64: DelCurWindow(), ! 65: KeyDesc(), ! 66: Digit(), ! 67: Digit0(), ! 68: Digit1(), ! 69: Digit2(), ! 70: Digit3(), ! 71: Digit4(), ! 72: Digit5(), ! 73: Digit6(), ! 74: Digit7(), ! 75: Digit8(), ! 76: Digit9(), ! 77: DescBindings(), ! 78: DescCom(), ! 79: Eof(), ! 80: Eol(), ! 81: Eos(), ! 82: Eow(), ! 83: ForPara(), ! 84: BackPara(), ! 85: BufErase(), ! 86: PtToMark(), ! 87: Extend(), ! 88: ExecMacro(), ! 89: RunMacro(), ! 90: Leave(), ! 91: FindFile(), ! 92: WindFind(), ! 93: FindTag(), ! 94: FDotTag(), ! 95: ToIndent(), ! 96: ForChar(), ! 97: FSexpr(), ! 98: ForWord(), ! 99: FourTime(), ! 100: GoLine(), ! 101: GrowWindow(), ! 102: IncFSearch(), ! 103: IncRSearch(), ! 104: InsFile(), ! 105: Justify(), ! 106: RegJustify(), ! 107: SetLMargin(), ! 108: SetRMargin(), ! 109: BufKill(), ! 110: KillBos(), ! 111: KillEos(), ! 112: KillEOL(), ! 113: KillExpr(), ! 114: BufList(), ! 115: NotModified(), ! 116: NameMac(), ! 117: DelMacro(), ! 118: Newline(), ! 119: OpenLine(), ! 120: LineAI(), ! 121: ShowErr(), ! 122: NextError(), ! 123: PrevError(), ! 124: NextLine(), ! 125: NextPage(), ! 126: NextWindow(), ! 127: Recur(), ! 128: PopMark(), ! 129: PageNWind(), ! 130: Tab(), ! 131: DoParen(), ! 132: ParseAll(), ! 133: XParse(), ! 134: #ifdef SPELL ! 135: SpelWords(), ! 136: #endif ! 137: #ifdef JOB_CONTROL ! 138: PauseJove(), ! 139: #endif ! 140: PrevLine(), ! 141: PrevPage(), ! 142: PrevWindow(), ! 143: Push(), ! 144: RegReplace(), ! 145: QRepSearch(), ! 146: QuotChar(), ! 147: ReadFile(), ! 148: ReadMacs(), ! 149: RedrawDisplay(), ! 150: ReNamBuf(), ! 151: RepSearch(), ! 152: DownScroll(), ! 153: UpScroll(), ! 154: ForSearch(), ! 155: RevSearch(), ! 156: SelfInsert(), ! 157: SetVar(), ! 158: SetMark(), ! 159: ShellCom(), ! 160: ShToBuf(), ! 161: ShrWindow(), ! 162: Source(), ! 163: #ifdef SPELL ! 164: SpelBuffer(), ! 165: #endif ! 166: SplitWind(), ! 167: Remember(), ! 168: Forget(), ! 169: StrLength(), ! 170: TransChar(), ! 171: TransLines(), ! 172: SaveFile(), ! 173: WtModBuf(), ! 174: WriteFile(), ! 175: WriteMacs(), ! 176: WrtReg(), ! 177: Yank(), ! 178: YankPop(), ! 179: PrVar(), ! 180: FilterRegion(), ! 181: WNumLines(), ! 182: ! 183: #ifdef IPROCS ! 184: IShell(), ! 185: ProcInt(), ! 186: ProcQuit(), ! 187: ProcKill(), ! 188: # ifndef PIPEPROCS ! 189: # ifdef TIOCSLTC ! 190: ProcEof(), ! 191: ProcStop(), ! 192: ProcCont(), ! 193: ProcDStop(), ! 194: # endif ! 195: # endif ! 196: ProcNewline(), ! 197: ProcList(), ! 198: ProcBind(), ! 199: Iprocess(), ! 200: #endif ! 201: ! 202: #ifdef LISP ! 203: GSexpr(), /* Grind S Expression. */ ! 204: #endif ! 205: CAutoExec(), ! 206: MAutoExec(), ! 207: ! 208: DefMAbbrev(), ! 209: DefGAbbrev(), ! 210: SaveAbbrevs(), ! 211: RestAbbrevs(), ! 212: EditAbbrevs(), ! 213: BindMtoW(), ! 214: ! 215: #ifdef CMT_FMT ! 216: Comment(), ! 217: #endif ! 218: ! 219: MacInter(); /* This is the last one. */ ! 220: ! 221: ! 222: # define WIRED_CMD(c) c ! 223: ! 224: #else TXT_TO_C ! 225: ! 226: # define WIRED_CMD(c) 0 ! 227: ! 228: #endif TXT_TO_C ! 229: ! 230: struct cmd commands[] = { ! 231: FUNCTION, "Prefix-1", WIRED_CMD(EscPrefix), ! 232: FUNCTION, "Prefix-2", WIRED_CMD(CtlxPrefix), ! 233: FUNCTION, "Prefix-3", WIRED_CMD(MiscPrefix), ! 234: #ifdef ANSICODES ! 235: FUNCTION, "ansi-codes", WIRED_CMD(AnsiCodes), ! 236: #endif ! 237: FUNCTION, "append-region", WIRED_CMD(AppReg), ! 238: FUNCTION, "apropos", WIRED_CMD(Apropos), ! 239: FUNCTION, "auto-execute-command", WIRED_CMD(CAutoExec), ! 240: FUNCTION, "auto-execute-macro", WIRED_CMD(MAutoExec), ! 241: DefMinor(Fill), "auto-fill-mode", 0, ! 242: DefMinor(Indent), "auto-indent-mode", 0, ! 243: FUNCTION, "backward-character", WIRED_CMD(BackChar), ! 244: FUNCTION, "backward-paragraph", WIRED_CMD(BackPara), ! 245: FUNCTION, "backward-s-expression", WIRED_CMD(BSexpr), ! 246: FUNCTION, "backward-sentence", WIRED_CMD(Bos), ! 247: FUNCTION, "backward-word", WIRED_CMD(BackWord), ! 248: FUNCTION, "beginning-of-file", WIRED_CMD(Bof), ! 249: FUNCTION, "beginning-of-line", WIRED_CMD(Bol), ! 250: FUNCTION, "beginning-of-window", WIRED_CMD(Bow), ! 251: FUNCTION, "bind-to-key", WIRED_CMD(BindAKey), ! 252: FUNCTION, "bind-macro-to-key", WIRED_CMD(BindMac), ! 253: #ifdef ABBREV ! 254: FUNCTION, "bind-macro-to-word-abbrev", WIRED_CMD(BindMtoW), ! 255: #endif ! 256: FUNCTION, "buffer-position", WIRED_CMD(BufPos), ! 257: DefMajor(CMODE), "c-mode", 0, ! 258: FUNCTION, "case-character-capitalize", WIRED_CMD(CapChar), ! 259: FUNCTION, "case-region-lower", WIRED_CMD(CasRegLower), ! 260: FUNCTION, "case-region-upper", WIRED_CMD(CasRegUpper), ! 261: FUNCTION, "case-word-capitalize", WIRED_CMD(CapWord), ! 262: FUNCTION, "case-word-lower", WIRED_CMD(LowWord), ! 263: FUNCTION, "case-word-upper", WIRED_CMD(UppWord), ! 264: FUNCTION, "character-to-octal-insert", WIRED_CMD(ChrToOct), ! 265: #ifdef CHDIR ! 266: FUNCTION, "cd", WIRED_CMD(Chdir), ! 267: #endif ! 268: FUNCTION, "clear-and-redraw", WIRED_CMD(ClAndRedraw), ! 269: FUNCTION, "compile-it", WIRED_CMD(MakeErrors), ! 270: #ifdef IPROCS ! 271: # ifndef PIPEPROCS ! 272: # ifdef TIOCSLTC ! 273: FUNCTION, "continue-process", WIRED_CMD(ProcCont), ! 274: # endif ! 275: # endif ! 276: #endif ! 277: FUNCTION, "copy-region", WIRED_CMD(CopyRegion), ! 278: FUNCTION, "current-error", WIRED_CMD(ShowErr), ! 279: FUNCTION, "date", WIRED_CMD(prCTIME), ! 280: #ifdef ABBREV ! 281: FUNCTION, "define-mode-word-abbrev", WIRED_CMD(DefMAbbrev), ! 282: FUNCTION, "define-global-word-abbrev", WIRED_CMD(DefGAbbrev), ! 283: #endif ! 284: FUNCTION, "delete-blank-lines", WIRED_CMD(DelBlnkLines), ! 285: FUNCTION, "delete-buffer", WIRED_CMD(BufKill), ! 286: FUNCTION, "delete-macro", WIRED_CMD(DelMacro), ! 287: FUNCTION, "delete-next-character", WIRED_CMD(DelNChar), ! 288: FUNCTION, "delete-other-windows", WIRED_CMD(OneWindow), ! 289: FUNCTION, "delete-previous-character", WIRED_CMD(DelPChar), ! 290: FUNCTION, "delete-white-space", WIRED_CMD(DelWtSpace), ! 291: FUNCTION, "delete-current-window", WIRED_CMD(DelCurWindow), ! 292: FUNCTION, "describe-bindings", WIRED_CMD(DescBindings), ! 293: FUNCTION, "describe-command", WIRED_CMD(DescCom), ! 294: FUNCTION, "describe-key", WIRED_CMD(KeyDesc), ! 295: FUNCTION, "describe-variable", WIRED_CMD(DescCom), ! 296: FUNCTION, "digit", WIRED_CMD(Digit), ! 297: FUNCTION, "digit-1", WIRED_CMD(Digit1), ! 298: FUNCTION, "digit-2", WIRED_CMD(Digit2), ! 299: FUNCTION, "digit-3", WIRED_CMD(Digit3), ! 300: FUNCTION, "digit-4", WIRED_CMD(Digit4), ! 301: FUNCTION, "digit-5", WIRED_CMD(Digit5), ! 302: FUNCTION, "digit-6", WIRED_CMD(Digit6), ! 303: FUNCTION, "digit-7", WIRED_CMD(Digit7), ! 304: FUNCTION, "digit-8", WIRED_CMD(Digit8), ! 305: FUNCTION, "digit-9", WIRED_CMD(Digit9), ! 306: FUNCTION, "digit-0", WIRED_CMD(Digit0), ! 307: #ifdef CHDIR ! 308: FUNCTION, "dirs", WIRED_CMD(prDIRS), ! 309: #endif ! 310: #ifdef IPROCS ! 311: # ifndef PIPEPROCS ! 312: # ifdef TIOCSLTC ! 313: FUNCTION, "dstop-process", WIRED_CMD(ProcDStop), ! 314: # endif ! 315: # endif ! 316: #endif ! 317: #ifdef ABBREV ! 318: FUNCTION, "edit-word-abbrevs", WIRED_CMD(EditAbbrevs), ! 319: #endif ! 320: FUNCTION, "end-of-file", WIRED_CMD(Eof), ! 321: FUNCTION, "end-of-line", WIRED_CMD(Eol), ! 322: FUNCTION, "end-of-window", WIRED_CMD(Eow), ! 323: #ifdef IPROCS ! 324: # ifndef PIPEPROCS ! 325: # ifdef TIOCSLTC ! 326: FUNCTION, "eof-process", WIRED_CMD(ProcEof), ! 327: # endif ! 328: # endif ! 329: #endif ! 330: FUNCTION, "erase-buffer", WIRED_CMD(BufErase), ! 331: FUNCTION, "exchange-point-and-mark", WIRED_CMD(PtToMark), ! 332: FUNCTION, "execute-named-command", WIRED_CMD(Extend), ! 333: FUNCTION, "execute-keyboard-macro", WIRED_CMD(ExecMacro), ! 334: FUNCTION, "execute-macro", WIRED_CMD(RunMacro), ! 335: FUNCTION, "exit-jove", WIRED_CMD(Leave), ! 336: #ifdef CMT_FMT ! 337: FUNCTION, "fill-comment", WIRED_CMD(Comment), ! 338: #endif CMT_FMT ! 339: FUNCTION, "fill-paragraph", WIRED_CMD(Justify), ! 340: FUNCTION, "fill-region", WIRED_CMD(RegJustify), ! 341: FUNCTION, "filter-region", WIRED_CMD(FilterRegion), ! 342: FUNCTION, "find-file", WIRED_CMD(FindFile), ! 343: FUNCTION, "find-tag", WIRED_CMD(FindTag), ! 344: FUNCTION, "find-tag-at-point", WIRED_CMD(FDotTag), ! 345: FUNCTION, "first-non-blank", WIRED_CMD(ToIndent), ! 346: FUNCTION, "forward-character", WIRED_CMD(ForChar), ! 347: FUNCTION, "forward-paragraph", WIRED_CMD(ForPara), ! 348: FUNCTION, "forward-s-expression", WIRED_CMD(FSexpr), ! 349: FUNCTION, "forward-sentence", WIRED_CMD(Eos), ! 350: FUNCTION, "forward-word", WIRED_CMD(ForWord), ! 351: DefMajor(FUNDAMENTAL), "fundamental-mode", 0, ! 352: #ifdef LISP ! 353: FUNCTION, "grind-s-expr", WIRED_CMD(GSexpr), ! 354: #endif ! 355: FUNCTION, "goto-line", WIRED_CMD(GoLine), ! 356: FUNCTION, "grow-window", WIRED_CMD(GrowWindow), ! 357: FUNCTION, "handle-tab", WIRED_CMD(Tab), ! 358: FUNCTION, "i-search-forward", WIRED_CMD(IncFSearch), ! 359: FUNCTION, "i-search-reverse", WIRED_CMD(IncRSearch), ! 360: FUNCTION, "insert-file", WIRED_CMD(InsFile), ! 361: #ifdef IPROCS ! 362: FUNCTION, "interrupt-process", WIRED_CMD(ProcInt), ! 363: FUNCTION, "i-shell", WIRED_CMD(IShell), ! 364: FUNCTION, "i-shell-command", WIRED_CMD(Iprocess), ! 365: #endif ! 366: FUNCTION, "kill-next-word", WIRED_CMD(DelNWord), ! 367: FUNCTION, "kill-previous-word", WIRED_CMD(DelPWord), ! 368: #ifdef IPROCS ! 369: FUNCTION, "kill-process", WIRED_CMD(ProcKill), ! 370: #endif ! 371: FUNCTION, "kill-region", WIRED_CMD(DelReg), ! 372: FUNCTION, "kill-s-expression", WIRED_CMD(KillExpr), ! 373: FUNCTION, "kill-some-buffers", WIRED_CMD(KillSome), ! 374: FUNCTION, "kill-to-beginning-of-sentence", WIRED_CMD(KillBos), ! 375: FUNCTION, "kill-to-end-of-line", WIRED_CMD(KillEOL), ! 376: FUNCTION, "kill-to-end-of-sentence", WIRED_CMD(KillEos), ! 377: FUNCTION, "left-margin-here", WIRED_CMD(SetLMargin), ! 378: #ifdef LISP ! 379: DefMajor(LISPMODE), "lisp-mode", 0, ! 380: #endif ! 381: FUNCTION, "list-buffers", WIRED_CMD(BufList), ! 382: #ifdef IPROCS ! 383: FUNCTION, "list-processes", WIRED_CMD(ProcList), ! 384: #endif ! 385: FUNCTION, "make-buffer-unmodified", WIRED_CMD(NotModified), ! 386: FUNCTION, "make-macro-interactive", WIRED_CMD(MacInter), ! 387: FUNCTION, "name-keyboard-macro", WIRED_CMD(NameMac), ! 388: FUNCTION, "newline", WIRED_CMD(Newline), ! 389: FUNCTION, "newline-and-backup", WIRED_CMD(OpenLine), ! 390: FUNCTION, "newline-and-indent", WIRED_CMD(LineAI), ! 391: FUNCTION, "next-error", WIRED_CMD(NextError), ! 392: FUNCTION, "next-line", WIRED_CMD(NextLine), ! 393: FUNCTION, "next-page", WIRED_CMD(NextPage), ! 394: FUNCTION, "next-window", WIRED_CMD(NextWindow), ! 395: FUNCTION, "number-lines-in-window", WIRED_CMD(WNumLines), ! 396: DefMinor(OverWrite), "over-write-mode", 0, ! 397: FUNCTION, "page-next-window", WIRED_CMD(PageNWind), ! 398: FUNCTION, "paren-flash", WIRED_CMD(DoParen), ! 399: FUNCTION, "parse-errors", WIRED_CMD(ParseAll), ! 400: FUNCTION, "parse-special-errors", WIRED_CMD(XParse), ! 401: #ifdef SPELL ! 402: FUNCTION, "parse-spelling-errors-in-buffer", WIRED_CMD(SpelWords), ! 403: #endif ! 404: #ifdef JOB_CONTROL ! 405: FUNCTION, "pause-jove", WIRED_CMD(PauseJove), ! 406: #else ! 407: FUNCTION, "pause-jove", WIRED_CMD(Push), ! 408: #endif ! 409: FUNCTION, "pop-mark", WIRED_CMD(PopMark), ! 410: #ifdef CHDIR ! 411: FUNCTION, "popd", WIRED_CMD(Popd), ! 412: #endif ! 413: FUNCTION, "previous-error", WIRED_CMD(PrevError), ! 414: FUNCTION, "previous-line", WIRED_CMD(PrevLine), ! 415: FUNCTION, "previous-page", WIRED_CMD(PrevPage), ! 416: FUNCTION, "previous-window", WIRED_CMD(PrevWindow), ! 417: FUNCTION, "print", WIRED_CMD(PrVar), ! 418: #ifdef IPROCS ! 419: FUNCTION, "process-bind-to-key", WIRED_CMD(ProcBind), ! 420: FUNCTION, "process-newline", WIRED_CMD(ProcNewline), ! 421: #endif ! 422: FUNCTION, "push-shell", WIRED_CMD(Push), ! 423: #ifdef CHDIR ! 424: FUNCTION, "pushd", WIRED_CMD(Pushd), ! 425: FUNCTION, "pwd", WIRED_CMD(prCWD), ! 426: #endif ! 427: FUNCTION, "quadruple-numeric-argument", WIRED_CMD(FourTime), ! 428: FUNCTION, "query-replace-string", WIRED_CMD(QRepSearch), ! 429: #ifdef IPROCS ! 430: FUNCTION, "quit-process", WIRED_CMD(ProcQuit), ! 431: #endif ! 432: FUNCTION, "quoted-insert", WIRED_CMD(QuotChar), ! 433: #ifdef ABBREV ! 434: FUNCTION, "read-word-abbrev-file", WIRED_CMD(RestAbbrevs), ! 435: #endif ! 436: FUNCTION, "read-macros-from-file", WIRED_CMD(ReadMacs), ! 437: FUNCTION, "redraw-display", WIRED_CMD(RedrawDisplay), ! 438: FUNCTION, "recursive-edit", WIRED_CMD(Recur), ! 439: FUNCTION, "rename-buffer", WIRED_CMD(ReNamBuf), ! 440: FUNCTION, "replace-in-region", WIRED_CMD(RegReplace), ! 441: FUNCTION, "replace-string", WIRED_CMD(RepSearch), ! 442: FUNCTION, "right-margin-here", WIRED_CMD(SetRMargin), ! 443: FUNCTION, "save-file", WIRED_CMD(SaveFile), ! 444: FUNCTION, "scroll-down", WIRED_CMD(DownScroll), ! 445: FUNCTION, "scroll-up", WIRED_CMD(UpScroll), ! 446: FUNCTION, "search-forward", WIRED_CMD(ForSearch), ! 447: FUNCTION, "search-reverse", WIRED_CMD(RevSearch), ! 448: FUNCTION, "select-buffer", WIRED_CMD(BufSelect), ! 449: FUNCTION, "self-insert", WIRED_CMD(SelfInsert), ! 450: FUNCTION, "set", WIRED_CMD(SetVar), ! 451: FUNCTION, "set-mark", WIRED_CMD(SetMark), ! 452: FUNCTION, "shell-command", WIRED_CMD(ShellCom), ! 453: FUNCTION, "shell-command-to-buffer", WIRED_CMD(ShToBuf), ! 454: DefMinor(ShowMatch), "show-match-mode", 0, ! 455: FUNCTION, "shrink-window", WIRED_CMD(ShrWindow), ! 456: FUNCTION, "source", WIRED_CMD(Source), ! 457: #ifdef SPELL ! 458: FUNCTION, "spell-buffer", WIRED_CMD(SpelBuffer), ! 459: #endif ! 460: FUNCTION, "split-current-window", WIRED_CMD(SplitWind), ! 461: FUNCTION, "start-remembering", WIRED_CMD(Remember), ! 462: #ifdef IPROCS ! 463: # ifndef PIPEPROCS ! 464: # ifdef TIOCSLTC ! 465: FUNCTION, "stop-process", WIRED_CMD(ProcStop), ! 466: # endif ! 467: # endif ! 468: #endif ! 469: FUNCTION, "stop-remembering", WIRED_CMD(Forget), ! 470: FUNCTION, "string-length", WIRED_CMD(StrLength), ! 471: #ifdef JOB_CONTROL ! 472: FUNCTION, "suspend-jove", WIRED_CMD(PauseJove), ! 473: #endif ! 474: DefMajor(TEXT), "text-mode", 0, ! 475: FUNCTION, "transpose-characters", WIRED_CMD(TransChar), ! 476: FUNCTION, "transpose-lines", WIRED_CMD(TransLines), ! 477: FUNCTION, "unbind-key", WIRED_CMD(UnbindC), ! 478: FUNCTION, "version", WIRED_CMD(ShowVersion), ! 479: FUNCTION, "visible-spaces-in-window", WIRED_CMD(WVisSpace), ! 480: FUNCTION, "visit-file", WIRED_CMD(ReadFile), ! 481: FUNCTION, "window-find", WIRED_CMD(WindFind), ! 482: #ifdef ABBREV ! 483: DefMinor(Abbrev), "word-abbrev-mode", 0, ! 484: FUNCTION, "write-word-abbrev-file", WIRED_CMD(SaveAbbrevs), ! 485: #endif ! 486: FUNCTION, "write-file", WIRED_CMD(WriteFile), ! 487: FUNCTION, "write-macros-to-file", WIRED_CMD(WriteMacs), ! 488: FUNCTION, "write-modified-files", WIRED_CMD(WtModBuf), ! 489: FUNCTION, "write-region", WIRED_CMD(WrtReg), ! 490: FUNCTION, "yank", WIRED_CMD(Yank), ! 491: FUNCTION, "yank-pop", WIRED_CMD(YankPop), ! 492: FUNCTION, 0, 0 ! 493: }; ! 494: ! 495: #ifndef TXT_TO_C ! 496: data_obj * ! 497: findcom(prompt) ! 498: char *prompt; ! 499: { ! 500: /* This is for faster startup. This just reads until a space or a ! 501: tab or a newline character is reached, and then does a ! 502: semi-hashed lookup on that string. This should be much faster ! 503: than initializing the minibuffer for each line. */ ! 504: if (InJoverc) { ! 505: char cmdbuf[128]; ! 506: register struct cmd *cmd; ! 507: register char *cp = cmdbuf; ! 508: register int c; ! 509: struct cmd *which; ! 510: int cmdlen, ! 511: found = 0; ! 512: static struct cmd *cmdhash[1 + 26]; ! 513: static int beenhere = NO; ! 514: ! 515: /* special case for prefix commands--only upper case ones */ ! 516: #define hash(c) ((c == 'P') ? 0 : 1 + (c - 'a')) ! 517: ! 518: /* initialize the hash table */ ! 519: if (beenhere == NO) { ! 520: int lastc = 0; ! 521: ! 522: for (cmd = commands; cmd->Name != 0; cmd++) ! 523: if (lastc != cmd->Name[0]) { ! 524: lastc = cmd->Name[0]; ! 525: cmdhash[hash(lastc)] = cmd; ! 526: } ! 527: beenhere = YES; ! 528: } ! 529: ! 530: /* gather the cmd name */ ! 531: while (((c = getch()) != EOF) && !index(" \t\r\n", c)) ! 532: *cp++ = c; ! 533: if (c == EOF) ! 534: return 0; ! 535: *cp = '\0'; ! 536: cmdlen = cp - cmdbuf; ! 537: if (cmdlen == 0) ! 538: return 0; ! 539: ! 540: /* look it up (in the reduced search space) */ ! 541: for (cmd = cmdhash[hash(cmdbuf[0])]; cmd->Name[0] == cmdbuf[0]; cmd++) { ! 542: if (strncmp(cmd->Name, cmdbuf, cmdlen) == 0) { ! 543: if (strcmp(cmd->Name, cmdbuf) == 0) ! 544: return (data_obj *) cmd; ! 545: found++; ! 546: which = cmd; ! 547: } ! 548: } ! 549: if (found > 1) ! 550: complain("[\"%s\" ambiguous]", cmdbuf); ! 551: else if (found == 0) ! 552: complain("[\"%s\" unknown]", cmdbuf); ! 553: else ! 554: return (data_obj *) which; ! 555: } else { ! 556: static char *strings[(sizeof commands) / sizeof (commands[0])]; ! 557: static int beenhere = 0; ! 558: register int com; ! 559: ! 560: if (beenhere == 0) { ! 561: register char **strs = strings; ! 562: register struct cmd *c = commands; ! 563: ! 564: beenhere = 1; ! 565: for (; c->Name; c++) ! 566: *strs++ = c->Name; ! 567: *strs = 0; ! 568: } ! 569: ! 570: if ((com = complete(strings, prompt, NOTHING)) < 0) ! 571: return 0; ! 572: return (data_obj *) &commands[com]; ! 573: } ! 574: } ! 575: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.