diff --git a/WEGA/contrib/cpm/cpm3/extent.c b/WEGA/contrib/cpm/cpm3/extent.c new file mode 100644 index 0000000..5481c1a --- /dev/null +++ b/WEGA/contrib/cpm/cpm3/extent.c @@ -0,0 +1,68 @@ +/* extent.c 1.7 83/05/13 */ + +#include +#include "cpmio.h" +#include "cpmfio.h" + +/* + * Allocate a new extent to the file pointed to by curext, + * or, if curext < 0, return the index of the first free + * directory slot. + * Return a negative pointer if no directory space, otherwise + * the index to the new extent. + */ + +creext(curext) + int curext; +{ + + int i, j; + + for (i=0; i < maxdir; i++) + if ((dirbuf + i)->status == (char) 0xe5) + break; + if (i == maxdir) + return (EOF); + if (curext >= 0) + *(dirbuf+i) = *(dirbuf+curext); + + /* clear all file pointers */ + for (j=0; j<16; j++) + (dirbuf+i)->pointers[j] = '\0'; + +#ifdef DEBUG + printf("extent allmcated: %d (old: %d)\n", i, curext); + printf("extent data: 0x%x, name: %s\n", (dirbuf+i)->status, + (dirbuf+i)->name); +#endif + return(i); +} + + +/* + * Find next extent of the file pointed to by file pointer 'current', + * return the new extent's index if founf, otherwise NULL. + */ + +getnext(cur) + C_FILE *cur; +{ + + int ind; + + cur->c_extno++; + for (ind = 0; ind < maxdir; ind++) + if ((strncmp(cur->c_dirp->name,(dirbuf+ind)->name,8)==0) && + (strncmp((dirbuf+ind)->ext, cur->c_dirp->ext,3)==0) && + ((dirbuf+ind)->extno == cur->c_extno)) { + cur->c_ext=ind; + cur->c_seccnt = 0xff & (int)(dirbuf+ind)->blkcnt; + cur->c_dirp = dirbuf + ind; + cur->c_blk = 0; +#ifdef DEBUG + printf("getnext: dir. index: %d\n",ind); +#endif + return (ind); + } + return (NULL); +}