printf |
Discworld efun help |
printf |
Usage:
str = sprintf("format string", [arg1, ..., argn]);
printf("format string", [arg1, ..., argn]);
This version supports the following as modifiers:
' ' pad positive integers with a space.
'+' pad positive integers with a plus sign.
'-' left adjusted within field size.
NB: std (s)printf() defaults to right justification, which is
unnatural in the context of a mainly string based language
but has been retained for "compatability" ;)
'|' centered within field size.
'=' column mode if strings are greater than field size. this is only
meaningful with strings, all other types ignore
this. columns are auto-magically word wrapped.
'#' table mode, print a list of '\n' separated 'words' in a
table within the field size. only meaningful with strings.
n specifies the field size, a '*' specifies to use the corresponding
arg as the field size. if n is prepended with a zero, then is padded
zeros, else it is padded with spaces.
'.'n presision of n, simple strings truncate after this (if presision is
greater than field size, then field size = presision), tables use
presision to specify the number of columns (if presision not specified
then tables calculate a best fit), all other types ignore this.
':'n n specifies the fs _and_ the presision, if n is prepended by a zero
then it is padded with zeros instead of spaces.
'@' the argument is an array. the corresponding format_info (minus the
'@') is applyed to each element of the array.
The following are the possible type specifiers.
'%' in which case no arguments are interpreted, and a "%" is inserted, and
all modifiers are ignored.
'O' the argument is an LPC datatype.
's' the argument is a string.
'd' the integer arg is printed in decimal.
'c' the integer arg is to be printed as a character.
'o' the integer arg is printed in octal.
'x' the integer arg is printed in hex.
Examples:
printf("fish: %c\n", 65);
fish: A
printf("Hello green friends\n");
Hello green friends
printf("num: %d\n", 10);
printf("num: %+10d\n", 10);
printf("num: %010d\n", 5*2);
printf("num: %|10d\n", 20/2);
num: 10
num: +10
num: 0000000010
num: 10
printf("%|80s","THE NOT END");
THE NOT END
printf("%|=80s", "fun with penguins\n");
fun with penguins
printf("%-=80O\n", ({ "fish", 9, "gumbies", 2 }));
({ /* 4 elements */
"fish",
9,
"gumbies",
2
})
printf("%-=*s", screen_width,
"This will wordwrap the specified string within the "+
"specified field size, this is useful say, if you let users "+
"specify their screen size, then the room descriptions will "+
"automagically word-wrap as appropriate.\n"+
"slosh-n's will of course force a new-line when needed.\n");
This will wordwrap the specified string within the specified field size, this is
useful say, if you let users specify their screen size, then the room
descriptions will automagically word-wrap as appropriate.
slosh-n's will of course force a new-line when needed.
printf("%-=*s %-=*s", screen_width/2,
"Two columns next to each other (any number of columns will "+
"of course work) independantly word-wrapped, can be useful.",
screen_width/2 - 1,
"The - is to specify justification, this is in addherence "+
"to std sprintf which defaults to right-justification, "+
"this version also supports centre justification, and I will "+
"eventually get around to both left and right justification, "+
"but this isn't supported yet.");
Two columns next to each other (any The - is to specify justification, this
number of columns will of course work) is in addherence to std sprintf which
independantly word-wrapped, can be defaults to right-justification, this
useful. version also supports centre
justification, and I will eventually
get around to both left and right
justification, but this isn't supported
yet.
printf("%-#*s", screen_width,
"Given a\nlist of\nslosh-n\nseparated\n'words',\nthis option\n"+
"creates a\ntable out\nof them\nthe number of\ncolumns\n"+
"be forced\nby specifying a\npresision.\nThe most obvious\n"+
"use is for\nformatted\nls output.");
Given a this option columns The most obvious
list of creates a be forced use is for
slosh-n table out by specifying a formatted
separated of them presision. ls output.
'words', the number of
sample = ({ this_object(), 5, "bob" });
printf("Handy for debugging is printing out LPC datatypes: %O\n", sample);
Handy for debugging is printing out LPC datatypes: ({ /* 3 elements */
/w/shadow/test#1092 ("test") (clone) (ok),
5,
"bob"
})
sample = ({ "first column: bing", "second column: womble" });
printf("%-=*s\n%-=@*s\n", screen_width,
"Another bizarre option is the @ operator, it applies the "+
"format string it is in to each element of the array:",
screen_width/sizeof(sample),
sample);
Another bizarre option is the @ operator, it applies the format string it is in
to each element of the array:
first column: bing second column: womble
printf("Of course all the simple printf options are supported:\n"+
"%s: %d %x %o %c\n", "65 as decimal, hex, octal and a char",
65, 65, 65, 65);
Of course all the simple printf options are supported:
65 as decimal, hex, octal and a char: 65 41 101 A
printf("%|80s\n", "THE END");
THE END