Annotation of researchv10no/cmd/labmake.c, revision 1.1.1.1

1.1       root        1: /*  lablist and labmake commands */
                      2: 
                      3: #include <stdio.h>
                      4: #include <pwd.h>
                      5: 
                      6: 
                      7: char direct[] = "/usr/spool/dpd";
                      8: 
                      9: FILE *fin, *fout;
                     10: 
                     11: #define NO     0
                     12: #define YES    1
                     13: 
                     14: 
                     15: 
                     16: #define FIRST 12
                     17: int dbgflag = NO;
                     18: int mailflag = 0;
                     19: int lablist ;
                     20: 
                     21: char df[30];
                     22: char tf[30];
                     23: struct passwd *pwp, *getpwuid();
                     24: 
                     25: struct par
                     26:        {
                     27:        char *name;
                     28:        char *value;
                     29:        }  pars[20];
                     30: 
                     31: 
                     32: 
                     33: main(argc,argv)
                     34: int argc;
                     35: char **argv;
                     36: {
                     37: int i, j, pid, unit;
                     38: char c, *p, *q, *val();
                     39: 
                     40: for(p=q=argv[0] ; *p!= '\0' ; ++p)
                     41:        if(*p == '/') q = p+1;
                     42: lablist = ! strcmp(q, "lablist");
                     43: 
                     44: pid = getpid();
                     45: sprintf(df, "%s/df%dxx", direct, pid);
                     46: sprintf(tf, "%s/tf%dxx", direct, pid);
                     47: 
                     48: pwp = getpwuid( getuid() );
                     49: if(pwp == NULL)
                     50:        {
                     51:        fprintf(stderr, "bad getpwuid!\n");
                     52:        exit(3);
                     53:        }
                     54: if(pwp->pw_gecos && pwp->pw_gecos[0]!='\0')
                     55:        setval("job", pwp->pw_gecos);
                     56: setval("copies", "1");
                     57: setval("lines", "6");
                     58: setval("forms", "avery");
                     59: setval("each", "1");
                     60: setval("sel", "");
                     61: 
                     62: for(i=1; i<argc; ++i)
                     63:        if(argv[i][0]=='-'  &&  argv[i][1]!='\0')
                     64:                {
                     65:                for(j=1; (c=argv[i][j])!='\0' ; ++j)
                     66:                        switch(c)
                     67:                        {
                     68:                        case 't':
                     69:                                dbgflag = YES;
                     70:                                break;
                     71: 
                     72:                        case 'l':
                     73:                                lablist = YES;
                     74:                                break;
                     75: 
                     76:                        case 'm':
                     77:                                mailflag = YES;
                     78:                                break;
                     79: 
                     80:                        default:
                     81:                                fprintf(stderr,"Bad flag %c\n", c);
                     82:                                exit(1);
                     83:                        }
                     84:                argv[i] = 0;
                     85:                }
                     86: 
                     87:        else    {
                     88:                for(p = argv[i] ; *p!='\0' ; ++p)
                     89:                        if(*p == '=')
                     90:                                {
                     91:                                *p = '\0';
                     92:                                setval(argv[i], p+1);
                     93:                                argv[i] = 0;
                     94:                                break;
                     95:                                }
                     96:                }
                     97: 
                     98: if(dbgflag)
                     99:        fout = stdout;
                    100: else if( (fout = fopen(tf,"w")) == NULL)
                    101:        err("Cannot open temporary file");
                    102: 
                    103: if(mailflag)
                    104:        fprintf(fout, "M%s\n", pwp->pw_name);
                    105: if(!val("job"))
                    106:        {
                    107:        setval("job", "m5192,m044");
                    108:        fprintf(stderr, "Output will be put in box M044\n");
                    109:        }
                    110: 
                    111: fprintf(fout, "S\nL$\tSGRADE\t2\nL$\tIDENT\t%s,LABELS\n", val("job") );
                    112: fprintf(fout, "L$\tREMOTE\t**,ONL\n");
                    113: fprintf(fout, "L$\tOPTION\tFORTRAN\nL$\tSELECT\t./LAB.OBJ\n");
                    114: 
                    115: if(lablist)
                    116:        fprintf(fout, "L$\tEXECUTE\tON1\n");
                    117: else   fprintf(fout, "L$\tEXECUTE\n");
                    118: 
                    119: fprintf(fout, "L$\tLIMITS\t10,12K\nL$\tFILE\tP*,NULL\nL$\tSYSOUT\t06\n");
                    120: if(lablist)
                    121:        fprintf(fout, "L$\tSYSOUT\t42\n");
                    122: else   fprintf(fout, "L$\tMASS\t42,X20S,10L\nL$\tFFILE\t42,NOSLEW\n");
                    123: 
                    124: fprintf(fout, "$L\tDATA\t05\n");
                    125: fprintf(fout, "L%s-lines\nL%s\n", val("lines"), val("sel") );
                    126: 
                    127: unit = FIRST;
                    128: for(i=1 ; i<argc ; ++i)
                    129:        if(argv[i] != 0)
                    130:                fprintf(fout, "L*%d %s\n", unit++ , argv[i]);
                    131: 
                    132: if(unit == FIRST)
                    133:        fprintf(fout, "L*%d standard input\n", FIRST);
                    134: 
                    135: unit = FIRST;
                    136: for(i=1 ; i<argc; ++i)
                    137:        if(argv[i] != 0)
                    138:                {
                    139:                fprintf(fout, "L$\tDATA\t%d\n", unit++);
                    140:                if(argv[i][0]=='-' && argv[i][1]=='\0')
                    141:                        fin = stdin;
                    142:                else if( (fin = fopen(argv[i],"r")) == NULL)
                    143:                        {
                    144:                        fprintf(stderr,"Cannot open file %s", argv[i]);
                    145:                        err("");
                    146:                        }
                    147: 
                    148:                copyfile();
                    149:                fclose(fin);
                    150:                }
                    151: 
                    152: if(unit == FIRST)
                    153:        {
                    154:        fprintf(fout, "L$\tDATA\t%d\n", FIRST);
                    155:        copyfile();
                    156:        }
                    157: 
                    158: if(!lablist)
                    159:        {
                    160:        if( (p = val("nc")) || (p = val("copy")) )
                    161:                setval("copies", p);
                    162: 
                    163:        if(p = val("neach"))
                    164:                setval("each", p);
                    165:        fprintf(fout, "L$\tSELECT\tCC/LABEL1\n");
                    166: 
                    167:        fprintf(fout, "L%s-each  %s  %s-lines  %s-copies\n",
                    168:                val("each"), val("forms"),
                    169:                val("lines"), val("copies") );
                    170: 
                    171:        fprintf(fout, "L$\tMASS\tIN,X20D\nL$\tSELECT\tCC/LABEL2\n");
                    172:        }
                    173: 
                    174: fprintf(fout, "L$\tENDJOB\n");
                    175: 
                    176: if(!dbgflag)
                    177:        {
                    178:        fclose(fout);
                    179:        if( link(tf,df) )
                    180:                err("Cannot make df file");
                    181:        unlink(tf);
                    182:        execl("/etc/dpd", "/etc/dpd", 0);
                    183:        err("Couldn't invoke /etc/dpd");
                    184:        }
                    185: 
                    186: exit(0);
                    187: }
                    188: 
                    189: 
                    190: char *val(s)
                    191: register char *s;
                    192: {
                    193: register struct par *p;
                    194: 
                    195: for(p=pars; p->name!=0 ; ++p)
                    196:        if(! strcmp(p->name, s))
                    197:                return(p->value);
                    198: 
                    199: return(0);
                    200: }
                    201: 
                    202: 
                    203: setval(n,v)
                    204: char *n, *v;
                    205: {
                    206: register struct par *p;
                    207: 
                    208: for(p=pars ; p->name!=0 && strcmp(p->name,n) ; ++p)
                    209:        ;
                    210: 
                    211: p->name = n;
                    212: p->value = v;
                    213: }
                    214: 
                    215: 
                    216: 
                    217: 
                    218: err(s)
                    219: char *s;
                    220: {
                    221: fprintf(stderr, "%s\n", s);
                    222: unlink(tf);
                    223: exit(1);
                    224: }
                    225: 
                    226: 
                    227: 
                    228: 
                    229: 
                    230: copyfile()     /* precede every line with a letter L */
                    231: {
                    232: char line[200];
                    233: 
                    234: line[0] = 'L';
                    235: 
                    236: while( fgets(line+1,199, fin) )
                    237:        fputs(line, fout);
                    238: }

unix.superglobalmegacorp.com

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