[Back to ARCHIVES SWAG index] [Back to Main SWAG index] [Original]

    {
     LP> Ok like in bbs programs when you upload a file it checks for a
     LP> file_id.diz, if the file exists it inserts the description into the
     LP> dir listing, that is basically what i am trying to accomplish, but i
     LP> have no idea where to start, i need to add that code into a bbs
     LP> program i am working on, but everyoe i know has no idea how to do
     LP> that.

    I'm not quite clear as to what you want exactly, but maybe the DIZExist()
    function in the following program will be of some help to you. It reads the
    ZIP file header and returns a boolean reflecting the existence of a
    FILE_ID.DIZ file (it can be easily modified to retrieve various information
    for all the files in the archive).

    This code is tested:

    {===========================================================================}
    PROGRAM ZIPRead;

    type
        ZFHeader = record
           Signature  : longint;
           Version,
           GPBFlag,
           Compress,
           Date,Time  : word;
           CRC32,
           CSize,
           USize      : longint;
           FNameLen,
           ExtraField : word;
        end;

    var
       Hdr: ^ZFHeader;
       FName: string;

    {-------------------------------------------------------}
    FUNCTION DIZExist(ZIPFile: string): boolean;
    const
       SIG = $04034B50;
    var
       F: file;
       S: string;

    begin
       New(Hdr);
       DIZExist := False;
       Assign(F, ZIPFile);
       {$I-}
       Reset(F,1);
       {$I+}
       if IoResult = 0 then
       repeat
          FillChar(S,SizeOf(S), #0);
          BlockRead(F,Hdr^,SizeOf(ZFHeader));
          BlockRead(F,Mem[Seg(S) : Ofs(S) + 1], Hdr^.FNameLen);
          S[0] := Chr(Hdr^.FNameLen);
          if (Hdr^.Signature = Sig) and (S = 'FILE_ID.DIZ') then
          begin
             DIZExist := True;
             Close(F);
             Exit;
          end;
          Seek(F,FilePos(F) + Hdr^.CSize + Hdr^.ExtraField);
       until Hdr^.Signature <> SIG;
       Close(F);
    end;
    {-------------------------------------------------------}

    BEGIN
       FName := 'TEST.ZIP';
       if DIZExist(FName) then WriteLn('FILE_ID.DIZ is present.')
       else WriteLn('FILE_ID.DIZ is not present.');
    END.
    {===========================================================================}

    Now if you want something that will extract the FILE_ID.DIZ file you will be
    best off to use PKUNZIP rather than doing it via some source code that unzips
    files, because the source code method will eventually fail due to version
    differences.

    To actually import the extracted file into your dir listing you are going to
    have to either work it out yourself, or else give us specifics on how your
    BBS program is currently designed in this area (i.e. actual code).

    If you want more help with this I would be glad to give it...

            -- Kim Forwood --

[Back to ARCHIVES SWAG index] [Back to Main SWAG index] [Original]