home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ASCII.EMS *)
- (* Verwaltung der ASCII-Tabelle im Expanded Memory *)
- (* ------------------------------------------------------ *)
-
- VAR
- SavePage : ^Screen;
- AsciiTable : ^Window;
- EmsHandle : WORD; (* Handle für EMS-Speicherseite *)
-
- PROCEDURE SaveScreen(CurrentPage : ScreenPtr);
- (* sichert den Bildschirminhalt bei "CurrentPage". *)
- BEGIN
- EMS.SavePageMap(EmsHandle);
- EMS.MapMemory(EmsHandle, 0, 0);
- SavePage^ := CurrentPage^;
- END;
-
- PROCEDURE RestoreScreen(CurrentPage : ScreenPtr);
- (* restauriert den Bildschirminhalt bei "CurrentPage". *)
- BEGIN
- CurrentPage^ := SavePage^;
- EMS.RestorePageMap(EmsHandle);
- 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. *)
- VAR
- AsciiHandle : WORD;
- BEGIN
- IF NOT EMS.Installed THEN BEGIN
- FatalError('EMM.SYS nicht installiert!');
- END;
- AsciiHandle := SearchForHandle('ASCII'#0#0#0);
- IF EMS.Result = EMS.Ok THEN BEGIN
- FatalError('Ascii-Tabelle ist bereits geladen!');
- END;
- EmsHandle := EMS.AllocateMemory(1);
- IF EMS.Result <> EMS.Ok THEN BEGIN
- FatalError('Nicht genügend Expanded Memory frei!');
- END;
- EMS.SetHandleName(EmsHandle, 'ASCII'#0#0#0);
- EMS.SavePageMap(EmsHandle);
- SavePage := Ptr(PageFrameSegment, 0);
- AsciiTable := Ptr(PageFrameSegment, SizeOf(Screen));
- EMS.MapMemory(EmsHandle, 0, 0);
- END;
-
- PROCEDURE DeallocateBuffers;
- (* benötigte Puffer bei Programmende wieder freigeben. *)
- BEGIN
- EMS.DeallocateMemory(EmsHandle);
- 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
- RestorePageMap(EmsHandle);
- END;
- (* ------------------------------------------------------ *)
- (* Ende von ASCII.EMS *)