Program Listing 3-7 is a complete program that illustrates the use of format verbs and flags with the print
function:
implement Command;
include "sys.m";
include "draw.m";
sys: Sys;
Command: module {
init: fn(ctxt: ref Draw->Context, argv: list of string);
};
init(ctxt: ref Draw->Context, argv: list of string) {
sys = load Sys Sys->PATH;
num := 123;
decnum := 2345.678901;
scinum := 0.0000987;
str := "Hello, Inferno!";
# field width
for (i := 1; i <= 5; i++) {
sys->print("%8d %8d %8d %8d %8d\n",
i, i*i, i*i*i, i*i*i*i, i*i*i*i*i);
}
sys->print("%d\n", num);
sys->print("%10d\n\n", num);
# precision
sys->print("%.3f\n", decnum);
sys->print("%2.5d\n", num);
sys->print("%5.10s\n\n", str);
# scientific notation
sys->print("%e\n", scinum);
sys->print("%E\n", decnum);
sys->print("%g\n", decnum);
sys->print("%g\n\n", scinum);
# justification
sys->print("Right-justified: %5d\n", num);
sys->print("Left-justified: %-5d\n", num);
sys->print("$%9.2f\n\n", decnum);
# Decimal and Hexadecimal
sys->print("%#d\n", num);
sys->print("%x\n", num);
sys->print("%#X\n", num);
}
This program produces the following output:
1 1 1 1 1 2 4 8 16 32 3 9 27 81 243 4 16 64 256 1024 5 25 125 625 3125 123 123 2345.679 00123 Hello, Inf 9.870000e-05 2.345679E+03 2345.678901 9.87e-05 Right-justified: 123 Left-justified: 123 $ 2345.68 123.0 7b 0X7B