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 Args;
  9.  
  10. IMPORT SYSTEM, API;
  11.  
  12.  
  13. VAR
  14.  
  15.     argc*, envc*: INTEGER;
  16.  
  17.  
  18. PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
  19. VAR
  20.     i, len, ptr: INTEGER;
  21.     c: CHAR;
  22.  
  23. BEGIN
  24.     i := 0;
  25.     len := LEN(s) - 1;
  26.     IF (0 <= n) & (n <= argc + envc) & (n # argc) & (len > 0) THEN
  27.         SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr);
  28.         REPEAT
  29.             SYSTEM.GET(ptr, c);
  30.             s[i] := c;
  31.             INC(i);
  32.             INC(ptr)
  33.         UNTIL (c = 0X) OR (i = len)
  34.     END;
  35.     s[i] := 0X
  36. END GetArg;
  37.  
  38.  
  39. PROCEDURE GetEnv* (n: INTEGER; VAR s: ARRAY OF CHAR);
  40. BEGIN
  41.     IF (0 <= n) & (n < envc) THEN
  42.         GetArg(n + argc + 1, s)
  43.     ELSE
  44.         s[0] := 0X
  45.     END
  46. END GetEnv;
  47.  
  48.  
  49. PROCEDURE init;
  50. VAR
  51.     ptr: INTEGER;
  52.  
  53. BEGIN
  54.     IF API.MainParam # 0 THEN
  55.         envc := -1;
  56.         SYSTEM.GET(API.MainParam, argc);
  57.         REPEAT
  58.             SYSTEM.GET(API.MainParam + (envc + argc + 3) * SYSTEM.SIZE(INTEGER), ptr);
  59.             INC(envc)
  60.         UNTIL ptr = 0
  61.     ELSE
  62.         envc := 0;
  63.         argc := 0
  64.     END
  65. END init;
  66.  
  67.  
  68. BEGIN
  69.     init
  70. END Args.