Annotation of researchv10no/cmd/flcopy.c, revision 1.1

1.1     ! root        1: static char *sccsid ="@(#)flcopy.c     4.3 (Berkeley) 10/20/80";
        !             2: int floppydes;
        !             3: char *flopname = "/dev/floppy";
        !             4: long dsize = 77 * 26 * 128;
        !             5: int hflag;
        !             6: int rflag;
        !             7: 
        !             8: main(argc,argv)
        !             9: register char **argv;
        !            10: {
        !            11:        static char buff[512];
        !            12:        register long count;
        !            13:        register startad = -26 * 128;
        !            14:        register int n, file; register char *cp;
        !            15: 
        !            16:        while((cp = *++argv), --argc > 0) {
        !            17:            if(*cp++!='-') continue;
        !            18:            while(*cp) switch(*cp++) {
        !            19:            case 'h':
        !            20:                hflag++;
        !            21:                printf("Halftime!\n");
        !            22:                if((file = open("floppy",0))<0)
        !            23:                    printf("failed to open floppy image, for reading\n"),
        !            24:                    exit(1);
        !            25:                continue;
        !            26:            case 't':
        !            27:                if(*cp >= '0' && *cp <= '9')
        !            28:                    dsize = atoi(cp);
        !            29:                else if(argc > 1) {
        !            30:                    dsize = atoi(*++argv);
        !            31:                    argc--;
        !            32:                } else dsize = 77;
        !            33:                if (dsize <= 0 || dsize > 77)
        !            34:                    printf("Bad number of tracks\n"), exit(2);
        !            35:                dsize *= 26 * 128;
        !            36:                continue;
        !            37:            case 'r':
        !            38:                rflag++;
        !            39:            }
        !            40:        }
        !            41:        if(!hflag) {
        !            42:            file = creat("floppy",0666);
        !            43:            close(file);
        !            44:            file = open("floppy",2);
        !            45:            if(file < 0)
        !            46:                printf("failed to open floppy image"),
        !            47:                exit(1);
        !            48:            for(count = dsize; count > 0 ; count -= 512) {
        !            49:                n = count > 512 ? 512 : count ;
        !            50:                lread(startad,n,buff);
        !            51:                write(file,buff,n);
        !            52:                startad += 512;
        !            53:            }
        !            54:        }
        !            55:        if(rflag) exit(0);
        !            56:        printf("Change Floppy, Hit return when done.\n");
        !            57:        gets(buff);
        !            58:        lseek(file,0,0);
        !            59:        count = dsize; startad = -26 * 128;
        !            60:        for( ; count > 0 ; count -= 512) {
        !            61:                n = count > 512 ? 512 : count ;
        !            62:                read(file,buff,n);
        !            63:                lwrite(startad,n,buff);
        !            64:                startad += 512;
        !            65:        }
        !            66: }
        !            67: rt_init()
        !            68: {
        !            69:        static initized = 0;
        !            70:        int mode = 2;
        !            71: 
        !            72:        if(initized) return;
        !            73:        if(rflag) mode = 0;
        !            74:        initized = 1;
        !            75:        if((floppydes = open(flopname,mode)) < 0) {
        !            76:                printf("Floppy open failed\n");
        !            77:                exit(1);
        !            78:        }
        !            79: }
        !            80:                
        !            81: long trans(logical)
        !            82: register int logical;
        !            83: {
        !            84:        /*  Logical to physical adress translation */
        !            85:        register int sector, bytes, track;
        !            86: 
        !            87:        logical += 26 * 128;
        !            88:        bytes = (logical & 127);
        !            89:        logical >>= 7;
        !            90:        sector = logical % 26;
        !            91:        if(sector >= 13)
        !            92:                sector = sector *2 +1;
        !            93:        else
        !            94:                sector *= 2;
        !            95:        sector += 26 + ((track = (logical / 26)) - 1) * 6;
        !            96:        sector %= 26;
        !            97:        return( (((track *26) + sector) << 7) + bytes);
        !            98: }
        !            99: lread(startad,count,obuff)
        !           100: register startad, count;
        !           101: register char * obuff;
        !           102: {
        !           103:        long trans();
        !           104:        extern floppydes;
        !           105:        rt_init();
        !           106:                while( (count -= 128) >= 0) {
        !           107:                        lseek(floppydes, trans(startad), 0);
        !           108:                        read(floppydes,obuff,128);
        !           109:                        obuff += 128;
        !           110:                        startad += 128;
        !           111:                }
        !           112: }
        !           113: lwrite(startad,count,obuff)
        !           114: register startad, count;
        !           115: register char * obuff;
        !           116: {
        !           117:        long trans();
        !           118:        extern floppydes;
        !           119:        rt_init();
        !           120:                while( (count -= 128) >= 0) {
        !           121:                        lseek(floppydes, trans(startad), 0);
        !           122:                        write(floppydes,obuff,128);
        !           123:                        obuff += 128;
        !           124:                        startad += 128;
        !           125:                }
        !           126: }

unix.superglobalmegacorp.com

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