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 | ||
39 | #endif |