{------------------------------------------------------------------------ | | |------------------------------------------------------------------------} PROCEDURE AbortRead (Msg : String); BEGIN Writeln ('ABORTED!'); Writeln (Msg); Halt (99); END; {------------------------------------------------------------------------ | | |------------------------------------------------------------------------} PROCEDURE ReadWAMMessageV0100 (VAR F : Text; VAR WAMMessage : WAMMessagePointer); VAR Buffer : String; BEGIN WITH WAMMessage^ DO BEGIN { Get TO: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading TO:'); IF Copy(Buffer,1,3) <> 'TO:' THEN AbortRead ('Expecting "TO:" but found "'+Buffer+'"'); ToUser:= Copy(Buffer,5,Length(Buffer)); { Get FROM: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading FROM:'); IF Copy(Buffer,1,5) <> 'FROM:' THEN AbortRead ('Expecting "FROM:" but found "'+Buffer+'"'); FromUser:= Copy(Buffer,7,Length(Buffer)); { Get SUBJECT: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading SUBJECT:'); IF Copy(Buffer,1,8) <> 'SUBJECT:' THEN AbortRead ('Expecting "SUBJECT:" but found "'+Buffer+'"'); Subject:= Copy(Buffer,10,Length(Buffer)); { Get REFERENCE: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading REFERENCE:'); IF Copy(Buffer,1,10) <> 'REFERENCE:' THEN AbortRead ('Expecting "REFERENCE:" but found "'+Buffer+'"'); Reference:= AtoW(Copy(Buffer,12,Length(Buffer))); { Get AREA: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading AREA:'); IF Copy(Buffer,1,5) <> 'AREA:' THEN AbortRead ('Expecting "AREA:" but found "'+Buffer+'"'); Area:= AtoW(Copy(Buffer,7,Length(Buffer)));; { Get DATE: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading DATE:'); IF Copy(Buffer,1,5) <> 'DATE:' THEN AbortRead ('Expecting "DATE:" but found "'+Buffer+'"'); MsgDate:= Copy(Buffer,7,Length(Buffer)); { Get TIME: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading TIME:'); IF Copy(Buffer,1,5) <> 'TIME:' THEN AbortRead ('Expecting "TIME:" but found "'+Buffer+'"'); MsgTime:= Copy(Buffer,7,Length(Buffer)); { Get FLAGS: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading FLAGS:'); IF Copy(Buffer,1,6) <> 'FLAGS:' THEN AbortRead ('Expecting "FLAGS:" but found "'+Buffer+'"'); Echo:= Pos('ECHO',Buffer) <> 0; Private:= Pos('PRIVATE',Buffer) <> 0; { Get ORIGINATOR: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading ORIGINATOR:'); IF Copy(Buffer,1,11) <> 'ORIGINATOR:' THEN AbortRead ('Expecting "ORIGINATOR:" but found "'+Buffer+'"'); Originator:= Copy(Buffer,13,Length(Buffer)); { Get TEXT: } {$I-} Readln (F,Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading TEXT:'); IF Copy(Buffer,1,5) <> 'TEXT:' THEN AbortRead ('Expecting "TEXT:" but found "'+Buffer+'"'); TextCnt:= 0; Buffer:= ''; WHILE ( NOT Eof(F) ) AND (Buffer[1] <> EndOfTextMarker) DO BEGIN {$I-} Readln (F, Buffer); {$I+} IF IOResult <> 0 THEN AbortRead ('Error reading TEXT: data'); IF Buffer[1] = ParagraphMarker THEN Buffer:= ''; IF Buffer[1] <> EndOfTextMarker THEN BEGIN Inc (TextCnt); TextLine[TextCnt]:= Buffer; END; END; END; { WITH } END; {------------------------------------------------------------------------ | | |------------------------------------------------------------------------} PROCEDURE ReadWAMMessage (VAR F : Text; Version : String; WAMMessage : WAMMessagePointer); BEGIN IF Version = '01.00' THEN ReadWAMMessageV0100 (F, WAMMessage) ELSE AbortRead ('Invalid version! Version '+Version+' is not supported by this module!'); END; {------------------------------------------------------------------------ | | |------------------------------------------------------------------------} PROCEDURE WriteWAMMessageV0100 (VAR F : Text; VAR WAMMessage : WAMMessagePointer); VAR Buffer : String; I : Byte; BEGIN WITH WAMMessage^ DO BEGIN { Put TO: } {$I-} Writeln (F,'TO: ',ToUser); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing TO:'); { Put FROM: } {$I-} Writeln (F,'FROM: ',FromUser); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing FROM:'); { Put SUBJECT: } {$I-} Writeln (F,'SUBJECT: ',Subject); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing SUBJECT:'); { Put REFERENCE: } {$I-} Writeln (F,'REFERENCE: ',Reference); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing REFERENCE:'); { Put AREA: } {$I-} Writeln (F,'AREA: ',Area); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing AREA:'); { Put DATE: } {$I-} Writeln (F,'DATE: ',MsgDate); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing DATE:'); { Put TIME: } {$I-} Writeln (F,'TIME: ',MsgTime); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing TIME:'); { Put FLAGS: } {$I-} Write (F,'FLAGS: '); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing FLAGS:'); IF Echo THEN BEGIN {$I-} Write (F,'ECHO '); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing ECHO'); END; IF Private THEN BEGIN {$I-} Write (F,'PRIVATE '); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing ECHO'); END; {$I-} Writeln (F); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing CR/LF to FLAGS:'); { Put ORIGINATOR: } {$I-} Writeln (F,'ORIGINATOR: ',Originator); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing ORIGINATOR:'); { Put TEXT: } {$I-} Writeln (F,'TEXT:'); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing TEXT:'); FOR I:= 1 TO TextCnt DO BEGIN {$I-} Writeln (F, TextLine[I]); {$I+} IF IOResult <> 0 THEN AbortRead ('Error writing TEXT: data'); END; END; { WITH } END; {------------------------------------------------------------------------ | | |------------------------------------------------------------------------} PROCEDURE WriteWAMMessage (VAR F : Text; Version : String; WAMMessage : WAMMessagePointer); BEGIN IF Version = '01.00' THEN WriteWAMMessageV0100 (F, WAMMessage) ELSE AbortRead ('Invalid version! Version '+Version+' is not supported by this module!'); END;