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);