home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 2: PC / frozenfish_august_1995.bin / bbs / d07xx / d0744.lha / FO2 / Sources_FO2 / arrange.c < prev    next >
C/C++ Source or Header  |  1992-10-12  |  2KB  |  86 lines

  1. #include "defs.h"
  2.  
  3. Prototype arrange(WORD UDB[],WORD *i);
  4.  
  5. arrange(UDB,i)
  6. WORD UDB[],*i;
  7. {
  8. static WORD gfree=882,dfree=2;
  9. struct SUserDirB *udbf,*udbp,*fhB;
  10. struct UserDirB  *adrf;
  11. struct UserDirB  *adrp;
  12. /*struct DiskList     *hdb;*/
  13. struct FileHeaderB *adrh;
  14. WORD   UDBP,n,bloc,parent;
  15.  
  16.     if (INIT & ARRANGE)
  17.     {
  18.         gfree=882; dfree=2;
  19.         INIT &= ~ARRANGE;
  20.     }
  21.  
  22.     /*printf("in arrange() UDB[0] : %d, i : %d\n",UDB[0],*i);*/
  23.     udbf=whereB(UDB[0]);
  24.     if (udbf==0) {NotSet(UDB[0],0); return(0);}
  25.  
  26.     for (n=0;n<*i;n++) UDB[n]=UDB[n+1];    /* On s' occuppe de UDB[0] donc on le retire de la liste */
  27.     UDB[*i]=0;
  28.     (*i)--;
  29.  
  30.     UDBP=udbf->dl_type4.dl_Parent;
  31.  
  32.     if (UDBP)    /* null si Root */
  33.     {
  34.         udbp=whereB(UDBP);
  35.         if (udbp==0) {NotSet(UDBP,1); return(0);}
  36.     }
  37.  
  38.     adrf=udbf->dl_AdrB;
  39. /*    printf("adrf : %p\n",adrf);*/
  40.  
  41.     if (UDBP)    /* Cas du User Dir B */
  42.     {
  43.         adrp=udbp->dl_AdrB;
  44.         adrf->ParentDir=udbp->dl_Bloc;    /* Les Parents sont tjs dΘplacΘs avt */
  45.     /*printf("Parent: %d\n",adrf->ParentDir);*/
  46.     }
  47.  
  48.     for (n=71;n!=-1;n--)
  49.     {
  50.     
  51.         bloc=adrf->HashTable[n];
  52.         if (bloc)
  53.         {
  54.             adrf->HashTable[n]=gfree;
  55.             do
  56.             {
  57.                 fhB=whereB(bloc);
  58.                 if (fhB==0) {NotSet(bloc,2); break;}
  59.  
  60.                 if (fhB->dl_Type==-1)
  61.                 {
  62.                     gfree=MoveHderB(bloc,gfree,&dfree,UDB,i);
  63.                 }
  64.                 else
  65.                 if (fhB->dl_Type==4)
  66.                 {
  67.                     gfree=MoveUserDirB(bloc,gfree);
  68.                     UDB[(*i)++]=bloc;
  69.                     UDB[*i]=0;
  70.                 }
  71.  
  72.                 adrh=(struct FileHeaderB *)fhB->dl_AdrB;
  73.                 bloc=adrh->NextHash;
  74.                 adrh->NextHash= (bloc ? gfree : 0);
  75.                 /*printf("adrh: %p,bloc: %d\n",adrh,bloc);*/
  76.             }
  77.             while (bloc);
  78.         }
  79.     }
  80.     /*printf("gfree: %d dfree: %d\n",gfree,dfree);*/
  81.     GFree=gfree;
  82.     DFree=dfree;
  83.     return(1);
  84. }
  85.  
  86.