Added 'isdigit' function to stdlib.
[vvhitespace] / stdlib / string.pvvs
CommitLineData
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@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
15NSSVTSSSSSN | Mark: 100000 (strlen)
16
17@ Create a length counter.
18SSSSN | PUSH 0
19SNT | SWAP
20
21@ Increment the counter (and pointer) on each pass through the loop.
22NSSVSSTSSSSSSSSSSSSSN | Mark: 00100000 00000000
23SNS | DUP
24TTT | LOAD
25NTSSSTSSSSSSSSSSSSTN | BRZ > 00100000 00000001
26SNT | SWAP
27SSSTN | PUSH 1
28TSSS | ADD
29SNT | SWAP
30SSSTN | PUSH 1
31TSSS | ADD
32NSNSSTSSSSSSSSSSSSSN | JMP > 00100000 00000000
33
34@ Clean up and return.
35NSSVSSTSSSSSSSSSSSSTN | Mark: 00100000 00000001
36SNN | DROP
37NTN | 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@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
50NSSVTSSSSTN | Mark: 100001 (isdigit)
51
52SSSSSTTSSSSN | PUSH 48 (ASCII '0')
53TSST | SUBTRACT
54SNS | DUP
55NTTSSTSSSSTSSSSSSSSN | BMI > 00100001 00000000 (not digit)
56SNS | DUP
57SSSTSTSN | PUSH 10
58TSST | SUBTRACT
59NTTSSTSSSSTSSSSSSSTN | BMI > 00100001 00000001 (is digit)
60
61NSSVSSTSSSSTSSSSSSSSN | Mark: 00100001 00000000 (not digit)
62SNN | DROP
63SSSSN | PUSH 0
64NTN | RTS
65
66NSSVSSTSSSSTSSSSSSSTN | Mark: 00100001 00000001 (is digit)
67SNN | DROP
68SSSTN | PUSH 1
69NTN | RTS
70
ae1f85a1 71#endif