Annotation of 43BSDTahoe/new/cpm/src/blockio.c, revision 1.1.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.