Console.ob07 2.2 KB

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