Showing the changes to sys/src/cmd/plot/plot.c (1 of 11749 files). Show all
Unified · Split
| @@ -8,6 +8,7 @@ void define(char*); · 7 unmodified lines | ||
| 8 | 8 | void call(char*); |
| 9 | 9 | void include(char*); |
| 10 | 10 | int process(Biobuf*); |
| 11 | +int server(void); | |
| 11 | 12 | |
| 12 | 13 | enum{ |
| 13 | 14 | ARC, |
| @@ -125,67 +126,60 @@ double *pts[NPTS]; /* control-polygon vertex pointers */ · 111 unmodified lines | ||
| 125 | 126 | void |
| 126 | 127 | main(int arc, char *arv[]){ |
| 127 | 128 | char *ap; |
| 128 | − Biobuf *fd; | |
| 129 | − fd = 0; | |
| 130 | − openpl(""); | |
| 129 | + Biobuf *bp; | |
| 130 | + int fd; | |
| 131 | + int i; | |
| 132 | + int dflag; | |
| 133 | + char *oflag; | |
| 134 | + bp = 0; | |
| 135 | + fd = dup(0, -1); /* because openpl will close 0! */ | |
| 136 | + dflag=0; | |
| 137 | + oflag=""; | |
| 138 | + for(i=1;i!=arc;i++) if(arv[i][0]=='-') switch(arv[i][1]){ | |
| 139 | + case 'd': dflag=1; break; | |
| 140 | + case 'o': oflag=arv[i]+2; break; | |
| 141 | + case 's': fd=server(); break; | |
| 142 | + case 'W': setwindow(arv[i]+2); break; | |
| 143 | + } | |
| 144 | + openpl(oflag); | |
| 145 | + if(dflag) doublebuffer(); | |
| 131 | 146 | for (; arc > 1; arc--, arv++) { |
| 132 | 147 | if (arv[1][0] == '-') { |
| 133 | 148 | ap = arv[1]; |
| 134 | 149 | ap++; |
| 135 | − if (*ap == 'T') | |
| 136 | − continue; | |
| 137 | − if (*ap == 'D') | |
| 138 | − continue; | |
| 139 | 150 | switch (*ap) { |
| 140 | − case 'd': | |
| 141 | − doublebuffer(); | |
| 142 | − break; | |
| 143 | − case 'e': | |
| 144 | − erase(); | |
| 145 | − continue; | |
| 146 | − case 'C': | |
| 147 | − closepl(); | |
| 148 | − continue; | |
| 149 | − case 'w': | |
| 150 | − ppause(); | |
| 151 | − continue; | |
| 152 | − case 'c': | |
| 153 | − color(ap+1); | |
| 154 | − continue; | |
| 155 | − case 'f': | |
| 156 | − cfill(ap+1); | |
| 157 | − continue; | |
| 158 | − case 'p': | |
| 159 | − pen(ap+1); | |
| 160 | − continue; | |
| 161 | − case 'o': | |
| 162 | − openpl(ap+1); | |
| 163 | − continue; | |
| 164 | − case 'g': | |
| 165 | − grade(atof(ap+1)); | |
| 166 | − continue; | |
| 167 | 151 | default: |
| 168 | − fprint(2, "%s not allowed as argument\n", | |
| 169 | − ap); | |
| 152 | + fprint(2, "%s not allowed as argument\n", ap); | |
| 170 | 153 | exits("usage"); |
| 154 | + case 'T': break; | |
| 155 | + case 'D': break; | |
| 156 | + case 'd': break; | |
| 157 | + case 'o': break; | |
| 158 | + case 'W': break; | |
| 159 | + case 's': break; | |
| 160 | + case 'e': erase(); break; | |
| 161 | + case 'C': closepl(); break; | |
| 162 | + case 'w': ppause(); break; | |
| 163 | + case 'c': color(ap+1); break; | |
| 164 | + case 'f': cfill(ap+1); break; | |
| 165 | + case 'p': pen(ap+1); break; | |
| 166 | + case 'g': grade(atof(ap+1)); break; | |
| 171 | 167 | } |
| 172 | − continue; | |
| 173 | 168 | } |
| 174 | − if ((fd = Bopen(arv[1], OREAD)) == 0) { | |
| 169 | + else if ((bp = Bopen(arv[1], OREAD)) == 0) { | |
| 175 | 170 | perror(arv[1]); |
| 176 | 171 | fprint(2, "Cannot find file %s\n", arv[1]); |
| 177 | − continue; | |
| 178 | 172 | } |
| 179 | − if(!process(fd)) | |
| 180 | − break; | |
| 181 | − Bclose(fsp->fd); | |
| 173 | + else if(process(bp)) Bterm(fsp->fd); | |
| 174 | + else break; | |
| 182 | 175 | } |
| 183 | − if (fd == 0){ | |
| 184 | − fd = malloc(sizeof *fd); | |
| 185 | − Binit(fd, 0, OREAD); | |
| 186 | − process(fd); | |
| 176 | + if (bp == 0){ | |
| 177 | + bp = malloc(sizeof *bp); | |
| 178 | + Binit(bp, fd, OREAD); | |
| 179 | + process(bp); | |
| 187 | 180 | } |
| 188 | 181 | closepl(); |
| 182 | + read(0, "x", 1); | |
| 189 | 183 | exits(0); |
| 190 | 184 | } |
| 191 | 185 | int isalpha(int c) |
| @@ -225,7 +219,7 @@ int nextc(void){ · 33 unmodified lines | ||
| 225 | 219 | }else |
| 226 | 220 | c=Beof; |
| 227 | 221 | if(c!=Beof || fsp==fstack) break; |
| 228 | − if(fsp->fd) Bclose(fsp->fd); | |
| 222 | + if(fsp->fd) Bterm(fsp->fd); | |
| 229 | 223 | --fsp; |
| 230 | 224 | } |
| 231 | 225 | if(c=='\n') fsp->lineno++; |
| @@ -599,3 +593,17 @@ void include(char *a){ · 367 unmodified lines | ||
| 599 | 593 | fsp->corebuf=0; |
| 600 | 594 | fsp->fd=fd; |
| 601 | 595 | } |
| 596 | +/* | |
| 597 | + * Doesn't work. Why? | |
| 598 | + */ | |
| 599 | +int server(void){ | |
| 600 | + int fd, p[2]; | |
| 601 | + char buf[32]; | |
| 602 | + pipe(p); | |
| 603 | + fd = create("/srv/plot", 1, 0666); | |
| 604 | + sprint(buf, "%d", p[1]); | |
| 605 | + write(fd, buf, strlen(buf)); | |
| 606 | + close(fd); | |
| 607 | + close(p[1]); | |
| 608 | + return p[0]; | |
| 609 | +} | |