|
|
1.1 ! root 1: #include <picfile.h> ! 2: #include <stdio.h> ! 3: #include <libc.h> ! 4: #define NPROP 1024 ! 5: PRD_error(f, buf) ! 6: PICFILE *f; ! 7: char *buf; ! 8: { ! 9: return 0; ! 10: } ! 11: extern char cmdline[513]; /* from getflags */ ! 12: PICFILE *picopen_w(file, type, x, y, w, h, chan, argv, cmap) ! 13: char *file, *type, *chan, *argv[], *cmap; ! 14: { ! 15: int i; ! 16: char prop[NPROP]; ! 17: PICFILE *p=(PICFILE *)malloc(sizeof(PICFILE)); ! 18: if(p==0) return 0; ! 19: p->flags=PIC_NOCLOSE; ! 20: p->argc=-1; ! 21: p->cmap=0; ! 22: if(strcmp(file, "OUT")==0) ! 23: p->fd=1; ! 24: else{ ! 25: p->fd=creat(file, 0666); ! 26: if(p->fd<0){ ! 27: Error: ! 28: if(!(p->flags&PIC_NOCLOSE)) close(p->fd); ! 29: if(p->argc>=0){ ! 30: for(i=0;i!=p->argc;i++) free(p->argv[i]); ! 31: free((char *)p->argv); ! 32: } ! 33: if(p->cmap) free(p->cmap); ! 34: free((char *)p); ! 35: return 0; ! 36: } ! 37: p->flags=0; ! 38: } ! 39: p->argc=0; ! 40: p->argv=(char **)malloc(sizeof(char *)); ! 41: p->argv[0]=0; ! 42: for(i=0;PIC_conf[i].type;i++) ! 43: if(strcmp(type, PIC_conf[i].type)==0) break; ! 44: if(!PIC_conf[i].type){ ! 45: PIC_error="Illegal TYPE"; ! 46: goto Error; ! 47: } ! 48: p->rd=PRD_error; ! 49: p->wr=PIC_conf[i].wr; ! 50: p->cl=PIC_conf[i].cl; ! 51: p->line=0; ! 52: p->buf=0; ! 53: picputprop(p, "TYPE", type); ! 54: p->type=picgetprop(p, "TYPE"); ! 55: sprintf(prop, "%d %d %d %d", x, y, x+w, y+h); ! 56: picputprop(p, "WINDOW", prop); ! 57: p->x=x; ! 58: p->y=y; ! 59: p->width=w; ! 60: p->height=h; ! 61: p->nchan=strlen(chan); ! 62: if(PIC_conf[i].nchan!=0 && PIC_conf[i].nchan!=p->nchan){ ! 63: PIC_error="wrong NCHAN for this TYPE"; ! 64: goto Error; ! 65: } ! 66: sprintf(prop, "%d", p->nchan); ! 67: picputprop(p, "NCHAN", prop); ! 68: picputprop(p, "CHAN", chan); ! 69: p->chan=picgetprop(p, "CHAN"); ! 70: if(PIC_command) picputprop(p, "COMMAND", PIC_command); ! 71: if(cmdline[0]) ! 72: strcpy(prop, cmdline); ! 73: else if(argv){ ! 74: prop[0]='\0'; ! 75: for(i=0;argv[i];i++){ ! 76: if(i!=0) strcat(prop, " "); ! 77: strcat(prop, argv[i]); ! 78: } ! 79: } ! 80: else ! 81: sprintf(prop, "magically-create %s", file); ! 82: picputprop(p, "COMMAND", prop); ! 83: if(cmap){ ! 84: p->cmap=malloc(3*256); ! 85: if(p->cmap==0){ ! 86: PIC_error="No memory for colormap"; ! 87: goto Error; ! 88: } ! 89: memcpy(p->cmap, cmap, 3*256); ! 90: picputprop(p, "CMAP", ""); ! 91: } ! 92: else ! 93: p->cmap=0; ! 94: return p; ! 95: } ! 96: PWR_header(p) ! 97: PICFILE *p; ! 98: { ! 99: register char **ap, *vp, *ep; ! 100: int nlen; ! 101: for(ap=p->argv;*ap;ap++){ ! 102: vp=strchr(*ap, '=')+1; ! 103: nlen=vp-*ap; ! 104: for(;;){ ! 105: write(p->fd, *ap, nlen); ! 106: ep=strchr(vp, '\n'); ! 107: if(ep){ ! 108: write(p->fd, vp, ep+1-vp); ! 109: vp=ep+1; ! 110: } ! 111: else{ ! 112: write(p->fd, vp, strlen(vp)); ! 113: write(p->fd, "\n", 1); ! 114: break; ! 115: } ! 116: } ! 117: } ! 118: write(p->fd, "\n", 1); ! 119: if(p->cmap) ! 120: write(p->fd, p->cmap, 3*256); ! 121: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.