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