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: }