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) 2020, Anton Krotov
  5.     All rights reserved.
  6. *)
  7.  
  8. MODULE Out;
  9.  
  10. IMPORT SYSTEM;
  11.  
  12.  
  13. VAR
  14.  
  15.     hConsoleOutput: INTEGER;
  16.  
  17. PROCEDURE [windows, "msvcrt.dll", "printf"] printf1 (fmt: INTEGER; x: INTEGER);
  18. PROCEDURE [windows, "msvcrt.dll", "printf"] printf2 (fmt: INTEGER; width, x: INTEGER);
  19. PROCEDURE [windows, "msvcrt.dll", "printf"] printf3 (fmt: INTEGER; width, precision, x: INTEGER);
  20.  
  21. PROCEDURE [windows, "kernel32.dll", ""]
  22.     WriteConsoleW (hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved: INTEGER);
  23.  
  24. PROCEDURE [windows, "kernel32.dll", ""]
  25.     GetStdHandle (nStdHandle: INTEGER): INTEGER;
  26.  
  27.  
  28. PROCEDURE Char* (x: CHAR);
  29. BEGIN
  30.     printf1(SYSTEM.SADR("%c"), ORD(x))
  31. END Char;
  32.  
  33.  
  34. PROCEDURE StringW* (s: ARRAY OF WCHAR);
  35. BEGIN
  36.     WriteConsoleW(hConsoleOutput, SYSTEM.ADR(s[0]), LENGTH(s), 0, 0)
  37. END StringW;
  38.  
  39.  
  40. PROCEDURE String* (s: ARRAY OF CHAR);
  41. BEGIN
  42.     printf2(SYSTEM.SADR("%.*s"), LENGTH(s), SYSTEM.ADR(s[0]))
  43. END String;
  44.  
  45.  
  46. PROCEDURE Ln*;
  47. BEGIN
  48.     printf1(SYSTEM.SADR("%s"), SYSTEM.SADR(CHR(13) + CHR(10)))
  49. END Ln;
  50.  
  51.  
  52. PROCEDURE Int* (x, width: INTEGER);
  53. BEGIN
  54.     printf2(SYSTEM.SADR("%*lld"), width, x)
  55. END Int;
  56.  
  57.  
  58. PROCEDURE intval (x: REAL): INTEGER;
  59. VAR
  60.     i: INTEGER;
  61.  
  62. BEGIN
  63.     SYSTEM.GET(SYSTEM.ADR(x), i)
  64.     RETURN i
  65. END intval;
  66.  
  67.  
  68. PROCEDURE Real* (x: REAL; width: INTEGER);
  69. BEGIN
  70.     printf3(SYSTEM.SADR("%*.*E"), width, MAX(MIN(width - 8, 15), 1), intval(x))
  71. END Real;
  72.  
  73.  
  74. PROCEDURE FixReal* (x: REAL; width, precision: INTEGER);
  75. BEGIN
  76.     printf3(SYSTEM.SADR("%*.*f"), width, precision, intval(x))
  77. END FixReal;
  78.  
  79.  
  80. PROCEDURE Open*;
  81. BEGIN
  82.     hConsoleOutput := GetStdHandle(-11)
  83. END Open;
  84.  
  85.  
  86. END Out.