diff options
Diffstat (limited to 'dviware/umddvi/h/io.h')
-rw-r--r-- | dviware/umddvi/h/io.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/dviware/umddvi/h/io.h b/dviware/umddvi/h/io.h new file mode 100644 index 0000000000..ce9bb4029c --- /dev/null +++ b/dviware/umddvi/h/io.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 1987 University of Maryland Department of Computer Science. + * All rights reserved. Permission to copy for any purpose is hereby granted + * so long as this copyright notice remains intact. + */ + +/* C-Tex I/O definitions */ + +/* + * For non-ASCII systems, someone would have to do a great deal of work + * in the various I/O routines to use the two translation tables. I have + * not the motivation. + */ +#ifdef notdef +int InX[128]; /* input translation table */ +int OutX[128]; /* output translation table */ +#endif + +/* + * These `magic constants' are really the best we can do. Using termcap + * would not be quite right, because (1) the C-TeX run may not be on a + * terminal at all, and (2) the log file could very likely be viewed from + * a different terminal than was used for the C-TeX run. + */ +#define MaxPrLineLen 72 /* will try to never print lines longer + than this */ +#define MaxErrLineLen 72 /* errors (context actually) will never + be longer than this */ +#define HalfErrLine 42 /* about 1/2 MaxErrLineLen; this will be + the width of first lines of contexts */ + +/* + * Input will be read into lines of InBufLen characters. This limits + * several things, including control sequence name length and length of + * strings read by \read. + */ +#define InBufLen 512 + +/* Output descriptors. Note that 0-15 are indexes into OutF. */ +#define OutIgnore 16 /* nowhere; output is silently discarded */ +#define OutTerm 17 /* to terminal (stdout) */ +#define OutLog 18 /* to log file */ +#define OutTermAndLog 19 /* to terminal & log file both */ +#define OutString 20 /* to PoolString */ +#define OutCircBuf 21 /* to CircBuf */ + +int OutFD; /* the current output descriptor */ +FILE *LogF; /* the log file */ +FILE *InF[16]; /* the 16 \read descriptors */ +FILE *OutF[16]; /* the 16 \write descriptors */ +char CircBuf[MaxErrLineLen]; /* this will be used for showing error + context; its length determines the + maximum amount of context that can + be shown. This is a way of getting + around a possibly massive amount of + stuff leading up to the point of the + error, without using backpointers. + Inefficient perhaps, but it does not + occur often. */ + +/* + * On occasion it is nice to be able to interrupt the current output + * descriptor and switch to a new one. This does not happen often, + * so we just have a small stack of them here. + */ +int OutFDstack[20]; +int *OutFDsp; + +/* macros to switch to a new output, then restore the old */ +#define PushOut(fd) (*OutFDsp++ = OutFD, OutFD = (fd)) +#define PopOut() (OutFD = *--OutFDsp) + +/* + * The following magic variables are used by ShowContext to control the info + * being inserted into the CircBuf. + */ +int OutTally; /* total characters recently printed */ +int OutSC_max; /* max needed by ShowContext */ + +/* + * UpdateTerminal makes sure that all output is visible by the user. + * In this case all we need to do is fflush(stdout). + */ +#define UpdateTerminal() ((void) fflush(stdout)) |