{
After lots of controversy, and a lot of reteaching myself the meanings of
a few Words, I've redone my *.MSG reader....
}

Const MSGPRIVATE  = $0001;
Const MSGConst    = $0002;
Const MSGREAD     = $0004;
Const MSGSENT     = $0008;
Const MSGFile     = $0010;
Const MSGFWD      = $0020;
Const MSGorPHAN   = $0040;
Const MSGKILL     = $0080;
Const MSGLOCAL    = $0100;
Const MSGHOLD     = $0200;
Const MSGCRAP     = $0400;
Const MSGFRQ      = $0800;
Const MSGRRQ      = $1000;
Const MSGCPT      = $2000;
Const MSGARQ      = $4000;
Const MSGURQ      = $8000;

Type
     Fido_FromType    = Array [1..35] of Char;
     Fido_toType      = Array [1..35] of Char;
     Fido_SubType     = Array [1..71] of Char;
     Fido_DateType    = Array [1..19] of Char;

     FidoMsgType = Record
      From         : Fido_FromType; (* 0   *)
      toWhom       : Fido_toType;   (* 35  *)
      Subject      : Fido_SubType;  (* 71  *)
      AZDate       : Fido_DateType; (* 142 *)
      TimesRead    : Word;          (* 162 *)
      Dest_Node    : Word;          (* 164 *)
      orig_Node    : Word;          (* 166 *)
      Cost         : Word;          (* 168 *)
      orig_Net     : Word;          (* 170 *)
      Dest_Net     : Word;          (* 172 *)
      Date_Written : LongInt;       (* 176 *)
      Date_Arrived : LongInt;       (* 180 *)
      Reply        : Word;          (* 184 *)
      Attr         : Word;          (* 186 *)
      Up           : Word;          (* 188 *)
     end;

   MsgTxtPtr  = ^MsgTxtType;
   MsgTxtType = Array [1..65535] of Char;

Var
  MessageFile : File;
  Msg         : FidoMsgType;
  MsgTxt      : MsgTxtPtr;

Procedure ReadMessage(Fname : PathStr);
Var
  Left : Word;
begin
  Assign(MessageFile,FName);
  Reset(MessageFile,1);
  BlockRead(MessageFile,Msg,190);
  Left:=FileSize(MessageFile) - 190;
  New(MsgTxt);
  BlockRead(MessageFile,MsgTxt^,Left);
end;
{
This will correctly read in a *.MSG File in two parts..THe Header(stored in
Msg), and the Text which is a 64k buffer(stored in Pointer MsgTxt)...
}
