home *** CD-ROM | disk | FTP | other *** search
/ Der Mediaplex Sampler - Die 6 von Plex / 6_v_plex.zip / 6_v_plex / DISK6 / OS_15 / SH.ZIP / SH.H < prev    next >
C/C++ Source or Header  |  1994-01-24  |  18KB  |  619 lines

  1. /* MS-DOS SHELL - Header File
  2.  *
  3.  * MS-DOS SHELL - Copyright (c) 1990 Data Logic Limited and Charles Forsyth
  4.  *
  5.  * This code is based on (in part) the shell program written by Charles
  6.  * Forsyth and is subject to the following copyright restrictions:
  7.  *
  8.  * 1.  Redistribution and use in source and binary forms are permitted
  9.  *     provided that the above copyright notice is duplicated in the
  10.  *     source form and the copyright notice in file sh6.c is displayed
  11.  *     on entry to the program.
  12.  *
  13.  * 2.  The sources (or parts thereof) or objects generated from the sources
  14.  *     (or parts of sources) cannot be sold under any circumstances.
  15.  *
  16.  *    $Header: D:/SRC/SHELL/RCS/sh.h 1.23 90/09/19 15:29:54 Ian_Stewartson Exp $
  17.  *
  18.  *    $Log:    sh.h $
  19.  * Revision 1.23  90/09/19  15:29:54  Ian_Stewartson
  20.  * Allow builtin commands to selected/de-selected
  21.  *
  22.  * Revision 1.22  90/08/24  21:53:13  Ian_Stewartson
  23.  * Add support for POSIX macro command {x#y} and {x%y}
  24.  *
  25.  * Revision 1.21  90/08/14  23:54:44  MS_user
  26.  * Add addition value to env structure
  27.  * Add some new publics
  28.  * Update patchlevel
  29.  *
  30.  * Revision 1.20  90/05/31  09:47:41  MS_user
  31.  * Implement partial write when swapping to disk
  32.  *
  33.  * Revision 1.19  90/05/15  21:08:41  MS_user
  34.  * Release 1.6.2
  35.  *
  36.  * Revision 1.18  90/05/09  20:36:22  MS_user
  37.  * Patchlvel for 1.6.1
  38.  *
  39.  * Revision 1.17  90/05/01  19:58:18  MS_user
  40.  * Change Patchlevel
  41.  *
  42.  * Revision 1.16  90/04/25  22:33:03  MS_user
  43.  * The function anys is now global
  44.  *
  45.  * Revision 1.15  90/04/25  10:58:05  MS_user
  46.  * Add offset in buffer to IO_Args to handle TEXT mode
  47.  *
  48.  * Revision 1.14  90/04/25  09:21:35  MS_user
  49.  * Change version message processing
  50.  *
  51.  * Revision 1.13  90/04/03  18:07:24  MS_user
  52.  * Patchlevel
  53.  *
  54.  * Revision 1.12  90/03/27  20:25:29  MS_user
  55.  * Clear_Extended_File required by sh1 for Interrupt cleanup
  56.  *
  57.  * Revision 1.11  90/03/26  20:58:24  MS_user
  58.  * Change I/O restore so that "exec >filename" works
  59.  *
  60.  * Revision 1.10  90/03/26  04:31:32  MS_user
  61.  * Remove original Interrupt 24 save address
  62.  *
  63.  * Revision 1.9  90/03/16  21:25:55  MS_user
  64.  * Create the MAYBE boolean for stopping the removal of NL by grave.
  65.  *
  66.  * Revision 1.8  90/03/14  19:29:42  MS_user
  67.  * Add some new functions and Buffered Output typedef
  68.  * Add IOTHERE for <<- redirection
  69.  *
  70.  * Revision 1.7  90/03/09  16:10:07  MS_user
  71.  * Add build file name function
  72.  *
  73.  * Revision 1.6  90/03/07  09:43:00  MS_user
  74.  * Change PATCHLEVEL
  75.  *
  76.  * Revision 1.5  90/03/06  15:09:09  MS_user
  77.  * Add some new procedures
  78.  *
  79.  * Revision 1.4  90/02/22  16:40:49  MS_user
  80.  * Add XMS Support
  81.  *
  82.  * Revision 1.3  90/02/16  16:58:48  MS_user
  83.  * Set up 1.5 release
  84.  *
  85.  * Revision 1.2  90/02/14  04:45:33  MS_user
  86.  * Add Interrupt 24 processing and clean up interrupt 0 and 23 processing
  87.  *
  88.  * Revision 1.1  90/01/29  17:46:51  MS_user
  89.  * Initial revision
  90.  *
  91.  *
  92.  */
  93.  
  94. #define PATCHLEVEL      8
  95. #define    LINE_MAX    1000    /* Command line length            */
  96. #define HISTORY_MAX    100    /* History array length            */
  97.                 /* Space for full file name        */
  98. #define FFNAME_MAX    (PATH_MAX + NAME_MAX + 4)
  99. #define CMD_LINE_MAX    2048    /* Max command line length        */
  100. #define SSAVE_IO_SIZE    4    /* Save IO array malloc increment    */
  101.  
  102. #define    NPUSH        8    /* limit to input nesting        */
  103.  
  104. #define    NOFILE        20    /* Number of open files            */
  105. #define    NUFILE        10    /* Number of user-accessible files    */
  106. #define    FDBASE        10    /* First file usable by Shell        */
  107.  
  108. #define NL        '\n'
  109. #define SP        ' '
  110. #define    NOT        '^'
  111.  
  112. #define BATCHEXT        ".cmd"
  113.  
  114. /* Here we introduce a new boolean value - MAYBE.  This is required for
  115.  * a special case of the grave function
  116.  */
  117.  
  118. #define MAYBE        (bool)(-1)
  119.  
  120.                 /* Open in create mode            */
  121. #define O_CMASK        (O_WRONLY | O_CREAT | O_TRUNC | O_TEXT)
  122.                 /* Open in create mode for a pipe    */
  123. #define O_PMASK        (O_RDWR | O_CREAT | O_TRUNC | O_TEXT)
  124.                 /* Open in create mode for swap file    */
  125. #define O_SMASK        (O_RDWR | O_CREAT | O_TRUNC | O_BINARY)
  126. #define O_SaMASK    (O_RDWR | O_BINARY)
  127. #define O_RMASK        (O_RDONLY | O_NOINHERIT | O_TEXT)
  128.  
  129. /*
  130.  * shell components
  131.  */
  132.  
  133. #define    QUOTE        0200
  134. #define    CMASK        0377
  135. #define    QMASK        (CMASK & ~QUOTE)
  136.  
  137. #define    NOBLOCK        ((C_Op *)NULL)
  138. #define    NOWORD        ((char *)NULL)
  139. #define    NOWORDS        ((char **)NULL)
  140. #define    NOPIPE        (-1)
  141.  
  142. /*
  143.  * Description of a command or an operation on commands.
  144.  * Might eventually use a union.
  145.  */
  146.  
  147. typedef struct op {
  148.     int            type;        /* operation type, see below    */
  149.     char        **words;    /* arguments to a command    */
  150.     struct ioword    **ioact;    /* IO actions (eg, < > >>)    */
  151.     struct op        *left;
  152.     struct op        *right;
  153.     char        *str;        /* identifier for case and for    */
  154. } C_Op;
  155.  
  156. #define    TCOM        1    /* command                */
  157. #define    TPAREN        2    /* (c-list)                */
  158. #define    TPIPE        3    /* a | b                */
  159. #define    TLIST        4    /* a [&;] b                */
  160. #define    TOR        5    /* ||                    */
  161. #define    TAND        6    /* &&                    */
  162. #define    TFOR        7    /* FOR                    */
  163. #define    TDO        8    /* DO                    */
  164. #define    TCASE        9    /* CASE                    */
  165. #define    TIF        10    /* IF                    */
  166. #define    TWHILE        11    /* WHILE                */
  167. #define    TUNTIL        12    /* UNTIL                */
  168. #define    TELIF        13    /* ELSE IF                */
  169. #define    TPAT        14    /* pattern in case            */
  170. #define    TBRACE        15    /* {c-list}                */
  171. #define    TASYNC        16    /* c &                    */
  172. #define    TFUNC        17    /* c () {c-list}            */
  173.  
  174. /* Built in Command list */
  175.  
  176. struct    builtin {
  177.     char    *command;
  178.     int        (*fn)(C_Op *);
  179.     int        mode;
  180. };
  181.  
  182. /*
  183.  * Valid values of mode
  184.  */
  185.  
  186. #define BLT_ALWAYS    0x0001    /* Always use builtin version        */
  187. #define BLT_CURRENT    0x0002    /* Currently use builtin version    */
  188.  
  189. /*
  190.  * actions determining the environment of a process
  191.  */
  192.  
  193. #define    FEXEC        0x0001    /* execute without forking        */
  194.  
  195. extern unsigned int    SW_intr;    /* interrupt pending        */
  196.  
  197. /*
  198.  * flags to control evaluation of words
  199.  */
  200.  
  201. #define    DOSUB        0x01    /* interpret $, `, and quotes        */
  202. #define    DOBLANK        0x02    /* perform blank interpretation        */
  203. #define    DOGLOB        0x04    /* interpret [?*            */
  204. #define    DOKEY        0x08    /* move words with `=' to 2nd arg. list */
  205. #define    DOTRIM        0x10    /* trim resulting string        */
  206.  
  207. #define    DOALL        (DOSUB | DOBLANK | DOGLOB | DOKEY | DOTRIM)
  208.  
  209. extern char        **dolv;        /* $<numeric> values        */
  210. extern int        dolc;        /* $<numeric> count        */
  211. extern int        fn_area_number;    /* Next function area number    */
  212. extern int        exstat;
  213. extern char        gflg;
  214. extern bool        talking;    /* interactive (talking-type    */
  215. extern int        execflg;
  216. extern int        multiline;    /* \n changed to ;        */
  217. extern int        *failpt;
  218. extern int        *errpt;
  219. extern int        inparse;    /* In parser flag        */
  220. extern int        Current_Event;    /* Current history event    */
  221.  
  222. /*
  223.  * Buffered Output function
  224.  */
  225.  
  226. #define BIO_LENGTH    20        /* BIO size            */
  227.  
  228. typedef struct    Out_Buffer {
  229.     int        ob_fid;            /* File handler            */
  230.     char    *ob_start;        /* Start of buffer        */
  231.     char    *ob_cur;        /* Current position        */
  232. } Out_Buf;
  233.  
  234. /*
  235.  * Break/Continue (in for and while), Return and Exit handler
  236.  */
  237.  
  238. typedef struct brkcon {
  239.     jmp_buf        brkpt;
  240.     struct brkcon    *nextlev;
  241. } Break_C;
  242.                 /* Values returned by longjmp        */
  243. #define BC_LOAD        0    /* Load condition            */
  244. #define BC_BREAK    1    /* Break condition            */
  245. #define BC_CONTINUE    2    /* Continue condition            */
  246.  
  247. extern Break_C    *Break_List;    /* Break list for FOR/WHILE        */
  248. extern Break_C    *Return_List;    /* Return list for RETURN        */
  249. extern Break_C    *SShell_List;    /* SubShell list for EXIT        */
  250. extern bool    level0;        /* Level zero (read profile)        */
  251. extern bool    r_flag;        /* Read only shell            */
  252. extern bool    History_Enabled;
  253.  
  254. /*
  255.  * Save Standard Input/Output/Error structure
  256.  */
  257.  
  258. typedef struct save_io {
  259.     int        depth;            /* Execute recursive depth    */
  260.     int        fp[STDERR_FILENO + 1];    /* File handlers        */
  261. } Save_IO;
  262.  
  263. extern Save_IO    *SSave_IO;        /* Save IO array        */
  264. extern int    NSave_IO_E;        /* Number of entries        */
  265. extern int    MSave_IO_E;        /* Max Number of entries    */
  266.  
  267. /*
  268.  * Function tree processing
  269.  */
  270.  
  271. typedef struct fun_op {
  272.     struct fun_op    *next;        /* Link                */
  273.     C_Op        *tree;        /* The tree itself        */
  274. } Fun_Ops;
  275.  
  276. extern Fun_Ops    *fun_list;        /* List header            */
  277.  
  278. /*
  279.  * redirection
  280.  */
  281.  
  282. typedef struct ioword {
  283.     short    io_unit;    /* unit affected            */
  284.     short    io_flag;    /* action (below)            */
  285.     char    *io_name;    /* file name                */
  286. } IO_Actions;
  287.  
  288. #define    IOREAD        0x01    /* <                    */
  289. #define    IOHERE        0x02    /* << (here file)            */
  290. #define    IOWRITE        0x04    /* >                    */
  291. #define    IOCAT        0x08    /* >>                    */
  292. #define    IOXHERE        0x10    /* ${}, ` in <<                */
  293. #define    IODUP        0x20    /* >&digit                */
  294. #define    IOCLOSE        0x40    /* >&-                    */
  295. #define    IOTHERE        0x80    /* <<- (here file            */
  296.  
  297. #define    IODEFAULT    (-1)    /* token for default IO unit        */
  298.  
  299. /*
  300.  * parsing & execution environment
  301.  */
  302.  
  303. typedef struct env {
  304.     char    *cline;            /* Current line buffer        */
  305.     char    *linep;            /* Current pointer in line    */
  306.     char    *eline;            /* End of line pointer        */
  307.     struct io    *iobase;
  308.     struct io    *iop;
  309.     int        *errpt;
  310.     bool    eof_p;            /* EOF processing enabled    */
  311.     int        iofd;
  312.     DIR        *cdir;            /* Currently open directory    */
  313.     struct env    *oenv;            /* Previous environment        */
  314. } Environ;
  315.  
  316. extern Environ        e;
  317.  
  318. /*
  319.  * here documents
  320.  */
  321.  
  322. typedef struct here {
  323.     char        *h_tag;
  324.     int            h_dosub;
  325.     IO_Actions        *h_iop;
  326.     struct here        *h_next;
  327. } Here_D;
  328.  
  329. /*
  330.  * flags:
  331.  *
  332.  * -a: Set all environment variables to exported
  333.  * -e: Quit on error
  334.  * -f: Disable file name expansion
  335.  * -k: Look for name=value everywhere on command line
  336.  * -n: No execution
  337.  * -t: exit after reading and executing one command
  338.  * -u: Abort if environment variable is not set
  339.  * -v: Echo as read
  340.  * -x: Trace
  341.  */
  342.  
  343. #define FL_TEST(x)    (flags & (1L << ((x) - 'a')))
  344. #define FL_SET(x)    flags |= (1L << ((x) - 'a'))
  345. #define FL_CLEAR(x)    flags &= (~(1L << ((x) - 'a')))
  346.  
  347. extern long    flags;
  348. extern char    *null;        /* null value for variable        */
  349. extern long    ourtrap;    /* Signal processing required        */
  350. extern int    trapset;    /* trap pending                */
  351. extern int    yynerrs;    /* yacc                    */
  352. extern int    Execute_stack_depth;    /* execute function recursion    */
  353.                     /* depth            */
  354.  
  355. /*
  356.  * Mode values for new gmatch
  357.  */
  358.  
  359. #define GM_ALL        0        /* Match full string        */
  360. #define GM_SHORTEST    1        /* Shortest prefix/suffix    */
  361. #define GM_LONGEST    2        /* Longest prefix/suffix    */
  362.  
  363. /*
  364. /*
  365.  * Variable list
  366.  */
  367.  
  368. typedef struct var {
  369.     char        *value;        /* Value            */
  370.     char        *name;        /* Name                */
  371.     struct var        *next;        /* Link                */
  372.     char        status;        /* Type, see below        */
  373. } Var_List;
  374.  
  375. #define    COPYV        1    /* flag to setval, suggesting copy    */
  376. #define    RONLY        0x01    /* variable is read-only        */
  377. #define    EXPORT        0x02    /* variable is to be exported        */
  378. #define    GETCELL        0x04    /* name & value space was got with getcell */
  379. #define PONLY        0x08    /* PATH Value - no unset        */
  380. #define C_MSDOS        0x10    /* Convert to MSDOS format        */
  381.  
  382. extern Var_List    *vlist;        /* dictionary                */
  383. extern Var_List **S_UL;        /* Start address update location    */
  384. extern Var_List    *path;        /* search path for commands        */
  385. extern Var_List    *ps1;        /* Prompt 1                */
  386. extern Var_List    *ps2;        /* Prompt 2                */
  387. extern Var_List    *ifs;        /* Interfield separators        */
  388. extern Var_List    *C_dir;        /* Current directory            */
  389. extern char    *last_prompt;    /* Last prompt output            */
  390. extern char    *home;        /* Home string                */
  391. extern char    *shell;        /* Shell string                */
  392. extern char    *hsymbol;    /* Hash string                */
  393. extern char    *msymbol;    /* Minus string                */
  394. extern char    *Program_Name;    /* Program name from argv[0]        */
  395. extern char    *spcl2;
  396. extern char    *history_file;
  397.  
  398. /*
  399.  * SubShell Save Structure
  400.  */
  401.  
  402. typedef struct subshell {
  403.     int        depth;            /* Sub_Shell Depth        */
  404.     Var_List    *header;        /* Header start            */
  405. } S_SubShell;
  406.  
  407. extern S_SubShell    *SubShells;    /* Save Vars array        */
  408. extern int        NSubShells;    /* Number of entries        */
  409. extern int        MSubShells;    /* Max Number of entries    */
  410.  
  411. /* io buffer */
  412.  
  413. typedef struct iobuf {
  414.     unsigned int    id;        /* buffer id            */
  415.     char        buf[512];    /* buffer            */
  416.     char        *bufp;        /* pointer into buffer        */
  417.     char        *ebufp;        /* pointer to end of buffer    */
  418. } IO_Buf;
  419.  
  420. /* possible arguments to an IO function */
  421.  
  422. typedef struct ioarg {
  423.     char        *aword;
  424.     char        **awordlist;
  425.     int            afile;        /* file descriptor        */
  426.     unsigned int    afid;        /* buffer id            */
  427.     long        afpos;        /* file position        */
  428.     int            afoff;        /* Offset in buffer        */
  429.     IO_Buf        *afbuf;        /* buffer for this file        */
  430. } IO_Args;
  431.  
  432. #define AFID_NOBUF    (~0)
  433. #define AFID_ID        0
  434.  
  435. extern IO_Args    ioargstack[NPUSH];    /* IO argument stack        */
  436.  
  437. /* an input generator's state */
  438.  
  439. typedef struct io {
  440.     int            (*iofn)(struct io *);
  441.     IO_Args        *argp;
  442.     int            peekc;
  443.     char        prev;        /* previous character read by readc() */
  444.     char        nlcount;    /* for `'s            */
  445.     char        xchar;        /* for `'s            */
  446.     char        task;        /* reason for pushed IO        */
  447.     char        dflag;        /* Special processing flag    */
  448. } IO_State;
  449.  
  450. #define DSA_NULL    0x00        /* No special processing req    */
  451. #define DSA_STAR    0x01        /* Special processing for "$*"    */
  452. #define DSA_AMP        0x02        /* Special processing for "$@"    */
  453. #define DSA_MODE    0x03        /* Mode flag            */
  454. #define DSA_END        0x04        /* Last word processing        */
  455. #define DSA_START    0x08        /* First word processed?    */
  456. #define DSA_START1    0x10        /* Subsequent word processed    */
  457. #define DSA_END1    0x20        /* End processing for word    */
  458.  
  459. extern IO_State        iostack[NPUSH];    /* IO Stack            */
  460.  
  461. #define    XOTHER        0    /* none of the below            */
  462. #define    XDOLL        1    /* expanding ${}            */
  463. #define    XGRAVE        2    /* expanding `'s            */
  464. #define    XIO        3    /* file IO                */
  465.  
  466. /* in substitution */
  467.  
  468. #define    INSUB()            (e.iop->task == XGRAVE || e.iop->task == XDOLL)
  469.  
  470. /*
  471.  * IO control
  472.  */
  473.  
  474. extern IO_Args        temparg;    /* temporary for PUSHIO */
  475. #define    PUSHIO(what, arg, gen)        ((temparg.what = (arg)),    \
  476.                       pushio (&temparg, (gen)))
  477.  
  478. #define    RUN(what, arg, gen, loop)    ((temparg.what = (arg)),    \
  479.                       run (&temparg, (gen), loop))
  480.  
  481. typedef struct wdblock {
  482.     short    w_bsize;
  483.     short    w_nword;
  484.     char    *w_words[1];
  485. } Word_B;
  486.  
  487. extern Word_B    *wdlist;
  488. extern Word_B    *iolist;
  489.  
  490. /*
  491.  * storage allocation
  492.  */
  493.  
  494. extern int        areanum;    /* current allocation area */
  495.  
  496. #define    NEW(type)    (type *)getcell (sizeof (type))
  497. #define    DELETE(obj)    freecell ((char *)obj)
  498.  
  499. /* Functions */
  500.  
  501. extern void    main (int, char **);
  502. extern void    setdash (void);
  503. extern void    fail (void);
  504. extern void    leave (void);
  505. extern void    print_warn (char *, ...);
  506. extern void    print_error (char *, ...);
  507. extern bool    newenv (int);
  508. extern void    quitenv (void);
  509. extern char    *putn (int);
  510. extern void    onintr (int);
  511. extern char    *space (int);
  512. extern char    *strsave (char *, int);
  513. extern void    sig (int);
  514. extern void    runtrap (int);
  515. extern Var_List    *lookup (char *, bool);
  516. extern void    setval (Var_List *, char *);
  517. extern void    s_vstatus (Var_List *, int);
  518. extern bool    isassign (char *);
  519. extern bool    assign (char *, int);
  520. extern bool    gmatch (char *, char *, bool, char **, int);
  521. extern bool    gmatch_suffix (char *, char *, bool, char **, int);
  522. extern char    *getcell (unsigned int);
  523. extern void    freecell (char *);
  524. extern void    freearea (int);
  525. extern void    setarea (char *, int);
  526. extern int    getarea (char *);
  527. extern C_Op    *yyparse (void);
  528. extern int    execute (C_Op *, int, int, int);
  529. extern int    run (IO_Args *, int (*)(IO_State *), bool);
  530. extern int    Getc (int);
  531. extern void    unget (int);
  532. extern int    eofc (void);
  533. extern int    readc (void);
  534. extern void    pushio (IO_Args *, int (*)(IO_State *));
  535. extern int    nlchar (IO_State *);
  536. extern int    wdchar (IO_State *);
  537. extern int    dol_char (IO_State *);
  538. extern int    strchar (IO_State *);
  539. extern int    qstrchar (IO_State *);
  540. extern int    filechar (IO_State *);
  541. extern int    gravechar (IO_State *);
  542. extern int    qgravechar (IO_State *);
  543. extern int    sgravechar (IO_State *);
  544. extern int    linechar (IO_State *);
  545. extern void    closeall (void);
  546. extern int    remap (int);
  547. extern int    openpipe (void);
  548. extern void    closepipe (int);
  549. extern void    markhere (char *, IO_Actions *);
  550. extern void    gethere (void);
  551. extern int    herein (char *, int);
  552. extern void    scraphere (void);
  553. extern void    freehere (int);
  554.  
  555. extern char    **eval (char **, int);
  556. extern char    **makenv (void);
  557. extern char    *evalstr (char *, int);
  558. extern int    subgetc (char, bool);
  559. extern Word_B    *addword (char *, Word_B *);
  560. extern char    **getwords (Word_B *);
  561. extern void    put_prompt (char *);
  562. extern bool    eqname (char *, char *);
  563. extern bool    any (char, char *);
  564. extern int    (*inbuilt (char *, bool *))();
  565. extern char    *path_append (char *, char *, char *);
  566. extern void    unset (char *, bool);
  567. extern int    S_open (bool, char *, int, ...);
  568. extern int    S_close (int, bool);
  569. extern int    S_dup (int);
  570. extern int    S_dup2 (int, int);
  571. extern int    S_Remap (int, int);
  572. extern void    S_Delete (int);
  573. extern void    Getcwd (void);
  574. extern char    *g_tempname (void);
  575. extern void    S_puts (char *);
  576. extern void    S_putc (int);
  577. extern bool    check_rsh (char *);
  578. extern int    O_for_execute (char *, char **, int *);
  579. extern int    SA_spawn (char **);
  580. extern char    *findeq (char *);
  581. extern int    restore_std (int, bool);
  582. extern void    Load_History (void);
  583. extern void    Dump_History (void);
  584. extern void    Display_History (void);
  585. extern void    Clear_History (void);
  586. extern void    v1_puts (char *);
  587. extern void    v1a_puts (char *);
  588. extern void    v1_putc (char);
  589. extern void    v1printf (char *, ...);
  590. extern int    Get_stdin (IO_Args *);
  591. extern int    Process_Escape (char **);
  592. extern void    Add_History (bool);
  593. extern void    Convert_Slashes (char *);
  594. extern void    Print_ExTree (C_Op *);
  595. extern Fun_Ops    *Fun_Search (char *);
  596. extern void    Save_Function (C_Op *, bool);
  597. extern int    getn (char *);
  598. extern int    Create_NG_VL (void);
  599. extern void    Delete_G_VL (void);
  600. extern void    Restore_Dir (char *);
  601. extern void    Restore_Environment (int, int);
  602. extern int    sort_compare (char **, char **);
  603. extern int    Check_Script (char *, char **, int *);
  604. extern bool    Interactive (void);
  605. extern void    In_Col_Zero (void);
  606. extern char    *Build_H_Filename (char *);
  607. extern void    Configure_Keys (void);
  608. extern bool    Ring_Bell (void);
  609. extern void    Close_buffer (Out_Buf *);
  610. extern void    Add_buffer (char, Out_Buf *);
  611. extern void    Adds_buffer (char *, Out_Buf *);
  612. extern Out_Buf    *Open_buffer (int, bool);
  613. extern int    collect (int, int);
  614. extern void    Clear_Extended_File (void);
  615. extern void    Print_Version (int);
  616. extern bool    anys (char *, char *);
  617. extern C_Op    *Copy_Function (C_Op *);
  618. extern void    Convert_Backslashes (char *);
  619.