Annotation of researchv10no/cmd/rscan.c, revision 1.1.1.1

1.1       root        1: /*     scanning program for ricoh scanner:
                      2:        OPTIONS:
                      3:                -rN     resolution, N :  (NOT TESTED)
                      4:                                0 - 200x200
                      5:                                1 - 200x100
                      6:                                2 - 300x300 (default)
                      7:                                3 - 240x240
                      8:                -D      dither
                      9:                -t      trace stages
                     10:                -d      detailed debugging
                     11:    16 Jan 89 (hsb):  WINDOW=0 0 wid hgt changed:
                     12:      1. wid pixels, not;  2. hgt is calculated at 11.7 inches (still in pixels)
                     13:    */
                     14: #include <stdio.h>
                     15: #include "rcocmd.h"
                     16: /*                     don't change this number - hardware puts out some number
                     17:                                of lines +- 5% - this makes sure we never
                     18:                                overrun the mapping registers */
                     19: #define MAX 1200000
                     20: #define IOALIGN        4*512
                     21: #define IMAX  MAX  + IOALIGN
                     22: char Buf[IMAX];
                     23: int cmdstat[]  = {0, 0, 0};
                     24: int *cs = cmdstat;
                     25: char *resolution[]={
                     26:        "200 200", "200 100", "300 300", "240 240" };
                     27: int width[]={  /* in bytes, not pixels */
                     28:        216, 216, 324, 260 };
                     29: int height[]={ /* 11.7 inches high */
                     30:        2340, 1170, 3510, 2808 };
                     31: char *ares = "300 300";
                     32: int wid = 324; /* in bytes, not pixels */
                     33: int ht = 3510;
                     34: int dither = 0;
                     35: int resol = 0;
                     36: int trace = 0;
                     37: int debug = 0;
                     38: 
                     39: char *device = "/dev/ricoh";
                     40: 
                     41: main(argc, argv)
                     42: char **argv;
                     43: {
                     44:        int scanner, i, outp, count;
                     45:        char *arg, *ptr, *b;
                     46: 
                     47:        argv++;
                     48:        while(--argc > 0){
                     49:                if(**argv == '-'){
                     50:                        arg = *argv++;
                     51:                        switch(*++arg){
                     52:                        case 't':
                     53:                                trace = 1;
                     54:                                break;
                     55:                        case 'd':
                     56:                                debug = 1;
                     57:                                break;
                     58:                        case 'D':
                     59:                                dither = 0;
                     60:                                break;
                     61:                        case 'r':
                     62:                                resol = *++arg;
                     63:                                resol -= '0';
                     64:                                if(resol <0 || resol > 3)
                     65:                                        fprintf(stderr,"strange resolution %d using default\n",resol);
                     66:                                ares = resolution[resol];
                     67:                                wid = width[resol];
                     68:                                ht = height[resol];
                     69:                                break;
                     70: 
                     71:                        case 'f':
                     72:                                device = ++arg;
                     73:                                break;
                     74:                        default:
                     75:                                fprintf(stderr,"unknown flag %s\n",arg);
                     76:                                exit(1);
                     77:                        }
                     78:                }
                     79:                else break;
                     80:        }
                     81:        if((scanner = open(device, 2)) == -1){
                     82:                fprintf(stderr,"Can't open %s\n", device);
                     83:                exit(1);
                     84:        }
                     85:        if(trace) fprintf(stderr,"opened ricoh\n");
                     86:        if(argc != 0){
                     87:                if((outp = creat(*argv,0666)) == -1){
                     88:                        fprintf(stderr,"Can't create output file %s\n",*argv);
                     89:                        exit(1);
                     90:                }
                     91:        }
                     92:        else if((outp = creat("Junk", 0666)) == -1){
                     93:                fprintf(stderr,"Can't create default output file junk\n");
                     94:                exit(1);
                     95:        }
                     96:        if(trace) fprintf(stderr,"created output file\n");
                     97:        sprintf(Buf,
                     98:                "TYPE=binary\nWINDOW=0 0 %d %d\nRES=%s\n\n",
                     99:                wid*8,ht,ares);
                    100:        for(b=Buf; ;b++){
                    101:                if(*b == '\n' && *(b+1) == '\n'){
                    102:                        count = b - Buf +2;
                    103:                        break;
                    104:                }
                    105:        }
                    106:        if(write(outp, Buf, count) != count){
                    107:                fprintf(stderr,"error while writing header\n");
                    108:                exit(1);
                    109:        }
                    110:        if(dither){
                    111:                *cs = dither;
                    112:                if((i=ioctl(scanner,RCODITHER,cmdstat)) != 0){
                    113:                        fprintf(stderr,"ioctl error setting dither\n");
                    114:                        exit(1);
                    115:                }
                    116:        }
                    117:        if(resol){
                    118:                *cs = resol;
                    119:                if((i=ioctl(scanner,RCORES,cmdstat)) != 0){
                    120:                        fprintf(stderr,"ioctl error setting resolution\n");
                    121:                        exit(1);
                    122:                }
                    123:        }
                    124:        if(trace) fprintf(stderr,"about to read\n");
                    125:        ptr = (char *)(((int)(Buf + IOALIGN-1)) & ~(IOALIGN-1));
                    126:        if((i=read(scanner, ptr, MAX)) != MAX){
                    127:                fprintf(stderr,"read error on scanner %d\n",i);
                    128:                exit(1);
                    129:        }
                    130:        if(trace) fprintf(stderr,"returned from read\n");
                    131:        if((ioctl(scanner, RCOHACK, cmdstat)) == 0) {   /* obsolete */
                    132:                fprintf(stderr, "offset %d, base = 0x%x\n", cmdstat[0], ptr);
                    133:                ptr += cmdstat[0];
                    134:        }
                    135:        if((i=write(outp, ptr, MAX))!= MAX){
                    136:                fprintf(stderr,"write error on output file\n");
                    137:                exit(1);
                    138:        }
                    139:        close(scanner);
                    140:        exit(0);
                    141: }

unix.superglobalmegacorp.com

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