Annotation of 43BSD/contrib/cpm/src/extent.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.