1*14510Ssam #ifndef lint 2*14510Ssam static char sccsid[] = "@(#)t7.c 4.3 08/11/83"; 3*14510Ssam #endif 411034Sshannon 511034Sshannon /* t7.c: control to write table entries */ 611034Sshannon # include "t..c" 711034Sshannon # define realsplit ((ct=='a'||ct=='n') && table[ldata][c].rcol) 811034Sshannon runout() 911034Sshannon { 1011034Sshannon int i; 1111034Sshannon if (boxflg || allflg || dboxflg) need(); 1211034Sshannon if (ctrflg) 1311034Sshannon { 1411034Sshannon fprintf(tabout, ".nr #I \\n(.i\n"); 1511034Sshannon fprintf(tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n"); 1611034Sshannon } 1711034Sshannon fprintf(tabout, ".fc %c %c\n", F1, F2); 1811034Sshannon fprintf(tabout, ".nr #T 0-1\n"); 1911034Sshannon deftail(); 2011034Sshannon for(i=0; i<nlin; i++) 2111034Sshannon putline(i,i); 2211034Sshannon if (leftover) 2311034Sshannon yetmore(); 2411034Sshannon fprintf(tabout, ".fc\n"); 2511034Sshannon fprintf(tabout, ".nr T. 1\n"); 2611034Sshannon fprintf(tabout, ".T# 1\n"); 2711034Sshannon if (ctrflg) 2811034Sshannon fprintf(tabout, ".in \\n(#Iu\n"); 2911034Sshannon } 3011034Sshannon runtabs(lform, ldata) 3111034Sshannon { 3211034Sshannon int c, ct, vforml, lf; 3311034Sshannon fprintf(tabout, ".ta "); 3411034Sshannon for(c=0; c<ncol; c++) 3511034Sshannon { 3611034Sshannon vforml=lform; 3711034Sshannon for(lf=prev(lform); lf>=0 && vspen(table[lf][c].col); lf=prev(lf)) 3811034Sshannon vforml=lf; 3911034Sshannon if (fspan(vforml,c)) 4011034Sshannon continue; 4111034Sshannon switch(ct=ctype(vforml,c)) 4211034Sshannon { 4311034Sshannon case 'n': 4411034Sshannon case 'a': 4511034Sshannon if (table[ldata][c].rcol) 4611034Sshannon if (lused[c]) /*Zero field width*/ 4711034Sshannon fprintf(tabout, "\\n(%du ",c+CMID); 4811034Sshannon case 'c': 4911034Sshannon case 'l': 5011034Sshannon case 'r': 5111034Sshannon if (realsplit? rused[c]: (used[c]+lused[c])) 5211034Sshannon fprintf(tabout, "\\n(%du ",c+CRIGHT); 5311034Sshannon continue; 5411034Sshannon case 's': 5511034Sshannon if (lspan(lform, c)) 5611034Sshannon fprintf(tabout, "\\n(%du ", c+CRIGHT); 5711034Sshannon continue; 5811034Sshannon } 5911034Sshannon } 6011034Sshannon fprintf(tabout, "\n"); 6111034Sshannon } 6211034Sshannon ifline(s) 6311034Sshannon char *s; 6411034Sshannon { 6511048Sshannon if (!point(s)) return(0); 6611034Sshannon if (s[0] == '\\') s++; 6711034Sshannon if (s[1] ) return(0); 6811034Sshannon if (s[0] == '_') return('-'); 6911034Sshannon if (s[0] == '=') return('='); 7011034Sshannon return(0); 7111034Sshannon } 7211034Sshannon need() 7311034Sshannon { 7411034Sshannon int texlin, horlin, i; 7511034Sshannon for(texlin=horlin=i=0; i<nlin; i++) 7611034Sshannon { 7711034Sshannon if (fullbot[i]!=0) 7811034Sshannon horlin++; 7911034Sshannon else 8011034Sshannon if (instead[i]!=0) 8111034Sshannon continue; 8211034Sshannon else 8311034Sshannon texlin++; 8411034Sshannon } 8511034Sshannon fprintf(tabout, ".ne %dv+%dp\n",texlin,2*horlin); 8611034Sshannon } 8711034Sshannon deftail() 8811034Sshannon { 8911034Sshannon int i, c, lf, lwid; 9011034Sshannon for(i=0; i<MAXHEAD; i++) 9111034Sshannon if (linestop[i]) 9211034Sshannon fprintf(tabout, ".nr #%c 0-1\n", linestop[i]+'a'-1); 9311034Sshannon fprintf(tabout, ".nr #a 0-1\n"); 9411034Sshannon fprintf(tabout, ".eo\n"); 9511034Sshannon fprintf(tabout, ".de T#\n"); 9611034Sshannon fprintf(tabout, ".ds #d .d\n"); 9711034Sshannon fprintf(tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n"); 9811034Sshannon fprintf(tabout, ".mk ##\n"); 9911034Sshannon fprintf(tabout, ".nr ## -1v\n"); 10011034Sshannon fprintf(tabout, ".ls 1\n"); 10111034Sshannon for(i=0; i<MAXHEAD; i++) 10211034Sshannon if (linestop[i]) 10311034Sshannon fprintf(tabout, ".if \\n(#T>=0 .nr #%c \\n(#T\n",linestop[i]+'a'-1); 10411034Sshannon if (boxflg || allflg || dboxflg) /* bottom of table line */ 10511034Sshannon if (fullbot[nlin-1]==0) 10611034Sshannon { 10711034Sshannon if (!pr1403) 10811034Sshannon fprintf(tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n"); 10911034Sshannon fprintf(tabout, ".if \\n(T. "); 11011034Sshannon drawline(nlin,0,ncol, dboxflg ? '=' : '-',1,0); 11111034Sshannon fprintf(tabout, "\n.if \\n(T. .vs\n"); 11211034Sshannon /* T. is really an argument to a macro but because of 11311034Sshannon eqn we don't dare pass it as an argument and reference by $1 */ 11411034Sshannon } 11511034Sshannon for(c=0; c<ncol; c++) 11611034Sshannon { 11711034Sshannon if ((lf=left(nlin-1,c, &lwid))>=0) 11811034Sshannon { 11911034Sshannon fprintf(tabout, ".if \\n(#%c>=0 .sp -1\n",linestop[lf]+'a'-1); 12011034Sshannon fprintf(tabout, ".if \\n(#%c>=0 ", linestop[lf]+'a'-1); 12111034Sshannon tohcol(c); 12211034Sshannon drawvert(lf, nlin-1, c, lwid); 12311034Sshannon fprintf(tabout, "\\h'|\\n(TWu'\n"); 12411034Sshannon } 12511034Sshannon } 12611034Sshannon if (boxflg || allflg || dboxflg) /* right hand line */ 12711034Sshannon { 12811034Sshannon fprintf(tabout, ".if \\n(#a>=0 .sp -1\n"); 12911034Sshannon fprintf(tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'"); 13011034Sshannon drawvert (0, nlin-1, ncol, dboxflg? 2 : 1); 13111034Sshannon fprintf(tabout, "\n"); 13211034Sshannon } 13311034Sshannon fprintf(tabout, ".ls\n"); 13411034Sshannon fprintf(tabout, "..\n"); 13511034Sshannon fprintf(tabout, ".ec\n"); 13611034Sshannon } 137