Annotation of researchv10no/libpicfile/pic.pco.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Type-specific code for TYPE=pico
        !             3:  * Not a standard type, but supported for Gerard.
        !             4:  * Doesn't work on pipes because it calls lseek.
        !             5:  */
        !             6: #include <picfile.h>
        !             7: #include <libc.h>
        !             8: int PRD_pco(f, buf)
        !             9: PICFILE *f;
        !            10: char *buf;
        !            11: {
        !            12:        register char *bufp, *ein, *inp;
        !            13:        int i, n;
        !            14:        long offs;
        !            15:        if(f->line==0){
        !            16:                f->buf=malloc(f->width);
        !            17:                if(f->buf==0){
        !            18:                        PIC_error="Can't allocate buffer";
        !            19:                        return 0;
        !            20:                }
        !            21:        }
        !            22:        if(f->line==f->height){
        !            23:                PIC_error="Read past end of picture";
        !            24:                return 0;
        !            25:        }
        !            26:        offs=lseek(f->fd, 0L, 1);
        !            27:        ein=f->buf+f->width;
        !            28:        for(i=0;i!=f->nchan;i++){
        !            29:                n=read(f->fd, f->buf, f->width);
        !            30:                if(n!=f->width){
        !            31:                        if(n==0) PIC_error="End of file reading picture";
        !            32:                        return 0;
        !            33:                }
        !            34:                inp=f->buf;
        !            35:                for(bufp=buf+i;inp!=ein;bufp+=f->nchan)
        !            36:                        *bufp=*inp++;
        !            37:                lseek(f->fd, (long)f->width*(f->height-1), 1);
        !            38:        }
        !            39:        lseek(f->fd, offs+f->width, 0);
        !            40:        f->line++;
        !            41:        return 1;
        !            42: }
        !            43: int PWR_pco(f, buf)
        !            44: PICFILE *f;
        !            45: char *buf;
        !            46: {
        !            47:        register char *bufp, *eout, *outp;
        !            48:        int i, n;
        !            49:        long offs;
        !            50:        if(f->line==0){
        !            51:                f->buf=malloc(f->width);
        !            52:                if(f->buf==0){
        !            53:                        PIC_error="Can't allocate buffer";
        !            54:                        return 0;
        !            55:                }
        !            56:                PWR_header(f);
        !            57:        }
        !            58:        if(f->line==f->height){
        !            59:                PIC_error="Write past end of picture";
        !            60:                return 0;
        !            61:        }
        !            62:        offs=lseek(f->fd, 0L, 1);
        !            63:        eout=f->buf+f->width;
        !            64:        for(i=0;i!=f->nchan;i++){
        !            65:                outp=f->buf;
        !            66:                for(bufp=buf+i;outp!=eout;bufp+=f->nchan)
        !            67:                        *outp++=*bufp;
        !            68:                n=write(f->fd, f->buf, f->width);
        !            69:                if(n!=f->width) return 0;
        !            70:                lseek(f->fd, (long)f->width*(f->height-1), 1);
        !            71:        }
        !            72:        lseek(f->fd, offs+f->width, 0);
        !            73:        f->line++;
        !            74:        return 1;
        !            75: }
        !            76: int PCL_pco(f)
        !            77: PICFILE *f;
        !            78: {
        !            79:        free(f->buf);
        !            80: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.