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