Annotation of cci/usr/src/usr.bin/bsc/cmd/3270/emprtr.c, revision 1.1.1.1

1.1       root        1: /*     D.L.Buck and Associates, Inc. - 8/27/84
                      2:  *
                      3:  *     COPYRIGHT NOTICE:
                      4:  *             Copyright c 8/27/84 - An unpublished work by
                      5:  *             D.L.Buck and Associates, Inc.
                      6:  *
                      7:  *     PROPRIETARY RIGHTS NOTICE:
                      8:  *             All rights reserved. This document and program contains
                      9:  *             proprietary information of D.L.Buck and Associates,Inc.
                     10:  *             of San Jose, California, U.S.A., embodying confidential
                     11:  *             information,  ideas, and expressions,  no part of which
                     12:  *             may be reproduced, or transmitted in any form or by any
                     13:  *             means,  electronic,  mechanical,  or otherwise, without
                     14:  *             the written permission of D.L.Buck and Associates, Inc.
                     15:  *
                     16:  * NAME
                     17:  *     emprtr
                     18:  *
                     19:  * SYNOPSIS
                     20:  *     emprtr()
                     21:  *
                     22:  * DESCRIPTION
                     23:  *     emprtr prints the contents of the received printer buffer.
                     24:  */
                     25: 
                     26: #include "empr.h"
                     27: #include <signal.h>
                     28: 
                     29: #define        EM      0x19
                     30: #define        NL      0x0a
                     31: #define        CR      0x0d
                     32: #define        SI      0x0f
                     33: #define        FF      0x0c
                     34: #define        YES     1
                     35: #define        NO      0
                     36: 
                     37: #ifndef lint
                     38: static char sccsid[] = "@(#)emprtr.c   1.9 ";
                     39: #endif
                     40: extern int wflag;      /* set if we wrote something to pipe; 0 if not */
                     41: extern int maxlen;     /* defined in emprbuf; line length from wcc */
                     42: 
                     43: extern int prtype;     /* printer type- 4,6,7,8,9 (3284,3286,3287,3288,3289) */
                     44: extern int buffered;   /* 0=unbuffered printer; 1=buffered printer */
                     45: extern int tprint;     /* text print option for 3288; if 1, suppress index
                     46:                           works */
                     47: extern int ctype;      /* controller type- 1,5 (3271, 3275) */
                     48: extern int linesperpage;       /* # of lines allowed per page */
                     49: 
                     50: extern FILE *outfd;    /* device, file, or pipe to write printer output to */
                     51: extern char outtype;
                     52: 
                     53: 
                     54: char *scrnptr; /* points to character being processed now */
                     55: char *lptr;            /* pointer into line */
                     56: char line[256];                /* construct lines here */
                     57: emprtr()
                     58: {
                     59:        register int lctr = 0;  /* number of lines on page so far       */
                     60:        register int dflag = 0; /* set if line `dirty' - non-white stuff*/
                     61:        register char *scrnend = &scrn_image[MAXSCREENSIZE];
                     62: 
                     63:        scrnptr = scrn_image;
                     64:        lptr = line;
                     65:        cursaddr = 0;
                     66:        curfield = scrn_xref[cursaddr];
                     67: 
                     68:        while (scrnptr != scrnend)      { /* build lines while not screen end */
                     69:            switch(*scrnptr)            {
                     70:                /* CR Order (3287, 3289 Printers): ref. pf 2-23
                     71:                 *      Executed only by 3287 and 3289 printers, in
                     72:                 *      unformatted mode and in displayable/printable field.
                     73:                 *      Otherwise print as space.
                     74:                 */
                     75:                case CR:        /* Carriage Return                      */
                     76:                        if ((prtype == 7 || prtype == 9) &&
                     77:                            (maxlen == 132) && !invis_attr(fldattr[curfield])) {
                     78:                                *lptr++ = '\r';
                     79:                                *lptr = '\0';
                     80:                                if (dflag)
                     81:                                        fputs (line,outfd);
                     82:                                lptr = line;
                     83:                                break;
                     84:                        }
                     85:                        /* Print as space                               */
                     86:                        *lptr++ = ' ';
                     87:                        break;
                     88: 
                     89:                /* EM Order (All Printers): ref. pg 2-22.
                     90:                 *      Executed only in unformatted (132 col mode) printout and
                     91:                 *      when not in nondisplay/nonprint field.
                     92:                 *      In nondisplay/nonprint field, it prints as blank.
                     93:                 *      In formatted output, it "is printed by the 3284, 3286,
                     94:                 *      3287, and 3288 printers as the graphic `9,' and by the
                     95:                 *      3230, 3262, 3268, 3287, and 3289 printers as a space
                     96:                 *      character." (sic)
                     97:                 *      So, who knows what the 3287 really does ...
                     98:                 *      we print a `9'.
                     99:                 */
                    100:                case EM:        /* end of media */
                    101:                        if (maxlen == 132 &&
                    102:                            !invis_attr(fldattr[curfield]))     {
                    103:                                if (lptr != line)       {
                    104:                                        *lptr++ = '\n';
                    105:                                        *lptr = '\0';
                    106:                                        fputs(line, outfd);
                    107:                                        ++lctr;
                    108:                                }
                    109:                                goto way_out;
                    110:                        }
                    111: 
                    112:                        if (invis_attr(fldattr[curfield]) ||
                    113:                            (prtype == 9 && maxlen < 132))
                    114:                                *lptr++ = ' ';
                    115:                        else if (prtype != 9)   {
                    116:                                *lptr++ = '9';
                    117:                                ++dflag;
                    118:                        }
                    119:                        break;
                    120: 
                    121:                /* FF Order (3287, 3288, 3289 Printers): ref. pg 2-22
                    122:                 *      Executed by the above printers during either
                    123:                 *      formatted or unformatted operations, when at
                    124:                 *      beginning of line.  At other than beginning of
                    125:                 *      line, it prints as "<" or blank on the 3288 printer
                    126:                 *      depending on whether the field is printable or not.
                    127:                 *      If the printer is at top-of-form on a 3287 or 3289
                    128:                 *      the skip is not performed.
                    129:                 */
                    130:                case FF:        /* form feed */
                    131:                        if (prtype < 7 || prtype > 9 || lptr != line) {
                    132:                                if (invis_attr(fldattr[curfield]))
                    133:                                        *lptr++ = ' ';
                    134:                                else    {
                    135:                                        *lptr++ = '<';
                    136:                                        dflag = 1;
                    137:                                }
                    138:                                break;
                    139:                        }
                    140: 
                    141:                        /* At beginning of line                         */
                    142:                        if ((prtype == 7 || prtype == 9) &&
                    143:                            (lctr == 0))
                    144:                                break;  /* Don't skip again             */
                    145:                        fputs("\f\r",outfd);
                    146:                        *lptr++ = ' ';
                    147:                        lctr = 0;
                    148:                        break;
                    149: 
                    150:                /* NL Order (All Printers): ref. pg 2-22
                    151:                 *      Executed only in unformatted print (132 col) mode,
                    152:                 *      in displayable/printable field.
                    153:                 *      When not executed, `it is printed by the 3284, 3286,
                    154:                 *      3287, and 3288 printers as the graphic "5", and by
                    155:                 *      the 3230, 3262, 3268, 3287, and 3289 printers as a
                    156:                 *      space character.' (sic)
                    157:                 *      So, who knows what the 3287 really does ...
                    158:                 *      we print a `5'.
                    159:                 */
                    160:        
                    161:                case NL:
                    162:                        if (invis_attr(fldattr[curfield]) || maxlen != 132) {
                    163:                                if (invis_attr(fldattr[curfield]) ||
                    164:                                    prtype == 9)
                    165:                                        *lptr++ = ' ';
                    166:                                else    {
                    167:                                        *lptr++ = '5';
                    168:                                        ++dflag;
                    169:                                }
                    170:                                break;
                    171:                        }
                    172: 
                    173:                        *lptr++ = '\n';
                    174:                        *lptr = '\0';
                    175:                        fputs(line, outfd);
                    176:                        ++lctr;
                    177:                        dflag = 0;
                    178:                        lptr = line;
                    179:                        *lptr = '\0';
                    180:                        break;
                    181: 
                    182:        /* SI -- suppress index; works like a carriage return, but only on
                    183:           3288 printers which have the text print option */
                    184:                case SI:
                    185:                        if (prtype != 8 || tprint == NO) break;
                    186:                        *lptr++ = '\r';
                    187:                        *lptr = '\0';
                    188:                        fputs(line, outfd);
                    189:                        lptr = line;
                    190:                        break;
                    191: 
                    192:                case ' ':
                    193:                case '\0':
                    194:                case (char)ATTRCODE:
                    195:                        *lptr++ = ' ';
                    196:                        break;
                    197: 
                    198:                default:
                    199:                        if (invis_attr(fldattr[curfield]))
                    200:                                *lptr++ = ' ';
                    201:                        else    {
                    202:                                *lptr++ = *scrnptr;
                    203:                                ++dflag;
                    204:                        }
                    205:                        break;
                    206:                };      /* End of SWITCH                                */
                    207: 
                    208:                /* Check for end of line.                               */
                    209:                if ((lptr - line) >= maxlen)    {
                    210:                        if (dflag)      {       /* Line is `dirty'      */
                    211:                                *lptr++ = '\n'; *lptr = '\0';
                    212:                                fputs(line, outfd);
                    213:                                ++lctr;
                    214:                        }
                    215:                        dflag = 0;
                    216:                        lptr = line;
                    217:                        *lptr = '\0';
                    218:                }
                    219: 
                    220: chk_eop:       /* Check for end of page.                               */
                    221:                if (lctr >= linesperpage)       {
                    222:                        fputs("\f\r",outfd);
                    223:                        lctr = 0;
                    224:                }
                    225: 
                    226:                ++scrnptr;
                    227:                if (++cursaddr >= MAXSCREENSIZE)
                    228:                        cursaddr = 0;
                    229:                curfield = scrn_xref[cursaddr];
                    230:        }
                    231: 
                    232:        /* End of Screen Buffer ... Finish up                           */
                    233:        if (dflag) {    /* Finish with last line                        */
                    234:                *lptr++ = '\n';
                    235:                *lptr = '\0';
                    236:                fputs(line,outfd);
                    237:                if (++lctr >= linesperpage)     {
                    238:                        fputs("\f\r",outfd);
                    239:                        lctr = 0;
                    240:                }
                    241:        }
                    242: way_out:
                    243:        /* If writing to pipe, mark that we wrote to it                 */
                    244:        if (outtype == 'P')
                    245:                ++wflag;
                    246: }

unix.superglobalmegacorp.com

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