Args.ob07 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. (*
  2. BSD 2-Clause License
  3. Copyright (c) 2020, Anton Krotov
  4. All rights reserved.
  5. *)
  6. MODULE Args;
  7. IMPORT SYSTEM, API;
  8. VAR
  9. argc*, envc*: INTEGER;
  10. PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR);
  11. VAR
  12. i, len, ptr: INTEGER;
  13. c: CHAR;
  14. BEGIN
  15. i := 0;
  16. len := LEN(s) - 1;
  17. IF (0 <= n) & (n <= argc + envc) & (n # argc) & (len > 0) THEN
  18. SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr);
  19. REPEAT
  20. SYSTEM.GET(ptr, c);
  21. s[i] := c;
  22. INC(i);
  23. INC(ptr)
  24. UNTIL (c = 0X) OR (i = len)
  25. END;
  26. s[i] := 0X
  27. END GetArg;
  28. PROCEDURE GetEnv* (n: INTEGER; VAR s: ARRAY OF CHAR);
  29. BEGIN
  30. IF (0 <= n) & (n < envc) THEN
  31. GetArg(n + argc + 1, s)
  32. ELSE
  33. s[0] := 0X
  34. END
  35. END GetEnv;
  36. PROCEDURE init;
  37. VAR
  38. ptr: INTEGER;
  39. BEGIN
  40. IF API.MainParam # 0 THEN
  41. envc := -1;
  42. SYSTEM.GET(API.MainParam, argc);
  43. REPEAT
  44. SYSTEM.GET(API.MainParam + (envc + argc + 3) * SYSTEM.SIZE(INTEGER), ptr);
  45. INC(envc)
  46. UNTIL ptr = 0
  47. ELSE
  48. envc := 0;
  49. argc := 0
  50. END
  51. END init;
  52. BEGIN
  53. init
  54. END Args.