home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* FASTSCR.INC *)
- (* beschleunigter Bildschirmaufbau fuer Trubo-Pascal auf IBM-Kompatible *)
- (*-------------------------------------------------------------------------*)
-
- CONST
- ScreenBaseAdress = $B800; (* Segmentadresse des Bildschirmspeichers *)
- ScrSize = 2048; (* muss wg. BLOCKWRITE u. -READ ein Viel- *)
- (* faches von 128 sein !!!!!!!!!!!!!!!!!! *)
-
- TYPE
- strng = STRING [255];
-
- VAR
- ScrBuf : ARRAY [1..ScrSize,1..2] OF CHAR; (* Fuer Bild-Blitzanimationen *)
- Screen : ARRAY [1..ScrSize,1..2] OF CHAR ABSOLUTE ScreenBaseAdress:$0000;
- ScrFil : FILE ;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE Stop;
-
- VAR Break: CHAR;
-
- BEGIN
- Read(Kbd, Break);
- IF Break = #19 THEN Read(Kbd, Break);
- IF Break = #03 THEN Halt;
- END ;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE ClearScreen;
-
- BEGIN
- ClrScr; Move(Screen, ScrBuf, 4000);
- END;
-
- (*-------------------------------------------------------------------------*)
-
- FUNCTION ReadScreen (PosX, PosY, Len: INTEGER): strng;
-
- VAR count: INTEGER;
- temp : strng;
-
- BEGIN
- PosX := PosX + Pred(PosY) * 80 - 1;
- temp := ' ';
- FOR count := 1 TO Len DO
- temp := temp + Screen[PosX+count,1];
- ReadScreen := temp;
- END ;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE WriteScrBuf (PosX, PosY: INTEGER; Puffer: strng);
-
- VAR count: INTEGER ;
- Len : BYTE;
-
- BEGIN
- PosX := PosX + Pred(PosY) * 80 - 1;
- Move(Puffer[0], Len, 1);
- FOR count := 1 TO Len DO
- ScrBuf[PosX+count,1] := Puffer[count];
- IF KeyPressed THEN Stop;
- END;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE WriteScr (PosX, PosY: INTEGER; Puffer: strng);
-
- VAR count: INTEGER;
- Len : BYTE;
-
- BEGIN
- PosX := PosX + Pred(PosY) * 80 - 1;
- Move(Puffer[0], Len, 1);
- FOR count := 1 TO Len DO
- Screen[PosX+count,1] := Puffer[count];
- IF KeyPressed THEN Stop;
- END;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE WriteScrCol (PosX, PosY, Farbe: INTEGER; Puffer: strng);
-
- VAR count: INTEGER;
- Color: CHAR;
- Len : BYTE;
-
- BEGIN
- Color := Chr(Farbe);
- PosX := PosX + Pred(PosY) * 80 - 1;
- Move(Puffer[0], Len, 1);
- FOR count := 1 TO Len DO
- BEGIN
- Screen[PosX+count,1] := Puffer[count];
- Screen[PosX+count,2] := Color;
- END;
- IF KeyPressed THEN Stop;
- END;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE ColorScreen (PosX, PosY, Farbe, Len: INTEGER);
-
- VAR count: INTEGER;
- Color: CHAR;
-
- BEGIN
- Color := Chr(Farbe);
- PosX := PosX + Pred(PosY) * 80 - 1;
- FOR count := 1 TO Len DO
- Screen[PosX+count,2] := Color;
- IF KeyPressed THEN Stop;
- END;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE ShowScreen;
-
- BEGIN
- Move(ScrBuf, Screen, 4000);
- IF KeyPressed THEN Stop;
- END;
-
- (*-------------------------------------------------------------------------*)
-
- PROCEDURE BufScreen;
-
- BEGIN
- Move(Screen, ScrBuf, 4000);
- END;
-
- (*-------------------------------------------------------------------------*)
-
- FUNCTION SaveScreen (Name: strng): BOOLEAN;
-
- VAR Anzahl: INTEGER;
-
- BEGIN
- Anzahl := 0;
- Assign(ScrFil, Name);
- ReWrite(ScrFil);
- BlockWrite(ScrFil, Screen, 32, Anzahl);
- Close(ScrFil);
- SaveScreen := (Anzahl = 32);
- END;
-
- (*-------------------------------------------------------------------------*)
-
- FUNCTION LoadScreen (Name: strng): BOOLEAN;
-
- VAR Anzahl: INTEGER;
-
- BEGIN
- Anzahl := 0;
- Assign(ScrFil, Name);
- (*$I-*)
- ReSet(ScrFil);
- (*$I+*)
- IF IOResult = 0 THEN
- BlockRead(ScrFil, Screen, 32, Anzahl);
- Close(ScrFil);
- LoadScreen := (Anzahl = 32);
- END;
-
- (*-------------------------------------------------------------------------*)
-
- FUNCTION SaveScrBuf (Name: strng): BOOLEAN;
-
- VAR Anzahl: INTEGER;
-
- BEGIN
- Anzahl := 0;
- Assign(ScrFil, Name);
- ReWrite(ScrFil);
- BlockWrite(ScrFil, ScrBuf, 32, Anzahl);
- SaveScrBuf := (Anzahl = 32);
- END;
-
- (*-------------------------------------------------------------------------*)
-
- FUNCTION LoadScrBuf (Name: strng): BOOLEAN;
-
- VAR Anzahl: INTEGER;
-
- BEGIN
- Anzahl := 0;
- Assign(ScrFil, Name);
- (*$I-*)
- ReSet(ScrFil);
- (*$I+*)
- IF IOResult = 0 THEN
- BlockRead(ScrFil, ScrBuf, 32, Anzahl);
- Close(ScrFil);
- LoadScrBuf := (Anzahl = 32);
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Ende von FASTSCR.INC *)
-