1 /* tg.c: process included text blocks */ 2 # include "t.h" 3 4 int 5 gettext(char *sp, int ilin, int icol, char *fn, char *sz) 6 { 7 /* get a section of text */ 8 char line[4096]; 9 int oname; 10 char *vs; 11 12 if (texname == 0) 13 error("Too many text block diversions"); 14 if (textflg == 0) { 15 Bprint(&tabout, ".nr %d \\n(.lu\n", SL); /* remember old line length */ 16 textflg = 1; 17 } 18 Bprint(&tabout, ".eo\n"); 19 Bprint(&tabout, ".am %s\n", reg(icol, CRIGHT)); 20 Bprint(&tabout, ".br\n"); 21 Bprint(&tabout, ".di %c+\n", texname); 22 rstofill(); 23 if (fn && *fn) 24 Bprint(&tabout, ".nr %d \\n(.f\n.ft %s\n", S1, fn); 25 Bprint(&tabout, ".ft \\n(.f\n"); /* protect font */ 26 vs = vsize[icol][stynum[ilin]]; 27 if ((sz && *sz) || (vs && *vs)) { 28 Bprint(&tabout, ".nr %d \\n(.v\n", S9); 29 if (vs == 0 || *vs == 0) 30 vs = "\\n(.s+2"; 31 if (sz && *sz) 32 Bprint(&tabout, ".ps %s\n", sz); 33 Bprint(&tabout, ".vs %s\n", vs); 34 Bprint(&tabout, ".if \\n(%du>\\n(.vu .sp \\n(%du-\\n(.vu\n", S9, S9); 35 } 36 if (cll[icol][0]) 37 Bprint(&tabout, ".ll %sn\n", cll[icol]); 38 else 39 Bprint(&tabout, ".ll \\n(%du*%du/%du\n", SL, ctspan(ilin, icol), ncol + 1); 40 Bprint(&tabout, ".if \\n(.l<\\n(%2s .ll \\n(%2su\n", reg(icol, CRIGHT), 41 reg(icol, CRIGHT)); 42 if (ctype(ilin, icol) == 'a') 43 Bprint(&tabout, ".ll -2n\n"); 44 Bprint(&tabout, ".in 0\n"); 45 while (gets1(line, sizeof(line))) { 46 if (line[0] == 'T' && line[1] == '}' && line[2] == tab) 47 break; 48 if (match("T}", line)) 49 break; 50 Bprint(&tabout, "%s\n", line); 51 } 52 if (fn && *fn) 53 Bprint(&tabout, ".ft \\n(%d\n", S1); 54 if (sz && *sz) 55 Bprint(&tabout, ".br\n.ps\n.vs\n"); 56 Bprint(&tabout, ".br\n"); 57 Bprint(&tabout, ".di\n"); 58 Bprint(&tabout, ".nr %c| \\n(dn\n", texname); 59 Bprint(&tabout, ".nr %c- \\n(dl\n", texname); 60 Bprint(&tabout, "..\n"); 61 Bprint(&tabout, ".ec \\\n"); 62 /* copy remainder of line */ 63 if (line[2]) 64 tcopy (sp, line + 3); 65 else 66 *sp = 0; 67 oname = texname; 68 texname = texstr[++texct]; 69 return(oname); 70 } 71 72 73 void 74 untext(void) 75 { 76 rstofill(); 77 Bprint(&tabout, ".nf\n"); 78 Bprint(&tabout, ".ll \\n(%du\n", SL); 79 } 80 81 82