home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MISC / GNU / SH164AS.ZIP / SHELL / SH.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-28  |  19.2 KB  |  674 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    127    /* 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. /* Here we introduce a new boolean value - MAYBE.  This is required for
  113.  * a special case of the grave function
  114.  */
  115.  
  116. #define MAYBE        (bool)(-1)
  117.  
  118.                 /* Open in create mode            */
  119. #define O_CMASK        (O_WRONLY | O_CREAT | O_TRUNC | O_TEXT)
  120.                 /* Open in create mode for a pipe    */
  121. #define O_PMASK        (O_RDWR | O_CREAT | O_TRUNC | O_TEXT)
  122.                 /* Open in create mode for swap file    */
  123. #define O_SMASK        (O_RDWR | O_CREAT | O_TRUNC | O_BINARY)
  124. #define O_SaMASK    (O_RDWR | O_BINARY)
  125. #define O_RMASK        (O_RDONLY | O_NOINHERIT | O_TEXT)
  126.  
  127. /*
  128.  * shell components
  129.  */
  130.  
  131. #define    QUOTE        0200
  132. #define    CMASK        0377
  133. #define    QMASK        (CMASK & ~QUOTE)
  134.  
  135. #define    NOBLOCK        ((C_Op *)NULL)
  136. #define    NOWORD        ((char *)NULL)
  137. #define    NOWORDS        ((char **)NULL)
  138. #define    NOPIPE        (-1)
  139.  
  140. /*
  141.  * Description of a command or an operation on commands.
  142.  * Might eventually use a union.
  143.  */
  144.  
  145. typedef struct op {
  146.     int            type;        /* operation type, see below    */
  147.     char        **words;    /* arguments to a command    */
  148.     struct ioword    **ioact;    /* IO actions (eg, < > >>)    */
  149.     struct op        *left;
  150.     struct op        *right;
  151.     char        *str;        /* identifier for case and for    */
  152. } C_Op;
  153.  
  154. #define    TCOM        1    /* command                */
  155. #define    TPAREN        2    /* (c-list)                */
  156. #define    TPIPE        3    /* a | b                */
  157. #define    TLIST        4    /* a [&;] b                */
  158. #define    TOR        5    /* ||                    */
  159. #define    TAND        6    /* &&                    */
  160. #define    TFOR        7    /* FOR                    */
  161. #define    TDO        8    /* DO                    */
  162. #define    TCASE        9    /* CASE                    */
  163. #define    TIF        10    /* IF                    */
  164. #define    TWHILE        11    /* WHILE                */
  165. #define    TUNTIL        12    /* UNTIL                */
  166. #define    TELIF        13    /* ELSE IF                */
  167. #define    TPAT        14    /* pattern in case            */
  168. #define    TBRACE        15    /* {c-list}                */
  169. #define    TASYNC        16    /* c &                    */
  170. #define    TFUNC        17    /* c () {c-list}            */
  171.  
  172. /* Built in Command list */
  173.  
  174. struct    builtin {
  175.     char    *command;
  176.     int        (*fn)(C_Op *);
  177.     int        mode;
  178. };
  179.  
  180. /*
  181.  * Valid values of mode
  182.  */
  183.  
  184. #define BLT_ALWAYS    0x0001    /* Always use builtin version        */
  185. #define BLT_CURRENT    0x0002    /* Currently use builtin version    */
  186.  
  187. /*
  188.  * actions determining the environment of a process
  189.  */
  190.  
  191. #define    FEXEC        0x0001    /* execute without forking        */
  192.  
  193. /* MSDOS Memory Control Block chain structure */
  194.  
  195. #pragma pack (1)
  196. struct MCB_list    {
  197.     char        MCB_type;    /* M or Z            */
  198.     unsigned int    MCB_pid;    /* Process ID            */
  199.     unsigned int    MCB_len;    /* MCB length            */
  200. };
  201. #pragma pack ()
  202.  
  203. #define MCB_CON        'M'        /* More MCB's            */
  204. #define MCB_END        'Z'        /* Last MCB's            */
  205.  
  206. /* Externs for Swapper assembler function */
  207.  
  208. extern char        cmd_line[];    /* Command line            */
  209. extern char        path_line[];    /* Process path            */
  210. extern unsigned int    SW_intr;    /* interrupt pending        */
  211. extern unsigned int    SW_Blocks;    /* Number of blocks to read    */
  212. extern unsigned int    SW_SBlocks;    /* Short Number of blocks to    */
  213.                     /* read                */
  214. extern int        SW_fp;        /* File or EMS Handler        */
  215. extern int        SW_Pwrite;    /* Partial write to disk?    */
  216. extern unsigned long    SW_EMstart;    /* Start addr of extend mem    */
  217. extern unsigned int    SW_Mode;    /* Type of swapping to do    */
  218.                     /* 1 - disk            */
  219.                     /* 2 - Extended    memory        */
  220.                     /* 3 - EMS Driver        */
  221.                     /* 4 - XMS Driver        */
  222. extern unsigned int    SW_EMSFrame;    /* EMS Frame segment        */
  223.  
  224. extern unsigned int    etext;        /* End of text segment        */
  225. extern int        Swap_Mode;    /* Swapping mode        */
  226.  
  227. /* If you change these values, change sh7, swap_device as well */
  228.  
  229. #define SWAP_OFF    0x0000        /* No swapping            */
  230. #define SWAP_DISK    0x0001        /* Disk only            */
  231. #define SWAP_EXTEND    0x0002        /* Extended memory        */
  232. #define SWAP_EXPAND    0x0004        /* Expanded memory        */
  233.  
  234. /*
  235.  * flags to control evaluation of words
  236.  */
  237.  
  238. #define    DOSUB        0x01    /* interpret $, `, and quotes        */
  239. #define    DOBLANK        0x02    /* perform blank interpretation        */
  240. #define    DOGLOB        0x04    /* interpret [?*            */
  241. #define    DOKEY        0x08    /* move words with `=' to 2nd arg. list */
  242. #define    DOTRIM        0x10    /* trim resulting string        */
  243.  
  244. #define    DOALL        (DOSUB | DOBLANK | DOGLOB | DOKEY | DOTRIM)
  245.  
  246. extern char        **dolv;        /* $<numeric> values        */
  247. extern int        dolc;        /* $<numeric> count        */
  248. extern int        fn_area_number;    /* Next function area number    */
  249. extern int        exstat;
  250. extern char        gflg;
  251. extern bool        talking;    /* interactive (talking-type    */
  252. extern int        execflg;
  253. extern int        multiline;    /* \n changed to ;        */
  254. extern int        *failpt;
  255. extern int        *errpt;
  256. extern int        inparse;    /* In parser flag        */
  257. extern int        Current_Event;    /* Current history event    */
  258.  
  259. /*
  260.  * Buffered Output function
  261.  */
  262.  
  263. #define BIO_LENGTH    20        /* BIO size            */
  264.  
  265. typedef struct    Out_Buffer {
  266.     int        ob_fid;            /* File handler            */
  267.     char    *ob_start;        /* Start of buffer        */
  268.     char    *ob_cur;        /* Current position        */
  269. } Out_Buf;
  270.  
  271. /*
  272.  * Break/Continue (in for and while), Return and Exit handler
  273.  */
  274.  
  275. typedef struct brkcon {
  276.     jmp_buf        brkpt;
  277.     struct brkcon    *nextlev;
  278. } Break_C;
  279.                 /* Values returned by longjmp        */
  280. #define BC_LOAD        0    /* Load condition            */
  281. #define BC_BREAK    1    /* Break condition            */
  282. #define BC_CONTINUE    2    /* Continue condition            */
  283.  
  284. extern Break_C    *Break_List;    /* Break list for FOR/WHILE        */
  285. extern Break_C    *Return_List;    /* Return list for RETURN        */
  286. extern Break_C    *SShell_List;    /* SubShell list for EXIT        */
  287. extern bool    level0;        /* Level zero (read profile)        */
  288. extern bool    r_flag;        /* Read only shell            */
  289. extern bool    History_Enabled;
  290.  
  291. /*
  292.  * Save Standard Input/Output/Error structure
  293.  */
  294.  
  295. typedef struct save_io {
  296.     int        depth;            /* Execute recursive depth    */
  297.     int        fp[STDERR_FILENO + 1];    /* File handlers        */
  298. } Save_IO;
  299.  
  300. extern Save_IO    *SSave_IO;        /* Save IO array        */
  301. extern int    NSave_IO_E;        /* Number of entries        */
  302. extern int    MSave_IO_E;        /* Max Number of entries    */
  303.  
  304. /*
  305.  * Function tree processing
  306.  */
  307.  
  308. typedef struct fun_op {
  309.     struct fun_op    *next;        /* Link                */
  310.     C_Op        *tree;        /* The tree itself        */
  311. } Fun_Ops;
  312.  
  313. extern Fun_Ops    *fun_list;        /* List header            */
  314.  
  315. /*
  316.  * redirection
  317.  */
  318.  
  319. typedef struct ioword {
  320.     short    io_unit;    /* unit affected            */
  321.     short    io_flag;    /* action (below)            */
  322.     char    *io_name;    /* file name                */
  323. } IO_Actions;
  324.  
  325. #define    IOREAD        0x01    /* <                    */
  326. #define    IOHERE        0x02    /* << (here file)            */
  327. #define    IOWRITE        0x04    /* >                    */
  328. #define    IOCAT        0x08    /* >>                    */
  329. #define    IOXHERE        0x10    /* ${}, ` in <<                */
  330. #define    IODUP        0x20    /* >&digit                */
  331. #define    IOCLOSE        0x40    /* >&-                    */
  332. #define    IOTHERE        0x80    /* <<- (here file            */
  333.  
  334. #define    IODEFAULT    (-1)    /* token for default IO unit        */
  335.  
  336. /*
  337.  * parsing & execution environment
  338.  */
  339.  
  340. typedef struct env {
  341.     char    *cline;            /* Current line buffer        */
  342.     char    *linep;            /* Current pointer in line    */
  343.     char    *eline;            /* End of line pointer        */
  344.     struct io    *iobase;
  345.     struct io    *iop;
  346.     int        *errpt;
  347.     bool    eof_p;            /* EOF processing enabled    */
  348.     int        iofd;
  349.     DIR        *cdir;            /* Currently open directory    */
  350.     struct env    *oenv;            /* Previous environment        */
  351. } Environ;
  352.  
  353. extern Environ        e;
  354.  
  355. /*
  356.  * here documents
  357.  */
  358.  
  359. typedef struct here {
  360.     char        *h_tag;
  361.     int            h_dosub;
  362.     IO_Actions        *h_iop;
  363.     struct here        *h_next;
  364. } Here_D;
  365.  
  366. /*
  367.  * flags:
  368.  *
  369.  * -a: Set all environment variables to exported
  370.  * -e: Quit on error
  371.  * -f: Disable file name expansion
  372.  * -k: Look for name=value everywhere on command line
  373.  * -n: No execution
  374.  * -t: exit after reading and executing one command
  375.  * -u: Abort if environment variable is not set
  376.  * -v: Echo as read
  377.  * -x: Trace
  378.  */
  379.  
  380. #define FL_TEST(x)    (flags & (1L << ((x) - 'a')))
  381. #define FL_SET(x)    flags |= (1L << ((x) - 'a'))
  382. #define FL_CLEAR(x)    flags &= (~(1L << ((x) - 'a')))
  383.  
  384. extern long    flags;
  385. extern char    *null;        /* null value for variable        */
  386. extern long    ourtrap;    /* Signal processing required        */
  387. extern int    trapset;    /* trap pending                */
  388. extern int    yynerrs;    /* yacc                    */
  389. extern int    Execute_stack_depth;    /* execute function recursion    */
  390.                     /* depth            */
  391.  
  392. /*
  393.  * Mode values for new gmatch 
  394.  */
  395.  
  396. #define GM_ALL        0        /* Match full string        */
  397. #define GM_SHORTEST    1        /* Shortest prefix/suffix    */
  398. #define GM_LONGEST    2        /* Longest prefix/suffix    */
  399.  
  400. /*
  401. /*
  402.  * Variable list
  403.  */
  404.  
  405. typedef struct var {
  406.     char        *value;        /* Value            */
  407.     char        *name;        /* Name                */
  408.     struct var        *next;        /* Link                */
  409.     char        status;        /* Type, see below        */
  410. } Var_List;
  411.  
  412. #define    COPYV        1    /* flag to setval, suggesting copy    */
  413. #define    RONLY        0x01    /* variable is read-only        */
  414. #define    EXPORT        0x02    /* variable is to be exported        */
  415. #define    GETCELL        0x04    /* name & value space was got with getcell */
  416. #define PONLY        0x08    /* PATH Value - no unset        */
  417. #define C_MSDOS        0x10    /* Convert to MSDOS format        */
  418.  
  419. extern Var_List    *vlist;        /* dictionary                */
  420. extern Var_List **S_UL;        /* Start address update location    */
  421. extern Var_List    *path;        /* search path for commands        */
  422. extern Var_List    *ps1;        /* Prompt 1                */
  423. extern Var_List    *ps2;        /* Prompt 2                */
  424. extern Var_List    *ifs;        /* Interfield separators        */
  425. extern Var_List    *C_dir;        /* Current directory            */
  426. extern char    *last_prompt;    /* Last prompt output            */
  427. extern char    *home;        /* Home string                */
  428. extern char    *shell;        /* Shell string                */
  429. extern char    *hsymbol;    /* Hash string                */
  430. extern char    *msymbol;    /* Minus string                */
  431. extern char    *Program_Name;    /* Program name from argv[0]        */
  432. extern char    *spcl2;
  433. extern char    *history_file;
  434.  
  435. /*
  436.  * SubShell Save Structure
  437.  */
  438.  
  439. typedef struct subshell {
  440.     int        depth;            /* Sub_Shell Depth        */
  441.     Var_List    *header;        /* Header start            */
  442. } S_SubShell;
  443.  
  444. extern S_SubShell    *SubShells;    /* Save Vars array        */
  445. extern int        NSubShells;    /* Number of entries        */
  446. extern int        MSubShells;    /* Max Number of entries    */
  447.  
  448. /* io buffer */
  449.  
  450. typedef struct iobuf {
  451.     unsigned int    id;        /* buffer id            */
  452.     char        buf[512];    /* buffer            */
  453.     char        *bufp;        /* pointer into buffer        */
  454.     char        *ebufp;        /* pointer to end of buffer    */
  455. } IO_Buf;
  456.  
  457. /* possible arguments to an IO function */
  458.  
  459. typedef struct ioarg {
  460.     char        *aword;
  461.     char        **awordlist;
  462.     int            afile;        /* file descriptor        */
  463.     unsigned int    afid;        /* buffer id            */
  464.     long        afpos;        /* file position        */
  465.     int            afoff;        /* Offset in buffer        */
  466.     IO_Buf        *afbuf;        /* buffer for this file        */
  467. } IO_Args;
  468.  
  469. #define AFID_NOBUF    (~0)
  470. #define AFID_ID        0
  471.  
  472. extern IO_Args    ioargstack[NPUSH];    /* IO argument stack        */
  473.  
  474. /* an input generator's state */
  475.  
  476. typedef struct io {
  477.     int            (*iofn)(struct io *);
  478.     IO_Args        *argp;
  479.     int            peekc;
  480.     char        prev;        /* previous character read by readc() */
  481.     char        nlcount;    /* for `'s            */
  482.     char        xchar;        /* for `'s            */
  483.     char        task;        /* reason for pushed IO        */
  484.     char        dflag;        /* Special processing flag    */
  485. } IO_State;
  486.  
  487. #define DSA_NULL    0x00        /* No special processing req    */
  488. #define DSA_STAR    0x01        /* Special processing for "$*"    */
  489. #define DSA_AMP        0x02        /* Special processing for "$@"    */
  490. #define DSA_MODE    0x03        /* Mode flag            */
  491. #define DSA_END        0x04        /* Last word processing        */
  492. #define DSA_START    0x08        /* First word processed?    */
  493. #define DSA_START1    0x10        /* Subsequent word processed    */
  494. #define DSA_END1    0x20        /* End processing for word    */
  495.  
  496. extern IO_State        iostack[NPUSH];    /* IO Stack            */
  497.  
  498. #define    XOTHER        0    /* none of the below            */
  499. #define    XDOLL        1    /* expanding ${}            */
  500. #define    XGRAVE        2    /* expanding `'s            */
  501. #define    XIO        3    /* file IO                */
  502.  
  503. /* in substitution */
  504.  
  505. #define    INSUB()            (e.iop->task == XGRAVE || e.iop->task == XDOLL)
  506.  
  507. /*
  508.  * IO control
  509.  */
  510.  
  511. extern IO_Args        temparg;    /* temporary for PUSHIO */
  512. #define    PUSHIO(what, arg, gen)        ((temparg.what = (arg)),    \
  513.                       pushio (&temparg, (gen)))
  514.  
  515. #define    RUN(what, arg, gen, loop)    ((temparg.what = (arg)),    \
  516.                       run (&temparg, (gen), loop))
  517.  
  518. typedef struct wdblock {
  519.     short    w_bsize;
  520.     short    w_nword;
  521.     char    *w_words[1];
  522. } Word_B;
  523.  
  524. extern Word_B    *wdlist;
  525. extern Word_B    *iolist;
  526.  
  527. /*
  528.  * storage allocation
  529.  */
  530.  
  531. extern int        areanum;    /* current allocation area */
  532.  
  533. #define    NEW(type)    (type *)getcell (sizeof (type))
  534. #define    DELETE(obj)    freecell ((char *)obj)
  535.  
  536. /* Functions */
  537.  
  538. extern void    main (int, char **);
  539. extern void    setdash (void);
  540. extern void    fail (void);
  541. extern void    leave (void);
  542. extern void    print_warn (char *, ...);
  543. extern void    print_error (char *, ...);
  544. extern bool    newenv (int);
  545. extern void    quitenv (void);
  546. extern char    *putn (int);
  547. extern void    onintr (int);
  548. extern char    *space (int);
  549. extern char    *strsave (char *, int);
  550. extern void    sig (int);
  551. extern void    runtrap (int);
  552. extern Var_List    *lookup (char *, bool);
  553. extern void    setval (Var_List *, char *);
  554. extern void    s_vstatus (Var_List *, int);
  555. extern bool    isassign (char *);
  556. extern bool    assign (char *, int);
  557. extern bool    gmatch (char *, char *, bool, char **, int);
  558. extern bool    gmatch_suffix (char *, char *, bool, char **, int);
  559. extern char    *getcell (unsigned int);
  560. extern void    freecell (char *);
  561. extern void    freearea (int);
  562. extern void    setarea (char *, int);
  563. extern int    getarea (char *);
  564. extern C_Op    *yyparse (void);
  565. extern int    execute (C_Op *, int, int, int);
  566. extern int    run (IO_Args *, int (*)(IO_State *), bool);
  567. extern int    Getc (int);
  568. extern void    unget (int);
  569. extern int    eofc (void);
  570. extern int    readc (void);
  571. extern void    pushio (IO_Args *, int (*)(IO_State *));
  572. extern int    nlchar (IO_State *);
  573. extern int    wdchar (IO_State *);
  574. extern int    dol_char (IO_State *);
  575. extern int    strchar (IO_State *);
  576. extern int    qstrchar (IO_State *);
  577. extern int    filechar (IO_State *);
  578. extern int    gravechar (IO_State *);
  579. extern int    qgravechar (IO_State *);
  580. extern int    sgravechar (IO_State *);
  581. extern int    linechar (IO_State *);
  582. extern void    closeall (void);
  583. extern int    remap (int);
  584. extern int    openpipe (void);
  585. extern void    closepipe (int);
  586. extern void    markhere (char *, IO_Actions *);
  587. extern void    gethere (void);
  588. extern int    herein (char *, int);
  589. extern void    scraphere (void);
  590. extern void    freehere (int);
  591.  
  592. extern char    **eval (char **, int);
  593. extern char    **makenv (void);
  594. extern char    *evalstr (char *, int);
  595. extern int    subgetc (char, bool);
  596. extern Word_B    *addword (char *, Word_B *);
  597. extern char    **getwords (Word_B *);
  598. extern void    put_prompt (char *);
  599. extern bool    eqname (char *, char *);
  600. extern bool    any (char, char *);
  601. extern int    (*inbuilt (char *, bool *))();
  602. extern char    *path_append (char *, char *, char *);
  603. extern void    unset (char *, bool);
  604. extern int    S_open (bool, char *, int, ...);
  605. extern int    S_close (int, bool);
  606. extern int    S_dup (int);
  607. extern int    S_dup2 (int, int);
  608. extern int    S_Remap (int, int);
  609. extern void    S_Delete (int);
  610. extern void    Getcwd (void);
  611. extern char    *g_tempname (void);
  612. extern void    S_puts (char *);
  613. extern void    S_putc (int);
  614. extern bool    check_rsh (char *);
  615. extern int    O_for_execute (char *, char **, int *);
  616. extern int    SA_spawn (char **);
  617. extern char    *findeq (char *);
  618. extern int    restore_std (int, bool);
  619. extern void    Load_History (void);
  620. extern void    Dump_History (void);
  621. extern void    Display_History (void);
  622. extern void    Clear_History (void);
  623. extern void    v1_puts (char *);
  624. extern void    v1a_puts (char *);
  625. extern void    v1_putc (char);
  626. extern void    v1printf (char *, ...);
  627. extern int    Get_stdin (IO_Args *);
  628. extern int    Process_Escape (char **);
  629. extern void    Add_History (bool);
  630. extern void    Convert_Slashes (char *);
  631. extern void    Print_ExTree (C_Op *);
  632. extern Fun_Ops    *Fun_Search (char *);
  633. extern void    Save_Function (C_Op *, bool);
  634. extern int    getn (char *);
  635. extern int    Create_NG_VL (void);
  636. extern void    Delete_G_VL (void);
  637. extern void    Restore_Dir (char *);
  638. extern void    Restore_Environment (int, int);
  639. extern int    sort_compare (char **, char **);
  640. extern int    Check_Script (char *, char **, int *);
  641. extern bool    Interactive (void);
  642. extern void    In_Col_Zero (void);
  643. extern char    *Build_H_Filename (char *);
  644. extern void    Configure_Keys (void);
  645. extern bool    Ring_Bell (void);
  646. extern void    Close_buffer (Out_Buf *);
  647. extern void    Add_buffer (char, Out_Buf *);
  648. extern void    Adds_buffer (char *, Out_Buf *);
  649. extern Out_Buf    *Open_buffer (int, bool);
  650. extern int    collect (int, int);
  651. extern void    Clear_Extended_File (void);
  652. extern void    Print_Version (int);
  653. extern bool    anys (char *, char *);
  654. extern void    Clear_Swap_File (void);
  655. extern C_Op    *Copy_Function (C_Op *);
  656. extern void    Convert_Backslashes (char *);
  657.  
  658. /*
  659.  * Interrupt handling
  660.  */
  661.  
  662. extern void interrupt    SW_Int24 (void);    /* Int 24 New address    */
  663. extern void (interrupt far *SW_I0_V) (void);    /* Int 0 address    */
  664. extern void (interrupt far *SW_I23_V) (void);    /* Int 23 address    */
  665.  
  666. /*
  667.  * XMS Driver functions
  668.  */
  669.  
  670. extern void (far *SW_XMS_Driver) (void);    /* XMS Driver Interface    */
  671. extern int        SW_XMS_Gversion (void);
  672. extern int        SW_XMS_Allocate (unsigned int);
  673. extern int        SW_XMS_Free (int);
  674.