home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************
- * This program is Copyright (C) 1986 by Jonathan Payne. JOVE is *
- * provided to you without charge, and with no warranty. You may give *
- * away copies of JOVE, including sources, provided that this notice is *
- * included in all the files. *
- ************************************************************************/
-
- #include "jove.h"
-
- #ifndef TXT_TO_C
- extern int
- EscPrefix(),
- CtlxPrefix(),
- MiscPrefix(),
- UnbindC(),
- ShowVersion(),
- WVisSpace(),
- #ifdef ANSICODES
- AnsiCodes(),
- #endif
- AppReg(),
- Apropos(),
- BackChar(),
- BList(),
- FList(),
- BUpList(),
- FDownList(),
- 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(),
- FSrchND(),
- RevSearch(),
- RSrchND(),
- 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
- ShellProc(),
- ProcInt(),
- ProcQuit(),
- ProcKill(),
- # ifndef PIPEPROCS
- ProcEof(),
- ProcStop(),
- ProcCont(),
- ProcDStop(),
- # endif
- ProcSendData(),
- ProcNewline(),
- ProcList(),
- ProcBind(),
- Iprocess(),
- #endif
-
- #ifdef LISP
- GSexpr(), /* Grind S Expression. */
- AddSpecial(), /* add lisp special form */
- #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[] = {
- #ifdef LISP
- FUNCTION, "add-lisp-special", WIRED_CMD(AddSpecial),
- #endif
- #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-list", WIRED_CMD(BList),
- FUNCTION, "backward-paragraph", WIRED_CMD(BackPara),
- FUNCTION, "backward-s-expression", WIRED_CMD(BSexpr),
- FUNCTION, "backward-sentence", WIRED_CMD(Bos),
- FUNCTION, "backward-up-list", WIRED_CMD(BUpList),
- 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
- FUNCTION, "down-list", WIRED_CMD(FDownList),
- #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
- FUNCTION, "eof-process", WIRED_CMD(ProcEof),
- # 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-list", WIRED_CMD(FList),
- 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-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, "prefix-1", WIRED_CMD(EscPrefix),
- FUNCTION, "prefix-2", WIRED_CMD(CtlxPrefix),
- FUNCTION, "prefix-3", WIRED_CMD(MiscPrefix),
- 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),
- FUNCTION, "process-send-data-no-return", WIRED_CMD(ProcSendData),
- #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-forward-nd", WIRED_CMD(FSrchND),
- FUNCTION, "search-reverse", WIRED_CMD(RevSearch),
- FUNCTION, "search-reverse-nd", WIRED_CMD(RSrchND),
- FUNCTION, "select-buffer", WIRED_CMD(BufSelect),
- FUNCTION, "self-insert", WIRED_CMD(SelfInsert),
- FUNCTION, "set", WIRED_CMD(SetVar),
- FUNCTION, "set-mark", WIRED_CMD(SetMark),
- #ifdef IPROCS /* for GNU compatibility */
- FUNCTION, "shell", WIRED_CMD(ShellProc),
- #endif
- 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
- FUNCTION, "stop-process", WIRED_CMD(ProcStop),
- # 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, CASEIND)) < 0)
- return 0;
- return (data_obj *) &commands[com];
- }
- /* NOTREACHED */
- }
- #endif
-