Annotation of 43BSDTahoe/usr.bin/tbl/t4.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)t4.c       4.3 4/19/88";
        !             3: #endif
        !             4: 
        !             5:  /* t4.c: read table specification */
        !             6: # include "t..c"
        !             7: int oncol;
        !             8: getspec()
        !             9: {
        !            10: int icol, i;
        !            11: for(icol=0; icol<MAXCOL; icol++)
        !            12:        {
        !            13:        sep[icol]= -1;
        !            14:        evenup[icol]=0;
        !            15:        cll[icol][0]=0;
        !            16:        for(i=0; i<MAXHEAD; i++)
        !            17:                {
        !            18:                csize[i][icol][0]=0;
        !            19:                vsize[i][icol][0]=0;
        !            20:                font[i][icol][0] = lefline[i][icol] = 0;
        !            21:                ctop[i][icol]=0;
        !            22:                style[i][icol]= 'l';
        !            23:                }
        !            24:        }
        !            25: nclin=ncol=0;
        !            26: oncol =0;
        !            27: left1flg=rightl=0;
        !            28: readspec();
        !            29: fprintf(tabout, ".rm");
        !            30: for(i=0; i<ncol; i++)
        !            31:        fprintf(tabout, " %02d", 80+i);
        !            32: fprintf(tabout, "\n");
        !            33: }
        !            34: readspec()
        !            35: {
        !            36: int icol, c, sawchar, stopc, i;
        !            37: char sn[10], *snp, *temp;
        !            38: sawchar=icol=0;
        !            39: while (c=get1char())
        !            40:        {
        !            41:        switch(c)
        !            42:                {
        !            43:                default:
        !            44:                        if (c != tab)
        !            45:                        error("bad table specification character");
        !            46:                case ' ': /* note this is also case tab */
        !            47:                        continue;
        !            48:                case '\n':
        !            49:                        if(sawchar==0) continue;
        !            50:                case ',':
        !            51:                case '.': /* end of table specification */
        !            52:                        ncol = max(ncol, icol);
        !            53:                        if (lefline[nclin][ncol]>0) {ncol++; rightl++;};
        !            54:                        if(sawchar)
        !            55:                                nclin++;
        !            56:                        if (nclin>=MAXHEAD)
        !            57:                                error("too many lines in specification");
        !            58:                        icol=0;
        !            59:                        if (ncol==0 || nclin==0)
        !            60:                                error("no specification");
        !            61:                        if (c== '.')
        !            62:                                {
        !            63:                                while ((c=get1char()) && c != '\n')
        !            64:                                        if (c != ' ' && c != '\t')
        !            65:                                                error("dot not last character on format line");
        !            66:                                /* fix up sep - default is 3 except at edge */
        !            67:                                for(icol=0; icol<ncol; icol++)
        !            68:                                        if (sep[icol]<0)
        !            69:                                                sep[icol] =  icol+1<ncol ? 3 : 1;
        !            70:                                if (oncol == 0)
        !            71:                                        oncol = ncol;
        !            72:                                else if (oncol +2 <ncol)
        !            73:                                        error("tried to widen table in T&, not allowed");
        !            74:                                return;
        !            75:                                }
        !            76:                        sawchar=0;
        !            77:                        continue;
        !            78:                case 'C': case 'S': case 'R': case 'N': case 'L':  case 'A':
        !            79:                        c += ('a'-'A');
        !            80:                case '_': if (c=='_') c= '-';
        !            81:                case '=': case '-':
        !            82:                case '^':
        !            83:                case 'c': case 's': case 'n': case 'r': case 'l':  case 'a':
        !            84:                        if (icol>=MAXCOL)
        !            85:                                error("too many columns in table");
        !            86:                        style[nclin][icol]=c;
        !            87:                        if (c== 's' && icol<=0)
        !            88:                                error("first column can not be S-type");
        !            89:                        if (c=='s' && style[nclin][icol-1] == 'a')
        !            90:                                {
        !            91:                                fprintf(tabout, ".tm warning: can't span a-type cols, changed to l\n");
        !            92:                                style[nclin][icol-1] = 'l';
        !            93:                                }
        !            94:                        if (c=='s' && style[nclin][icol-1] == 'n')
        !            95:                                {
        !            96:                                fprintf(tabout, ".tm warning: can't span n-type cols, changed to c\n");
        !            97:                                style[nclin][icol-1] = 'c';
        !            98:                                }
        !            99:                        icol++;
        !           100:                        if (c=='^' && nclin<=0)
        !           101:                                error("first row can not contain vertical span");
        !           102:                        sawchar=1;
        !           103:                        continue;
        !           104:                case 'b': case 'i': 
        !           105:                        c += 'A'-'a';
        !           106:                case 'B': case 'I':
        !           107:                        if (icol==0) continue;
        !           108:                        snp=font[nclin][icol-1];
        !           109:                        snp[0]= (c=='I' ? '2' : '3');
        !           110:                        snp[1]=0;
        !           111:                        continue;
        !           112:                case 't': case 'T':
        !           113:                        if (icol>0)
        !           114:                        ctop[nclin][icol-1] = 1;
        !           115:                        continue;
        !           116:                case 'd': case 'D':
        !           117:                        if (icol>0)
        !           118:                        ctop[nclin][icol-1] = -1;
        !           119:                        continue;
        !           120:                case 'f': case 'F':
        !           121:                        if (icol==0) continue;
        !           122:                        snp=font[nclin][icol-1];
        !           123:                        snp[0]=snp[1]=stopc=0;
        !           124:                        for(i=0; i<2; i++)
        !           125:                                {
        !           126:                                c = get1char();
        !           127:                                if (i==0 && c=='(')
        !           128:                                        {
        !           129:                                        stopc=')';
        !           130:                                        c = get1char();
        !           131:                                        }
        !           132:                                if (c==0) break;
        !           133:                                if (c==stopc) {stopc=0; break;}
        !           134:                                if (stopc==0)  if (c==' ' || c== tab ) break;
        !           135:                                if (c=='\n'){un1getc(c); break;}
        !           136:                                snp[i] = c;
        !           137:                                if (c>= '0' && c<= '9') break;
        !           138:                                }
        !           139:                        if (stopc) if (get1char()!=stopc)
        !           140:                                error("Nonterminated font name");
        !           141:                        continue;
        !           142:                case 'P': case 'p':
        !           143:                        if (icol<=0) continue;
        !           144:                        temp = snp = csize[nclin][icol-1];
        !           145:                        while (c = get1char())
        !           146:                                {
        !           147:                                if (c== ' ' || c== tab || c=='\n') break;
        !           148:                                if (c=='-' || c == '+')
        !           149:                                        if (snp>temp)
        !           150:                                                break;
        !           151:                                        else
        !           152:                                                *snp++=c;
        !           153:                                else
        !           154:                                if (digit(c))
        !           155:                                        *snp++ = c;
        !           156:                                else break;
        !           157:                                if (snp-temp>4)
        !           158:                                        error("point size too large");
        !           159:                                }
        !           160:                        *snp = 0;
        !           161:                        if (atoi(temp)>36)
        !           162:                                error("point size unreasonable");
        !           163:                        un1getc (c);
        !           164:                        continue;
        !           165:                case 'V': case 'v':
        !           166:                        if (icol<=0) continue;
        !           167:                        temp = snp = vsize[nclin][icol-1];
        !           168:                        while (c = get1char())
        !           169:                                {
        !           170:                                if (c== ' ' || c== tab || c=='\n') break;
        !           171:                                if (c=='-' || c == '+')
        !           172:                                        if (snp>temp)
        !           173:                                                break;
        !           174:                                        else
        !           175:                                                *snp++=c;
        !           176:                                else
        !           177:                                if (digit(c))
        !           178:                                        *snp++ = c;
        !           179:                                else break;
        !           180:                                if (snp-temp>4)
        !           181:                                        error("vertical spacing value too large");
        !           182:                                }
        !           183:                        *snp=0;
        !           184:                        un1getc(c);
        !           185:                        continue;
        !           186:                case 'w': case 'W':
        !           187:                        snp = cll [icol-1];
        !           188:                /* Dale Smith didn't like this check - possible to have two text blocks
        !           189:                   of different widths now ....
        !           190:                        if (*snp)
        !           191:                                {
        !           192:                                fprintf(tabout, "Ignored second width specification");
        !           193:                                continue;
        !           194:                                }
        !           195:                /* end commented out code ... */
        !           196:                        stopc=0;
        !           197:                        while (c = get1char())
        !           198:                                {
        !           199:                                if (snp==cll[icol-1] && c=='(')
        !           200:                                        {
        !           201:                                        stopc = ')';
        !           202:                                        continue;
        !           203:                                        }
        !           204:                                if ( !stopc && (c>'9' || c< '0'))
        !           205:                                        break;
        !           206:                                if (stopc && c== stopc)
        !           207:                                        break;
        !           208:                                *snp++ =c;
        !           209:                                }
        !           210:                        *snp=0;
        !           211:                        if (snp-cll[icol-1]>CLLEN)
        !           212:                                error ("column width too long");
        !           213:                        if (!stopc)
        !           214:                                un1getc(c);
        !           215:                        continue;
        !           216:                case 'e': case 'E':
        !           217:                        if (icol<1) continue;
        !           218:                        evenup[icol-1]=1;
        !           219:                        evenflg=1;
        !           220:                        continue;
        !           221:                case '0': case '1': case '2': case '3': case '4':
        !           222:                case '5': case '6': case '7': case '8': case '9': 
        !           223:                        sn[0] = c;
        !           224:                        snp=sn+1;
        !           225:                        while (digit(*snp++ = c = get1char()))
        !           226:                                ;
        !           227:                        un1getc(c);
        !           228:                        sep[icol-1] = max(sep[icol-1], numb(sn));
        !           229:                        continue;
        !           230:                case '|':
        !           231:                        lefline[nclin][icol]++;
        !           232:                        if (icol==0) left1flg=1;
        !           233:                        continue;
        !           234:                }
        !           235:        }
        !           236: error("EOF reading table specification");
        !           237: }

unix.superglobalmegacorp.com

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