|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.