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.
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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‐
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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‐
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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
|
2019-10-19 01:03:49 -07:00
|
|
|
|
the "@") is applyed to each element of the array.
|
2018-12-30 16:43:04 -08:00
|
|
|
|
|
2022-10-07 21:48:11 -04:00
|
|
|
|
"'X'" The char(s) between the single-quotes are used to pad to field
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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‐
|
2022-10-07 21:48:11 -04:00
|
|
|
|
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
|
2019-10-19 01:03:49 -07:00
|
|
|
|
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
|
|
|
|
|
|
|
2022-10-07 21:48:11 -04:00
|
|
|
|
### RETURN VALUES
|
|
|
|
|
|
|
|
|
|
|
|
printf() calls the tell_object() efun with the formatted string.
|
|
|
|
|
|
|
2022-09-02 21:48:01 -04:00
|
|
|
|
This efun does not invoke the receive_message() apply.
|
|
|
|
|
|
|
2022-10-07 21:48:11 -04:00
|
|
|
|
### 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
|
|
|
|
|
2022-10-07 21:48:11 -04: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
|
|
|
|
|
2022-11-25 11:58:00 -05: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
|
|
|
|
|
|
|
2022-09-02 21:48:01 -04:00
|
|
|
|
sprintf(3), sscanf(3)
|
2019-10-19 01:03:49 -07:00
|
|
|
|
|