URI:
       tt7.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tt7.c (3413B)
       ---
            1 /* t7.c: control to write table entries */
            2 # include "t.h"
            3 # define realsplit ((ct=='a'||ct=='n') && table[ldata][c].rcol)
            4 
            5 void
            6 runout(void)
            7 {
            8         int        i;
            9 
           10         if (boxflg || allflg || dboxflg)
           11                 need();
           12         if (ctrflg) {
           13                 Bprint(&tabout, ".nr #I \\n(.i\n");
           14                 Bprint(&tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n");
           15         }
           16         Bprint(&tabout, ".fc %c %c\n", F1, F2);
           17         Bprint(&tabout, ".nr #T 0-1\n");
           18         deftail();
           19         for (i = 0; i < nlin; i++)
           20                 putline(i, i);
           21         if (leftover)
           22                 yetmore();
           23         Bprint(&tabout, ".fc\n");
           24         Bprint(&tabout, ".nr T. 1\n");
           25         Bprint(&tabout, ".T# 1\n");
           26         if (ctrflg)
           27                 Bprint(&tabout, ".in \\n(#Iu\n");
           28 }
           29 
           30 
           31 void
           32 runtabs(int lform, int ldata)
           33 {
           34         int        c, ct, vforml, lf;
           35 
           36         Bprint(&tabout, ".ta ");
           37         for (c = 0; c < ncol; c++) {
           38                 vforml = lform;
           39                 for (lf = prev(lform); lf >= 0 && vspen(table[lf][c].col); lf = prev(lf))
           40                         vforml = lf;
           41                 if (fspan(vforml, c))
           42                         continue;
           43                 switch (ct = ctype(vforml, c)) {
           44                 case 'n':
           45                 case 'a':
           46                         if (table[ldata][c].rcol)
           47                                 if (lused[c]) /*Zero field width*/
           48                                         Bprint(&tabout, "\\n(%2su ", reg(c, CMID));
           49                 case 'c':
           50                 case 'l':
           51                 case 'r':
           52                         if (realsplit ? rused[c] : (used[c] + lused[c]))
           53                                 Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
           54                         continue;
           55                 case 's':
           56                         if (lspan(lform, c))
           57                                 Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
           58                         continue;
           59                 }
           60         }
           61         Bprint(&tabout, "\n");
           62 }
           63 
           64 
           65 int
           66 ifline(char *s)
           67 {
           68         if (!point(s))
           69                 return(0);
           70         if (s[0] == '\\')
           71                 s++;
           72         if (s[1] )
           73                 return(0);
           74         if (s[0] == '_')
           75                 return('-');
           76         if (s[0] == '=')
           77                 return('=');
           78         return(0);
           79 }
           80 
           81 
           82 void
           83 need(void)
           84 {
           85         int        texlin, horlin, i;
           86 
           87         for (texlin = horlin = i = 0; i < nlin; i++) {
           88                 if (fullbot[i] != 0)
           89                         horlin++;
           90                 else if (instead[i] != 0)
           91                         continue;
           92                 else
           93                         texlin++;
           94         }
           95         Bprint(&tabout, ".ne %dv+%dp\n", texlin, 2 * horlin);
           96 }
           97 
           98 
           99 void
          100 deftail(void)
          101 {
          102         int        i, c, lf, lwid;
          103 
          104         for (i = 0; i < MAXHEAD; i++)
          105                 if (linestop[i])
          106                         Bprint(&tabout, ".nr #%c 0-1\n", linestop[i] + 'a' - 1);
          107         Bprint(&tabout, ".nr #a 0-1\n");
          108         Bprint(&tabout, ".eo\n");
          109         Bprint(&tabout, ".de T#\n");
          110         Bprint(&tabout, ".nr 35 1m\n");
          111         Bprint(&tabout, ".ds #d .d\n");
          112         Bprint(&tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n");
          113         Bprint(&tabout, ".mk ##\n");
          114         Bprint(&tabout, ".nr ## -1v\n");
          115         Bprint(&tabout, ".ls 1\n");
          116         for (i = 0; i < MAXHEAD; i++)
          117                 if (linestop[i])
          118                         Bprint(&tabout, ".if \\n(#T>=0 .nr #%c \\n(#T\n",
          119                              linestop[i] + 'a' - 1);
          120         if (boxflg || allflg || dboxflg) /* bottom of table line */
          121                 if (fullbot[nlin-1] == 0) {
          122                         if (!pr1403)
          123                                 Bprint(&tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n");
          124                         Bprint(&tabout, ".if \\n(T. ");
          125                         drawline(nlin, 0, ncol, dboxflg ? '=' : '-', 1, 0);
          126                         Bprint(&tabout, "\n.if \\n(T. .vs\n");
          127                         /* T. is really an argument to a macro but because of
          128                    eqn we don't dare pass it as an argument and reference by $1 */
          129                 }
          130         for (c = 0; c < ncol; c++) {
          131                 if ((lf = left(nlin - 1, c, &lwid)) >= 0) {
          132                         Bprint(&tabout, ".if \\n(#%c>=0 .sp -1\n", linestop[lf] + 'a' - 1);
          133                         Bprint(&tabout, ".if \\n(#%c>=0 ", linestop[lf] + 'a' - 1);
          134                         tohcol(c);
          135                         drawvert(lf, nlin - 1, c, lwid);
          136                         Bprint(&tabout, "\\h'|\\n(TWu'\n");
          137                 }
          138         }
          139         if (boxflg || allflg || dboxflg) /* right hand line */ {
          140                 Bprint(&tabout, ".if \\n(#a>=0 .sp -1\n");
          141                 Bprint(&tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'");
          142                 drawvert (0, nlin - 1, ncol, dboxflg ? 2 : 1);
          143                 Bprint(&tabout, "\n");
          144         }
          145         Bprint(&tabout, ".ls\n");
          146         Bprint(&tabout, "..\n");
          147         Bprint(&tabout, ".ec\n");
          148 }