fluffos/docs/efun/interactive/printf.md

122 lines
4.1 KiB
Markdown
Raw Permalink Normal View History

2018-12-30 16:43:04 -08:00
---
title: interactive / printf
---
2023-11-25 09:50:24 -08:00
# printf
2018-12-30 16:43:04 -08:00
### NAME
2018-12-30 16:59:01 -08:00
printf, sprintf - formatted output conversion
2018-12-30 16:43:04 -08:00
### SYNOPSIS
2018-12-30 16:59:01 -08:00
2018-12-30 16:43:04 -08:00
void printf( string format, ... );
string sprintf( string format, ... );
### DESCRIPTION
2018-12-30 16:59:01 -08:00
2018-12-30 16:43:04 -08:00
An implementation of (s)printf() for LPC, with quite a few extensions
Implemented by Lynscar (Sean A Reith).
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".
2018-12-30 16:43:04 -08:00
"|" centered within field size.
"=" column mode if strings are greater than field size. This is
only meaningful with strings, all other types ignore this. Col
umns are auto-magically word wrapped.
2018-12-30 16:43:04 -08:00
"#" table mode, print a list of '\n' separated 'words' in a table
within the field size. only meaningful with strings.
2018-12-30 16:43:04 -08:00
n specifies the field size, a '*' specifies to use the corre
sponding arg as the field size. If n is prepended with a zero,
then is padded zeros, else it is padded with spaces (or speci
fied pad string).
2018-12-30 16:43:04 -08:00
"."n precision of n, simple strings truncate after this (if preci
sion is greater than field size, then field size = precision),
tables use precision to specify the number of columns (if pre
cision not specified then tables calculate a best fit), all
other types ignore this.
2018-12-30 16:43:04 -08:00
":"n n specifies the fs _and_ the precision, if n is prepended by a
zero then it is padded with zeros instead of spaces.
2018-12-30 16:43:04 -08:00
"@" the argument is an array. the corresponding format_info (minus
the "@") is applyed to each element of the array.
2018-12-30 16:43:04 -08:00
"'X'" The char(s) between the single-quotes are used to pad to field
size (defaults to space) (if both a zero (in front of field
size) and a pad string are specified, the one specified second
overrules). NOTE: to include "'" in the pad string, you must
use "\'" (as the backslash has to be escaped past the inter
preter), similarly, to include "\" requires "\\".
2018-12-30 16:43:04 -08:00
The following are the possible type specifiers.
% in which case no arguments are interpreted, and a "%" is
inserted, and all modifiers are ignored.
2018-12-30 16:43:04 -08:00
O the argument is an LPC datatype.
s the argument is a string.
d, i 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.
X the integer arg is printed in hex (with A-F in capitals).
f floating point number
### RETURN VALUES
printf() calls the tell_object() efun with the formatted string.
This efun does not invoke the receive_message() apply.
### EXAMPLE
Basic Usage:
printf("%s is %i", "X", 1) = "X is 1"
Alignment:
printf("%-20s", "left") = "left "
printf("%20|s", "center") = " center "
printf("%20s", "right") = " right"
printf("%-20'-'s", "left") = "left----------------"
printf("%20'-'|s", "center") = "-------center-------"
printf("%20'-'s", "right") = "---------------right"
2018-12-30 16:43:04 -08:00
Numeric:
printf("%.2f", 1.2345) = "1.23"
printf("%10.2f", 1.2345) = " 1.23"
printf("%10.6f", 0.123) = " 0.123000"
2018-12-30 16:43:04 -08:00
Dynamic Field Size:
printf("%-*s", 10, "ten") = "ten "
printf("%|*s", 20, "twenty") = " twenty "
printf("%*s", 30, "thirty") = " thirty"
2018-12-30 16:43:04 -08:00
### AUTHOR
2018-12-30 16:59:01 -08:00
Sean A. Reith (Lynscar)
2018-12-30 16:43:04 -08:00
### SEE ALSO
sprintf(3), sscanf(3)