Annotation of researchv10no/cmd/rscan.c, revision 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.