Annotation of cci/usr/src/usr.bin/bsc/cmd/3270/emprcnfig.c, revision 1.1

1.1     ! root        1: /*     D.L.Buck and Associates, Inc. - January, 1984
        !             2:  *
        !             3:  *     COPYRIGHT NOTICE:
        !             4:  *             Copyright c 1984 - 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:  *     get_cnfig 
        !            18:  *
        !            19:  * SYNOPSIS
        !            20:  *     get_cnfig(cfgfile)
        !            21:  *     char *cfgfile
        !            22:  *
        !            23:  * DESCRIPTION
        !            24:  *     Get host communications device and printer configuration parameters 
        !            25:  *     from host's configuration file.
        !            26:  *
        !            27:  */
        !            28: 
        !            29: #include <stdio.h>
        !            30: #include "local.h"
        !            31: #include <bsc/bscio.h>
        !            32: #include <sys/time.h>
        !            33: 
        !            34: #define YES 1
        !            35: #define NO 0
        !            36: 
        !            37: extern struct bscio p;
        !            38: extern char devname[], hostname[];
        !            39: extern char sys_admin[];
        !            40: extern int rviab, pt_to_pt, ascii, chk_hostid, chk_termid, primary;
        !            41: extern char termid;
        !            42: extern char note[];
        !            43: extern FILE *aud, *outfd;
        !            44: 
        !            45: extern int prtype,buffered,vfc,tprint,ctype,linesperpage;
        !            46: extern char outtype;   /* type of output destination - P=pipe, F=file */
        !            47: char output[50];       /* printer output destination */
        !            48: 
        !            49: struct tm *localtime(), *t;
        !            50: long time(),currtime;
        !            51: 
        !            52: int had_error;         /* set to # errors encountered in config file */
        !            53: 
        !            54: get_cnfig(cfgfile)
        !            55: register char *cfgfile;
        !            56: {
        !            57:        static char sccsid[] = "@(#)emprcnfig.c 1.4 ";  /* sccs id */
        !            58:        FILE *popen(),*fopen();
        !            59:        FILE *fptr;             /* file pointer returned by fopen */
        !            60: 
        !            61:        register int counter;   /* tracks line of config file being read */
        !            62:        register int i;         /* general purpose int */
        !            63: 
        !            64:        register char *pos;     /* convenient line position pointer */
        !            65: 
        !            66:        char *index();
        !            67:        char cline[80];         /* contains one configuration line */
        !            68: 
        !            69:        /* default b_flags parameter values */
        !            70:        int fulldup = NO;
        !            71:        
        !            72: /* set defaults for communications device */
        !            73:        p.b_blks = 254;         /* default block size */
        !            74:        rviab = BSCRVIABT;      /* abort on receiving rvi */
        !            75:        p.b_nbid = 0;           /* default number of bids limit */
        !            76:        p.b_nnak = 16;          /* default number of naks allowed */
        !            77:        p.b_nretry = 15;        /* default number of retrys allowed */
        !            78:        p.b_nttd = 150;         /* default number of temp. txt delays */
        !            79:        p.b_nwack = 150;        /* default number of wacks allowed */
        !            80:        p.b_nor = 30;           /* default timeout */
        !            81:        pt_to_pt = NO;          /* default to multi-point communications */
        !            82:        chk_hostid = NO;        /* don't check hostid */
        !            83:        chk_termid = NO;        /* don't check termid */
        !            84:        ascii = NO;             /* default transmission code is EBCDIC */
        !            85:        counter = 0;    /* current line number within configuration file */
        !            86: 
        !            87:        strcpy(devname,"/dev/bsc");     /* default device name */
        !            88: 
        !            89: /* set defaults for printer */
        !            90:        buffered = YES;
        !            91:        ctype = 1;              /* default to 3271 control unit */
        !            92:        linesperpage=60;        /* 60 lines per page */
        !            93:        outtype = 'P';          /* printer destination is a pipe (program) */
        !            94:        strcpy(output,"/usr/bin/lpr");  /* program to pipe print output to */
        !            95:        prtype = 4;             /* 3284 printer is default printer type */
        !            96:        tprint = NO;            /* text print option for 3288 only */
        !            97:        vfc = YES;              /* does printer have vertical forms unit? */
        !            98: 
        !            99: /* read host configuration file for actual parameters */
        !           100:        if ((fptr = fopen(cfgfile,"r")) == (FILE *)0)   {
        !           101:                fprintf(stderr,
        !           102:                "em3280: can't open <%s> configuration file\n",hostname);
        !           103:                return(1);      }
        !           104: 
        !           105:        while ((fgets(cline,sizeof cline,fptr)) != NULL)        {
        !           106:                ++counter;
        !           107:                cline[strlen(cline)-1] = '\0';
        !           108:                
        !           109:                if (strncmp(cline,"BUFFERED=",9) == 0)  {
        !           110:                        pos = &cline[9];
        !           111:                        buffered = (strncmp(pos,"YES",3))?0:1;
        !           112:                        continue;
        !           113:                }
        !           114: 
        !           115:                if (strncmp(cline,"CODE=",5) == 0)      {
        !           116:                        if(strcmp(&cline[5],"ASCII") != 0 && 
        !           117:                           strcmp(&cline[5],"EBCDIC") != 0)
        !           118:                                param_err("CODE",cfgfile);
        !           119:                        ascii = strcmp(&cline[5],"ASCII") == 0?BSCASCII:NO;
        !           120:                        continue;       
        !           121:                }
        !           122: 
        !           123:                if (strncmp(cline,"CTYPE=",6) == 0)     {
        !           124:                        pos = &cline[6];
        !           125:                        ctype = atoi(pos);
        !           126:                        if (ctype != 1 && ctype != 5)   {
        !           127:                                param_err("CTYPE",cfgfile);
        !           128:                                exit(0);
        !           129:                        }
        !           130:                        continue;
        !           131:                }
        !           132: 
        !           133:                if (strncmp(cline,"DEVICE=",7) == 0)    {
        !           134:                        gninit(&cline[7]);      /* initialize getnext */
        !           135:                        continue;       
        !           136:                }
        !           137: 
        !           138:                if(strncmp(cline,"DUPLEX=",7) == 0)     {
        !           139:                        if (strcmp(&cline[7],"HALF") != 0 && 
        !           140:                            strcmp(&cline[7],"FULL") != 0)
        !           141:                                param_err("DUPLEX",cfgfile);
        !           142:                        fulldup =strcmp(&cline[7],"HALF")==0?NO:BSCFDX;
        !           143:                        continue;       }
        !           144: 
        !           145:                if (strncmp(cline,"IDCHECK=",8) ==0)    {
        !           146:                        strcpy(p.b_hostid,&cline[8]);
        !           147:                        chk_hostid = BSCCKHOST; 
        !           148:                        continue;       }
        !           149: 
        !           150:                if (strncmp(cline,"LINESPERPAGE=",13) == 0)     {
        !           151:                        pos = &cline[13];
        !           152:                        linesperpage = atoi(pos);
        !           153:                        continue;
        !           154:                }
        !           155: 
        !           156:                if (strncmp(cline, "MAIL=", 5) == 0)    {
        !           157:                        pos = &cline[5];
        !           158:                        strcpy(sys_admin,pos);
        !           159:                        continue;
        !           160:                }
        !           161: 
        !           162:                if (strncmp(cline,"MPTADDR=",8) == 0)   {
        !           163:                        strcpy(p.b_termid,&cline[8]);
        !           164:                        chk_termid = YES;
        !           165:                        pt_to_pt = BSCMPT;
        !           166:                        continue;       }
        !           167: 
        !           168:                if (strncmp(cline,"NBID=",5) == 0)      {
        !           169:                        i = atoi(&cline[5]);
        !           170:                        if (i > 255)
        !           171:                                param_err("NBID",cfgfile);
        !           172:                        else
        !           173:                                p.b_nbid = i;
        !           174:                        continue;       }
        !           175: 
        !           176:                if (strncmp(cline,"NNAK=",5) == 0)      {
        !           177:                        i = atoi(&cline[5]);
        !           178:                        if (i > 255)
        !           179:                                param_err("NNAK",cfgfile);
        !           180:                        else
        !           181:                                p.b_nnak = i;
        !           182:                        continue;       }
        !           183: 
        !           184:                if (strncmp(cline,"NRETRY=",7) == 0)    {
        !           185:                        i = atoi(&cline[7]);
        !           186:                        if (i > 255)
        !           187:                                param_err("NRETRY",cfgfile);
        !           188:                        else
        !           189:                                p.b_nretry = i;
        !           190:                        continue;       }
        !           191: 
        !           192:                if (strncmp(cline,"NTTD=",5) == 0)      {
        !           193:                        i = atoi(&cline[5]);
        !           194:                        if (i > 255)
        !           195:                                param_err("NTTD",cfgfile);
        !           196:                        else
        !           197:                                p.b_nttd = i;
        !           198:                        continue;       }
        !           199: 
        !           200:                if (strncmp(cline,"NWACK=",6) == 0)     {
        !           201:                        i = atoi(&cline[6]);
        !           202:                        if (i > 255)
        !           203:                                param_err("NWACK",cfgfile);
        !           204:                        else
        !           205:                                p.b_nwack = i;
        !           206:                        continue;       }
        !           207: 
        !           208:        /* format for the OUTPUT parameter is: OUTPUT=<type>,<destination>
        !           209:           where type may be P (pipe to a program) or F (write to a file or
        !           210:           device). */
        !           211:                if (strncmp(cline,"OUTPUT=",7) == 0)    {
        !           212:                        pos = &cline[7];
        !           213:                        outtype = *pos;
        !           214:                        pos += 2;
        !           215:                        strcpy(output,pos);
        !           216: 
        !           217:                        if (outtype != 'P' && outtype != 'F')   {
        !           218:                                param_err("OUTPUT",cfgfile);
        !           219:                                exit(0);
        !           220:                        }
        !           221: 
        !           222:                        continue;
        !           223:                }
        !           224: 
        !           225:                if (strncmp(cline,"PTYPE=",6) == 0)     {
        !           226:                        pos = &cline[6];
        !           227:                        prtype = atoi(pos);
        !           228:                        if ((prtype < 6 || prtype > 8) && prtype != 4)  {
        !           229:                                param_err("PTYPE",cfgfile);
        !           230:                                exit(0);
        !           231:                        }
        !           232:                        continue;
        !           233:                }
        !           234: 
        !           235:                if (strncmp(cline,"RVIMODE=",8) == 0)   {
        !           236:                        if (strcmp(&cline[8],"ABORT") != 0 && 
        !           237:                            strcmp(&cline[8],"IGNORE") != 0)
        !           238:                                param_err("RVIMODE",cfgfile);
        !           239:                        rviab =strcmp(&cline[8],"ABORT")==0?BSCRVIABT:NO;
        !           240:                        continue;       }
        !           241: 
        !           242:                if (strncmp(cline,"TERMID=",7) == 0)    {
        !           243:                        strcpy(p.b_termid,&cline[8]);
        !           244:                        chk_termid = YES;
        !           245:                        continue;       }
        !           246: 
        !           247:                if (strncmp(cline,"TIMEOUT=",8) == 0)   {
        !           248:                        p.b_nor = atoi(&cline[8]);
        !           249:                        continue;       }
        !           250:                
        !           251:                if (strncmp(cline,"TPRINT=",7) == 0)    {
        !           252:                        pos = &cline[7];
        !           253:                        tprint = (strncmp(pos,"YES",3))?0:1;
        !           254:                        continue;
        !           255:                }
        !           256:                if (strncmp(cline,"VFC=",4) == 0)       {
        !           257:                        pos = &cline[4];
        !           258:                        vfc = (strncmp(pos,"YES",3))?0:1;
        !           259:                        continue;
        !           260:                }
        !           261:        /* invalid keyword parameter */
        !           262:                fprintf(stderr,
        !           263:                        "em3280 <%s>: Unrecognized keyword, line %d in <%s>\n",
        !           264:                        hostname,counter,cfgfile);
        !           265:        }
        !           266:        if ((fulldup == BSCFDX) && (pt_to_pt == BSCMPT))
        !           267:                fulldup = NO;
        !           268:        p.b_flags = ascii | fulldup | rviab | primary | chk_hostid | pt_to_pt;
        !           269: /* translate termid if one given and ebcdic */
        !           270:        if (!ascii && chk_termid)
        !           271:                ascebc(p.b_termid,strlen(p.b_termid));
        !           272:        termid = p.b_termid[0]; /* cluster address */
        !           273:        fclose(fptr);
        !           274:        return(had_error);
        !           275: }
        !           276: 
        !           277: char *usr_name;                        /* ptr returned by getlogin */
        !           278: /* write_aud - write message to audit file */
        !           279: write_aud(type,msg)
        !           280: register char *type;
        !           281: register char *msg;
        !           282: {
        !           283:        char *getlogin();               /* returns ptr to login name for this
        !           284:                                           process */
        !           285: 
        !           286:        if (aud == NULL) return;
        !           287: 
        !           288: /* if first time, get login name */
        !           289:        if (usr_name == NULL)
        !           290:                usr_name = getlogin();
        !           291:        if (usr_name == NULL)   /* who is this guy, anyway? */
        !           292:                usr_name = "unknown";
        !           293: 
        !           294: /* get current time */
        !           295:        currtime = time((long*)0);
        !           296:        t = localtime(&currtime);
        !           297: 
        !           298:        fprintf (aud, "%s %s %02d%02d%02d%02d%02d %s\n",
        !           299:                usr_name, type, t->tm_year, (t->tm_mon) + 1,
        !           300:                t->tm_mday, t->tm_hour, t->tm_min, msg);
        !           301: /* make sure message gets written out */
        !           302:        fflush(aud);
        !           303: }
        !           304: 
        !           305: /* param_err -- invalid keyword parameter error */
        !           306: param_err(kword,fname)
        !           307: char *kword,*fname;
        !           308: {
        !           309:        fprintf(stderr,
        !           310:                "em3277 <%s>: Invalid parameter for keyword <%s> in <%s>\n",
        !           311:                hostname,kword,fname);
        !           312:        ++had_error;
        !           313: }

unix.superglobalmegacorp.com

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