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