home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* HEADERS.PAS *)
- (* Unit um Datenfiles einen "Listschutz" und *)
- (* Info-Vorspann zu geben und zu nehmen *)
- (* (c) 1989 by Ofer Schakowski & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT Headers;
-
- {$R-,F-,D-,V-}
-
- INTERFACE
-
- USES Dos;
-
- CONST
- NUL = #00; SUB = #26;
-
- { eigentlich nicht zum Zugriff von außen gedacht: }
- { (nur, falls der Dateiname zu Konflikten führt.) }
- TempName : PathStr = '%FILE%.TMP';
-
- TYPE
- HeaderStr = STRING[127];
-
- PROCEDURE CreateHeader(FileName : PathStr;
- Message : HeaderStr);
- PROCEDURE RemoveHeader(Filename : PathStr);
-
- { Fehlerüberprüfung wurde weggelassen ! }
-
- IMPLEMENTATION
-
- TYPE
- BufferArray = ARRAY [1..128] OF CHAR;
- VAR
- Handle1,
- Handle2 : FILE;
- Buffer : BufferArray;
-
- PROCEDURE Convert(Message : HeaderStr;
- VAR Buffer : BufferArray);
- VAR
- Index : BYTE;
- BEGIN
- FillChar(Buffer[1], 128, NUL);
- FOR Index := 1 TO Length(Message) DO
- Buffer[Index] := Message[Index];
- Buffer[Index+1] := SUB;
- END;
-
- PROCEDURE Double(VAR First, Second : FILE);
- VAR
- NumRead, NumWritten : WORD;
- BEGIN
- REPEAT
- BlockRead(First, Buffer, SizeOf(Buffer), NumRead);
- BlockWrite(Second, Buffer, NumRead, NumWritten);
- UNTIL (NumRead = 0) OR (NumWritten <> NumRead);
- END;
-
- PROCEDURE CreateHeader;
- BEGIN
- Assign(Handle1, TempName); ReWrite(Handle1, 1);
- Assign(Handle2, FileName); ReSet(Handle2, 1);
- Convert (Message, Buffer);
- BlockWrite(Handle1, Buffer, 128);
- Double(Handle2, Handle1);
- Close(Handle1); Close(Handle2);
- Erase(Handle2); Rename(Handle1, FileName);
- END;
-
- PROCEDURE RemoveHeader;
- BEGIN
- Assign(Handle1, FileName); ReSet(Handle1, 1);
- Assign(Handle2, TempName); ReWrite(Handle2, 1);
- BlockRead(Handle1, Buffer, 128);
- Double(Handle1, Handle2);
- Close(Handle1); Close(Handle2);
- Erase(Handle1); Rename(Handle2, FileName);
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von HEADERS.PAS *)