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 In;
  9.  
  10. IMPORT SYSTEM;
  11.  
  12.  
  13. CONST
  14.  
  15.     MAX_LEN = 1024;
  16.  
  17.  
  18. VAR
  19.  
  20.     Done*: BOOLEAN;
  21.     hConsoleInput: INTEGER;
  22.     s: ARRAY MAX_LEN + 4 OF CHAR;
  23.  
  24.  
  25. PROCEDURE [windows, "msvcrt.dll",   ""] sscanf (buf: INTEGER; fmt: INTEGER; adr: INTEGER): INTEGER;
  26. PROCEDURE [windows, "kernel32.dll", ""] GetStdHandle (nStdHandle: INTEGER): INTEGER;
  27. PROCEDURE [windows, "kernel32.dll", ""] ReadConsoleA (hConsoleInput, lpBuffer, nNumberOfCharsToRead, lpNumberOfCharsRead, lpReserved: INTEGER);
  28.  
  29.  
  30. PROCEDURE String* (VAR str: ARRAY OF CHAR);
  31. VAR
  32.     count: INTEGER;
  33.  
  34. BEGIN
  35.     ReadConsoleA(hConsoleInput, SYSTEM.ADR(s[0]), MAX_LEN, SYSTEM.ADR(count), 0);
  36.     IF (s[count - 1] = 0AX) & (s[count - 2] = 0DX) THEN
  37.         DEC(count, 2)
  38.     END;
  39.     s[count] := 0X;
  40.     COPY(s, str);
  41.     str[LEN(str) - 1] := 0X;
  42.     Done := TRUE
  43. END String;
  44.  
  45.  
  46. PROCEDURE Int* (VAR x: INTEGER);
  47. BEGIN
  48.     String(s);
  49.     Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%lld"), SYSTEM.ADR(x)) = 1
  50. END Int;
  51.  
  52.  
  53. PROCEDURE Real* (VAR x: REAL);
  54. BEGIN
  55.     String(s);
  56.     Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%lf"), SYSTEM.ADR(x)) = 1
  57. END Real;
  58.  
  59.  
  60. PROCEDURE Char* (VAR x: CHAR);
  61. BEGIN
  62.     String(s);
  63.     x := s[0]
  64. END Char;
  65.  
  66.  
  67. PROCEDURE Ln*;
  68. BEGIN
  69.     String(s)
  70. END Ln;
  71.  
  72.  
  73. PROCEDURE Open*;
  74. BEGIN
  75.     hConsoleInput := GetStdHandle(-10);
  76.     Done := TRUE
  77. END Open;
  78.  
  79.  
  80. END In.