MODULE LaplaceLow;

FROM SYSTEM IMPORT BYTE,ADR;
IMPORT FileSelector,AESEvents,LineA,AESForms,GEMDOS,InOut;

VAR

        K,L,Size                   :   LONGCARD;
        Infile,Outfile             :   ARRAY [0..80] OF CHAR;
        Img,Img2                   :   ARRAY [0..319],[0..199] OF CHAR;
        FileOk,Werr,Rerr,Answer    :   BOOLEAN;
        Button1,Button2,Handle     :   INTEGER;
        Result,HoldHandle,X        :   INTEGER;
        Count,A                    :   INTEGER;
        Buf                        :   CHAR;
        Hold1,Hold2,Hold3,J        :   INTEGER;
        Hold4,Hold5,Hold6,I        :   INTEGER;

PROCEDURE Cls;

        
BEGIN
        LineA.DoHideMouse;
        InOut.Write(CHR(27));
        InOut.Write("E");
        LineA.DoShowMouse;
END Cls;

PROCEDURE Laplace;

BEGIN;
        FOR I:= 1 TO 198 DO;
            FOR J:=1 TO 318 DO;
                Hold1 := ORD(Img[J,I]);
                Hold2 := ORD(Img[J+1,I]);
                Hold3 := ORD(Img[J-1,I]);
                Hold4 := ORD(Img[J,I+1]);
                Hold5 := ORD(Img[J,I-1]);
                Hold6 := (5 * Hold1)-(Hold2+Hold3+Hold4+Hold5);
                IF Hold6 > 255 THEN Hold6:=255; END;
                IF Hold6<0 THEN Hold6:=0; END;
                Img2[J,I] := CHR(Hold6);
            END; (* End J *)
        END; (* End I *)
END Laplace;

(* main *)

BEGIN
  Cls;
  Button1 := AESForms.FormAlert(0,"[1][  |IMG raw data Laplace|     Utility   |][Laplace|Cancel]");
  WHILE Button1<>2 DO
        Cls;
        InOut.WriteString("Enter Input File ");
        FileOk := FileSelector.GetFile(Infile,".RWL");
        Cls;
   IF FileOk THEN
        GEMDOS.SFirst(Infile,0,Result);
        IF Result<0 THEN
           FileOk := FALSE;
           Result := AESForms.FormAlert(1,"[3][  |File Not Found][Ok]");
        END;
        InOut.WriteString("Enter Output File");
        FileOk := FileSelector.GetFile(Outfile,".RWL");
        Cls;
      IF FileOk THEN
        InOut.WriteString("Reading ");
        InOut.WriteString(Infile);
        InOut.WriteLn;
        InOut.WriteLn;
        GEMDOS.Open(Infile,0,Handle);
        HoldHandle:=Handle;
        Size := 1;
        FOR I:=0 TO 199 DO;
            FOR J := 0 TO 319 DO;
                GEMDOS.Read(Handle,Size,ADR(Buf));
                Img[J,I] := Buf;
            END; (* End J *)
        END; (* End I *)
        Answer := GEMDOS.Close(HoldHandle);
        InOut.WriteLn;
        InOut.WriteString(" Laplace in Progress  ");
        Laplace;
        InOut.WriteLn;
        InOut.WriteString(" Laplace Complete ");
        InOut.WriteLn;
        InOut.WriteLn;
        InOut.WriteString("Writing File ");
        InOut.WriteString(Outfile);
        InOut.WriteLn;
        InOut.WriteLn;
        GEMDOS.Create(Outfile,0,Handle);
        HoldHandle := Handle;
        FOR I := 0 TO 199 DO;
            FOR J:=0 TO 319 DO;
                Buf := Img2[J,I];
                GEMDOS.Write(Handle,Size,ADR(Buf));
            END; (* End J *)
        END; (* End I *)
        Answer:= GEMDOS.Close(HoldHandle);
       END;(* if fileok 2 *)
     END;  (* end if fileOk then sequence *)
        Cls;
        Button1 := AESForms.FormAlert(0,"[1][IMG raw data Laplace|     Utility|][Laplace|Cancel]");
                    
  END;(* end while do *)
END LaplaceLow. (* end main *)