Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. (*
  2.     BSD 2-Clause License
  3.  
  4.     Copyright (c) 2019-2020, Anton Krotov
  5.     All rights reserved.
  6. *)
  7.  
  8. MODULE Console;
  9.  
  10. IMPORT SYSTEM, WINAPI, In, Out;
  11.  
  12.  
  13. CONST
  14.  
  15.     Black* = 0;     Blue* = 1;          Green* = 2;       Cyan* = 3;
  16.     Red* = 4;       Magenta* = 5;       Brown* = 6;       LightGray* = 7;
  17.     DarkGray* = 8;  LightBlue* = 9;     LightGreen* = 10; LightCyan* = 11;
  18.     LightRed* = 12; LightMagenta* = 13; Yellow* = 14;     White* = 15;
  19.  
  20.  
  21. VAR
  22.  
  23.     hConsoleOutput: INTEGER;
  24.  
  25.  
  26. PROCEDURE SetCursor* (X, Y: INTEGER);
  27. BEGIN
  28.     WINAPI.SetConsoleCursorPosition(hConsoleOutput, X + Y * 65536)
  29. END SetCursor;
  30.  
  31.  
  32. PROCEDURE GetCursor* (VAR X, Y: INTEGER);
  33. VAR
  34.     ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
  35.  
  36. BEGIN
  37.     WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo);
  38.     X := ORD(ScrBufInfo.dwCursorPosition.X);
  39.     Y := ORD(ScrBufInfo.dwCursorPosition.Y)
  40. END GetCursor;
  41.  
  42.  
  43. PROCEDURE Cls*;
  44. VAR
  45.     fill: INTEGER;
  46.     ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
  47.  
  48. BEGIN
  49.     WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo);
  50.     fill := ORD(ScrBufInfo.dwSize.X) * ORD(ScrBufInfo.dwSize.Y);
  51.     WINAPI.FillConsoleOutputCharacterA(hConsoleOutput, 20H, fill, 0, SYSTEM.ADR(fill));
  52.     WINAPI.FillConsoleOutputAttribute(hConsoleOutput, ORD(ScrBufInfo.wAttributes), fill, 0, SYSTEM.ADR(fill));
  53.     SetCursor(0, 0)
  54. END Cls;
  55.  
  56.  
  57. PROCEDURE SetColor* (FColor, BColor: INTEGER);
  58. BEGIN
  59.     IF (FColor IN {0..15}) & (BColor IN {0..15}) THEN
  60.         WINAPI.SetConsoleTextAttribute(hConsoleOutput, LSL(BColor, 4) + FColor)
  61.     END
  62. END SetColor;
  63.  
  64.  
  65. PROCEDURE GetCursorX* (): INTEGER;
  66. VAR
  67.     ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
  68.  
  69. BEGIN
  70.     WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo)
  71.     RETURN ORD(ScrBufInfo.dwCursorPosition.X)
  72. END GetCursorX;
  73.  
  74.  
  75. PROCEDURE GetCursorY* (): INTEGER;
  76. VAR
  77.     ScrBufInfo: WINAPI.TConsoleScreenBufferInfo;
  78.  
  79. BEGIN
  80.     WINAPI.GetConsoleScreenBufferInfo(hConsoleOutput, ScrBufInfo)
  81.     RETURN ORD(ScrBufInfo.dwCursorPosition.Y)
  82. END GetCursorY;
  83.  
  84.  
  85. PROCEDURE open*;
  86. BEGIN
  87.     WINAPI.AllocConsole;
  88.     hConsoleOutput := WINAPI.GetStdHandle(-11);
  89.     In.Open;
  90.     Out.Open
  91. END open;
  92.  
  93.  
  94. PROCEDURE exit* (b: BOOLEAN);
  95. BEGIN
  96.     WINAPI.FreeConsole
  97. END exit;
  98.  
  99.  
  100. END Console.