home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 01 / tricks / headers.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-10-10  |  2.3 KB  |  84 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      HEADERS.PAS                       *)
  3. (*       Unit um Datenfiles einen "Listschutz" und        *)
  4. (*          Info-Vorspann zu geben und zu nehmen          *)
  5. (*         (c) 1989 by Ofer Schakowski & TOOLBOX          *)
  6. (* ------------------------------------------------------ *)
  7. UNIT Headers;
  8.  
  9. {$R-,F-,D-,V-}
  10.  
  11. INTERFACE
  12.  
  13. USES Dos;
  14.  
  15. CONST
  16.   NUL = #00;  SUB = #26;
  17.  
  18.         { eigentlich nicht zum Zugriff von außen gedacht:  }
  19.         { (nur, falls der Dateiname zu Konflikten führt.)  }
  20.   TempName : PathStr = '%FILE%.TMP';
  21.  
  22. TYPE
  23.   HeaderStr = STRING[127];
  24.  
  25.   PROCEDURE CreateHeader(FileName : PathStr;
  26.                          Message  : HeaderStr);
  27.   PROCEDURE RemoveHeader(Filename : PathStr);
  28.  
  29.                    { Fehlerüberprüfung wurde weggelassen ! }
  30.  
  31. IMPLEMENTATION
  32.  
  33. TYPE
  34.   BufferArray = ARRAY [1..128] OF CHAR;
  35. VAR
  36.   Handle1,
  37.   Handle2 : FILE;
  38.   Buffer  : BufferArray;
  39.  
  40.   PROCEDURE Convert(Message : HeaderStr;
  41.                     VAR Buffer  : BufferArray);
  42.   VAR
  43.     Index : BYTE;
  44.   BEGIN
  45.   FillChar(Buffer[1], 128, NUL);
  46.     FOR Index := 1 TO Length(Message) DO
  47.       Buffer[Index] := Message[Index];
  48.     Buffer[Index+1] := SUB;
  49.   END;
  50.  
  51.   PROCEDURE Double(VAR First, Second : FILE);
  52.   VAR
  53.     NumRead, NumWritten : WORD;
  54.   BEGIN
  55.     REPEAT
  56.       BlockRead(First, Buffer, SizeOf(Buffer), NumRead);
  57.       BlockWrite(Second, Buffer, NumRead, NumWritten);
  58.     UNTIL (NumRead = 0) OR (NumWritten <> NumRead);
  59.   END;
  60.  
  61.   PROCEDURE CreateHeader;
  62.   BEGIN
  63.     Assign(Handle1, TempName);  ReWrite(Handle1, 1);
  64.     Assign(Handle2, FileName);  ReSet(Handle2, 1);
  65.     Convert (Message, Buffer);
  66.     BlockWrite(Handle1, Buffer, 128);
  67.     Double(Handle2, Handle1);
  68.     Close(Handle1); Close(Handle2);
  69.     Erase(Handle2); Rename(Handle1, FileName);
  70.   END;
  71.  
  72.   PROCEDURE RemoveHeader;
  73.   BEGIN
  74.     Assign(Handle1, FileName);  ReSet(Handle1, 1);
  75.     Assign(Handle2, TempName);  ReWrite(Handle2, 1);
  76.     BlockRead(Handle1, Buffer, 128);
  77.     Double(Handle1, Handle2);
  78.     Close(Handle1);  Close(Handle2);
  79.     Erase(Handle1);  Rename(Handle2, FileName);
  80.   END;
  81.  
  82. END.
  83. (* ------------------------------------------------------ *)
  84. (*                 Ende von HEADERS.PAS                   *)