{
From: FRANK MCCORMICK
Subj: qwk code

    Here is some QWK code I pulled from my UNIT which handles QWK REP
    files uploaded to my BBS.

    I have modified it to display the info contained in the REP file
    (which is really just a compressed version of messages.dat)
}

PROCEDURE HandleRep;

Type
    RepFmt =  RECORD
                  totype  :  CHAR;
                  confasc :  ARRAY [1..7] OF CHAR;
                  date    :  ARRAY [1..8] OF CHAR;
                  TIME    :  ARRAY [1..5] OF CHAR;
                  rto     :  ARRAY [1..25] OF CHAR;
                  from    :  ARRAY [1..25] OF CHAR;
                  sbj     :  ARRAY [1..25] OF CHAR;
                  null1   :  ARRAY [1..20] OF CHAR;
                  blks    :  ARRAY [1..6]  OF CHAR;
                  flag    :  CHAR;
                  conf    :  INTEGER;
                  null2   :  ARRAY [1..3]  OF CHAR;
              END;

CONST
    RCDLEN          = 128;
VAR
    RepHdr          : RepFmt;
    Buffer          : ARRAY [1..128] OF CHAR;
    FileRec         : ARRAY [1..RCDLEN] OF CHAR;
    Rcdno,mode      : INTEGER;
    RepFile         : FILE;
    Success         : WORD;
    MsgWriteError   : INTEGER;

PROCEDURE NextReply (VAR Rcdno: INTEGER);

VAR   Nblocks, i, start,err: INTEGER;
    TempStr,filler         : STRING [25];
    LastLine               : STRING [130];
    done, finished, bad    : BOOLEAN;
    myarray                : string[7];
    ch                     : char;
BEGIN
    Bad := FALSE;
    Finished := FALSE;
    BlockRead (RepFile, Buffer, 1, success);      {scrap first block}
    REPEAT
        FillChar(RepHdr,SizeOf(RepHdr),#32);
        {$I-}
        BlockRead (RepFile, RepHdr, 1, Success );  {read header}
        {$I+}
        Err:=IOResult;
        If Err = 0
        THEN
        BEGIN
          MyArray:='';
          FOR i:=1 to 7 DO                           {Build conf #}
            IF RepHdr.confasc[i] <>#32
            THEN
              MyArray:=Myarray+RepHdr.confasc[i];
          Val(MyArray,CurrentBaseNumber,err);       { convert >Integer}
        END
        ELSE
          BEGIN
            Writeln(' ERROR Blockreading file ');
            Halt(err);
          END;

        (** The following DISPLAYs the header information **)

        Writeln('Base #  ',CurrentBaseNumber);
        Writeln('Ref  #  ',ord(RepHdr.Flag);
        Writeln('To      '+rephdr. Rto);
        Writeln('Subj    '+RepHdr. Sbj);     {Get subject of message}
        Writeln('Date    '+Rephdr. Date);    {Set msg date mm-dd-yy}
        Writeln('Time    '+Rephdr. Time);    {Set msg time hh:mm}

        (** Now start work on actual message **)

        Tempstr := '' ;
        FOR i := 1 TO 6 DO IF RepHdr. Blks [i] <> #32  {Get the # of blks }
        THEN                                           {In the message}
          Tempstr := Tempstr + RepHdr. Blks [i];
        VAL (Tempstr, NBlocks, Success);
        Done := FALSE;
        FOR i := 1 TO Nblocks - 1 DO                    {do number of blocks}
        BEGIN
          FillChar (BUFFER, SizeOf (BUFFER), #32);
          LastLine := '';
          BlockRead (RepFile, BUFFER, 1, success);
          LastLine := asc2STR (BUFFER, 128);          {convert from ASCII}
          FOR Start := 1 TO Length (LastLine)         {string to TP string}
          DO
           IF LastLine [start] = #227                 {#227 in QWK paks}
           THEN                                       {Marks eol}
             LastLine [start] := #13;
          Writeln(LastLine);
       END;
    UNTIL Eof(repfile) OR Finished;
    close(repfile);
END;
