home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume9 / teco / part02 / te_defs.h < prev    next >
Encoding:
C/C++ Source or Header  |  1987-03-11  |  11.6 KB  |  342 lines

  1. /* TECO for Ultrix   Copyright 1986 Matt Fichtenbaum                        */
  2. /* This program and its components belong to GenRad Inc, Concord MA 01742    */
  3. /* They may be copied if this copyright notice is included                    */
  4.  
  5. /* te_defs.h definitions file        1/9/87    */
  6.  
  7. #include <stdio.h>
  8. #include <ctype.h>
  9. #include <sgtty.h>
  10. #include <setjmp.h>
  11.  
  12. #define CTL(x) (('x') & 0x1f)    /* for control chars                    */
  13. #define ERROR(e) longjmp(xxx, (e))
  14. #define BLOCKSIZE (0x10000 - 8)    /* size of memory block to allocate        */
  15. #define CELLSIZE 256            /* number of characters per cell        */
  16. #define CSTACKSIZE 64            /* size of command stack                */
  17. #define MSTACKSIZE 64            /* size of macro stack                    */
  18. #define QSTACKSIZE 64            /* size of q register stack                */
  19. #define ESTACKSIZE 64            /* size of expression stack                */
  20. #define TTIBUFSIZE 1024            /* size of type-ahead buffer            */
  21. #define BUFF_LIMIT 16384        /* text buffer soft limit for ED & 4    */
  22. #define NQREGS 36                /* number of Q registers                */
  23. #define CBUFF 0                    /* id for command buffer                */
  24. #define SERBUF NQREGS+1            /* and search string buffer                */
  25. #define FILBUF NQREGS+2            /* and file string buffer                */
  26. #define SYSBUF NQREGS+3            /* and system command buffer            */
  27. #define TIMBUF NQREGS+4            /* and time/date buffer                    */
  28. #define cbuf qreg[CBUFF]         /* shorthand for command-string header    */
  29. #define sbuf qreg[SERBUF]        /* and for search-buffer header            */
  30. #define fbuf qreg[FILBUF]        /* and for file-buffer header            */
  31. #define sysbuf qreg[SYSBUF]        /* and for system command header        */
  32. #define timbuf qreg[TIMBUF]        /* and for time/date header                */
  33. #define cptr (*msp)                /* command string is top of macro stack    */
  34. #define cmdstr mstack[0]         /* for entering command string            */
  35. #define TAB 011                    /* define special chars                    */
  36. #define LF 012
  37. #define VT 013
  38. #define FF 014
  39. #define CR 015
  40. #define ESC 033
  41. #define DEL 0177
  42.  
  43. /* expression operators */
  44. #define OP_START 1
  45. #define OP_ADD    2
  46. #define OP_SUB    3
  47. #define OP_MULT    4
  48. #define OP_DIV    5
  49. #define OP_AND    6
  50. #define OP_OR    7
  51.  
  52. /* macro flags */
  53. #define F_ITER    1
  54.  
  55. /* bits in special-character table */
  56. #define A_S 1                    /* "skipto()" special character        */
  57. #define A_T 2                    /* command with std text argument    */
  58. #define A_E 4                    /* E<char> takes a text argument    */
  59. #define A_F 8                    /* F<char> takes a text argument    */
  60. #define A_X 16                    /* char causes "skipto()" to exit    */
  61. #define A_Q 32                    /* command with q-register argument    */
  62. #define A_A 64                    /* special char in search string    */
  63. #define A_L 128                    /* character is a line separator    */
  64.  
  65. /* error codes */
  66. #define E_BNI 1
  67. #define E_CPQ 2
  68. #define E_COF 3
  69. #define E_FNF 4
  70. #define E_IEC 5
  71. #define E_IFC 6
  72. #define E_IIA 7
  73. #define E_ILL 8
  74. #define E_ILN 9
  75. #define E_IPA 10
  76. #define E_IQC 11
  77. #define E_IQN 12
  78. #define E_IRA 13
  79. #define E_ISA 14
  80. #define E_ISS 15
  81. #define E_IUC 16
  82. #define E_MEM 17
  83. #define E_MRP 18
  84. #define E_NAB 19
  85. #define E_NAC 20
  86. #define E_NAE 21
  87. #define E_NAP 22
  88. #define E_NAQ 23
  89. #define E_NAS 24
  90. #define E_NAU 25
  91. #define E_NFI 26
  92. #define E_NFO 27
  93. #define E_NYA 28
  94. #define E_OFO 29
  95. #define E_PDO 30
  96. #define E_POP 31
  97. #define E_SNI 32
  98. #define E_SRH 33
  99. #define E_STL 34
  100. #define E_UTC 35
  101. #define E_UTM 36
  102. #define E_XAB 37
  103. #define E_YCA 38
  104. #define E_IWA 39
  105. #define E_NFR 40
  106. #define E_INT 41
  107. #define E_EFI 42
  108. #define E_IAA 43
  109. #define E_AMB 44
  110. #define E_SYS 45
  111.  
  112. /* define names for window control registers */
  113. #define WN_type win_data[0]
  114. #define WN_width win_data[1]
  115. #define WN_height win_data[2]
  116. #define WN_seeall win_data[3]
  117. #define WN_mark win_data[4]
  118. #define WN_hold win_data[5]
  119. #define WN_origin win_data[6]
  120. #define WN_scroll win_data[7]
  121.  
  122. /* define display operations */
  123. #define WIN_OFF 0            /* disable window    */
  124. #define WIN_SUSP 1            /* suspend window    */
  125. #define WIN_INIT 2            /* turn on window    */
  126. #define WIN_RESUME 3        /* re-enable window    */
  127. #define WIN_REFR 4            /* refresh window    */
  128. #define WIN_LINE 5            /* display one line */
  129. #define WIN_REDRAW 6        /* force window absolute redraw on next refresh */
  130. #define WIN_DISP 7            /* refresh window even if not enabled */
  131.  
  132. /* define scope special functions */
  133. #define VT_CLEAR 0            /* clear screen */
  134. #define VT_EEOL 1            /* erase to eol    */
  135. #define VT_SETSPEC1 2        /* set special (reverse) video */
  136. #define VT_SETSPEC2 3        /* alternative special video */
  137. #define VT_CLRSPEC 4        /* clear it */
  138. #define VT_BS1 5            /* backspace and erase 1 */
  139. #define VT_BS2 6            /* backspace and erase 2 */
  140. #define VT_LINEUP 7            /* up one line */
  141. #define VT_EBOL 8            /* erase from bol */
  142.  
  143. /* define keyboard modes */
  144. #define TTY_OFF 0            /* final "off" */
  145. #define TTY_SUSP 1            /* temporary suspend */
  146. #define TTY_ON 2            /* initial "on" */
  147. #define TTY_RESUME 3        /* resume after suspend */
  148.  
  149. /* define values for ED, ET, EZ flags */
  150. #define ED_CARET 1
  151. #define ED_YPROT 2
  152. #define ED_EXPMEM 4
  153. #define ED_SFAIL 16
  154. #define ED_SMULT 64
  155.  
  156. #define ET_IMAGE 1
  157. #define ET_NOECHO 8
  158. #define ET_CTRLO 16
  159. #define ET_NOWAIT 32
  160. #define ET_QUIT 128
  161. #define ET_TRUNC 256
  162. #define ET_CTRLC 32768
  163.  
  164. #define EZ_CRLF 1
  165. #define EZ_READFF 2
  166. #define EZ_TAB4 4
  167. #define EZ_NOTMPFIL 8
  168. #define EZ_NOTABI 16
  169. #define EZ_NOVTFF 32
  170. #define EZ_MULT 64
  171. /* define buffer cell */
  172. /* a buffer cell is a forward pointer, a backward pointer, */
  173. /* and CELLSIZE characters */
  174.  
  175. struct buffcell
  176.     {
  177.     struct buffcell *f;        /* forward pointer    */
  178.     struct buffcell *b;        /* backward pointer    */
  179.     char ch[CELLSIZE];        /* char storage        */
  180.     };
  181.  
  182. /* define structures for buffer header, q-register header,            */
  183. /* q-register pointer, macro stack entry, and macro iteration list    */
  184. /* these are really alternative ways of looking at the same cell    */
  185.  
  186. struct qh            /* q-register header */
  187.     {
  188.     struct buffcell *f;    /* forward pointer */
  189.     struct buffcell *b;    /* backward pointer */
  190.     int z;                /* number of characters */
  191.     int v;                /* q-register numeric value */
  192.     } ;
  193.  
  194. struct qp            /* q-register pointer/macro stack entry */
  195.     {
  196.     struct qp *f;        /* forward pointer */
  197.     struct buffcell *p;    /* pointer to a buffer cell */
  198.     int c;                /* character offset */
  199.     int z;                /* number of characters in object pointed to */
  200.     int dot;            /* current character position */
  201.     int flag;            /* flags for "iteration in process," "ei macro," etc. */
  202.     struct is *il;        /* iteration list pointer */
  203.     int *condsp;        /* saved conditional stack pointer */
  204.     } ;
  205.  
  206. struct is            /* macro iteration list entry */
  207.     {
  208.     struct is *f;        /* forward pointer */
  209.     struct is *b;        /* backward pointer */
  210.     struct buffcell *p;    /* cell with start of iteration */
  211.     int c;                /* char offset where iteration started */
  212.     int dot;            /* char position where iteration started */
  213.     int count;            /* iteration count */
  214.     int dflag;            /* definite iteration flag */
  215.     } ;
  216.  
  217. struct ms            /* macro stack entry */ /* not used at present */
  218.     {
  219.     struct ms *f;        /* forward pointer */
  220.     struct ms *b;        /* backward pointer */
  221.     struct buffcell *p;    /* pointer to a buffer cell */
  222.     int c;                /* character offset */
  223.     struct is *il;        /* pointer to iteration list */
  224.     } ;
  225.  
  226. struct bh            /* buffer header list entry */
  227.     {
  228.     struct buffcell *f;    /* pointer to buffer */
  229.     struct buffcell *b;    /* null pointer */
  230.     int z;                /* number of characters */
  231.     int v;                /* not used */
  232.     struct bh *ff;        /* forward pointer */
  233.     struct bh *bb;        /* backward pointer */
  234.     } ;
  235.  
  236. /* define expression stack entry */
  237. struct exp_entry
  238.     {
  239.     int val1;        /* first value                            */
  240.     int flag1;        /* nonzero if there is a first value    */
  241.     int val2;        /* second value (set by 'comma')        */
  242.     int flag2;        /* nonzero if there is one                */
  243.     int exp;        /* expression in process                */
  244.     int op;            /* operation to be applied                 */
  245.     } ;
  246.  
  247. /* define file data structures */
  248. struct infiledata                /* structure of input file info */
  249.     {
  250.     FILE *fd;                        /* file pointer */
  251.     int eofsw;                        /* end-of-file switch */
  252.     } ;
  253.  
  254. struct outfiledata                /* structure of output file info */
  255.     {
  256.     FILE *fd;                        /* file pointer */
  257.     char f_name[CELLSIZE+5];        /* real name of output */
  258.     char t_name[CELLSIZE+5];        /* temporary output name */
  259.     int name_size;                    /* number of chars in name */
  260.     int bak;                        /* backup flag */
  261.     } ;
  262.  
  263. extern struct infiledata *infile;        /* pointer to currently active intput file structure */
  264. extern struct outfiledata *outfile;        /* pointer to currently active output file structure */
  265. extern struct outfiledata po_file, so_file;        /* output file descriptors */
  266. /* define global variables, etc. */
  267.  
  268. extern int char_count;                    /* char count for tab typer            */
  269. extern char lastc;                        /* last char read                    */
  270. extern int ttyerr;                        /* error return from ioctl            */
  271. extern int errno;                        /* system error code                */
  272. extern struct sgttyb ttybuf;            /* local copy of tty control data    */
  273. extern int inp_noterm;                    /* nonzero if standard in is not a terminal    */
  274. extern int out_noterm;                    /* nonzero if standard out is not a term.    */
  275. extern jmp_buf xxx;                        /* preserved environment for error restart    */
  276. extern int err;                            /* local error code                    */
  277. extern struct qp t_qp;                    /* temporary buffer pointer            */
  278. extern struct qp aa, bb, cc;            /* more temporaries                    */
  279. extern struct buffcell t_bcell;            /* temporary bcell                    */
  280. extern int tabmask;                        /* mask for selecting 4/8 char tabs    */
  281. extern int exitflag;                    /* flag for ending command str exec    */
  282. extern char term_char;                    /* terminator for insert, search, etc.    */
  283. extern char cmdc;                        /* current command character        */
  284. extern char skipc;                        /* char found by "skipto()"            */
  285. extern int dot, z, tdot;                /* current, last, temp buffer position    */
  286. extern int ll, mm, nn;                    /* general temps                    */
  287. extern int ins_count;                    /* count of chars inserted            */
  288. extern int ctrl_e;                        /* form feed flag                    */
  289. extern int ctrl_r;                        /* current number radix (8, 10, 16)    */
  290. extern int ctrl_s;                        /* string length for S, I, G        */
  291. extern int ctrl_x;                        /* search case flag                    */
  292. extern int ed_val;                        /* ED value                            */
  293. extern int es_val;                        /* ES value                            */
  294. extern int et_val;                        /* ET value                            */
  295. extern int eu_val;                        /* EU value                            */
  296. extern int ev_val;                        /* EV value                            */
  297. extern int ez_val;                        /* EZ value                            */
  298. extern int srch_result;                    /* result of last :S executed        */
  299. extern int atflag;                        /* flag for @ char typed            */
  300. extern int colonflag;                    /* flag for : char typed            */
  301. extern int trace_sw;                    /* nonzero if tracing command exec    */
  302.  
  303. extern int win_data[];                    /* window control parameters        */
  304. extern struct buffcell *insert_p;        /* pointer to temp text buffer during insert */
  305. extern int buff_mod;                    /* set to earliest buffer change    */
  306. extern int search_flag;                    /* set nonzero by search            */
  307.  
  308. extern char *errors[];                    /* error text                        */
  309. extern char mapch[], mapch_l[];            /* char mapping tables                */
  310. extern char spec_chars[];                /* special character table            */
  311.  
  312. extern char skipto(), find_endcond(), getcmdc(), getcmdc0();    /* routines that return chars */
  313.  
  314. extern FILE *eisw;                        /* indirect command file pointer    */
  315. extern FILE *fopen();
  316.  
  317. extern struct buffcell *freebuff;        /* buffcell free-list pointer    */
  318. extern struct buffcell *dly_freebuff;    /* delayed free-list pointer    */
  319. extern struct qp *freedcell;            /* cell free-list pointer        */
  320. extern struct buffcell *get_bcell();    /* get buffcell routine            */
  321. extern struct qp *get_dcell();            /* get data cell routine        */
  322.  
  323. /* the text buffer header */
  324. extern struct qh buff;
  325.  
  326. /* the q-register headers point to the start of the buffer and registers */
  327. extern struct qh qreg[];            /* for q regs, command, search, file */
  328.  
  329. /* the q-register stack contains temporary copies of q-register contents */
  330. extern struct qh qstack[];            /* q-reg stack */
  331. extern struct qh *qsp;                /* q-reg stack pointer */
  332.  
  333. /* the macro stack contains pointers to the currently active macros. */
  334. /* the top of the stack is the command pointer */
  335. extern struct qp mstack[];            /* macro stack */
  336. extern struct qp *msp;                /* macro stack pointer */
  337.  
  338. /* the expression stack */
  339. extern struct exp_entry estack[];    /* expression stack */
  340. extern struct exp_entry *esp;        /* expression stack pointer */
  341.  
  342.