# 2.11BSD#431 - /usr/src/ucb/colcrt.c

##### Functions

    main              X
    move              X
    pflush            X
    plus              X

##### Variables

    copyright         X
    first             X
    outcol            X
    outline           X
    page              X
    printall          X
    progname          X
    suppresul         X

       1: /*
       2:  * Copyright (c) 1980 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: char copyright[] =
       9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
      10:  All rights reserved.\n";
      11: #endif not lint
      12:
      13: #ifndef lint
      14: static char sccsid[] = "@(#)colcrt.c	5.1 (Berkeley) 5/31/85";
      15: #endif not lint
      16:
      17: #include <stdio.h>
      18: /*
      19:  * colcrt - replaces col for crts with new nroff esp. when using tbl.
      20:  * Bill Joy UCB July 14, 1977
      21:  *
      22:  * This filter uses a screen buffer, 267 half-lines by 132 columns.
      23:  * It interprets the up and down sequences generated by the new
      24:  * nroff when used with tbl and by \u \d and \r.
      25:  * General overstriking doesn't work correctly.
      26:  * Underlining is split onto multiple lines, etc.
      27:  *
      28:  * Option - suppresses all underlining.
      29:  * Option -2 forces printing of all half lines.
      30:  */
      31:
      32: char    page[267][132];
      33:
      34: int outline = 1;
      35: int outcol;
      36:
      37: char    suppresul;
      38: char    printall;
      39:
      40: char    *progname;
      41: FILE    *f;
      42:
      43: main(argc, argv)
      44:     int argc;
      45:     char *argv[];
      46: {
      47:     register c;
      48:     register char *cp, *dp;
      49:
      50:     argc--;
      51:     progname = *argv++;
      52:     while (argc > 0 && argv[0][0] == '-') {
      53:         switch (argv[0][1]) {
      54:             case 0:
      55:                 suppresul = 1;
      56:                 break;
      57:             case '2':
      58:                 printall = 1;
      59:                 break;
      60:             default:
      61:                 printf("usage: %s [ - ] [ -2 ] [ file ... ]\n", progname);
      62:                 fflush(stdout);
      63:                 exit(1);
      64:         }
      65:         argc--;
      66:         argv++;
      67:     }
      68:     do {
      69:         if (argc > 0) {
      70:             close(0);
      71:             if ((f=fopen(argv[0], "r")
      72: ) < 0) {
      73:                 fflush(stdout);
      74:                 perror(argv[0]);
      75:                 exit (1);
      76:             }
      77:             argc--;
      78:             argv++;
      79:         }
      80:         for (;;) {
      81:             c = getc(stdin);
      82:             if (c == -1) {
      83:                 pflush(outline);
      84:                 fflush(stdout);
      85:                 break;
      86:             }
      87:             switch (c) {
      88:                 case '\n':
      89:                     if (outline >= 265)
      90:                         pflush(62);
      91:                     outline += 2;
      92:                     outcol = 0;
      93:                     continue;
      94:                 case '\016':
      95:                     case '\017':
      96:                     continue;
      97:                 case 033:
      98:                     c = getc(stdin);
      99:                     switch (c) {
     100:                         case '9':
     101:                             if (outline >= 266)
     102:                                 pflush(62);
     103:                             outline++;
     104:                             continue;
     105:                         case '8':
     106:                             if (outline >= 1)
     107:                                 outline--;
     108:                             continue;
     109:                         case '7':
     110:                             outline -= 2;
     111:                             if (outline < 0)
     112:                                 outline = 0;
     113:                             continue;
     114:                         default:
     115:                             continue;
     116:                     }
     117:                 case '\b':
     118:                     if (outcol)
     119:                         outcol--;
     120:                     continue;
     121:                 case '\t':
     122:                     outcol += 8;
     123:                     outcol &= ~7;
     124:                     outcol--;
     125:                     c = ' ';
     126:                 default:
     127:                     if (outcol >= 132) {
     128:                         outcol++;
     129:                         continue;
     130:                     }
     131:                     cp = &page[outline][outcol];
     132:                     outcol++;
     133:                     if (c == '_') {
     134:                         if (suppresul)
     135:                             continue;
     136:                         cp += 132;
     137:                         c = '-';
     138:                     }
     139:                     if (*cp == 0) {
     140:                         *cp = c;
     141:                         dp = cp - outcol;
     142:                         for (cp--; cp >= dp && *cp == 0; cp--)
     143:                             *cp = ' ';
     144:                     } else
     145:                         if (plus(c, *cp) || plus(*cp, c))
     146:                             *cp = '+';
     147:                         else if (*cp == ' ' || *cp == 0)
     148:                             *cp = c;
     149:                     continue;
     150:             }
     151:         }
     152:     } while (argc > 0);
     153:     fflush(stdout);
     154:     exit(0);
     155: }
     156:
     157: plus(c, d)
     158:     char c, d;
     159: {
     160:
     161:     return (c == '|' && d == '-' || d == '_');
     162: }
     163:
     164: int first;
     165:
     166: pflush(ol)
     167:     int ol;
     168: {
     169:     register int i, j;
     170:     register char *cp;
     171:     char lastomit;
     172:     int l;
     173:
     174:     l = ol;
     175:     lastomit = 0;
     176:     if (l > 266)
     177:         l = 266;
     178:     else
     179:         l |= 1;
     180:     for (i = first | 1; i < l; i++) {
     181:         move(i, i - 1);
     182:         move(i, i + 1);
     183:     }
     184:     for (i = first; i < l; i++) {
     185:         cp = page[i];
     186:         if (printall == 0 && lastomit == 0 && *cp == 0) {
     187:             lastomit = 1;
     188:             continue;
     189:         }
     190:         lastomit = 0;
     191:         printf("%s\n", cp);
     192:     }
     193:     bcopy(page[ol], page, (267 - ol) * 132);
     194:     bzero(page[267- ol], ol * 132);
     195:     outline -= ol;
     196:     outcol = 0;
     197:     first = 1;
     198: }
     199:
     200: move(l, m)
     201:     int l, m;
     202: {
     203:     register char *cp, *dp;
     204:
     205:     for (cp = page[l], dp = page[m]; *cp; cp++, dp++) {
     206:         switch (*cp) {
     207:             case '|':
     208:                 if (*dp != ' ' && *dp != '|' && *dp != 0)
     209:                     return;
     210:                 break;
     211:             case ' ':
     212:                 break;
     213:             default:
     214:                 return;
     215:         }
     216:     }
     217:     if (*cp == 0) {
     218:         for (cp = page[l], dp = page[m]; *cp; cp++, dp++)
     219:             if (*cp == '|')
     220:                 *dp = '|';
     221:             else if (*dp == 0)
     222:                 *dp = ' ';
     223:         page[l][0] = 0;
     224:     }
     225: }

#### Defined functions

main defined in line 43; never used
move defined in line 200; used 2 times

- in line 181-182(2)

pflush defined in line 166; used 3 times

- in line 83, 90, 102

plus defined in line 157; used 2 times

- in line 145(2)

#### Defined variables

copyright defined in line 8; never used
first defined in line 164; used 3 times

- in line 180-184(2), 197

outcol defined in line 35; used 12 times

- in line 92, 118-132(9), 141, 196

outline defined in line 34; used 12 times

- in line 83, 89-91(2), 101-112(7), 131, 195

page defined in line 32; used 10 times

- in line 131, 185, 193-194(3), 205(2), 218-223(3)

printall defined in line 38; used 2 times

- in line 58, 186

progname defined in line 40; used 2 times

- in line 51, 61

sccsid defined in line 14; never used
suppresul defined in line 37; used 2 times

- in line 55, 134

Last modified: 1987-02-17 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 721 |