cpm commands
This commit is contained in:
parent
78804f58ac
commit
24129c605a
|
|
@ -0,0 +1,68 @@
|
|||
/* extent.c 1.7 83/05/13 */
|
||||
|
||||
#include <stdio.h>
|
||||
#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);
|
||||
}
|
||||
Loading…
Reference in New Issue