Annotation of cci/usr/src/usr.bin/bsc/cmd/3270/em3280.c, revision 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:  * NAME
        !            16:  *     em3280 - IBM 3280 printer emulator
        !            17:  *
        !            18:  * SYNOPSIS
        !            19:  *     em3280 [<hostname>]
        !            20:  *
        !            21:  * DESCRIPTION
        !            22:  *     em3280 is the controlling utility of the IBM 328x printer
        !            23:  *     emulator.
        !            24:  *
        !            25:  * ALGORITHM
        !            26:  *     I. Initialization
        !            27:  *             A. Set signals
        !            28:  *             B. Process control parameters
        !            29:  *                     1. hostname - specifies control unit interface to
        !            30:  *                        emulate
        !            31:  *             C. Get host and printer configuration parameters
        !            32:  *             D. Call connect installation exit
        !            33:  *
        !            34:  *     II. Emulate printer while no interrupts received
        !            35:  *             A. Open the comm device
        !            36:  *             B. Set device parameters
        !            37:  *             C. Process a file
        !            38:  *             D. Close the comm device
        !            39:  */
        !            40: 
        !            41: #include "local.h"
        !            42: #include <bsc/bscio.h>
        !            43: #include <empr.h>
        !            44: #include <errno.h>
        !            45: #ifdef BSD42
        !            46: #include <sys/time.h>
        !            47: #else
        !            48: #include <time.h>
        !            49: #endif
        !            50: 
        !            51: #ifdef DEBUG
        !            52: #define libpath "./"
        !            53: #define spoolpath "./"
        !            54: #else
        !            55: #define libpath "/usr/lib/bscbatch/"
        !            56: #define spoolpath "/usr/spool/bscbatch/"
        !            57: #endif
        !            58: 
        !            59: #define YES 1
        !            60: #define NO 0
        !            61: 
        !            62: #ifndef lint
        !            63: static char sccsid[] = "@(#)em3280.c   1.8 ";
        !            64: #endif
        !            65: 
        !            66: char hostname[20] = "3280";    /* contains host name */
        !            67: char audname[80];              /* temp audit file pathname goes here */
        !            68: char new_audnm[80];            /* real audit pathname goes here */
        !            69: char auditlock[80];            /* audit lockfile pathname goes here */
        !            70: 
        !            71: char *strcpy();                        /* function copies one string to another */
        !            72: char *strcat();                        /* function appends one string to another */
        !            73: char *getenv();                        /* find string in environment */
        !            74: 
        !            75: int chk_hostid;
        !            76: int chk_termid;
        !            77: int primary = BSCPRIM;
        !            78: int rviab; 
        !            79: int pt_to_pt;
        !            80: int ascii;             /* ascii or ebcdic data? */
        !            81: int devfd;             /* bsc device file descriptor */
        !            82: int wflag;             /* set if pipe's been written to; 0 otherwise */
        !            83: extern int errno;
        !            84: extern char *sys_errlist[];
        !            85: long atol();           /* converts ascii to long */
        !            86: char devname[20];
        !            87: char outtype;          /* pipe printer output to a program if this is "P",
        !            88:                           write to a file or device if this is "F" */
        !            89: int prtype;            /* terminal type */
        !            90: int tprint;            /* text print option flag (3288 only) */
        !            91: int ctype;             /* controller type - 1 for 3271, 5 for 3275 */
        !            92: int buffered;          /* buffered printer flag */
        !            93: int vfc;               /* vertical forms unit flag */
        !            94: int linesperpage;      /* number of lines allowed per page */
        !            95: int stationid;         /* subdevice id, translated appropriately */
        !            96: char termid;           /* cluster address (poll) */
        !            97: char note[100];                /* msg to write to AUDIT file and mail */
        !            98: char emsg[80];         /* gather messages from other routines here */
        !            99: char sys_admin[20] = "/dev/console";   /* mail destination */
        !           100: 
        !           101: FILE *fopen();         /* function opens files */
        !           102: FILE *popen();         /* initiate I/O to form a process */
        !           103: FILE *aud;             /* host AUDIT file pointer */
        !           104: FILE *outfd;           /* printer output file pointer */
        !           105: void exit();
        !           106: 
        !           107: struct bscio p;                /* bsc driver parameter structure */
        !           108:        
        !           109: main(argc,argv)
        !           110: int argc; char *argv[];
        !           111: {
        !           112:        char cfgfile[50];       /* device file name temp area */
        !           113: 
        !           114: /* get options from command line */
        !           115:        if (--argc > 1) {
        !           116:                fprintf(stderr,"em3280: too many parameters\n");
        !           117:                exit(1);
        !           118:        }
        !           119: 
        !           120: /* hostname */
        !           121:        if (argc)       {
        !           122:                ++argv;
        !           123:                strcpy(hostname,argv[0]);       /* take given host name */
        !           124:        }
        !           125: 
        !           126:        /* get host configuration parameters */
        !           127:                sprintf(cfgfile,"%s%s",libpath,hostname);
        !           128:                if (get_cnfig(cfgfile)) exit (1);
        !           129:                
        !           130:        /* construct temp AUDIT pathname, open AUDIT file */
        !           131:                sprintf(audname,"%s%s/%s",spoolpath,hostname,"AUDIT");
        !           132:        /* construct default real AUDIT pathname */
        !           133:                sprintf(new_audnm,"%s%s/%s",spoolpath,hostname,"AUDIT");
        !           134:                if (access(audname,0) == 0)     {
        !           135:                        sprintf(auditlock,"%s%s/%s",spoolpath,
        !           136:                                hostname,"auditlock");
        !           137:                        if (creat(auditlock,0) < 0)
        !           138:                                em_audnm();
        !           139:                        else
        !           140:                                aud = fopen(audname,"a");
        !           141:                }
        !           142: 
        !           143:        do      {
        !           144:        /* write "ready for connect" msg to AUDIT */
        !           145:                sprintf (note,"Ready for connect via <%s>",devname);
        !           146:                write_aud("C",note);
        !           147: 
        !           148:        /* call connect installation exit */
        !           149:                if (connect(hostname,devname))  {
        !           150:                /* skip this host if there were problems */
        !           151:                        sprintf(note,
        !           152:                        "Connection aborted by installation connect exit",
        !           153:                                emsg);
        !           154:                        write_aud("C",note);
        !           155: 
        !           156:                /* tell user about it */
        !           157:                        fprintf(stderr,"%s\n",note);
        !           158:                        post();
        !           159:                        cleanup();
        !           160:                        exit(4);
        !           161:                }
        !           162: 
        !           163: #ifndef DEBUG
        !           164:        /* open bsc device */
        !           165:                if ((devfd = open(devname,2)) == -1) {
        !           166:                        if (errno == EBUSY) {
        !           167:                                sprintf(note,
        !           168:                                "Open failed, device <%s> busy.",devname);
        !           169:                                write_aud("C", note);
        !           170:                                fprintf(stderr,
        !           171:                                "em3280 <%s>: <%s> being used.\n",
        !           172:                                        hostname, note);
        !           173:                                post();
        !           174:                                disconnect(hostname,devname);
        !           175:                                continue;
        !           176:                        }
        !           177:                        /* update AUDIT file with the news */
        !           178:                        sprintf(note,
        !           179:                        "Connection failed, <%s> couldn't be opened: %s",
        !           180:                                devname,sys_errlist[errno]);
        !           181:                        fprintf(stderr,"em3280 <%s>: %s\n",hostname,note);
        !           182:                        write_aud("C",note);
        !           183:                        disconnect(hostname,devname);
        !           184:                        post();
        !           185:                        continue;
        !           186:                }
        !           187: #endif
        !           188: 
        !           189:        /* write "connected" message to AUDIT file */
        !           190:                sprintf(note,"Connected to <%s>",devname);
        !           191:                write_aud("C",note);
        !           192: 
        !           193: #ifndef DEBUG
        !           194:        /* set no-delay for device reads */
        !           195:                ioctl(devfd, BSCNDLY, 0);
        !           196: 
        !           197:        /* set fast-acknowlege */
        !           198:                ioctl(devfd, BSCFACK, 0);
        !           199: 
        !           200:        /* set device parameters */
        !           201:                ioctl(devfd, BSCSET, &p);
        !           202: 
        !           203:        /* send initial device-end status message */
        !           204:                send_stat();
        !           205: #endif
        !           206: 
        !           207:        /* emulate 328x printers */
        !           208:                em_printers();
        !           209:                
        !           210: #ifndef DEBUG
        !           211:        /* close bsc device */
        !           212:                close(devfd);
        !           213:                break;
        !           214: #endif
        !           215:        }       while (getnextopen() != -1);
        !           216:        cleanup();
        !           217:        exit(3);
        !           218: }
        !           219: 
        !           220: /* post - send mail to system administrator about sad events */
        !           221: post()
        !           222: {
        !           223:        FILE *popen(), *pptr;
        !           224:        char address[50];
        !           225: 
        !           226:        sprintf(address, "mail %s", sys_admin);
        !           227:        if (sys_admin[0] == '/')        {
        !           228:                pptr = fopen(sys_admin, "a");
        !           229:                fputs(note, pptr);
        !           230:                fclose(pptr);
        !           231:        } else {
        !           232:                pptr = popen(address, "w");
        !           233:                fputs(note, pptr);
        !           234:                pclose(pptr);
        !           235:        }
        !           236: }

unix.superglobalmegacorp.com

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