Annotation of 43BSDTahoe/usr.bin/eqn/common_source/io.c, revision 1.1

1.1     ! root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.