X-Git-Url: http://git.subgeniuskitty.com/vvhitespace/.git/blobdiff_plain/6cb31a3ecea681051cfa36fde3f17b18f8eacfea..48f884892a9cb24c1be8bb0d8f5f5f6851c03bd5:/stdlib/stdio.pvvs diff --git a/stdlib/stdio.pvvs b/stdlib/stdio.pvvs index 539df7d..26171e6 100644 --- a/stdlib/stdio.pvvs +++ b/stdlib/stdio.pvvs @@ -1,3 +1,6 @@ +@ (c) 2020 Aaron Taylor +@ See LICENSE.txt file for copyright and license details. + #ifndef VVS_STDLIB_STDIO #define VVS_STDLIB_STDIO @@ -61,8 +64,8 @@ NTN | RTS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NSSVTSSTN | Mark: 1001 (print number from stack) SNS | DUP -NSTTSSSSTSN | JSR > 1000010 -NSTTSSSSTTN | JSR > 1000011 +NSTTSSSSTSN | JSR > 1000010 (printstacknumbersign) +NSTTSSSSTTN | JSR > 1000011 (printstacknumbermagnitude) NTN | RTS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -97,8 +100,17 @@ NTN | RTS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #include NSSVTSSSSTTN | Mark: 1000011 (print magnitude of number from stack) -NSTTSSSTN | JSR > 10001 (absolute value) +@ Catch -(2^63) as a special case since its absolute value will overflow +@ a twos-complement 64-bit word. +SNS | DUP +SSTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSN | -(2^63) +TSST | SUBTRACT +NTSSTSSSSTTSSSSSSTSN | BRZ > 01000011 00000010 + +@ No special case applies. Prepare for computation by converting the number +@ to absolute value and preparing a string on the stack. +NSTTSSSTN | JSR > 10001 (absolute value) SSSSN | PUSH ASCII '\0' SNT | SWAP @@ -126,6 +138,12 @@ SNN | DROP NSTTSSSTSSN | JSR > 1000100 (print string from stack) NTN | RTS +@ Replace the number on the stack with its decimal ASCII representation. +NSSVSTSSSSTTSSSSSSTSN | BRZ > 01000011 00000010 +SNN | DROP +A"-9223372036854775808" +NSNSTSSSSTTSSSSSSSTN | JMP > 01000011 00000001 + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Name: @ printf @@ -154,8 +172,7 @@ NTN | RTS @ Return Stack: @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -#include -#include +#include NSSVTSSSN | Mark: 1000 (printf) @ If the stack contains an empty string (i.e. just an ASCII '\0'), the next @@ -245,7 +262,7 @@ TSST | SUBTRACT NTSSSSSTSSSSSSSSTSSN | BRZ > 00001000 00000100 @ Check for ASCII '\t' SNS | DUP -SSSTSSTN | PUSH ASCII '\t' +SSSTTTSTSSN | PUSH ASCII 't' TSST | SUBTRACT NTSSSSSTSSSSSSSSTSTN | BRZ > 00001000 00000101 @ No substitution necessary. Print literally. @@ -371,6 +388,7 @@ NSNSSSSTSSSSSSSSSSTN | JMP > 00001000 00000001 @ Found an ASCII "\0" when processing the format string. Clean up and exit. NSSVSSSSTSSSSSSSSSSSN | Mark: 00001000 00000000 SNN | DROP +SNN | DROP NTN | RTS @ Move the next string character to TOS.