8b68e224274ac8c83b113fb6b3affda9ea1402b3
[vvhitespace] / stdlib / string.pvvs
#ifndef VVS_STDLIB_STRING
#define VVS_STDLIB_STRING
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Name:
@ strlen (100000)
@ Description:
@ Counts number of words in a null-terminated string.
@ Returned number does not include the null-terminator.
@ Call Stack:
@ pointer to first character <-- TOS
@ Return Stack:
@ number of words in string <-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NSSVTSSSSSN | Mark: 100000 (strlen)
@ Create a length counter.
SSSSN | PUSH 0
SNT | SWAP
@ Increment the counter (and pointer) on each pass through the loop.
NSSVSSTSSSSSSSSSSSSSN | Mark: 00100000 00000000
SNS | DUP
TTT | LOAD
NTSSSTSSSSSSSSSSSSTN | BRZ > 00100000 00000001
SNT | SWAP
SSSTN | PUSH 1
TSSS | ADD
SNT | SWAP
SSSTN | PUSH 1
TSSS | ADD
NSNSSTSSSSSSSSSSSSSN | JMP > 00100000 00000000
@ Clean up and return.
NSSVSSTSSSSSSSSSSSSTN | Mark: 00100000 00000001
SNN | DROP
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ Name:
@ isdigit (100001)
@ Description:
@ Tests 'character' on stack. Is it an ASCII number?
@ Returns 1 or 0 representing True/False.
@ Call Stack:
@ character <-- TOS
@ Return Stack:
@ 1 or 0 <-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NSSVTSSSSTN | Mark: 100001 (isdigit)
SSSSSTTSSSSN | PUSH 48 (ASCII '0')
TSST | SUBTRACT
SNS | DUP
NTTSSTSSSSTSSSSSSSSN | BMI > 00100001 00000000 (not digit)
SNS | DUP
SSSTSTSN | PUSH 10
TSST | SUBTRACT
NTTSSTSSSSTSSSSSSSTN | BMI > 00100001 00000001 (is digit)
NSSVSSTSSSSTSSSSSSSSN | Mark: 00100001 00000000 (not digit)
SNN | DROP
SSSSN | PUSH 0
NTN | RTS
NSSVSSTSSSSTSSSSSSSTN | Mark: 00100001 00000001 (is digit)
SNN | DROP
SSSTN | PUSH 1
NTN | RTS
#endif