GLOBAL WAR MESSAGE FILE FORMAT (WARxx.MSG)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WARxx.MSG is a FILE OF MsgRec

MsgRec is defined as:

  TYPE
    MsgRec = RECORD
      MsgFrom: 1..6;             {player who sent this message}
      MsgTo  : SET OF 1..6;      {player(s) this message was sent to}
      MsgTxt : String[70];       {the text of the message}
    END;

When a new message is entered, a new record is appended to the WARxx.MSG file.
Records are never deleted.  The MsgTo Set keeps track of who the message is
to.  If a player number is in the MsgTo set, the message is considered New,
(unread, undeleted, etc).  When a player deletes a message, his player number
is removed from the MsgTo set.

Examples:

VAR
  f    : FILE OF MsgRec;
  Rec  : MsgRec;
  s    : STRING;
  ch   : CHAR;
  RecNo: WORD;

BEGIN
  Assign(f, 'WAR01.MSG');
  {$I-} Reset(f); {$I+}
  IF IOResult<>0 THEN ReWrite(f); {create file if it doesn't exist}

To read messages:

  Reset(f); RecNo := 0;
  WHILE NOT EOF(f) DO BEGIN
    Inc(RecNo);
    Seek(f, RecNo);
    Read(f, Rec);
    IF ThisPlayerNumber IN Rec.MsgTo THEN BEGIN
      Writeln('This message is from player #',Rec.MsgFrom);
      Writeln(Rec.MsgTxt);
      Writeln;
    END;

To delete messages:

    Write('End of messages to you.  Delete messages?  ');
    Read(ch);
    IF UpCase(ch)='Y' THEN BEGIN
      FOR RecNo:=1 TO FileSize(f)-1 DO BEGIN
      Seek(f,RecNo);
      Read(f, Rec);
      {Now remove player number from MsgTo Set}
      Rec.MsgTo := Rec.MsgTo - [ThisPlayerNumber];
      Seek(f, RecNo);
      Write(f, Rec);
    END;

To send a messages:

     Write('Send message to which player(s)?  (!,",#,$,%,&) : ');
     ReadLn(s);
     IF Length(s)>0 THEN BEGIN
       Rec.MsgTo := [];
       FOR i:=1 TO Length(s) DO BEGIN
         ch := s[i];
         CASE ch OF
           '!':Rec.MsgTo := Rec.MsgTo + [1];
           '"':Rec.MsgTo := Rec.MsgTo + [2];
           '#':Rec.MsgTo := Rec.MsgTo + [3];
           '$':Rec.MsgTo := Rec.MsgTo + [4];
           '%':Rec.MsgTo := Rec.MsgTo + [5];
           '&':Rec.MsgTo := Rec.MsgTo + [6];
         END;
       END;
       IF Rec.MsgTo <> [] THEN BEGIN
         Writeln('Enter message now.  Press [ENTER] on a blank line to end.  ');
         REPEAT
           Write('Message:');
           Readln(s);
           IF s<>'' THEN BEGIN
             Rec.MsgTxt  := s;
             Rec.MsgFrom := player;
             RecNo       := FileSize(f);  {append record to end of file}
             IF RecNo=0 THEN RecNo := 1;
             Seek(f, RecNo);
             Write(f, Rec);
           END;
         UNTIL s='';
         Writeln('Message sent.  ');
       END;
     END;
     Close(f);
