1: #ifndef lint
   2: static char sccsid[] = "@(#)io.c	4.4 9/3/83";
   3: #endif
   4: 
   5: # include "e.h"
   6: #define MAXLINE 1200    /* maximum input line */
   7: 
   8: char    in[MAXLINE];    /* input buffer */
   9: int eqnexit();
  10: int noeqn;
  11: 
  12: main(argc,argv) int argc; char *argv[];{
  13: 
  14:     eqnexit(eqn(argc, argv));
  15: }
  16: 
  17: eqnexit(n) {
  18: #ifdef gcos
  19:     if (n)
  20:         fprintf(stderr, "run terminated due to eqn error\n");
  21:     exit(0);
  22: #endif
  23:     exit(n);
  24: }
  25: 
  26: eqn(argc,argv) int argc; char *argv[];{
  27:     int i, type;
  28: 
  29:     setfile(argc,argv);
  30:     init_tbl(); /* install keywords in tables */
  31:     while ((type=getline(in)) != EOF) {
  32:         eqline = linect;
  33:         if (in[0]=='.' && in[1]=='E' && in[2]=='Q') {
  34:             for (i=11; i<100; used[i++]=0);
  35:             printf("%s",in);
  36:             printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");
  37:             markline = 0;
  38:             init();
  39:             yyparse();
  40:             if (eqnreg>0) {
  41:                 printf(".nr %d \\w'\\*(%d'\n", eqnreg, eqnreg);
  42:                 /* printf(".if \\n(%d>\\n(.l .tm too-long eqn, file %s, between lines %d-%d\n",	*/
  43:                 /*	eqnreg, svargv[ifile], eqline, linect);	*/
  44:                 printf(".nr MK %d\n", markline);    /* for -ms macros */
  45:                 printf(".if %d>\\n(.v .ne %du\n", eqnht, eqnht);
  46:                 printf(".rn %d 10\n", eqnreg);
  47:                 if(!noeqn)printf("\\*(10\n");
  48:             }
  49:             printf(".ps \\n(99\n.ft \\n(98\n");
  50:             printf(".EN");
  51:             if (lastchar == EOF) {
  52:                 putchar('\n');
  53:                 break;
  54:             }
  55:             if (putchar(lastchar) != '\n')
  56:                 while (putchar(gtc()) != '\n');
  57:         }
  58:         else if (type == lefteq)
  59:             inline();
  60:         else
  61:             printf("%s",in);
  62:     }
  63:     return(0);
  64: }
  65: 
  66: getline(s) register char *s; {
  67:     register c;
  68:     while((*s++=c=gtc())!='\n' && c!=EOF && c!=lefteq)
  69:         if (s >= in+MAXLINE) {
  70:             error( !FATAL, "input line too long: %.20s\n", in);
  71:             in[MAXLINE] = '\0';
  72:             break;
  73:         }
  74:     if (c==lefteq)
  75:         s--;
  76:     *s++ = '\0';
  77:     return(c);
  78: }
  79: 
  80: inline() {
  81:     int ds;
  82: 
  83:     printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");
  84:     ds = oalloc();
  85:     printf(".rm %d \n", ds);
  86:     do{
  87:         if (*in)
  88:             printf(".as %d \"%s\n", ds, in);
  89:         init();
  90:         yyparse();
  91:         if (eqnreg > 0) {
  92:             printf(".as %d \\*(%d\n", ds, eqnreg);
  93:             ofree(eqnreg);
  94:         }
  95:         printf(".ps \\n(99\n.ft \\n(98\n");
  96:     } while (getline(in) == lefteq);
  97:     if (*in)
  98:         printf(".as %d \"%s", ds, in);
  99:     printf(".ps \\n(99\n.ft \\n(98\n");
 100:     printf("\\*(%d\n", ds);
 101:     ofree(ds);
 102: }
 103: 
 104: putout(p1) int p1; {
 105:     extern int gsize, gfont;
 106:     int before, after;
 107:     if(dbg)printf(".\tanswer <- S%d, h=%d,b=%d\n",p1, eht[p1], ebase[p1]);
 108:     eqnht = eht[p1];
 109:     printf(".ds %d \\x'0'", p1);
 110:     /* suppposed to leave room for a subscript or superscript */
 111: #ifndef NEQN
 112:     before = eht[p1] - ebase[p1] - VERT((ps*6*12)/10);
 113: #else NEQN
 114:     before = eht[p1] - ebase[p1] - VERT(3); /* 3 = 1.5 lines */
 115: #endif NEQN
 116:     if (before > 0)
 117:         printf("\\x'0-%du'", before);
 118:     printf("\\f%c\\s%d\\*(%d%s\\s\\n(99\\f\\n(98",
 119:         gfont, gsize, p1, rfont[p1] == ITAL ? "\\|" : "");
 120: #ifndef NEQN
 121:     after = ebase[p1] - VERT((ps*6*2)/10);
 122: #else NEQN
 123:     after = ebase[p1] - VERT(1);
 124: #endif NEQN
 125:     if (after > 0)
 126:         printf("\\x'%du'", after);
 127:     putchar('\n');
 128:     eqnreg = p1;
 129: }
 130: 
 131: max(i,j) int i,j; {
 132:     return (i>j ? i : j);
 133: }
 134: 
 135: oalloc() {
 136:     int i;
 137:     for (i=11; i<100; i++)
 138:         if (used[i]++ == 0) return(i);
 139:     error( FATAL, "no eqn strings left", i);
 140:     return(0);
 141: }
 142: 
 143: ofree(n) int n; {
 144:     used[n] = 0;
 145: }
 146: 
 147: setps(p) int p; {
 148:     printf(".ps %d\n", EFFPS(p));
 149: }
 150: 
 151: nrwid(n1, p, n2) int n1, p, n2; {
 152:     printf(".nr %d \\w'\\s%d\\*(%d'\n", n1, EFFPS(p), n2);
 153: }
 154: 
 155: setfile(argc, argv) int argc; char *argv[]; {
 156:     static char *nullstr = "-";
 157: 
 158:     svargc = --argc;
 159:     svargv = argv;
 160:     while (svargc > 0 && svargv[1][0] == '-') {
 161:         switch (svargv[1][1]) {
 162: 
 163:         case 'd': lefteq=svargv[1][2]; righteq=svargv[1][3]; break;
 164:         case 's': gsize = atoi(&svargv[1][2]); break;
 165:         case 'p': deltaps = atoi(&svargv[1][2]); break;
 166:         case 'f': gfont = svargv[1][2]; break;
 167:         case 'e': noeqn++; break;
 168:         case 0: goto endargs;
 169:         default: dbg = 1;
 170:         }
 171:         svargc--;
 172:         svargv++;
 173:     }
 174:   endargs:
 175:     ifile = 1;
 176:     linect = 1;
 177:     if (svargc <= 0) {
 178:         curfile = stdin;
 179:         svargv[1] = nullstr;
 180:     }
 181:     else
 182:         openinfile();   /* opens up the first input file */
 183: }
 184: 
 185: yyerror() {;}
 186: 
 187: init() {
 188:     ct = 0;
 189:     ps = gsize;
 190:     ft = gfont;
 191:     setps(ps);
 192:     printf(".ft %c\n", ft);
 193: }
 194: 
 195: error(fatal, s1, s2) int fatal; char *s1, *s2; {
 196:     if (fatal>0)
 197:         printf("eqn fatal error: ");
 198:     printf(s1,s2);
 199:     printf("\nfile %s, between lines %d and %d\n",
 200:          svargv[ifile], eqline, linect);
 201:     fprintf(stderr, "eqn: ");
 202:     if (fatal>0)
 203:         fprintf(stderr, "fatal error: ");
 204:     fprintf(stderr, s1, s2);
 205:     fprintf(stderr, "\nfile %s, between lines %d and %d\n",
 206:          svargv[ifile], eqline, linect);
 207:     if (fatal > 0)
 208:         eqnexit(1);
 209: }

Defined functions

eqn defined in line 26; used 1 times
  • in line 14
eqnexit defined in line 17; used 3 times
getline defined in line 66; used 2 times
init defined in line 187; used 2 times
inline defined in line 80; used 1 times
  • in line 59
main defined in line 12; never used
putout defined in line 104; used 1 times
setfile defined in line 155; used 1 times
  • in line 29
setps defined in line 147; used 2 times
yyerror defined in line 185; never used

Defined variables

in defined in line 8; used 14 times
noeqn defined in line 10; used 2 times
sccsid defined in line 2; never used

Defined macros

MAXLINE defined in line 6; used 3 times
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3090
Valid CSS Valid XHTML 1.0 Strict