home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d7xx
/
d744
/
fo2.lha
/
FO2
/
Sources_FO2
/
modify.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-12
|
2KB
|
98 lines
#include "defs.h"
Prototype struct DataB *ModifyDataHder(WORD bloc,WORD nfhB,WORD ndataB,LONG fh);
Prototype ModifyDataNext(struct DataB *adr,WORD ndataNext);
Prototype ModifyFList(WORD bloc,WORD nfhB,WORD *nflB,WORD *datafree,WORD data);
struct DataB *ModifyDataHder(bloc,nfhB,ndataB,fh)
WORD bloc,nfhB,ndataB;
LONG fh;
{
struct SDataB *dlistD;
struct DataB *adr;
#ifdef DEBUG
fprintf(FPointer,"in MofifyDataHder() bloc: %d, nfhB : %d, ndataB: %d\n",bloc,nfhB,ndataB);
#endif
dlistD=whereB(bloc);
if (dlistD==0) {NotSet(bloc,fh); exit(0);}
else
dlistD->dl_Bloc2=ndataB;
dlistD->dl_type8.dl_FileHeader=nfhB;
adr=dlistD->dl_AdrB;
if (FFS==0) adr->HeaderKey=nfhB;
return(adr);
}
ModifyDataNext(adr,ndataNext)
struct DataB *adr;
WORD ndataNext;
{
if (FFS==0)
{if (adr->NextDataBlock) adr->NextDataBlock=ndataNext;}
}
/* Renvoie n° du prochain bloc libre */
ModifyFList(bloc,nfhB,nflB,datafree,data)
WORD bloc,nfhB,*nflB,*datafree,data;
{
struct SFileListB *dlistFL;
struct FileListB *adr;
LONG *AdrD;
WORD n,ret=0,ext;
BYTE first;
#ifdef DEBUG
printf("in MofifyFList() bloc: %d, nfhB : %d, nflB: %d,datafree: %d\n",bloc,nfhB,*nflB,(*datafree)+1);
#endif
dlistFL=whereB(bloc);
if (dlistFL==0) NotSet(bloc,5);
else
{
/*printf(" Type du bloc: %d\n",dlistFL->dl_Type);*/
dlistFL->dl_type13.dl_FileHeader=nfhB;
dlistFL->dl_Bloc2=*nflB;
adr=(struct FileListB *)dlistFL->dl_AdrB;
adr->ParentFH=nfhB;
adr->HeaderKey=*nflB;
if (FLnog) Inc(nflB); else (*nflB)++;
first=1;
for (n=71;n!=-1;n--)
{
if(adr->DataTable[n])
{
AdrD=ModifyDataHder(adr->DataTable[n],nfhB,*datafree,bloc);
adr->DataTable[n]=*datafree;
if (first) {adr->FirstDataB=*datafree; first=0;}
if (data==0) Inc(datafree); else (*datafree)++;
if (n)
{
if (data==0) ModifyDataNext(AdrD,*datafree);
else ModifyDataNext(AdrD,*datafree+1);
}
else
{
if (FLnog) ModifyDataNext(AdrD,Nextdfree(datafree));
else ModifyDataNext(AdrD,*datafree);
}
}
}
ext=*nflB;
if (adr->Extension)
{
ret+=ModifyFList(adr->Extension,nfhB,nflB,datafree,data);
adr->Extension=ext;
return(++ret);
}
return(ext);
}
}