home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 17 / ascii.ems next >
Encoding:
Text File  |  1989-12-29  |  2.4 KB  |  80 lines

  1. (* ------------------------------------------------------ *)
  2. (*                       ASCII.EMS                        *)
  3. (*    Verwaltung der ASCII-Tabelle im Expanded Memory     *)
  4. (* ------------------------------------------------------ *)
  5.  
  6. VAR
  7.   SavePage : ^Screen;
  8.   AsciiTable : ^Window;
  9.   EmsHandle : WORD;       (* Handle für EMS-Speicherseite *)
  10.  
  11. PROCEDURE SaveScreen(CurrentPage : ScreenPtr);
  12.   (* sichert den Bildschirminhalt bei "CurrentPage".      *)
  13. BEGIN
  14.   EMS.SavePageMap(EmsHandle);
  15.   EMS.MapMemory(EmsHandle, 0, 0);
  16.   SavePage^ := CurrentPage^;
  17. END;
  18.  
  19. PROCEDURE RestoreScreen(CurrentPage : ScreenPtr);
  20.   (* restauriert den Bildschirminhalt bei "CurrentPage".  *)
  21. BEGIN
  22.   CurrentPage^ := SavePage^;
  23.   EMS.RestorePageMap(EmsHandle);
  24. END;
  25.  
  26. PROCEDURE DisplayAsciiTable(CurrentPage : ScreenPtr);
  27.   (* bringt die Ascii-Tabelle auf den Bildschirm.         *)
  28. VAR
  29.   Row : BYTE;
  30. BEGIN
  31.   FOR Row:=1 TO RowSize DO BEGIN
  32.     Move(AsciiTable^[Row,1], CurrentPage^[YOfs+Row-1,XOfs],
  33.          ColSize*2);
  34.   END;
  35. END;
  36.  
  37. PROCEDURE AllocateBuffers;
  38.   (* Anforderung und Vorbereitung der benötigten Puffer.  *)
  39. VAR
  40.   AsciiHandle : WORD;
  41. BEGIN
  42.   IF NOT EMS.Installed THEN BEGIN
  43.     FatalError('EMM.SYS nicht installiert!');
  44.   END;
  45.   AsciiHandle := SearchForHandle('ASCII'#0#0#0);
  46.   IF EMS.Result = EMS.Ok THEN BEGIN
  47.     FatalError('Ascii-Tabelle ist bereits geladen!');
  48.   END;
  49.   EmsHandle := EMS.AllocateMemory(1);
  50.   IF EMS.Result <> EMS.Ok THEN BEGIN
  51.     FatalError('Nicht genügend Expanded Memory frei!');
  52.   END;
  53.   EMS.SetHandleName(EmsHandle, 'ASCII'#0#0#0);
  54.   EMS.SavePageMap(EmsHandle);
  55.   SavePage := Ptr(PageFrameSegment, 0);
  56.   AsciiTable := Ptr(PageFrameSegment, SizeOf(Screen));
  57.   EMS.MapMemory(EmsHandle, 0, 0);
  58. END;
  59.  
  60. PROCEDURE DeallocateBuffers;
  61.   (* benötigte Puffer bei Programmende wieder freigeben.  *)
  62. BEGIN
  63.   EMS.DeallocateMemory(EmsHandle);
  64. END;
  65.  
  66. PROCEDURE SetTable(Col, Row, Attr : BYTE; Ch : CHAR);
  67.   (* belegt die Tabellenposition (Col,Row) mit dem Zei-
  68.      chen "Ch" und dem Videoattribut "Attr".              *)
  69. BEGIN
  70.   AsciiTable^[Row,Col] := Word(Attr)*256 + Ord(Ch)
  71. END;
  72.  
  73. PROCEDURE PrepareExit;
  74.   (* Maßnahmen für das Installationsende treffen.         *)
  75. BEGIN
  76.   RestorePageMap(EmsHandle);
  77. END;
  78. (* ------------------------------------------------------ *)
  79. (*                  Ende von ASCII.EMS                    *)
  80.