home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d7xx
/
d744
/
fo2.lha
/
FO2
/
Sources_FO2
/
arrange.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-12
|
2KB
|
86 lines
#include "defs.h"
Prototype arrange(WORD UDB[],WORD *i);
arrange(UDB,i)
WORD UDB[],*i;
{
static WORD gfree=882,dfree=2;
struct SUserDirB *udbf,*udbp,*fhB;
struct UserDirB *adrf;
struct UserDirB *adrp;
/*struct DiskList *hdb;*/
struct FileHeaderB *adrh;
WORD UDBP,n,bloc,parent;
if (INIT & ARRANGE)
{
gfree=882; dfree=2;
INIT &= ~ARRANGE;
}
/*printf("in arrange() UDB[0] : %d, i : %d\n",UDB[0],*i);*/
udbf=whereB(UDB[0]);
if (udbf==0) {NotSet(UDB[0],0); return(0);}
for (n=0;n<*i;n++) UDB[n]=UDB[n+1]; /* On s' occuppe de UDB[0] donc on le retire de la liste */
UDB[*i]=0;
(*i)--;
UDBP=udbf->dl_type4.dl_Parent;
if (UDBP) /* null si Root */
{
udbp=whereB(UDBP);
if (udbp==0) {NotSet(UDBP,1); return(0);}
}
adrf=udbf->dl_AdrB;
/* printf("adrf : %p\n",adrf);*/
if (UDBP) /* Cas du User Dir B */
{
adrp=udbp->dl_AdrB;
adrf->ParentDir=udbp->dl_Bloc; /* Les Parents sont tjs déplacés avt */
/*printf("Parent: %d\n",adrf->ParentDir);*/
}
for (n=71;n!=-1;n--)
{
bloc=adrf->HashTable[n];
if (bloc)
{
adrf->HashTable[n]=gfree;
do
{
fhB=whereB(bloc);
if (fhB==0) {NotSet(bloc,2); break;}
if (fhB->dl_Type==-1)
{
gfree=MoveHderB(bloc,gfree,&dfree,UDB,i);
}
else
if (fhB->dl_Type==4)
{
gfree=MoveUserDirB(bloc,gfree);
UDB[(*i)++]=bloc;
UDB[*i]=0;
}
adrh=(struct FileHeaderB *)fhB->dl_AdrB;
bloc=adrh->NextHash;
adrh->NextHash= (bloc ? gfree : 0);
/*printf("adrh: %p,bloc: %d\n",adrh,bloc);*/
}
while (bloc);
}
}
/*printf("gfree: %d dfree: %d\n",gfree,dfree);*/
GFree=gfree;
DFree=dfree;
return(1);
}