home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ASCII.HMA *)
- (* Verwaltung der ASCII-Tabelle im High Memory *)
- (* ------------------------------------------------------ *)
-
- VAR
- SavePage : ^Screen;
- AsciiTable : ^Window;
-
- PROCEDURE SaveScreen(CurrentPage : ScreenPtr);
- (* sichert den Bildschirminhalt bei "CurrentPage". *)
- BEGIN
- GlobalEnableA20;
- SavePage^ := CurrentPage^;
- END;
-
- PROCEDURE RestoreScreen(CurrentPage : ScreenPtr);
- (* restauriert den Bildschirminhalt bei "CurrentPage". *)
- BEGIN
- CurrentPage^ := SavePage^;
- GlobalDisableA20;
- END;
-
- PROCEDURE DisplayAsciiTable(CurrentPage : ScreenPtr);
- (* bringt die Ascii-Tabelle auf den Bildschirm. *)
- VAR
- Row : BYTE;
- BEGIN
- FOR Row:=1 TO RowSize DO BEGIN
- Move(AsciiTable^[Row,1], CurrentPage^[YOfs+Row-1,XOfs],
- ColSize*2);
- END;
- END;
-
- PROCEDURE AllocateBuffers;
- (* Anforderung und Vorbereitung der benötigten Puffer. *)
- BEGIN
- IF NOT XMS.Installed THEN BEGIN
- FatalError('HIMEM.SYS nicht installiert!');
- END;
- IF NOT XMS.RequestHMA($FFFF) THEN BEGIN
- FatalError('HMA nicht vorhanden oder schon belegt!');
- END;
- GlobalEnableA20;
- SavePage := Ptr($FFFF, $10);
- AsciiTable := Ptr($FFFF, $10+SizeOf(Screen));
- END;
-
- PROCEDURE DeallocateBuffers;
- (* benötigte Puffer bei Programmende wieder freigeben. *)
- BEGIN
- XMS.ReleaseHMA;
- END;
-
- PROCEDURE SetTable(Col, Row, Attr : BYTE; Ch : CHAR);
- (* belegt die Tabellenposition (Col,Row) mit dem Zei-
- chen "Ch" und dem Videoattribut "Attr". *)
- BEGIN
- AsciiTable^[Row,Col] := Word(Attr)*256 + Ord(Ch)
- END;
-
- PROCEDURE PrepareExit;
- (* Maßnahmen für das Installationsende treffen. *)
- BEGIN
- GlobalDisableA20;
- END;
- (* ------------------------------------------------------ *)
- (* Ende von ASCII.HMA *)