Annotation of researchv10no/cmd/labmake.c, revision 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.