Annotation of cci/usr/src/usr.bin/bsc/cmd/3270/emprcnfig.c, revision 1.1.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.