Subversion Repositories Kolibri OS

Rev

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, Libdl;
  11.  
  12.  
  13. CONST
  14.  
  15.     MAX_LEN = 10240;
  16.  
  17.  
  18. VAR
  19.  
  20.     Done*: BOOLEAN;
  21.     s: ARRAY MAX_LEN + 4 OF CHAR;
  22.  
  23.     sscanf: PROCEDURE [linux] (buf: INTEGER; fmt: INTEGER; adr: INTEGER): INTEGER;
  24.     gets:   PROCEDURE [linux] (buf: INTEGER);
  25.  
  26.  
  27. PROCEDURE String* (VAR str: ARRAY OF CHAR);
  28. BEGIN
  29.     gets(SYSTEM.ADR(s[0]));
  30.     COPY(s, str);
  31.     str[LEN(str) - 1] := 0X;
  32.     Done := TRUE
  33. END String;
  34.  
  35.  
  36. PROCEDURE Int* (VAR x: INTEGER);
  37. BEGIN
  38.     String(s);
  39.     Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%d"), SYSTEM.ADR(x)) = 1
  40. END Int;
  41.  
  42.  
  43. PROCEDURE Real* (VAR x: REAL);
  44. BEGIN
  45.     String(s);
  46.     Done := sscanf(SYSTEM.ADR(s[0]), SYSTEM.SADR("%lf"), SYSTEM.ADR(x)) = 1
  47. END Real;
  48.  
  49.  
  50. PROCEDURE Char* (VAR x: CHAR);
  51. BEGIN
  52.     String(s);
  53.     x := s[0]
  54. END Char;
  55.  
  56.  
  57. PROCEDURE Ln*;
  58. BEGIN
  59.     String(s)
  60. END Ln;
  61.  
  62.  
  63. PROCEDURE Open*;
  64. BEGIN
  65.     Done := TRUE
  66. END Open;
  67.  
  68.  
  69. PROCEDURE init;
  70. VAR
  71.     libc: INTEGER;
  72.  
  73. BEGIN
  74.     libc := Libdl.open("libc.so.6", Libdl.LAZY);
  75.     ASSERT(libc # 0);
  76.     SYSTEM.PUT(SYSTEM.ADR(sscanf), Libdl.sym(libc, "sscanf"));
  77.     ASSERT(sscanf # NIL);
  78.     SYSTEM.PUT(SYSTEM.ADR(gets), Libdl.sym(libc, "gets"));
  79.     ASSERT(gets # NIL);
  80. END init;
  81.  
  82.  
  83. BEGIN
  84.     init
  85. END In.