|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 11866 (0x2e5a) Types: TextFile Names: »te_defs.h«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/teco/te_defs.h«
/* TECO for Ultrix Copyright 1986 Matt Fichtenbaum */ /* This program and its components belong to GenRad Inc, Concord MA 01742 */ /* They may be copied if this copyright notice is included */ /* te_defs.h definitions file 1/9/87 */ #include <stdio.h> #include <ctype.h> #include <sgtty.h> #include <setjmp.h> #define CTL(x) (('x') & 0x1f) /* for control chars */ #define ERROR(e) longjmp(xxx, (e)) #define BLOCKSIZE (0x10000 - 8) /* size of memory block to allocate */ #define CELLSIZE 256 /* number of characters per cell */ #define CSTACKSIZE 64 /* size of command stack */ #define MSTACKSIZE 64 /* size of macro stack */ #define QSTACKSIZE 64 /* size of q register stack */ #define ESTACKSIZE 64 /* size of expression stack */ #define TTIBUFSIZE 1024 /* size of type-ahead buffer */ #define BUFF_LIMIT 16384 /* text buffer soft limit for ED & 4 */ #define NQREGS 36 /* number of Q registers */ #define CBUFF 0 /* id for command buffer */ #define SERBUF NQREGS+1 /* and search string buffer */ #define FILBUF NQREGS+2 /* and file string buffer */ #define SYSBUF NQREGS+3 /* and system command buffer */ #define TIMBUF NQREGS+4 /* and time/date buffer */ #define cbuf qreg[CBUFF] /* shorthand for command-string header */ #define sbuf qreg[SERBUF] /* and for search-buffer header */ #define fbuf qreg[FILBUF] /* and for file-buffer header */ #define sysbuf qreg[SYSBUF] /* and for system command header */ #define timbuf qreg[TIMBUF] /* and for time/date header */ #define cptr (*msp) /* command string is top of macro stack */ #define cmdstr mstack[0] /* for entering command string */ #define TAB 011 /* define special chars */ #define LF 012 #define VT 013 #define FF 014 #define CR 015 #define ESC 033 #define DEL 0177 /* expression operators */ #define OP_START 1 #define OP_ADD 2 #define OP_SUB 3 #define OP_MULT 4 #define OP_DIV 5 #define OP_AND 6 #define OP_OR 7 /* macro flags */ #define F_ITER 1 /* bits in special-character table */ #define A_S 1 /* "skipto()" special character */ #define A_T 2 /* command with std text argument */ #define A_E 4 /* E<char> takes a text argument */ #define A_F 8 /* F<char> takes a text argument */ #define A_X 16 /* char causes "skipto()" to exit */ #define A_Q 32 /* command with q-register argument */ #define A_A 64 /* special char in search string */ #define A_L 128 /* character is a line separator */ \f /* error codes */ #define E_BNI 1 #define E_CPQ 2 #define E_COF 3 #define E_FNF 4 #define E_IEC 5 #define E_IFC 6 #define E_IIA 7 #define E_ILL 8 #define E_ILN 9 #define E_IPA 10 #define E_IQC 11 #define E_IQN 12 #define E_IRA 13 #define E_ISA 14 #define E_ISS 15 #define E_IUC 16 #define E_MEM 17 #define E_MRP 18 #define E_NAB 19 #define E_NAC 20 #define E_NAE 21 #define E_NAP 22 #define E_NAQ 23 #define E_NAS 24 #define E_NAU 25 #define E_NFI 26 #define E_NFO 27 #define E_NYA 28 #define E_OFO 29 #define E_PDO 30 #define E_POP 31 #define E_SNI 32 #define E_SRH 33 #define E_STL 34 #define E_UTC 35 #define E_UTM 36 #define E_XAB 37 #define E_YCA 38 #define E_IWA 39 #define E_NFR 40 #define E_INT 41 #define E_EFI 42 #define E_IAA 43 #define E_AMB 44 #define E_SYS 45 \f /* define names for window control registers */ #define WN_type win_data[0] #define WN_width win_data[1] #define WN_height win_data[2] #define WN_seeall win_data[3] #define WN_mark win_data[4] #define WN_hold win_data[5] #define WN_origin win_data[6] #define WN_scroll win_data[7] /* define display operations */ #define WIN_OFF 0 /* disable window */ #define WIN_SUSP 1 /* suspend window */ #define WIN_INIT 2 /* turn on window */ #define WIN_RESUME 3 /* re-enable window */ #define WIN_REFR 4 /* refresh window */ #define WIN_LINE 5 /* display one line */ #define WIN_REDRAW 6 /* force window absolute redraw on next refresh */ #define WIN_DISP 7 /* refresh window even if not enabled */ /* define scope special functions */ #define VT_CLEAR 0 /* clear screen */ #define VT_EEOL 1 /* erase to eol */ #define VT_SETSPEC1 2 /* set special (reverse) video */ #define VT_SETSPEC2 3 /* alternative special video */ #define VT_CLRSPEC 4 /* clear it */ #define VT_BS1 5 /* backspace and erase 1 */ #define VT_BS2 6 /* backspace and erase 2 */ #define VT_LINEUP 7 /* up one line */ #define VT_EBOL 8 /* erase from bol */ /* define keyboard modes */ #define TTY_OFF 0 /* final "off" */ #define TTY_SUSP 1 /* temporary suspend */ #define TTY_ON 2 /* initial "on" */ #define TTY_RESUME 3 /* resume after suspend */ /* define values for ED, ET, EZ flags */ #define ED_CARET 1 #define ED_YPROT 2 #define ED_EXPMEM 4 #define ED_SFAIL 16 #define ED_SMULT 64 #define ET_IMAGE 1 #define ET_NOECHO 8 #define ET_CTRLO 16 #define ET_NOWAIT 32 #define ET_QUIT 128 #define ET_TRUNC 256 #define ET_CTRLC 32768 #define EZ_CRLF 1 #define EZ_READFF 2 #define EZ_TAB4 4 #define EZ_NOTMPFIL 8 #define EZ_NOTABI 16 #define EZ_NOVTFF 32 #define EZ_MULT 64 \f /* define buffer cell */ /* a buffer cell is a forward pointer, a backward pointer, */ /* and CELLSIZE characters */ struct buffcell { struct buffcell *f; /* forward pointer */ struct buffcell *b; /* backward pointer */ char ch[CELLSIZE]; /* char storage */ }; /* define structures for buffer header, q-register header, */ /* q-register pointer, macro stack entry, and macro iteration list */ /* these are really alternative ways of looking at the same cell */ struct qh /* q-register header */ { struct buffcell *f; /* forward pointer */ struct buffcell *b; /* backward pointer */ int z; /* number of characters */ int v; /* q-register numeric value */ } ; struct qp /* q-register pointer/macro stack entry */ { struct qp *f; /* forward pointer */ struct buffcell *p; /* pointer to a buffer cell */ int c; /* character offset */ int z; /* number of characters in object pointed to */ int dot; /* current character position */ int flag; /* flags for "iteration in process," "ei macro," etc. */ struct is *il; /* iteration list pointer */ int *condsp; /* saved conditional stack pointer */ } ; struct is /* macro iteration list entry */ { struct is *f; /* forward pointer */ struct is *b; /* backward pointer */ struct buffcell *p; /* cell with start of iteration */ int c; /* char offset where iteration started */ int dot; /* char position where iteration started */ int count; /* iteration count */ int dflag; /* definite iteration flag */ } ; struct ms /* macro stack entry */ /* not used at present */ { struct ms *f; /* forward pointer */ struct ms *b; /* backward pointer */ struct buffcell *p; /* pointer to a buffer cell */ int c; /* character offset */ struct is *il; /* pointer to iteration list */ } ; \f struct bh /* buffer header list entry */ { struct buffcell *f; /* pointer to buffer */ struct buffcell *b; /* null pointer */ int z; /* number of characters */ int v; /* not used */ struct bh *ff; /* forward pointer */ struct bh *bb; /* backward pointer */ } ; /* define expression stack entry */ struct exp_entry { int val1; /* first value */ int flag1; /* nonzero if there is a first value */ int val2; /* second value (set by 'comma') */ int flag2; /* nonzero if there is one */ int exp; /* expression in process */ int op; /* operation to be applied */ } ; /* define file data structures */ struct infiledata /* structure of input file info */ { FILE *fd; /* file pointer */ int eofsw; /* end-of-file switch */ } ; struct outfiledata /* structure of output file info */ { FILE *fd; /* file pointer */ char f_name[CELLSIZE+5]; /* real name of output */ char t_name[CELLSIZE+5]; /* temporary output name */ int name_size; /* number of chars in name */ int bak; /* backup flag */ } ; extern struct infiledata *infile; /* pointer to currently active intput file structure */ extern struct outfiledata *outfile; /* pointer to currently active output file structure */ extern struct outfiledata po_file, so_file; /* output file descriptors */ \f /* define global variables, etc. */ extern int char_count; /* char count for tab typer */ extern char lastc; /* last char read */ extern int ttyerr; /* error return from ioctl */ extern int errno; /* system error code */ extern struct sgttyb ttybuf; /* local copy of tty control data */ extern int inp_noterm; /* nonzero if standard in is not a terminal */ extern int out_noterm; /* nonzero if standard out is not a term. */ extern jmp_buf xxx; /* preserved environment for error restart */ extern int err; /* local error code */ extern struct qp t_qp; /* temporary buffer pointer */ extern struct qp aa, bb, cc; /* more temporaries */ extern struct buffcell t_bcell; /* temporary bcell */ extern int tabmask; /* mask for selecting 4/8 char tabs */ extern int exitflag; /* flag for ending command str exec */ extern char term_char; /* terminator for insert, search, etc. */ extern char cmdc; /* current command character */ extern char skipc; /* char found by "skipto()" */ extern int dot, z, tdot; /* current, last, temp buffer position */ extern int ll, mm, nn; /* general temps */ extern int ins_count; /* count of chars inserted */ extern int ctrl_e; /* form feed flag */ extern int ctrl_r; /* current number radix (8, 10, 16) */ extern int ctrl_s; /* string length for S, I, G */ extern int ctrl_x; /* search case flag */ extern int ed_val; /* ED value */ extern int es_val; /* ES value */ extern int et_val; /* ET value */ extern int eu_val; /* EU value */ extern int ev_val; /* EV value */ extern int ez_val; /* EZ value */ extern int srch_result; /* result of last :S executed */ extern int atflag; /* flag for @ char typed */ extern int colonflag; /* flag for : char typed */ extern int trace_sw; /* nonzero if tracing command exec */ extern int win_data[]; /* window control parameters */ extern struct buffcell *insert_p; /* pointer to temp text buffer during insert */ extern int buff_mod; /* set to earliest buffer change */ extern int search_flag; /* set nonzero by search */ extern char *errors[]; /* error text */ extern char mapch[], mapch_l[]; /* char mapping tables */ extern char spec_chars[]; /* special character table */ extern char skipto(), find_endcond(), getcmdc(), getcmdc0(); /* routines that return chars */ extern FILE *eisw; /* indirect command file pointer */ extern FILE *fopen(); \f extern struct buffcell *freebuff; /* buffcell free-list pointer */ extern struct buffcell *dly_freebuff; /* delayed free-list pointer */ extern struct qp *freedcell; /* cell free-list pointer */ extern struct buffcell *get_bcell(); /* get buffcell routine */ extern struct qp *get_dcell(); /* get data cell routine */ /* the text buffer header */ extern struct qh buff; /* the q-register headers point to the start of the buffer and registers */ extern struct qh qreg[]; /* for q regs, command, search, file */ /* the q-register stack contains temporary copies of q-register contents */ extern struct qh qstack[]; /* q-reg stack */ extern struct qh *qsp; /* q-reg stack pointer */ /* the macro stack contains pointers to the currently active macros. */ /* the top of the stack is the command pointer */ extern struct qp mstack[]; /* macro stack */ extern struct qp *msp; /* macro stack pointer */ /* the expression stack */ extern struct exp_entry estack[]; /* expression stack */ extern struct exp_entry *esp; /* expression stack pointer */