Commit | Line | Data |
---|---|---|
ae1f85a1 AT |
1 | #ifndef VVS_STDLIB_STRING |
2 | #define VVS_STDLIB_STRING | |
3 | ||
4 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
5 | @ Name: | |
6 | @ strlen (100000) | |
7 | @ Description: | |
8 | @ Counts number of words in a null-terminated string. | |
9 | @ Returned number does not include the null-terminator. | |
10 | @ Call Stack: | |
11 | @ pointer to first character <-- TOS | |
12 | @ Return Stack: | |
13 | @ number of words in string <-- TOS | |
14 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
15 | NSSVTSSSSSN | Mark: 100000 (strlen) | |
16 | ||
17 | @ Create a length counter. | |
18 | SSSSN | PUSH 0 | |
19 | SNT | SWAP | |
20 | ||
21 | @ Increment the counter (and pointer) on each pass through the loop. | |
22 | NSSVSSTSSSSSSSSSSSSSN | Mark: 00100000 00000000 | |
23 | SNS | DUP | |
24 | TTT | LOAD | |
25 | NTSSSTSSSSSSSSSSSSTN | BRZ > 00100000 00000001 | |
26 | SNT | SWAP | |
27 | SSSTN | PUSH 1 | |
28 | TSSS | ADD | |
29 | SNT | SWAP | |
30 | SSSTN | PUSH 1 | |
31 | TSSS | ADD | |
32 | NSNSSTSSSSSSSSSSSSSN | JMP > 00100000 00000000 | |
33 | ||
34 | @ Clean up and return. | |
35 | NSSVSSTSSSSSSSSSSSSTN | Mark: 00100000 00000001 | |
36 | SNN | DROP | |
37 | NTN | RTS | |
38 | ||
0e0d0a4a AT |
39 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
40 | @ Name: | |
41 | @ isdigit (100001) | |
42 | @ Description: | |
43 | @ Tests 'character' on stack. Is it an ASCII number? | |
44 | @ Returns 1 or 0 representing True/False. | |
45 | @ Call Stack: | |
46 | @ character <-- TOS | |
47 | @ Return Stack: | |
48 | @ 1 or 0 <-- TOS | |
49 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
50 | NSSVTSSSSTN | Mark: 100001 (isdigit) | |
51 | ||
52 | SSSSSTTSSSSN | PUSH 48 (ASCII '0') | |
53 | TSST | SUBTRACT | |
54 | SNS | DUP | |
55 | NTTSSTSSSSTSSSSSSSSN | BMI > 00100001 00000000 (not digit) | |
56 | SNS | DUP | |
57 | SSSTSTSN | PUSH 10 | |
58 | TSST | SUBTRACT | |
59 | NTTSSTSSSSTSSSSSSSTN | BMI > 00100001 00000001 (is digit) | |
60 | ||
61 | NSSVSSTSSSSTSSSSSSSSN | Mark: 00100001 00000000 (not digit) | |
62 | SNN | DROP | |
63 | SSSSN | PUSH 0 | |
64 | NTN | RTS | |
65 | ||
66 | NSSVSSTSSSSTSSSSSSSTN | Mark: 00100001 00000001 (is digit) | |
67 | SNN | DROP | |
68 | SSSTN | PUSH 1 | |
69 | NTN | RTS | |
70 | ||
ae1f85a1 | 71 | #endif |