Annotation of researchv10no/libpicfile/picpack.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * picpack -- non-ansi version, uses varargs instead of stdarg
                      3:  * Bugs:
                      4:  *     f and d are non-portable
                      5:  *     could be faster
                      6:  */
                      7: #include <picfile.h>
                      8: #include <stdio.h>
                      9: #include <varargs.h>
                     10: void picpack(va_alist)
                     11: va_dcl
                     12: {
                     13:        register char *bp, *cp;
                     14:        register short *sp;
                     15:        register long *lp;
                     16:        register float *fp;
                     17:        register double *dp;
                     18:        register char *buf, *ebuf;
                     19:        PICFILE *f;
                     20:        char *fmt;
                     21:        int nchan;
                     22:        va_list pvar;
                     23:        va_start(pvar);
                     24:        f=va_arg(pvar, PICFILE *);
                     25:        buf=va_arg(pvar, char *);
                     26:        nchan=f->nchan;
                     27:        ebuf=buf+f->width*nchan;
                     28:        for(fmt=va_arg(pvar, char *);*fmt;fmt++) switch(*fmt){
                     29:        case 'c':
                     30:                cp=va_arg(pvar, char *);
                     31:                for(bp=buf;bp!=ebuf;bp+=nchan)
                     32:                        *bp=*cp++;
                     33:                buf++;
                     34:                ebuf++;
                     35:                break;
                     36:        case 's':
                     37:                sp=va_arg(pvar, short *);
                     38:                for(bp=buf;bp!=ebuf;bp+=nchan){
                     39:                        *bp=*sp;
                     40:                        bp[1]=*sp++>>8;
                     41:                }
                     42:                buf+=2;
                     43:                ebuf+=2;
                     44:                break;
                     45:        case 'l':
                     46:                lp=va_arg(pvar, long *);
                     47:                for(bp=buf;bp!=ebuf;bp+=nchan){
                     48:                        *bp=*lp;
                     49:                        bp[1]=*lp>>8;
                     50:                        bp[2]=*lp>>16;
                     51:                        bp[3]=*lp++>>24;
                     52:                }
                     53:                buf+=4;
                     54:                ebuf+=4;
                     55:                break;
                     56:        case 'f':
                     57:                fp=va_arg(pvar, float *);
                     58:                for(bp=buf;bp!=ebuf;bp+=nchan){
                     59:                        cp=(char *)fp++;
                     60:                        bp[0]=cp[0];
                     61:                        bp[1]=cp[1];
                     62:                        bp[2]=cp[2];
                     63:                        bp[3]=cp[3];
                     64:                }
                     65:                buf+=4;
                     66:                ebuf+=4;
                     67:                break;
                     68:        case 'd':
                     69:                dp=va_arg(pvar, double *);
                     70:                for(bp=buf;bp!=ebuf;bp+=nchan){
                     71:                        cp=(char *)dp++;
                     72:                        bp[0]=cp[0];
                     73:                        bp[1]=cp[1];
                     74:                        bp[2]=cp[2];
                     75:                        bp[3]=cp[3];
                     76:                        bp[4]=cp[4];
                     77:                        bp[5]=cp[5];
                     78:                        bp[6]=cp[6];
                     79:                        bp[7]=cp[7];
                     80:                }
                     81:                buf+=8;
                     82:                ebuf+=8;
                     83:                break;
                     84:        case '_':
                     85:                buf++;
                     86:                ebuf++;
                     87:                break;
                     88:        }
                     89:        va_end(pvar);
                     90: }

unix.superglobalmegacorp.com

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