ANSWER TO EXERCISE 96 | |
The following implementation is limited to a format string 2x64 = 128 characters long, and six subsequent arguments. %d becomes a decimal number, %e an English one; %c a character, %% a (single) percentage sign and %s a string. Array printed_text table 64; Array printf_vals --> 6; [ Printf format p1 p2 p3 p4 p5 p6 pc j k; printf_vals-->0 = p1; printf_vals-->1 = p2; printf_vals-->2 = p3; printf_vals-->3 = p4; printf_vals-->4 = p5; printf_vals-->5 = p6; printed_text-->0 = 64; @output_stream 3 printed_text; print (string) format; @output_stream -3; j=printed_text-->0; for (k=2:k<j+2:k++) { if (printed_text->k == '%') { switch(printed_text->(++k)) { '%': print "%"; 'c': print (char) printf_vals-->pc++; 'd': print printf_vals-->pc++; 'e': print (number) printf_vals-->pc++; 's': print (string) printf_vals-->pc++; default: print "<** Unknown printf escape **>"; } } else print (char) printed_text->k; } ]; |