home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 14 / grafik / exgraph.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-11-28  |  2.9 KB  |  105 lines

  1. (* ------------------------------------------------------ *)
  2. (*                    EXGRAPH.PAS                         *)
  3. (*   Diese Unit unterstützt die GRAPH.TPU und erlaubt     *)
  4. (*   es, Image-Grafiken abzuspeichern und zuladen.        *)
  5. (*       (c) 1989  Markus Kucborski & TOOLBOX             *)
  6. (* ------------------------------------------------------ *)
  7. UNIT ExGraph;
  8.  
  9. INTERFACE
  10.  
  11. USES Graph;
  12.  
  13. TYPE  ImageRec = RECORD
  14.                    Size : INTEGER;
  15.                    Img  : POINTER;
  16.                  END;
  17.  
  18. CONST WrongImgSize = 256;
  19.  
  20. VAR   ImgDiskResult : INTEGER;
  21.  
  22.  
  23. PROCEDURE CatchImg(x1,y1,x2,y2 : INTEGER;
  24.                    VAR ImgVar  : ImageRec);
  25.   (*  kopiert einen Block der Koordinaten in den Pointer   *)
  26.   (*  und belegt den Speicherplatz auf dem Heap            *)
  27.  
  28. PROCEDURE FreeImg(VAR ImgVar : ImageRec);
  29.   (* Gibt den Speicherplatz des Pointers auf dem Heap frei *)
  30.  
  31. PROCEDURE SaveImg(filename : STRING; ImgVar : ImageRec);
  32.   (*              Speichert ein Image ab                   *)
  33.  
  34. PROCEDURE LoadImg(filename : STRING; VAR ImgVar: ImageRec);
  35.   (*  Lädt ein Image und belegt den Speicherplatz dafür    *)
  36.  
  37.  
  38. IMPLEMENTATION
  39.  
  40. PROCEDURE CatchImg(x1,y1,x2,y2 : INTEGER;
  41.                    VAR ImgVar  : ImageRec);
  42. BEGIN
  43.   ImgVar.Size := ImageSize(x1,y1,x2,y2);
  44.   GetMem(ImgVar.Img, ImgVar.Size);
  45.   GetImage(x1,y1,x2,y2, ImgVar.Img^);
  46. END;
  47.  
  48. PROCEDURE FreeImg(VAR ImgVar : ImageRec);
  49. BEGIN
  50.   IF ImgVar.Img <> nil THEN BEGIN    (* wenn der Wert nil *)
  51.                                      (* freigegeben wird, *)
  52.                                      (* kommt es zu       *)
  53.                             (* 'invalid pointer operation'*)
  54.     FreeMem(ImgVar.Img,ImgVar.Size);
  55.     ImgVar.Size:=0;
  56.     ImgVar.Img :=nil;
  57.   END;
  58. END;
  59.  
  60. PROCEDURE SaveImg(filename : STRING; ImgVar : ImageRec);
  61. VAR f : FILE;
  62. BEGIN
  63.   Assign(f, filename);
  64. {$I-}
  65.   ReWrite(f, ImgVar.Size);
  66. {$I+}
  67.   ImgDiskResult := IOResult;
  68.   BlockWrite(f, ImgVar.Img^, 1);
  69.   Close(f);
  70. END;
  71.  
  72. PROCEDURE LoadImg(filename : STRING; VAR ImgVar : ImageRec);
  73. VAR  f          : FILE;
  74.      t          : TEXT;
  75.      low,high   : CHAR;
  76.      x2,y2,Rest : INTEGER;
  77. BEGIN
  78.   Assign(t, filename);    (*  die ersten 4 Bytes geben    *)
  79. {$I-}                     (*  die Größe des Image an      *)
  80.   Reset(t);
  81. {$I+}
  82.   ImgDiskResult := IOResult;
  83.   Read(t, low, high);
  84.   x2 := Ord(low) + Ord(high) * 256 + 1;
  85.   Read(t, low, high);
  86.   y2 := Ord(low) + Ord(high) * 256 + 1;
  87.   Close(t);
  88.   ImgVar.Size := ImageSize(1,1,x2,y2);
  89.   GetMem(ImgVar.Img, ImgVar.Size);
  90.   Assign(f, filename);
  91.   ImgDiskResult := IOResult;
  92. {$I-}
  93.   Reset(f, ImgVar.Size);
  94. {$I+}
  95.   BlockRead(f, ImgVar.Img^, 1, Rest);
  96.   IF Rest <> 0 THEN ImgDiskResult := 256;
  97.   Close(f);
  98. END;
  99.  
  100. BEGIN
  101.   ImgDiskResult := 0
  102. END.
  103.  
  104. (* ------------------------------------------------------ *)
  105. (*                Ende von EXGRAPH.PAS                    *)