home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / k / ksh48.zip / sh / lex.h < prev    next >
C/C++ Source or Header  |  1992-08-25  |  4KB  |  141 lines

  1. /*
  2.  * Source input, lexer and parser
  3.  */
  4.  
  5. /* $Id: lex.h,v 1.4 1992/08/12 14:15:37 sjg Exp $ */
  6.  
  7. #define    IDENT    64
  8.  
  9. typedef struct source Source;
  10. struct source {
  11.     char   *str;        /* input pointer */
  12.     int    type;        /* input type */
  13.     union {
  14.         char  **strv;    /* string [] */
  15.         FILE   *file;    /* file */
  16.         struct tbl *tblp; /* alias */
  17.     } u;
  18.     int    line;        /* line number */
  19.     char   *file;        /* input file name */
  20.     int    echo;        /* echo input to shlout */
  21.     Source *next;        /* stacked source */
  22. };
  23.  
  24. /* Source.type values */
  25. #define    SEOF    0        /* input EOF */
  26. #define    STTY    1        /* terminal input */
  27. #define    SFILE    2        /* file input */
  28. #define    SSTRING    4        /* string */
  29. #define    SWSTR    3        /* string without \n */
  30. #define    SWORDS    5        /* string[] */
  31. #define    SWORDSEP 8        /* string[] seperator */
  32. #define    SALIAS    6        /* alias expansion */
  33. #define    SHIST    7        /* history expansion */
  34.  
  35. Source *pushs ARGS((int stype));     /* push Source */
  36. struct op *compile ARGS((Source *s));    /* compile tree */
  37.  
  38. /*
  39.  * states while lexing word
  40.  */
  41. #define    SBASE    0        /* outside any lexical constructs */
  42. #define    SWORD    6        /* implicit quoting for substitute() */
  43. #define    SDPAREN    7        /* inside (( )), implicit quoting */
  44. #define    SSQUOTE    1        /* inside '' */
  45. #define    SDQUOTE    2        /* inside "" */
  46. #define    SBRACE    3        /* inside ${} */
  47. #define    SPAREN    4        /* inside $() */
  48. #define    SBQUOTE    5        /* inside `` */
  49.  
  50. EXTERN    int    multiline;    /* \n changed to ; */
  51.  
  52. typedef union {
  53.     int    i;
  54.     char   *cp;
  55.     char  **wp;
  56.     struct op *o;
  57.     struct ioword *iop;
  58. } YYSTYPE;
  59.  
  60. #define    LWORD    256
  61. #define    LOGAND    257
  62. #define    LOGOR    258
  63. #define    BREAK    259
  64. #define    IF    260
  65. #define    THEN    261
  66. #define    ELSE    262
  67. #define    ELIF    263
  68. #define    FI    264
  69. #define    CASE    265
  70. #define    ESAC    266
  71. #define    FOR    267
  72. #define    WHILE    268
  73. #define    UNTIL    269
  74. #define    DO    270
  75. #define    DONE    271
  76. #define    IN    272
  77. #define    FUNCTION 273
  78. #define    TIME    274
  79. #define    REDIR    275
  80. #define    MPAREN    276        /* () */
  81. #define    MDPAREN    277        /* (( )) */
  82. #define SELECT    278        /* ksh */
  83. #define    YYERRCODE 300
  84.  
  85. /* flags to yylex */
  86. #define    CONTIN    BIT(0)        /* skip new lines to complete command */
  87. #define    ONEWORD    BIT(1)        /* single word for substitute() */
  88. #define    ALIAS    BIT(2)        /* recognize alias */
  89. #define    KEYWORD    BIT(3)        /* recognize keywords */
  90. #define    LETEXPR    BIT(4)        /* get expression inside (( )) */
  91.  
  92. #define    SYNTAXERR    zzerr()
  93. #define    HERES    10        /* max << in line */
  94.  
  95. EXTERN    char    line [LINE+1];    /* input line */
  96. EXTERN    Source *source;        /* yyparse/yylex source */
  97. EXTERN    YYSTYPE    yylval;        /* result from yylex */
  98. EXTERN    int    yynerrs;
  99. EXTERN    struct ioword *heres [HERES], **herep;
  100. EXTERN    char    ident [IDENT+1];
  101.  
  102. extern    int    yylex ARGS((int flags));
  103. extern    void    yyerror ARGS((const char *msg));
  104.  
  105. #define    HISTORY    100        /* size of saved history */
  106.  
  107. #ifdef EASY_HISTORY
  108. EXTERN    char   *history [HISTORY];    /* saved commands */
  109. #else
  110. EXTERN  char   **history;        /* saved commands */
  111. EXTERN    int    histsize _I_(HISTORY);    /* history size */
  112. EXTERN    char  **history;    /* saved commands */
  113. #endif
  114. EXTERN    char  **histptr;    /* last history item */
  115. EXTERN    int    histpush;    /* number of pushed fc commands */
  116.  
  117. extern    char    **histget();
  118. extern  char    **histpos();
  119. extern    int    histnum();
  120. extern    char    *findhist();
  121. extern    int    histN();
  122.  
  123. #ifdef EDIT
  124.  
  125. extern    void    x_init ARGS ((void));    /* setup tty modes */
  126. extern    void    x_init_emacs ARGS ((void));
  127. extern    void    x_emacs_keys ();
  128. extern    void    x_bind();
  129.  
  130. extern    int    x_read ARGS ((int fd, char *buf, size_t len));
  131. extern    int    x_emacs ARGS ((char *buf, size_t len));
  132. extern    int    x_vi ARGS ((char *buf, size_t len));
  133.  
  134. extern    bool_t    x_mode ARGS ((bool_t));    /* set/clear cbreak mode */
  135. extern    int    x_getc();        /* get tty char */
  136. extern    void    x_flush(), x_putc(), x_puts(); /* put tty char */
  137.  
  138. extern    int    x_cols;        /* tty columns */
  139.  
  140. #endif
  141.