X-Git-Url: http://git.subgeniuskitty.com/vvhitespace/.git/blobdiff_plain/32c440bf6f1f2199c3e925f32bd3b621039605e6..45abb94e7cc7357b082f9ffda11077e2c606645e:/stdlib/stdio.pvvs diff --git a/stdlib/stdio.pvvs b/stdlib/stdio.pvvs index d9184ad..f18d97c 100644 --- a/stdlib/stdio.pvvs +++ b/stdlib/stdio.pvvs @@ -1,42 +1,129 @@ -################################################################################ -# Description: -# This function prints a null-terminated string from the stack. -# Call Stack: -# null-terminator (ASCII '\0') -# char n -# ... -# char 2 -# char 1 <-- TOS -# Return Stack: -# -################################################################################ -NSSVTSSSN | Mark: 1000 (print string from stack) +#ifndef VVS_STDLIB_STDIO +#define VVS_STDLIB_STDIO + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@ Name: +@ printstackstring (1000100) +@ Description: +@ Prints a null-terminated string from the stack. +@ Call Stack: +@ null-terminator (ASCII '\0') +@ char n +@ ... +@ char 2 +@ char 1 <-- TOS +@ Return Stack: +@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +NSSVTSSSTSSN | Mark: 1000100 (print string from stack) SNS | DUP -NTSSSSSTSSSSSSSSSSTN | BRZ > 00001000 00000001 +NTSSTSSSTSSSSSSSSSTN | BRZ > 01000100 00000001 TNSS | Print character -NSNTSSSN | JMP > 1000 -NSSVSSSSTSSSSSSSSSSTN | Mark: 00001000 00000001 +NSNTSSSTSSN | JMP > 1000100 +NSSVSTSSSTSSSSSSSSSTN | Mark: 01000100 00000001 SNN | DROP NTN | RTS -################################################################################ -# Description: -# This function prints a null-terminated string from the heap. -# Call Stack: -# pointer to first character <-- TOS -# Return Stack: -# -################################################################################ -NSSVTSSTN | Mark: 1001 (print string from heap) +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@ Name: +@ printheapstring (1000101) +@ Description: +@ Prints a null-terminated string from the heap. +@ Call Stack: +@ pointer to first character <-- TOS +@ Return Stack: +@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +NSSVTSSSTSTN | Mark: 1000101 (print string from heap) SNS | DUP TTT | LOAD SNS | DUP -NTSSSSSTSSTSSSSSSSTN | BRZ > 00001001 00000001 +NTSSTSSSTSTSSSSSSSTN | BRZ > 01000101 00000001 TNSS | Print character SSSTN | Push +1 TSSS | ADD -NSNTSSTN | JMP > 1001 -NSSVSSSSTSSTSSSSSSSTN | Mark: 00001001 00000001 +NSNTSSSTSTN | JMP > 1000101 +NSSVSTSSSTSTSSSSSSSTN | Mark: 01000101 00000001 +SNN | DROP SNN | DROP +NTN | RTS + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@ Name: +@ printstacknumber (1010) +@ Description: +@ Prints 'number' from the stack in sign-magnitude format. +@ Leading zeros are suppressed. +@ Call Stack: +@ number <-- TOS +@ Return Stack: +@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +NSSVTSTSN | Mark: 1010 (print number from stack) +SNS | DUP +NSTTSSSSTSN | JSR > 1000010 +NSTTSSSSTTN | JSR > 1000011 +NTN | RTS + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@ Name: +@ printstacknumbersign (1000010) +@ Description: +@ Prints the sign of 'number' from the stack. +@ Call Stack: +@ number <-- TOS +@ Return Stack: +@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +NSSVTSSSSTSN | Mark: 1000010 (print sign of number from stack) +NTTSTSSSSTSSSSSSSSTN | BMI > 01000010 00000001 +SSSTSTSTTN | PUSH ASCII '+' +NSNSTSSSSTSSSSSSSTSN | JMP > 01000010 00000010 +NSSVSTSSSSTSSSSSSSSTN | Mark: 01000010 00000001 +SSSTSTTSTN | PUSH ASCII '-' +NSSVSTSSSSTSSSSSSSTSN | Mark: 01000010 00000010 +TNSS | PUTC +NTN | RTS + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@ Name: +@ printstacknumbermagnitude (1000011) +@ Description: +@ Prints the magnitude of 'number' from the stack. +@ Call Stack: +@ number <-- TOS +@ Return Stack: +@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#include +NSSVTSSSSTTN | Mark: 1000011 (print magnitude of number from stack) +NSTTSSSTN | JSR > 10001 (absolute value) + +SSSSN | PUSH ASCII '\0' +SNT | SWAP + +@ Pick off one digit on each pass through this loop. +NSSVSTSSSSTTSSSSSSSSN | Mark: 01000011 00000000 +SNS | DUP + +@ Mod-off a digit, convert to ASCII, store on stack as part of the string. +SSSTSTSN | PUSH +10 +TSTT | MODULO +SSSTTSSSSN | PUSH ASCII '0' +TSSS | ADD +SNT | SWAP + +@ Divide down to next digit and keep looping if number != 0 yet. +SSSTSTSN | PUSH +10 +TSTS | DIVIDE +SNS | DUP +NTSSTSSSSTTSSSSSSSTN | BRZ > 01000011 00000001 +NSNSTSSSSTTSSSSSSSSN | JMP > 01000011 00000000 + +@ Print the string we have built on the stack. +NSSVSTSSSSTTSSSSSSSTN | Mark: 01000011 00000001 SNN | DROP +NSTTSSSTSSN | JSR > 1000100 (print string from stack) NTN | RTS + +#endif