unit protokollunit; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type tProtokollDatei = record datei: textFile; einrueckung: longint; end; { tProtokollant } tProtokollant = class(tObject) private sDat: ^tProtokollDatei; bes: string; kinder: array of tProtokollant; elter: tProtokollant; public constructor create(dateiName: string); overload; constructor create(elter_: tProtokollant; besitzer: string); overload; destructor destroy; override; procedure destroyall; procedure schreibe(s: string); procedure schreibe(s: string; tee: boolean); procedure spuelen; end; implementation { tProtokollant } constructor tProtokollant.create(dateiName: string); begin inherited create; getMem(sDat,sizeOf(tProtokollDatei)); sDat^.einrueckung:=10; assignFile(sDat^.datei,dateiName); if fileExists(dateiName) then deleteFile(dateiName); rewrite(sDat^.datei); bes:=''; setLength(kinder,0); elter:=nil; end; constructor tProtokollant.create(elter_: tProtokollant; besitzer: string); begin inherited create; sDat:=elter_.sDat; setLength(elter_.kinder,length(elter_.kinder)+1); elter_.kinder[length(elter_.kinder)-1]:=self; elter:=elter_; setLength(kinder,0); bes:=elter.bes+'.'+besitzer; if pos('.',bes)=1 then delete(bes,1,1); if length(bes)+4 > sDat^.einrueckung then sDat^.einrueckung:=length(bes)+4; end; destructor tProtokollant.destroy; var i: longint; begin while length(kinder)>0 do kinder[length(kinder)-1].free; if assigned(elter) then begin flush(sDat^.datei); i:=0; while (iself) do inc(i); if i>=length(elter.kinder) then schreibe('destroy fehlgeschlagen, ich kann mich nicht sehen.'); inc(i); while i