/************************************************************************* * This program is copyright (C) 1985, 1986 by Jonathan Payne. It is * * provided to you without charge for use only on a licensed Unix * * system. You may copy JOVE provided that this notice is included with * * the copy. You may not sell copies of this program or versions * * modified for use on microcomputer systems, unless the copies are * * included with a Unix system distribution and the source is provided. * *************************************************************************/ #include "jove.h" #include #ifndef TXT_TO_C extern int EscPrefix(), CtlxPrefix(), MiscPrefix(), UnbindC(), ShowVersion(), WVisSpace(), #ifdef ANSICODES AnsiCodes(), #endif AppReg(), Apropos(), BackChar(), BSexpr(), BackWord(), Bof(), Bol(), Bos(), Bow(), BindAKey(), BindMac(), BufPos(), CasRegLower(), CasRegUpper(), CapChar(), CapWord(), LowWord(), UppWord(), #ifdef CHDIR Chdir(), prCWD(), prDIRS(), Pushd(), Popd(), #endif prCTIME(), ChrToOct(), ClAndRedraw(), MakeErrors(), CopyRegion(), BufSelect(), DelBlnkLines(), DelNChar(), DelNWord(), OneWindow(), DelPChar(), DelPWord(), DelReg(), KillSome(), DelWtSpace(), DelCurWindow(), KeyDesc(), Digit(), Digit0(), Digit1(), Digit2(), Digit3(), Digit4(), Digit5(), Digit6(), Digit7(), Digit8(), Digit9(), DescBindings(), DescCom(), Eof(), Eol(), Eos(), Eow(), ForPara(), BackPara(), BufErase(), PtToMark(), Extend(), ExecMacro(), RunMacro(), Leave(), FindFile(), WindFind(), FindTag(), FDotTag(), ToIndent(), ForChar(), FSexpr(), ForWord(), FourTime(), GoLine(), GrowWindow(), IncFSearch(), IncRSearch(), InsFile(), Justify(), RegJustify(), SetLMargin(), SetRMargin(), BufKill(), KillBos(), KillEos(), KillEOL(), KillExpr(), BufList(), NotModified(), NameMac(), DelMacro(), Newline(), OpenLine(), LineAI(), ShowErr(), NextError(), PrevError(), NextLine(), NextPage(), NextWindow(), Recur(), PopMark(), PageNWind(), Tab(), DoParen(), ParseAll(), XParse(), #ifdef SPELL SpelWords(), #endif #ifdef JOB_CONTROL PauseJove(), #endif PrevLine(), PrevPage(), PrevWindow(), Push(), RegReplace(), QRepSearch(), QuotChar(), ReadFile(), ReadMacs(), RedrawDisplay(), ReNamBuf(), RepSearch(), DownScroll(), UpScroll(), ForSearch(), RevSearch(), SelfInsert(), SetVar(), SetMark(), ShellCom(), ShToBuf(), ShrWindow(), Source(), #ifdef SPELL SpelBuffer(), #endif SplitWind(), Remember(), Forget(), StrLength(), TransChar(), TransLines(), SaveFile(), WtModBuf(), WriteFile(), WriteMacs(), WrtReg(), Yank(), YankPop(), PrVar(), FilterRegion(), WNumLines(), #ifdef IPROCS IShell(), ProcInt(), ProcQuit(), ProcKill(), # ifndef PIPEPROCS # ifdef TIOCSLTC ProcEof(), ProcStop(), ProcCont(), ProcDStop(), # endif # endif ProcNewline(), ProcList(), ProcBind(), Iprocess(), #endif #ifdef LISP GSexpr(), /* Grind S Expression. */ #endif CAutoExec(), MAutoExec(), DefMAbbrev(), DefGAbbrev(), SaveAbbrevs(), RestAbbrevs(), EditAbbrevs(), BindMtoW(), #ifdef CMT_FMT Comment(), #endif MacInter(); /* This is the last one. */ # define WIRED_CMD(c) c #else TXT_TO_C # define WIRED_CMD(c) 0 #endif TXT_TO_C struct cmd commands[] = { FUNCTION, "Prefix-1", WIRED_CMD(EscPrefix), FUNCTION, "Prefix-2", WIRED_CMD(CtlxPrefix), FUNCTION, "Prefix-3", WIRED_CMD(MiscPrefix), #ifdef ANSICODES FUNCTION, "ansi-codes", WIRED_CMD(AnsiCodes), #endif FUNCTION, "append-region", WIRED_CMD(AppReg), FUNCTION, "apropos", WIRED_CMD(Apropos), FUNCTION, "auto-execute-command", WIRED_CMD(CAutoExec), FUNCTION, "auto-execute-macro", WIRED_CMD(MAutoExec), DefMinor(Fill), "auto-fill-mode", 0, DefMinor(Indent), "auto-indent-mode", 0, FUNCTION, "backward-character", WIRED_CMD(BackChar), FUNCTION, "backward-paragraph", WIRED_CMD(BackPara), FUNCTION, "backward-s-expression", WIRED_CMD(BSexpr), FUNCTION, "backward-sentence", WIRED_CMD(Bos), FUNCTION, "backward-word", WIRED_CMD(BackWord), FUNCTION, "beginning-of-file", WIRED_CMD(Bof), FUNCTION, "beginning-of-line", WIRED_CMD(Bol), FUNCTION, "beginning-of-window", WIRED_CMD(Bow), FUNCTION, "bind-to-key", WIRED_CMD(BindAKey), FUNCTION, "bind-macro-to-key", WIRED_CMD(BindMac), #ifdef ABBREV FUNCTION, "bind-macro-to-word-abbrev", WIRED_CMD(BindMtoW), #endif FUNCTION, "buffer-position", WIRED_CMD(BufPos), DefMajor(CMODE), "c-mode", 0, FUNCTION, "case-character-capitalize", WIRED_CMD(CapChar), FUNCTION, "case-region-lower", WIRED_CMD(CasRegLower), FUNCTION, "case-region-upper", WIRED_CMD(CasRegUpper), FUNCTION, "case-word-capitalize", WIRED_CMD(CapWord), FUNCTION, "case-word-lower", WIRED_CMD(LowWord), FUNCTION, "case-word-upper", WIRED_CMD(UppWord), FUNCTION, "character-to-octal-insert", WIRED_CMD(ChrToOct), #ifdef CHDIR FUNCTION, "cd", WIRED_CMD(Chdir), #endif FUNCTION, "clear-and-redraw", WIRED_CMD(ClAndRedraw), FUNCTION, "compile-it", WIRED_CMD(MakeErrors), #ifdef IPROCS # ifndef PIPEPROCS # ifdef TIOCSLTC FUNCTION, "continue-process", WIRED_CMD(ProcCont), # endif # endif #endif FUNCTION, "copy-region", WIRED_CMD(CopyRegion), FUNCTION, "current-error", WIRED_CMD(ShowErr), FUNCTION, "date", WIRED_CMD(prCTIME), #ifdef ABBREV FUNCTION, "define-mode-word-abbrev", WIRED_CMD(DefMAbbrev), FUNCTION, "define-global-word-abbrev", WIRED_CMD(DefGAbbrev), #endif FUNCTION, "delete-blank-lines", WIRED_CMD(DelBlnkLines), FUNCTION, "delete-buffer", WIRED_CMD(BufKill), FUNCTION, "delete-macro", WIRED_CMD(DelMacro), FUNCTION, "delete-next-character", WIRED_CMD(DelNChar), FUNCTION, "delete-other-windows", WIRED_CMD(OneWindow), FUNCTION, "delete-previous-character", WIRED_CMD(DelPChar), FUNCTION, "delete-white-space", WIRED_CMD(DelWtSpace), FUNCTION, "delete-current-window", WIRED_CMD(DelCurWindow), FUNCTION, "describe-bindings", WIRED_CMD(DescBindings), FUNCTION, "describe-command", WIRED_CMD(DescCom), FUNCTION, "describe-key", WIRED_CMD(KeyDesc), FUNCTION, "describe-variable", WIRED_CMD(DescCom), FUNCTION, "digit", WIRED_CMD(Digit), FUNCTION, "digit-1", WIRED_CMD(Digit1), FUNCTION, "digit-2", WIRED_CMD(Digit2), FUNCTION, "digit-3", WIRED_CMD(Digit3), FUNCTION, "digit-4", WIRED_CMD(Digit4), FUNCTION, "digit-5", WIRED_CMD(Digit5), FUNCTION, "digit-6", WIRED_CMD(Digit6), FUNCTION, "digit-7", WIRED_CMD(Digit7), FUNCTION, "digit-8", WIRED_CMD(Digit8), FUNCTION, "digit-9", WIRED_CMD(Digit9), FUNCTION, "digit-0", WIRED_CMD(Digit0), #ifdef CHDIR FUNCTION, "dirs", WIRED_CMD(prDIRS), #endif #ifdef IPROCS # ifndef PIPEPROCS # ifdef TIOCSLTC FUNCTION, "dstop-process", WIRED_CMD(ProcDStop), # endif # endif #endif #ifdef ABBREV FUNCTION, "edit-word-abbrevs", WIRED_CMD(EditAbbrevs), #endif FUNCTION, "end-of-file", WIRED_CMD(Eof), FUNCTION, "end-of-line", WIRED_CMD(Eol), FUNCTION, "end-of-window", WIRED_CMD(Eow), #ifdef IPROCS # ifndef PIPEPROCS # ifdef TIOCSLTC FUNCTION, "eof-process", WIRED_CMD(ProcEof), # endif # endif #endif FUNCTION, "erase-buffer", WIRED_CMD(BufErase), FUNCTION, "exchange-point-and-mark", WIRED_CMD(PtToMark), FUNCTION, "execute-named-command", WIRED_CMD(Extend), FUNCTION, "execute-keyboard-macro", WIRED_CMD(ExecMacro), FUNCTION, "execute-macro", WIRED_CMD(RunMacro), FUNCTION, "exit-jove", WIRED_CMD(Leave), #ifdef CMT_FMT FUNCTION, "fill-comment", WIRED_CMD(Comment), #endif CMT_FMT FUNCTION, "fill-paragraph", WIRED_CMD(Justify), FUNCTION, "fill-region", WIRED_CMD(RegJustify), FUNCTION, "filter-region", WIRED_CMD(FilterRegion), FUNCTION, "find-file", WIRED_CMD(FindFile), FUNCTION, "find-tag", WIRED_CMD(FindTag), FUNCTION, "find-tag-at-point", WIRED_CMD(FDotTag), FUNCTION, "first-non-blank", WIRED_CMD(ToIndent), FUNCTION, "forward-character", WIRED_CMD(ForChar), FUNCTION, "forward-paragraph", WIRED_CMD(ForPara), FUNCTION, "forward-s-expression", WIRED_CMD(FSexpr), FUNCTION, "forward-sentence", WIRED_CMD(Eos), FUNCTION, "forward-word", WIRED_CMD(ForWord), DefMajor(FUNDAMENTAL), "fundamental-mode", 0, #ifdef LISP FUNCTION, "grind-s-expr", WIRED_CMD(GSexpr), #endif FUNCTION, "goto-line", WIRED_CMD(GoLine), FUNCTION, "grow-window", WIRED_CMD(GrowWindow), FUNCTION, "handle-tab", WIRED_CMD(Tab), FUNCTION, "i-search-forward", WIRED_CMD(IncFSearch), FUNCTION, "i-search-reverse", WIRED_CMD(IncRSearch), FUNCTION, "insert-file", WIRED_CMD(InsFile), #ifdef IPROCS FUNCTION, "interrupt-process", WIRED_CMD(ProcInt), FUNCTION, "i-shell", WIRED_CMD(IShell), FUNCTION, "i-shell-command", WIRED_CMD(Iprocess), #endif FUNCTION, "kill-next-word", WIRED_CMD(DelNWord), FUNCTION, "kill-previous-word", WIRED_CMD(DelPWord), #ifdef IPROCS FUNCTION, "kill-process", WIRED_CMD(ProcKill), #endif FUNCTION, "kill-region", WIRED_CMD(DelReg), FUNCTION, "kill-s-expression", WIRED_CMD(KillExpr), FUNCTION, "kill-some-buffers", WIRED_CMD(KillSome), FUNCTION, "kill-to-beginning-of-sentence", WIRED_CMD(KillBos), FUNCTION, "kill-to-end-of-line", WIRED_CMD(KillEOL), FUNCTION, "kill-to-end-of-sentence", WIRED_CMD(KillEos), FUNCTION, "left-margin-here", WIRED_CMD(SetLMargin), #ifdef LISP DefMajor(LISPMODE), "lisp-mode", 0, #endif FUNCTION, "list-buffers", WIRED_CMD(BufList), #ifdef IPROCS FUNCTION, "list-processes", WIRED_CMD(ProcList), #endif FUNCTION, "make-buffer-unmodified", WIRED_CMD(NotModified), FUNCTION, "make-macro-interactive", WIRED_CMD(MacInter), FUNCTION, "name-keyboard-macro", WIRED_CMD(NameMac), FUNCTION, "newline", WIRED_CMD(Newline), FUNCTION, "newline-and-backup", WIRED_CMD(OpenLine), FUNCTION, "newline-and-indent", WIRED_CMD(LineAI), FUNCTION, "next-error", WIRED_CMD(NextError), FUNCTION, "next-line", WIRED_CMD(NextLine), FUNCTION, "next-page", WIRED_CMD(NextPage), FUNCTION, "next-window", WIRED_CMD(NextWindow), FUNCTION, "number-lines-in-window", WIRED_CMD(WNumLines), DefMinor(OverWrite), "over-write-mode", 0, FUNCTION, "page-next-window", WIRED_CMD(PageNWind), FUNCTION, "paren-flash", WIRED_CMD(DoParen), FUNCTION, "parse-errors", WIRED_CMD(ParseAll), FUNCTION, "parse-special-errors", WIRED_CMD(XParse), #ifdef SPELL FUNCTION, "parse-spelling-errors-in-buffer", WIRED_CMD(SpelWords), #endif #ifdef JOB_CONTROL FUNCTION, "pause-jove", WIRED_CMD(PauseJove), #else FUNCTION, "pause-jove", WIRED_CMD(Push), #endif FUNCTION, "pop-mark", WIRED_CMD(PopMark), #ifdef CHDIR FUNCTION, "popd", WIRED_CMD(Popd), #endif FUNCTION, "previous-error", WIRED_CMD(PrevError), FUNCTION, "previous-line", WIRED_CMD(PrevLine), FUNCTION, "previous-page", WIRED_CMD(PrevPage), FUNCTION, "previous-window", WIRED_CMD(PrevWindow), FUNCTION, "print", WIRED_CMD(PrVar), #ifdef IPROCS FUNCTION, "process-bind-to-key", WIRED_CMD(ProcBind), FUNCTION, "process-newline", WIRED_CMD(ProcNewline), #endif FUNCTION, "push-shell", WIRED_CMD(Push), #ifdef CHDIR FUNCTION, "pushd", WIRED_CMD(Pushd), FUNCTION, "pwd", WIRED_CMD(prCWD), #endif FUNCTION, "quadruple-numeric-argument", WIRED_CMD(FourTime), FUNCTION, "query-replace-string", WIRED_CMD(QRepSearch), #ifdef IPROCS FUNCTION, "quit-process", WIRED_CMD(ProcQuit), #endif FUNCTION, "quoted-insert", WIRED_CMD(QuotChar), #ifdef ABBREV FUNCTION, "read-word-abbrev-file", WIRED_CMD(RestAbbrevs), #endif FUNCTION, "read-macros-from-file", WIRED_CMD(ReadMacs), FUNCTION, "redraw-display", WIRED_CMD(RedrawDisplay), FUNCTION, "recursive-edit", WIRED_CMD(Recur), FUNCTION, "rename-buffer", WIRED_CMD(ReNamBuf), FUNCTION, "replace-in-region", WIRED_CMD(RegReplace), FUNCTION, "replace-string", WIRED_CMD(RepSearch), FUNCTION, "right-margin-here", WIRED_CMD(SetRMargin), FUNCTION, "save-file", WIRED_CMD(SaveFile), FUNCTION, "scroll-down", WIRED_CMD(DownScroll), FUNCTION, "scroll-up", WIRED_CMD(UpScroll), FUNCTION, "search-forward", WIRED_CMD(ForSearch), FUNCTION, "search-reverse", WIRED_CMD(RevSearch), FUNCTION, "select-buffer", WIRED_CMD(BufSelect), FUNCTION, "self-insert", WIRED_CMD(SelfInsert), FUNCTION, "set", WIRED_CMD(SetVar), FUNCTION, "set-mark", WIRED_CMD(SetMark), FUNCTION, "shell-command", WIRED_CMD(ShellCom), FUNCTION, "shell-command-to-buffer", WIRED_CMD(ShToBuf), DefMinor(ShowMatch), "show-match-mode", 0, FUNCTION, "shrink-window", WIRED_CMD(ShrWindow), FUNCTION, "source", WIRED_CMD(Source), #ifdef SPELL FUNCTION, "spell-buffer", WIRED_CMD(SpelBuffer), #endif FUNCTION, "split-current-window", WIRED_CMD(SplitWind), FUNCTION, "start-remembering", WIRED_CMD(Remember), #ifdef IPROCS # ifndef PIPEPROCS # ifdef TIOCSLTC FUNCTION, "stop-process", WIRED_CMD(ProcStop), # endif # endif #endif FUNCTION, "stop-remembering", WIRED_CMD(Forget), FUNCTION, "string-length", WIRED_CMD(StrLength), #ifdef JOB_CONTROL FUNCTION, "suspend-jove", WIRED_CMD(PauseJove), #endif DefMajor(TEXT), "text-mode", 0, FUNCTION, "transpose-characters", WIRED_CMD(TransChar), FUNCTION, "transpose-lines", WIRED_CMD(TransLines), FUNCTION, "unbind-key", WIRED_CMD(UnbindC), FUNCTION, "version", WIRED_CMD(ShowVersion), FUNCTION, "visible-spaces-in-window", WIRED_CMD(WVisSpace), FUNCTION, "visit-file", WIRED_CMD(ReadFile), FUNCTION, "window-find", WIRED_CMD(WindFind), #ifdef ABBREV DefMinor(Abbrev), "word-abbrev-mode", 0, FUNCTION, "write-word-abbrev-file", WIRED_CMD(SaveAbbrevs), #endif FUNCTION, "write-file", WIRED_CMD(WriteFile), FUNCTION, "write-macros-to-file", WIRED_CMD(WriteMacs), FUNCTION, "write-modified-files", WIRED_CMD(WtModBuf), FUNCTION, "write-region", WIRED_CMD(WrtReg), FUNCTION, "yank", WIRED_CMD(Yank), FUNCTION, "yank-pop", WIRED_CMD(YankPop), FUNCTION, 0, 0 }; #ifndef TXT_TO_C data_obj * findcom(prompt) char *prompt; { /* This is for faster startup. This just reads until a space or a tab or a newline character is reached, and then does a semi-hashed lookup on that string. This should be much faster than initializing the minibuffer for each line. */ if (InJoverc) { char cmdbuf[128]; register struct cmd *cmd; register char *cp = cmdbuf; register int c; struct cmd *which; int cmdlen, found = 0; static struct cmd *cmdhash[1 + 26]; static int beenhere = NO; /* special case for prefix commands--only upper case ones */ #define hash(c) ((c == 'P') ? 0 : 1 + (c - 'a')) /* initialize the hash table */ if (beenhere == NO) { int lastc = 0; for (cmd = commands; cmd->Name != 0; cmd++) if (lastc != cmd->Name[0]) { lastc = cmd->Name[0]; cmdhash[hash(lastc)] = cmd; } beenhere = YES; } /* gather the cmd name */ while (((c = getch()) != EOF) && !index(" \t\r\n", c)) *cp++ = c; if (c == EOF) return 0; *cp = '\0'; cmdlen = cp - cmdbuf; if (cmdlen == 0) return 0; /* look it up (in the reduced search space) */ for (cmd = cmdhash[hash(cmdbuf[0])]; cmd->Name[0] == cmdbuf[0]; cmd++) { if (strncmp(cmd->Name, cmdbuf, cmdlen) == 0) { if (strcmp(cmd->Name, cmdbuf) == 0) return (data_obj *) cmd; found++; which = cmd; } } if (found > 1) complain("[\"%s\" ambiguous]", cmdbuf); else if (found == 0) complain("[\"%s\" unknown]", cmdbuf); else return (data_obj *) which; } else { static char *strings[(sizeof commands) / sizeof (commands[0])]; static int beenhere = 0; register int com; if (beenhere == 0) { register char **strs = strings; register struct cmd *c = commands; beenhere = 1; for (; c->Name; c++) *strs++ = c->Name; *strs = 0; } if ((com = complete(strings, prompt, NOTHING)) < 0) return 0; return (data_obj *) &commands[com]; } } #endif