|
|
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.