| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- (*
- BSD 2-Clause License
- Copyright (c) 2020-2021, Anton Krotov
- All rights reserved.
- *)
- MODULE In;
- IMPORT SYSTEM, Libdl, LINAPI, API;
- CONST
- MAX_LEN = 10240;
- bit_depth = API.BIT_DEPTH;
- VAR
- Done*: BOOLEAN;
- s: ARRAY MAX_LEN OF CHAR;
- fmt: ARRAY 8 OF CHAR;
- sscanf: PROCEDURE [linux] (buf: INTEGER; fmt: INTEGER; adr: INTEGER): INTEGER;
- fgets: PROCEDURE [linux-] (string: INTEGER; num: INTEGER; filestream: INTEGER): INTEGER;
- PROCEDURE String* (VAR str: ARRAY OF CHAR);
- BEGIN
- fgets(SYSTEM.ADR(s[0]), LEN(s), LINAPI.stdin);
- COPY(s, str);
- str[LEN(str) - 1] := 0X;
- Done := TRUE
- END String;
- PROCEDURE Int* (VAR x: INTEGER);
- BEGIN
- String(s);
- Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.ADR(fmt[0]), SYSTEM.ADR(x)) = 1
- END Int;
- PROCEDURE Real* (VAR x: REAL);
- BEGIN
- String(s);
- Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%lf"), SYSTEM.ADR(x)) = 1
- END Real;
- PROCEDURE Char* (VAR x: CHAR);
- BEGIN
- String(s);
- x := s[0]
- END Char;
- PROCEDURE Ln*;
- BEGIN
- String(s)
- END Ln;
- PROCEDURE Open*;
- BEGIN
- Done := TRUE
- END Open;
- BEGIN
- IF bit_depth = 32 THEN
- fmt := "%d"
- ELSE
- fmt := "%lld"
- END;
- SYSTEM.PUT(SYSTEM.ADR(sscanf), Libdl.sym(API.libc, "sscanf"));
- ASSERT(sscanf # NIL);
- SYSTEM.PUT(SYSTEM.ADR(fgets), Libdl.sym(API.libc, "fgets"));
- ASSERT(fgets # NIL);
- END In.
|