1: /* extent.c 1.7 83/05/13 */ 2: 3: #include <stdio.h> 4: #include "cpmio.h" 5: #include "cpmfio.h" 6: 7: /* 8: * Allocate a new extent to the file pointed to by curext, 9: * or, if curext < 0, return the index of the first free 10: * directory slot. 11: * Return a negative pointer if no directory space, otherwise 12: * the index to the new extent. 13: */ 14: 15: creext(curext) 16: int curext; 17: { 18: 19: int i, j; 20: 21: for (i=0; i < maxdir; i++) 22: if ((dirbuf + i)->status == (char) 0xe5) 23: break; 24: if (i == maxdir) 25: return (EOF); 26: if (curext >= 0) 27: *(dirbuf+i) = *(dirbuf+curext); 28: 29: /* clear all file pointers */ 30: for (j=0; j<16; j++) 31: (dirbuf+i)->pointers[j] = '\0'; 32: 33: #ifdef DEBUG 34: printf("extent allocated: %d (old: %d)\n", i, curext); 35: printf("extent data: 0x%x, name: %s\n", (dirbuf+i)->status, 36: (dirbuf+i)->name); 37: #endif 38: return(i); 39: } 40: 41: 42: /* 43: * Find next extent of the file pointed to by file pointer 'current', 44: * return the new extent's index if found, otherwise NULL. 45: */ 46: 47: getnext(cur) 48: C_FILE *cur; 49: { 50: 51: int ind; 52: 53: cur->c_extno++; 54: for (ind = 0; ind < maxdir; ind++) 55: if ((strncmp(cur->c_dirp->name,(dirbuf+ind)->name,8)==0) && 56: (strncmp((dirbuf+ind)->ext, cur->c_dirp->ext,3)==0) && 57: ((dirbuf+ind)->extno == cur->c_extno)) { 58: cur->c_ext=ind; 59: cur->c_seccnt = 0xff & (int)(dirbuf+ind)->blkcnt; 60: cur->c_dirp = dirbuf + ind; 61: cur->c_blk = 0; 62: #ifdef DEBUG 63: printf("getnext: dir. index: %d\n",ind); 64: #endif 65: return (ind); 66: } 67: return (NULL); 68: }