Subversion Repositories Kolibri OS

Rev

Rev 7983 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7983 leency 1
(*
8097 maxcodehac 2
    BSD 2-Clause License
7983 leency 3
 
8097 maxcodehac 4
    Copyright (c) 2020, Anton Krotov
5
    All rights reserved.
7983 leency 6
*)
7
 
8
MODULE In;
9
 
8097 maxcodehac 10
IMPORT SYSTEM;
7983 leency 11
 
12
 
8097 maxcodehac 13
CONST
7983 leency 14
 
8097 maxcodehac 15
    MAX_LEN = 1024;
16
 
17
 
7983 leency 18
VAR
19
 
8097 maxcodehac 20
    Done*: BOOLEAN;
21
    hConsoleInput: INTEGER;
22
    s: ARRAY MAX_LEN + 4 OF CHAR;
7983 leency 23
 
24
 
8097 maxcodehac 25
PROCEDURE [ccall,   "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);
7983 leency 28
 
29
 
8097 maxcodehac 30
PROCEDURE String* (VAR str: ARRAY OF CHAR);
31
VAR
32
    count: INTEGER;
7983 leency 33
 
34
BEGIN
8097 maxcodehac 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)
7983 leency 38
    END;
8097 maxcodehac 39
    s[count] := 0X;
40
    COPY(s, str);
41
    str[LEN(str) - 1] := 0X;
42
    Done := TRUE
43
END String;
7983 leency 44
 
45
 
8097 maxcodehac 46
PROCEDURE Int* (VAR x: INTEGER);
7983 leency 47
BEGIN
8097 maxcodehac 48
    String(s);
49
    Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%d"), SYSTEM.ADR(x)) = 1
50
END Int;
7983 leency 51
 
8097 maxcodehac 52
 
53
PROCEDURE Real* (VAR x: REAL);
7983 leency 54
BEGIN
8097 maxcodehac 55
    String(s);
56
    Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%lf"), SYSTEM.ADR(x)) = 1
57
END Real;
7983 leency 58
 
8097 maxcodehac 59
 
60
PROCEDURE Char* (VAR x: CHAR);
7983 leency 61
BEGIN
8097 maxcodehac 62
    String(s);
63
    x := s[0]
7983 leency 64
END Char;
65
 
8097 maxcodehac 66
 
7983 leency 67
PROCEDURE Ln*;
68
BEGIN
8097 maxcodehac 69
    String(s)
7983 leency 70
END Ln;
71
 
72
 
73
PROCEDURE Open*;
74
BEGIN
8097 maxcodehac 75
    hConsoleInput := GetStdHandle(-10);
76
    Done := TRUE
7983 leency 77
END Open;
78
 
8097 maxcodehac 79
 
7983 leency 80
END In.