FILEPACK.PAS

3.8 KB e141309afff31461…
{$I DIRECT.INC}
  Program FilePack;

  Uses Crt, GenTypes, ConfigRt, skaShit, GenSubs;

  Var  confnum,currareas:string;
       totareas,counter,currarea,i1:integer;
       udindexfile,udindexbak:file of udindexrec;
       udrecfile:file of udrec;

  {$I ANSIS.SKA}
  Procedure Show(S : String);
  Begin
   gotoxy(3,wherey);
   skawrite('|07.,:$½%'' |07'+S);
  End;

  Procedure GetTotAreas;

    Var  arecfile:string;
         arecrec:file of arearec;
         arecs:arearec;

    Begin;

         totareas:=0;
         assign(arecrec,Cfg.DataDir+'areadir.'+confnum);
         reset(arecrec);
         if ioresult=0 then begin
           while not eof(arecrec) do begin
             read(arecrec,arecs);
             inc(totareas);
           end;
           close(arecrec);
         end else begin
         writeLn;
         show('sorry but conference #'+confNum+' doesnt exist, halting|CR|CR');
         halt(0);
         end;
    end;

  Procedure ReadAndWrite;

    Var  udinfo:udrec;
         uddesc:udindexrec;
         udnewindex:file of udindexrec;
         pointer:longint;
         a:integer;

    Begin;

         assign(udindexfile,Cfg.DataDir+'areaind'+confnum+'.bak');
         assign(udrecfile,Cfg.DataDir+'area'+currareas+'.'+confnum);
         assign(udnewindex,Cfg.DataDir+'areaindx.'+confnum);
         reset(udnewindex);
         if ioresult<>0 then rewrite(udnewindex);
         reset(udrecfile);
         reset(udindexfile);
         a:=0;
         while not eof(udrecfile) do begin
           seek(udrecfile,a);
           read(udrecfile,udinfo);
           pointer:=udinfo.indexptr;
           seek(udindexfile,pointer);
           read(udindexfile,uddesc);
           udinfo.indexptr:=counter;
           seek(udrecfile,a);
           write(udrecfile,udinfo);
           seek(udnewindex,counter);
           write(udnewindex,uddesc);
           inc(a);
           inc(counter);
         end;
         close(udindexfile);
         close(udnewindex);
         close(udrecfile);
    end;


  Begin;
    if paramstr(1)='' then
     begin
     clrscr;
     move (header12,mem[$b800:0000],sizeof(header12));
     writeln;
     textcolor(7);
     gotoxy(13,9); writeln('infusion filearea packer - (c)copyright skaboy101 1998');
     writeln;
     show('Usage - '+paramStr(0)+' <conference_number(s)>|CR');
     halt(5);
     end;
         ReadCfg(False);
         clrscr;
         move (header12,mem[$b800:0000],sizeof(header12));
         writeln;
         textcolor(7);
         gotoxy(13,9);
                  writeln('infusion fileconf packer - (c)copyright skaboy101 1998');
         for i1:=1 to paramcount do begin
           confnum:=paramstr(i1);
           counter:=0;
           GetTotAreas;
           writeln;
           show('compressing conference '+confnum+' ....');
           assign(udindexbak,Cfg.DataDir+'areaind'+confnum+'.bak');
           reset(udindexbak);
           if ioresult=0 then erase(udindexbak);
           assign(udindexfile,Cfg.DataDir+'areaindx.'+confnum);
           rename(udindexfile,Cfg.DataDir+'areaind'+confnum+'.bak');
           close(udindexfile);
           currarea:=0;
           while currarea<totareas do begin
             for currarea:=0 to totareas do begin
               str(currarea,currareas);
               assign(udrecfile,Cfg.DataDir+'area'+currareas+'.'+confnum);
               reset(udrecfile);
               if ioresult=0 then begin
                 close(udrecfile);
                 readandwrite;
               end;
             end;
           end;
           assign(udindexbak,Cfg.DataDir+'areaind'+confnum+'.bak');
           reset(udindexbak);
           if ioresult=0 then erase(udindexbak);
           write(' done');
         end;
  writeln;
  end.