home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 12 / logfile.imp < prev    next >
Encoding:
Modula Implementation  |  1987-10-05  |  1.9 KB  |  61 lines

  1. IMPLEMENTATION MODULE Logfile;  (* Logitech Modula-2 *)
  2.  
  3. IMPORT FileSystem;
  4. FROM Termbase IMPORT AssignWrite, AssignRead;
  5. FROM Strings IMPORT Pos, Copy;
  6.  
  7. CONST
  8.    bufsize = 512;
  9.  
  10. VAR
  11.    f     : FileSyste.File;
  12.    c     : CHAR;
  13.    buf   : ARRAY [0..bufsize-1] OF CHAR;
  14.    indx  : CARDINAL;
  15.    logfn : ARRAY [0..11] OF CHAR;
  16.  
  17.  
  18. PROCEDURE NoOp(ch: CHAR);   (* tut schlicht und einfach nichts ! *)
  19. BEGIN END NoOp;
  20.  
  21. PROCEDURE WriteChToFile(ch: CHAR);
  22. VAR rd: CARDINAL;
  23. BEGIN
  24.   IF indx >= bufsize-1 THEN                       (* wenn Buffer voll, dann *)
  25.    FileSystem.WriteNBytes(f,ADR(buf),bufsize,rd); (* wegschreiben und wieder*)
  26.    indx := 0                                      (* aufnahmebereit machen  *)
  27.   END;
  28.   buf[indx] := ch; INC(indx)
  29. END WriteChToFile;
  30.  
  31. PROCEDURE LogOn(fn: ARRAY OF CHAR);
  32. BEGIN
  33.    Copy(fn,0,Pos('.',fn)+1,logfn);      (* Namen fuer Logfile konstruieren *)
  34.    Concat(logfn,'LOG',logfn);
  35.    FileSystem.Lookup(f,logfn,TRUE);      (* jetzt wird`s interessant:  *)
  36.    AssignWrite(WriteChToFile,ok)         (* ... die Umleitung          *)
  37. END LogOn;
  38.  
  39. PROCEDURE LogOff;
  40. BEGIN
  41.    Flush;                       (* falls noch was im Puffer -> schreiben ! *)
  42.    Termbase.UnAssignWrite(ok);
  43.    FileSystem.Close(f)
  44. END LogOff;
  45.  
  46. PROCEDURE Flush;
  47. VAR i: CARDINAL;
  48. BEGIN
  49.   FOR i := 0 TO indx -1 DO FileSystem.WriteChar(f,buf[i])
  50.              (* oder auch, je nach Geschmack:                  *)
  51.              (* FileSystem.WriteNBytes(f,ADR(buf),indx,wr)     *)
  52.              (* wobei aber wr: CARDINAL; deklariert sein muss. *)
  53.              (* Ein kleiner, aber grundlegender Unterschied    *)
  54.              (* besteht doch:      WriteChar interpretiert     *)
  55.              (* das Zeichen 0DH zu der Zeichenfolge 0DH 0AH,   *)
  56.              (* waehrend mit WriteNBytes praktisch "woertlich" *)
  57.              (* geschrieben wird.                              *)
  58. END Flush;
  59.  
  60. END Logfile.
  61.