Annotation of 43BSDTahoe/new/cpm/src/blockio.c, revision 1.1

1.1     ! root        1: /*     blockio.c       1.4     83/05/13        */
        !             2: 
        !             3: #include <stdio.h>
        !             4: #include "cpmio.h"
        !             5: 
        !             6: /*
        !             7:  * Get a full block or a part of a block from floppy disk file
        !             8:  * nsect gives the actual number of physical sectors to read.
        !             9:  * if nsect is negative then always read a full block.
        !            10:  */
        !            11: 
        !            12: getblock(blockno, buffer, nsect)
        !            13:        char buffer[];
        !            14: {
        !            15: 
        !            16:        int sect, track, counter;
        !            17: 
        !            18: #ifdef DEBUG
        !            19:        printf("block: %d\n",blockno);
        !            20: #endif
        !            21:        if (nsect < 0) 
        !            22:                nsect = blksiz/seclth;
        !            23: 
        !            24:        /* Translate block number into logical track/sector address */
        !            25:        sect = (blockno*(blksiz/seclth)+ sectrk*2)%sectrk + 1;
        !            26:        track = (blockno*(blksiz/seclth)+ sectrk*2)/sectrk ;
        !            27:        /* read the block */
        !            28:        for (counter = 0; counter < nsect; counter++) {
        !            29:                if (getpsect(track, skewtab[sect++ -1], buffer+(seclth*counter))
        !            30:                                == EOF)
        !            31:                        return (EOF);
        !            32:                if (sect > sectrk) {
        !            33:                        sect = 1;
        !            34:                        track++;
        !            35:                }
        !            36:        }
        !            37:        return (0);
        !            38: }
        !            39: 
        !            40: /*
        !            41:  * Save a full block or a part of a block in floppy disk file
        !            42:  * If nsects is negative, write a full block.
        !            43:  */
        !            44: 
        !            45: putblock(blockno, buffer, nsect)
        !            46:        char buffer[];
        !            47: {
        !            48: 
        !            49:        int sect, track, counter;
        !            50: 
        !            51:        if (nsect < 0) 
        !            52:                nsect = blksiz/seclth;
        !            53: 
        !            54:        /* Translate block number into logical track/sector address */
        !            55:        sect = (blockno*(blksiz/seclth)+ sectrk*2)%sectrk + 1;
        !            56:        track = (blockno*(blksiz/seclth)+ sectrk*2)/sectrk ;
        !            57:        /* write the block */
        !            58:        for (counter = 0; counter < nsect; counter++) {
        !            59:                if (putpsect(track, skewtab[sect++ -1],buffer+(seclth*counter))
        !            60:                                == EOF) 
        !            61:                        return (EOF);
        !            62:                if (sect > sectrk) {
        !            63:                        sect = 1;
        !            64:                        track++;
        !            65:                }
        !            66:        }
        !            67:        return (0);
        !            68: }

unix.superglobalmegacorp.com

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