home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* EXGRAPH.PAS *)
- (* Diese Unit unterstützt die GRAPH.TPU und erlaubt *)
- (* es, Image-Grafiken abzuspeichern und zuladen. *)
- (* (c) 1989 Markus Kucborski & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT ExGraph;
-
- INTERFACE
-
- USES Graph;
-
- TYPE ImageRec = RECORD
- Size : INTEGER;
- Img : POINTER;
- END;
-
- CONST WrongImgSize = 256;
-
- VAR ImgDiskResult : INTEGER;
-
-
- PROCEDURE CatchImg(x1,y1,x2,y2 : INTEGER;
- VAR ImgVar : ImageRec);
- (* kopiert einen Block der Koordinaten in den Pointer *)
- (* und belegt den Speicherplatz auf dem Heap *)
-
- PROCEDURE FreeImg(VAR ImgVar : ImageRec);
- (* Gibt den Speicherplatz des Pointers auf dem Heap frei *)
-
- PROCEDURE SaveImg(filename : STRING; ImgVar : ImageRec);
- (* Speichert ein Image ab *)
-
- PROCEDURE LoadImg(filename : STRING; VAR ImgVar: ImageRec);
- (* Lädt ein Image und belegt den Speicherplatz dafür *)
-
-
- IMPLEMENTATION
-
- PROCEDURE CatchImg(x1,y1,x2,y2 : INTEGER;
- VAR ImgVar : ImageRec);
- BEGIN
- ImgVar.Size := ImageSize(x1,y1,x2,y2);
- GetMem(ImgVar.Img, ImgVar.Size);
- GetImage(x1,y1,x2,y2, ImgVar.Img^);
- END;
-
- PROCEDURE FreeImg(VAR ImgVar : ImageRec);
- BEGIN
- IF ImgVar.Img <> nil THEN BEGIN (* wenn der Wert nil *)
- (* freigegeben wird, *)
- (* kommt es zu *)
- (* 'invalid pointer operation'*)
- FreeMem(ImgVar.Img,ImgVar.Size);
- ImgVar.Size:=0;
- ImgVar.Img :=nil;
- END;
- END;
-
- PROCEDURE SaveImg(filename : STRING; ImgVar : ImageRec);
- VAR f : FILE;
- BEGIN
- Assign(f, filename);
- {$I-}
- ReWrite(f, ImgVar.Size);
- {$I+}
- ImgDiskResult := IOResult;
- BlockWrite(f, ImgVar.Img^, 1);
- Close(f);
- END;
-
- PROCEDURE LoadImg(filename : STRING; VAR ImgVar : ImageRec);
- VAR f : FILE;
- t : TEXT;
- low,high : CHAR;
- x2,y2,Rest : INTEGER;
- BEGIN
- Assign(t, filename); (* die ersten 4 Bytes geben *)
- {$I-} (* die Größe des Image an *)
- Reset(t);
- {$I+}
- ImgDiskResult := IOResult;
- Read(t, low, high);
- x2 := Ord(low) + Ord(high) * 256 + 1;
- Read(t, low, high);
- y2 := Ord(low) + Ord(high) * 256 + 1;
- Close(t);
- ImgVar.Size := ImageSize(1,1,x2,y2);
- GetMem(ImgVar.Img, ImgVar.Size);
- Assign(f, filename);
- ImgDiskResult := IOResult;
- {$I-}
- Reset(f, ImgVar.Size);
- {$I+}
- BlockRead(f, ImgVar.Img^, 1, Rest);
- IF Rest <> 0 THEN ImgDiskResult := 256;
- Close(f);
- END;
-
- BEGIN
- ImgDiskResult := 0
- END.
-
- (* ------------------------------------------------------ *)
- (* Ende von EXGRAPH.PAS *)