home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* MESSAGE.PAS *)
- (* (c) 1991 Jochen Walz & TOOLBOX *)
- (* ------------------------------------------------------ *)
- {$B-,D-,F-,I-,N-,R-,S-,V-}
- {$M 65520,0,655360}
-
- UNIT Message;
-
- INTERFACE
-
- FUNCTION ReturnMessage (number : INTEGER) : STRING;
-
- FUNCTION LocateMessage (header : STRING) : STRING;
-
-
- IMPLEMENTATION
-
- TYPE
- MessagePointer = ^STRING;
-
- VAR
- MessageBuffer : MessagePointer;
- MessageNumber : INTEGER;
-
- FUNCTION ReturnMessage (number : INTEGER) : STRING;
- VAR
- i : INTEGER;
- p : MessagePointer;
-
- FUNCTION CheckSum : STRING;
- VAR
- i1, i2 : INTEGER;
- p : MessagePointer;
- s : STRING;
- sum : INTEGER;
- BEGIN
- sum := 0;
- p := MessageBuffer;
- FOR i1 := 1 TO MessageNumber-1 DO BEGIN
- p := Ptr(Seg(p^), Ofs(p^)+Length(p^)+1);
- FOR i2 := 0 TO Length(p^) DO
- sum := sum + Ord(p^[i2]);
- END;
- Str(sum, s);
- CheckSum := s;
- END;
-
- BEGIN
- IF (number < 1) THEN
- ReturnMessage := CheckSum
- ELSE IF (number > MessageNumber) THEN
- ReturnMessage := ''
- ELSE BEGIN
- p := MessageBuffer;
- FOR i := 1 TO number-1 DO
- p := Ptr(Seg(p^), Ofs(p^)+Length(p^)+1);
- ReturnMessage := p^;
- END;
- END;
-
- FUNCTION LocateMessage (header : STRING) : STRING;
- VAR
- i : INTEGER;
- p : MessagePointer;
- BEGIN
- p := MessageBuffer;
- FOR i := 1 TO MessageNumber DO BEGIN
- IF (Copy(p^, 1, Length(header)) = header) THEN BEGIN
- LocateMessage := Copy(p^, Length(header)+1,
- Length(p^)-Length(header));
- Exit;
- END;
- p := Ptr(Seg(p^), Ofs(p^)+Length(p^)+1);
- END;
- LocateMessage := '';
- END;
-
- PROCEDURE Initialize;
- VAR
- buffer : ARRAY [$0000..$F000] OF CHAR;
- bytes : WORD;
- line : STRING;
- source : TEXT;
-
- FUNCTION Specification : STRING;
- VAR
- Offset : INTEGER;
- Segment : INTEGER;
- s : STRING;
- BEGIN
- Segment := MemW[PrefixSeg:$002C];
- Offset := 0;
- WHILE (MemW[Segment:Offset] <> 0) DO
- Offset := Offset + 1;
- Move(Mem[Segment:Offset+3], s, SizeOf(s));
- s[0] := Chr(0);
- WHILE (Length(s) < 255) AND
- (s[Length(s)+1] <> Chr(0)) DO
- s[0] := Succ(s[0]);
- Specification := Copy(s, 1, Length(s)-4) + '.TXT';
- END;
-
- BEGIN
- Assign(source, Specification);
- Reset(source);
- bytes := 0;
- MessageNumber := 0;
- REPEAT
- IF EoF(source) OR (IOResult <> 0) THEN BEGIN
- Close(source);
- GetMem(MessageBuffer, bytes+1);
- Move(buffer, MessageBuffer^, bytes);
- Exit;
- END;
- ReadLn(source, line);
- Move(line, buffer[bytes], Length(line)+1);
- bytes := bytes + Length(line) + 1;
- MessageNumber := MessageNumber+1;
- UNTIL FALSE;
- END;
-
- BEGIN
- Initialize;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von MESSAGE.PAS *)