(* BSD 2-Clause License Copyright (c) 2020, Anton Krotov All rights reserved. *) MODULE Args; IMPORT SYSTEM, API; VAR argc*, envc*: INTEGER; PROCEDURE GetArg* (n: INTEGER; VAR s: ARRAY OF CHAR); VAR i, len, ptr: INTEGER; c: CHAR; BEGIN i := 0; len := LEN(s) - 1; IF (0 <= n) & (n <= argc + envc) & (n # argc) & (len > 0) THEN SYSTEM.GET(API.MainParam + (n + 1) * SYSTEM.SIZE(INTEGER), ptr); REPEAT SYSTEM.GET(ptr, c); s[i] := c; INC(i); INC(ptr) UNTIL (c = 0X) OR (i = len) END; s[i] := 0X END GetArg; PROCEDURE GetEnv* (n: INTEGER; VAR s: ARRAY OF CHAR); BEGIN IF (0 <= n) & (n < envc) THEN GetArg(n + argc + 1, s) ELSE s[0] := 0X END END GetEnv; PROCEDURE init; VAR ptr: INTEGER; BEGIN IF API.MainParam # 0 THEN envc := -1; SYSTEM.GET(API.MainParam, argc); REPEAT SYSTEM.GET(API.MainParam + (envc + argc + 3) * SYSTEM.SIZE(INTEGER), ptr); INC(envc) UNTIL ptr = 0 ELSE envc := 0; argc := 0 END END init; BEGIN init END Args.