PROGRAM PeepTrans;

{
    Konvertiert Peep-Fehlerdateien für MegaEd
    von Wurzelsepp, 100% PD
}

{$I "include:exec/memory.i" }
{$I "include:libraries/dosextens.i" }
{$I "include:utils/Stringlib.i" }

CONST
    file1   :   String  =   "T:MegaEdMake-ErrFile";
    file2   :   String  =   "T:MegaEdMake-Errors";
    errorinfo :   String  =   "E1/1";
    ret     :   Char    =   CHR(10);

    ver_text : String = "\0$VER: MegaEd-TransPeep V1.0 (16.03.95)";

VAR
    fileh       :   FileHandle;
    meldung     :   BOOLEAN;
    las,
    len,
    dummy       :   INTEGER;
    old         :   Address;
    off         :   ^Char;

PROCEDURE TickleOn;

BEGIN
 Inc(las);
 off:=Address(Integer(off)+1);
END;

BEGIN

 IF DeleteFile(file2) THEN ;

 meldung:=FALSE;
 fileh:=DOSOpen (file1,MODE_OLDFILE);
 IF fileh<>NIL THEN
 BEGIN
  dummy:=Seek(fileh,0,OFFSET_END);
  len:=Seek(fileh,0,OFFSET_BEGINNING);
  if len>0 THEN
  BEGIN
   old:=AllocMem (len,MEMF_PUBLIC+MEMF_CLEAR);
   IF old=NIL THEN
   BEGIN
    DOSClose (fileh);
    Exit;
   END;
   IF DOSRead(fileh,old,len)<>len THEN
   BEGIN
    FreeMem(old,len);
    DOSClose(fileh);
    Exit;
   END;
  END;
  DOSClose(fileh);
  IF (len=0) THEN Exit;

  fileh:=DOSOpen (file2,MODE_NEWFILE);
  IF fileh<>NIL THEN
  BEGIN

   las:=0;
   off:=old;
   WHILE las<len DO
   BEGIN

    WHILE (off^<>CHR(10)) AND (las<len) DO
     TickleOn;
    IF las<len THEN
    BEGIN
     TickleOn; {Return überlesen}
     IF las<len THEN
     BEGIN
      meldung:=TRUE;

      WHILE (off^<>'"') AND (las<len) DO
       TickleOn;
      IF las<len THEN
      BEGIN
       TickleOn;
       { Error-Kennung schreiben. Zeilen/Spalten-Angabe ist nicht möglich }
       dummy:=DOSWrite (fileh,errorinfo,StrLen(errorinfo));
       dummy:=DOSWrite (fileh,Adr(ret),1);
       WHILE (off^<>'"') AND (las<len) DO
       BEGIN
        dummy:=DOSWrite (fileh,off,1);
        TickleOn;
       END;
       IF las<len THEN
       BEGIN
        TickleOn;
        TickleOn; {Gänsefüßchen und Return überlesen }
       END;
      END;
     END;
    END;
   END;
   DOSClose (fileh);
  END;

  FreeMem(old,len);

 END;

 IF meldung=FALSE THEN
  IF DeleteFile(file2) THEN ;

END.

