home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* GRAPHM.PAS *)
- (* Erweiterung der Standardunit Graph *)
- (* (C) 1989 Markus Meyer & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT GraphM;
-
- INTERFACE
-
- USES Graph, Crt;
-
- TYPE
- strng40 = STRING[40];
-
- PROCEDURE save_screen (Name : strng40; Nummer : INTEGER);
- PROCEDURE load_screen (Name : strng40; Nummer : INTEGER);
- PROCEDURE copy_screen (Nummer : INTEGER);
- PROCEDURE clear_screen (Nummer : INTEGER);
- PROCEDURE invert_screen(Nummer : INTEGER);
- PROCEDURE swap_screen (Zeit : INTEGER);
-
- IMPLEMENTATION
-
- CONST
- GABase = $B000; { Startadresse (Hercules) }
- Size = 32765; { Länge des Bildschirms }
- SizeP = 32768; { Zweiter Bildschirm = Erster Bildschirm }
-
- VAR
- PufferA : ARRAY [0..Size] OF BYTE ABSOLUTE GABase : 0000;
- PufferB : ARRAY [0..Size] OF BYTE ABSOLUTE GABase : SizeP;
-
- FUNCTION Exist(DateiN : strng40) : BOOLEAN;
- VAR
- Datei : FILE;
- BEGIN
- Assign(Datei, DateiN);
- {$I-}
- Reset(Datei);
- {$I+}
- Exist := (IOResult = 0);
- END;
-
- PROCEDURE PError(Nummer : BYTE);
- BEGIN
- CloseGraph;
- ClrScr;
- GotoXY(5,5);
- Write ( ' -> Graph-Plus Error ' );
- GotoXY(9,7);
- CASE Nummer OF
- 1 : Write ('Disk full');
- 2 : Write ('Invlid file name');
- 3 : Write ('Wrong file Size');
- 4 : Write ('Illegal Page number');
- END; {case}
- Write(' : ERROR');
- WriteLn;
- Halt;
- END;
-
- PROCEDURE Save_Screen(Name : strng40; Nummer : INTEGER);
- VAR
- D_Read : WORD;
- D_Write : WORD;
- Datei : FILE;
- BEGIN
- IF (Nummer <> 0) AND (Nummer <> 1) THEN PError(4);
- Assign(Datei, Name);
- Rewrite(Datei, 1);
- D_Read := Size;
- IF Nummer = 1 THEN
- BlockWrite(Datei, PufferB[0], D_Read, D_Write)
- ELSE
- BlockWrite(Datei, PufferA[0], D_Read, D_Write);
- Close(Datei);
- IF D_Read <> D_Write THEN PError(1);
- END;
-
- PROCEDURE Load_Screen(Name : strng40; Nummer : INTEGER);
- VAR
- D_Read : WORD;
- D_Write : WORD;
- Datei : FILE;
- BEGIN
- IF (Nummer <> 0) AND (Nummer <> 1) THEN PError(4);
- Assign(Datei, Name);
- IF Exist (Name) THEN BEGIN
- Reset(Datei,1);
- D_Write := Size;
- IF Nummer = 1 THEN
- BlockRead(Datei, PufferB[0], D_Write, D_Read)
- ELSE
- BlockRead(Datei, PufferA[0], D_Write, D_Read);
- Close(Datei);
- IF D_Read <> D_Write THEN PError(3);
- END ELSE PError(2);
- END;
-
- PROCEDURE Copy_Screen(Nummer : INTEGER);
- BEGIN
- IF (Nummer <> 0) AND (Nummer <> 1) THEN PError(4);
- CASE Nummer OF
- 0 : Move (PufferA[0], PufferB[0], Size);
- 1 : Move (PufferB[0], PufferA[0], Size);
- END;
- END;
-
- PROCEDURE Clear_Screen(Nummer : INTEGER);
- BEGIN
- IF (Nummer <> 0) AND (Nummer <> 1) THEN PError(4);
- CASE Nummer OF
- 0 : FillChar(PufferA[0], Size, #0);
- 1 : FillChar(PufferB[0], Size, #0);
- END;
- END;
-
- PROCEDURE Invert_Screen(Nummer : INTEGER);
- VAR
- count : WORD;
- BEGIN
- IF (Nummer <> 0) AND (Nummer <> 1) THEN PError(4);
- CASE Nummer OF
- 0 : BEGIN
- FOR count := 0 TO Size DO
- PufferA[count] := NOT (PufferA[count]);
- END;
- 1 : BEGIN
- FOR count := 0 TO Size DO
- PufferB[count] := NOT (PufferB[count]);
- END;
- END;
- END;
-
- PROCEDURE Swap_Screen(Zeit : INTEGER);
- CONST
- buffer = 6000;
- VAR
- count : WORD;
- puffer : BYTE;
- wait : BYTE;
- len : INTEGER;
- ende : BOOLEAN;
- PufferM : ARRAY[0..buffer] OF BYTE;
- BEGIN
- IF (Zeit > 10) OR (Zeit < 0) THEN Zeit := 10;
- IF Zeit <> 0 THEN BEGIN
- FOR count := 0 TO Size DO BEGIN
- puffer := PufferA[count];
- PufferA[count] := PufferB[count];
- PufferB[count] := puffer;
- FOR wait := 0 TO Zeit DO BEGIN END;
- END;
- END ELSE BEGIN
- count := 0;
- ende := FALSE;
- REPEAT
- IF count < Size-buffer THEN BEGIN
- Move(PufferA[count], PufferM[0], buffer);
- Move(PufferB[count], PufferA[count], buffer);
- Move(PufferM[0], PufferB[count], buffer);
- END ELSE BEGIN
- Move(PufferA[count], PufferM[0], buffer);
- Move(PufferB[count], PufferA[count], buffer);
- Move(PufferM[0], PufferB[count], Size-count);
- ende := TRUE;
- END;
- count := count+buffer
- UNTIL ende;
- END;
- END;
-
- BEGIN
- END.
- (* ------------------------------------------------------ *)
- (* Ende von GRAPHM.PAS *)