Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8097 | maxcodehac | 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.>=>=>=> |