## January 30, 2017

### Formatted String Output in RETRO 12

For simple output Retro provides a few functions:

 * putn
 * putc
 * puts

And so on. Each handles a specific type. The problem: displaying multiple things can get messy.

Consider:

   #1 putn $+ putc #2 putn
   $= putc #3 putn

With formatted output strings this can become:

   #3 #2 #1 '%n+%n=%n putsf

Formatting Options:

A \ denotes a control character. Currently this supports:

 * \n - newline
 * \t - tab

A % denotes a stack value to display. This currently supports:

 * %c - character
 * %s - string
 * %n - number

Anything else is displayed as the character.

````
{{
 :char fetch-next
   $n [ nl            ] case
   $t [ ASCII:HT putc ] case
   putc ;

 :obj fetch-next
   $c [ swap putc ] case
   $s [ swap puts ] case
   $n [ swap n:to-string puts ] case
   putc ;

 :display
   $\ [ char ] case
   $% [ obj  ] case
   putc ;
---reveal---
 :putsf
   [ repeat
       fetch-next 0; display
     again
   ] call drop ;
}}
````