|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.