1: /* physio.c 1.6 83/07/18 */ 2: 3: #include <stdio.h> 4: #include "cpmio.h" 5: #include <sys/file.h> 6: 7: /* 8: * Write physical sector to floppy disk file 9: */ 10: 11: putpsect(tr, sect, buf) 12: char buf[]; 13: { 14: 15: long newpos; 16: 17: if (sect > sectrk || sect < 1) { 18: fprintf(stderr, "putpsect: sector number out of range: %d\n", 19: sect); 20: return (EOF); 21: } 22: newpos = (long) (sect + (tr * sectrk) -1 ) * seclth; 23: if (lseek(fid, newpos, 0) == -1) { 24: perror("putpsect"); 25: return (EOF); 26: } 27: if (write(fid, buf, seclth) == seclth) 28: return (1); 29: perror("putpsect"); 30: fprintf(stderr, "track %d, sect %d\n", tr, sect); 31: return (EOF); 32: } 33: 34: /* 35: * Read physical sector from floppy disk file 36: */ 37: 38: getpsect(tr, sect, buf) 39: char buf[]; 40: { 41: 42: long newpos; 43: 44: if (sect > sectrk || sect < 1) { 45: fprintf("getpsect: sector number out of range: %d\n",sect); 46: return (EOF); 47: } 48: newpos = (long) (sect + (tr * sectrk) -1 ) * seclth; 49: if (lseek(fid, newpos, 0) == -1) { 50: perror("getpsect"); 51: return (EOF); 52: } 53: if (read(fid, buf, seclth) != seclth) { 54: perror("getpsect"); 55: fprintf(stderr, "track %d, sect %d\n", tr, sect); 56: return (EOF); 57: } 58: return (1); 59: } 60: 61: /* 62: * Initialize a new floppy disk file in "name", 63: * return its file pointer. 64: */ 65: 66: initcpm(name) 67: char *name; 68: { 69: int f, i; 70: char buf[512]; 71: 72: if ((f = open(name, O_CREAT|O_RDWR, 0644)) < 0) 73: return (EOF); 74: for (i=0; i<512; i++) 75: buf[i] = '\345'; 76: /* 77: * Initialize (with 0xe5) the first four tracks 78: * on the `floppy' 79: */ 80: for (i=0; i < (4*seclth*sectrk); i += 512) 81: write(f, buf, 512); 82: return (f); 83: }