Annotation of researchv10no/cmd/bcp/riclib.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1989, 1990 AT&T --- All Rights Reserved.              */
                      2: /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T.                */
                      3: /* The copyright notice does not imply actual or intended publication. */
                      4: /* AUTHORS:                                            */
                      5: /*     H. S. Baird - ATT-BL MH - first versions        */
                      6: /* riclib.c - Ricoh scanner-file public functions:
                      7: 
                      8: RIC_* functions use system I/O, for speed...
                      9:    int RIC_get_hdr(fd,RIC_hdr *) - get scanner-file header
                     10:    int RIC_line(char **)       - read one line of scanner data
                     11:        err_RIC_Line(char *,RIC_hdr) - print on stderr
                     12:    int RIC_oline(char **)      - write one line of scanner data
                     13:    char *RIC_hdr_toa() - RIC_hdr to ascii printable string
                     14:    */
                     15: 
                     16: #include <stdio.h>
                     17: #include <math.h>
                     18: #include <string.h>
                     19: #include "CPU.h"
                     20: #include "stdocr.h"
                     21: 
                     22: #define RIC_debug 0
                     23: 
                     24: /* treated as local static: */
                     25: int RIC_fd;            /* file descr. */
                     26: int RIC_bpl;           /* bytes per line */
                     27: char *RIC_bf = NULL;   /* (malloc space *) holds one line of scanner data */
                     28: 
                     29: /* system I/O variation on fgets(3), except it replaces \n with \0,
                     30:    and returns the number of chars read (including \0) */
                     31: int RIC_fgets(bf,max,fd)
                     32:        char *bf;
                     33:        int max;
                     34:        int fd;
                     35: {   char *cp;
                     36:     int stat,mny;
                     37:        cp=bf; mny=0;
                     38:        while(((stat=read(fd,cp,1))==1)&&(++mny<max)&&((*cp)!='\n')) cp++;
                     39:        if(stat!=1) return(stat);
                     40:        else if(mny>=max) return(-1);
                     41:        *cp='\0';
                     42:        return(mny);
                     43:        }
                     44: 
                     45: /* read header from scanner file, return status:  1 OK, 0 EOF, -1 error */
                     46: int RIC_get_hdr( fd, hp )
                     47:        int fd;         /* should have been open'ed earlier */
                     48:        RIC_hdr *hp;
                     49: #define HL_MAX 80
                     50: #define HTERM "=,      \n"     /* terminations for header words: "=,<sp><tab>" */
                     51: {   char *cp,*parm,hline[HL_MAX];
                     52:     int status,nrd;
                     53:        RIC_fd = fd;
                     54:        if((status=RIC_fgets(hline,HL_MAX,RIC_fd))<=0) return(status);
                     55:        while(strlen(hline)>1) {
                     56:                if(RIC_debug) err("hline \"%s\"",hline);
                     57:                parm=strtok(hline,HTERM);
                     58:                if(parm!=NULL&&strcmp(parm,"TYPE")==0) {
                     59:                        if((parm=strtok(0,HTERM))!=NULL
                     60:                                &&strcmp(parm,"binary")==0) ;
                     61:                        else return(-1);
                     62:                        }
                     63:                else if(parm!=NULL&&strcmp(parm,"WINDOW")==0) {
                     64:                        if((parm=strtok(0,HTERM))!=NULL) hp->bx.a.x=atoi(parm);
                     65:                        else return(-1);
                     66:                        if((parm=strtok(0,HTERM))!=NULL) hp->bx.a.y=atoi(parm);
                     67:                        else return(-1);
                     68:                        if((parm=strtok(0,HTERM))!=NULL) hp->bx.b.x=atoi(parm)-1;
                     69:                        else return(-1);
                     70:                        hp->bpl=(hp->bx.b.x-hp->bx.a.x+1+7)/8;
                     71:                        if((parm=strtok(0,HTERM))!=NULL) hp->bx.b.y=atoi(parm)-1;
                     72:                        else return(-1);
                     73:                        }
                     74:                else if(parm!=NULL&&strcmp(parm,"RES")==0) {
                     75:                        if((parm=strtok(0,HTERM))!=NULL) hp->res_x=atoi(parm);
                     76:                        else return(-1);
                     77:                        if((parm=strtok(0,HTERM))!=NULL) hp->res_y=atoi(parm);
                     78:                        else return(-1);
                     79:                        }
                     80:                else return(-1);
                     81:                if((status=RIC_fgets(hline,HL_MAX,RIC_fd))<=0) return(status);
                     82:                };
                     83:        RIC_bpl=hp->bpl;
                     84:        /* allocate one extra byte in scanner buffer as a favor to RLE */
                     85:        if((RIC_bf = (char *) malloc(RIC_bpl+1))==NULL) {
                     86:                fprintf(stderr,
                     87:                        "riclib:  can't alloc RIC_bf (%d bytes) - abort\n",
                     88:                        RIC_bpl+1);
                     89:                return(-1);
                     90:                };
                     91:        return(1);
                     92:        }
                     93: 
                     94: /* write header to scanner file */
                     95: RIC_put_hdr( fd, hp )
                     96:        int fd;         /* should have been open'ed earlier */
                     97:        RIC_hdr *hp;
                     98: {   char *cp,*parm,hline[HL_MAX];
                     99:     int status,nrd;
                    100:        sprintf(hline,"TYPE=binary\n");
                    101:        write(fd,hline,strlen(hline));
                    102:        sprintf(hline,"WINDOW=%d %d %d %d\n",
                    103:                        hp->bx.a.x,hp->bx.a.y,hp->bpl,hp->bx.b.y+1);
                    104:        write(fd,hline,strlen(hline));
                    105:        sprintf(hline,"RES=%d %d\n\n",hp->res_x,hp->res_y);
                    106:        write(fd,hline,strlen(hline));
                    107:        }
                    108: 
                    109: err_RIC_line(sl,shdr)
                    110:        char *sl;
                    111:        RIC_hdr shdr;
                    112: #define BPL 20 /* bytes to display per line */
                    113: {   char *cp,*ep;
                    114:     int bpl;           /* bytes per display line */
                    115:        bpl=0;
                    116:        for(cp=sl,ep=sl+shdr.bpl; cp!=ep; cp++) {
                    117:                fprintf(stderr,"%o ",0377&(*cp));
                    118:                if((++bpl)%BPL==0) fprintf(stderr,"\n   ");
                    119:                };
                    120:        if((bpl)%BPL!=0)fprintf(stderr,"\n");
                    121:        }
                    122: 
                    123: /* skip `y' lines, starting from current read pointer */
                    124: RIC_skip(y)
                    125:        int y;
                    126: {      lseek(RIC_fd,(long)(y*RIC_bpl),1);
                    127:        }
                    128: 
                    129: /* read next full line of scanner data, return status:  1 OK, 0 EOF, -1 ERR */
                    130: int RIC_line(lbpp)
                    131:        char **lbpp;
                    132: {   int stat;
                    133:        if( (stat=read(RIC_fd,RIC_bf,RIC_bpl)) == RIC_bpl) {
                    134:                *lbpp=RIC_bf;
                    135:                if(RIC_debug) err("read %d bytes from RIC_fd - OK",stat);
                    136:                return(1);
                    137:                }
                    138:        else { /* EOF or ERR */
                    139:                *lbpp=NULL;
                    140:                free(RIC_bf);
                    141:                if(RIC_debug) err("read from RIC_fd stat%d",stat);
                    142:                if((stat>=0)&&(stat<RIC_bpl)) return(0 /*EOF*/);
                    143:                else return(-1);
                    144:                };
                    145:        }
                    146: 
                    147: /* write a full line of scanner data, returning status:  1 OK, 0 EOF, -1 ERR */
                    148: int RIC_oline(fd,bf)
                    149:        int fd;
                    150:        char *bf;
                    151: {   int stat;
                    152:        if( (stat=write(fd,bf,RIC_bpl)) == RIC_bpl) {
                    153:                if(RIC_debug) err("wrote %d bytes to fd%d - OK",stat,fd);
                    154:                return(1);
                    155:                }
                    156:        else { /* ERR */
                    157:                err("write to fd%d stat%d",fd,stat);
                    158:                if((stat>=0)&&(stat<RIC_bpl)) return(0 /*EOF*/);
                    159:                else return(-1);
                    160:                };
                    161:        }
                    162: 
                    163: char *RIC_hdr_toa(hp)
                    164:        RIC_hdr *hp;
                    165: {   static char s[40];
                    166:        sprintf(s,"{res%d,%d bpl%d bx%s}\n",
                    167:                hp->res_x,hp->res_y,
                    168:                hp->bpl,
                    169:                bbx_toa(&(hp->bx)));
                    170:        return(s);
                    171:        }
                    172: 

unix.superglobalmegacorp.com

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