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.
--- /dev/null
+A"test"
+NSTTSSSTSSN | JSR > 1000100 (printstackstring)
+NNN | DIE
+
+#include <stdio.pvvs>
--- /dev/null
+A"test"
+SSSTSSSSSN | PUSH 32 (address)
+SSSTSSN | PUSH 4 (count)
+NSTTTTTTN | JSR > 11111 (spew)
+
+SSSTSSSSSN | PUSH 32 (address)
+NSTTSSSTSTN | JSR > 1000101 (printheapstring)
+
+NNN | DIE
+
+#include <heap.pvvs>
+#include <stdio.pvvs>
--- /dev/null
+SSSTSSSSSN | PUSH +32
+NSTTSSSSTSN | JSR > 1000010 (printnumbersign)
+
+SSTTSSSSSN | PUSH -32
+NSTTSSSSTSN | JSR > 1000010 (printnumbersign)
+
+NNN | DIE
+
+#include <stdio.pvvs>
--- /dev/null
+SSSTSSSSSN | PUSH +32
+NSTTSSSSTTN | JSR > 1000011 (printnumbermagnitude)
+
+SSTTSSSSSN | PUSH -32
+NSTTSSSSTTN | JSR > 1000011 (printnumbermagnitude)
+
+SSTSN | PUSH -0
+NSTTSSSSTTN | JSR > 1000011 (printnumbermagnitude)
+
+SSTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSN | -(2^63)
+NSTTSSSSTTN | JSR > 1000011 (printnumbermagnitude)
+
+NNN | DIE
+
+#include <stdio.pvvs>
--- /dev/null
+SSSTSSSSSN | PUSH +32
+NSTTSSTN | JSR > 1001 (printstacknumber)
+
+SSTTSSSSSN | PUSH -32
+NSTTSSTN | JSR > 1001 (printstacknumber)
+
+SSTSN | PUSH -0
+NSTTSSTN | JSR > 1001 (printstacknumber)
+
+SSTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSN | -(2^63)
+NSTTSSTN | JSR > 1001 (printstacknumber)
+
+NNN | DIE
+
+#include <stdio.pvvs>
--- /dev/null
+A"test"
+SSSSN | PUSH 0 (number of substitutions)
+NSTTSSSN | JSR > 1000 (printf)
+
+NNN | DIE
+
+#include <stdio.pvvs>
--- /dev/null
+A"test"
+SSSTSSSSSN | PUSH 32 (address)
+SSSTSSN | PUSH 4 (count)
+NSTTTTTTN | JSR > 11111 (spew)
+
+SSSTSSSSSN | PUSH 32 (address)
+SSSSN | PUSH 0 (string terminator)
+SSSSN | PUSH 0 (number of substitutions)
+NSTTSSSN | JSR > 1000 (printf)
+
+NNN | DIE
+
+#include <heap.pvvs>
+#include <stdio.pvvs>
--- /dev/null
+A"\\\%\t\n"
+SSSSN | PUSH 0 (number of substitutions)
+NSTTSSSN | JSR > 1000 (printf)
+
+NNN | DIE
+
+#include <stdio.pvvs>
--- /dev/null
+@ First setup a string on the heap for use as a substitution.
+A"test"
+SSSTSSSSSN | PUSH 32 (address)
+SSSTSSN | PUSH 4 (count)
+NSTTTTTTN | JSR > 11111 (spew)
+
+@ Now prepare arguments and call printf.
+A"%c%s%d%u%i"
+SSSTSTSTSN | PUSH +42
+SSSTSTSTSN | PUSH +42
+SSSTN | PUSH +1
+SSSTSSSSSN | PUSH +32 (address)
+SSSTSSSSSTN | PUSH ASCII 'A'
+SSSTSTN | PUSH 5 (number of substitutions)
+NSTTSSSN | JSR > 1000 (printf)
+
+NNN | DIE
+
+#include <heap.pvvs>
+#include <stdio.pvvs>
['4001_strlen', '', '+11'],
['5001_abs', '', '+1+1+0+0'],
['5002_random', '', ''],
+ ['6001_printstackstring', '', 'test'],
+ ['6002_printheapstring', '', 'test'],
+ ['6003_printnumbersign', '', '+-'],
+ ['6004_printnumbermagnitude', '', '323209223372036854775808'],
+ ['6005_printstacknumber', '', '+32-32+0-9223372036854775808'],
+ ['6006_printf_staticstackstring', '', 'test'],
+ ['6007_printf_staticheapstring', '', 'test'],
+ ['6008_printf_escapedstackstring', '', '\\%\t\n'],
+ ['6009_printf_substitutedstackstring', '', 'Atest142+42'],
]
for test in tests: