117 lines · 5.3 KB · Text
RawDownload
= print, aprint, fprint, sprint: print formatted output     include "sys.m";    sys := load Sys Sys->PATH;     aprint: fn(format: string, *): array of byte;    fprint: fn(fd: ref FD, format: string, *): int;    print:  fn(format: string, *): int;    sprint: fn(format: string, *): string; These functions format and print their arguments as UTF text.Print writes text to the standard output.  Fprint  writes  tothe  named  output  file descriptor.  Sprint places text in astring, which it returns.  Aprint is similar but returns  thetext  in  utf(6)  representation as an array of bytes.  Printand fprint return the number of bytes transmitted or a  nega‐tive value if an  error was encountered when writing the out‐put. Each of these functions converts,  formats,  and  prints  itstrailing  arguments  under  control  of a format string.  Theformat contains two types of objects: plain characters, whichare simply copied to the output stream, and conversion speci‐fications, each of which results in fetching of zero or  morearguments.   The  Limbo  compiler  recognizes  calls to thesefunctions and checks that  the  arguments  match  the  formatspecifications in number and type. Each conversion specification has the following format:        % [flags] verb The  verb  is  a  single  character and each flag is a singlecharacter or a (decimal) numeric string.  Up to  two  numericstrings  may  be used; the first is called f1, the second f2.They can be separated by `.', and if one is present, then  f1and  f2  are  taken to be zero if missing, otherwise they areconsidered `omitted'.  Either or both of the numbers  may  bereplaced with the character *, meaning that the actual numberwill be obtained from the argument list as an  integer.   Theflags and numbers are arguments to the verb described below. d, o, x, X       The  numeric  verbs d, o, and x format their int argu‐       ments in decimal, octal,  and  hexadecimal  (with  hex       digits  in  lower-case).   The flag b is required when       the corresponding value is a Limbo big,  not  an  int.       Arguments are taken to be signed, unless the u flag is       given, to force them to be treated as unsigned.   Each= interprets the flags: , , , and # to mean left justi‐       fied, commas every three digits, and alternative  for‐       mat.   If  f2  is not omitted, the number is padded on       the left with zeros until at least f2  digits  appear.       Then, if alternative format is specified for x conver‐       sion, the number is preceded by 0x.  Finally, if f1 is       not  omitted,  the  number  is  padded on the left (or       right, if left justification is specified) with enough       blanks  to make the field at least f1 characters long.       The verb X is similar to x, except that the  hexadeci‐       mal  digits are displayed in upper-case, and in alter‐       native format, the number is preceded by 0X. e, f, g       The floating point verbs e, f, and g take a real argu‐       ment.   Each  interprets the flags +, -, and # to mean       always print a sign, left justified,  and  alternative       format.   F1  is  the  minimum field width and, if the       converted value takes up less than f1  characters,  it       is  padded on the left (or right, if `left justified')       with spaces.  F2 is the number of digits that are con‐       verted  after  the  decimal  place for e and f conver‐       sions, and f2 is the  maximum  number  of  significant       digits  for g conversions.  The f verb produces output       of the  form  [-]digits[.digits].   The  e  conversion       appends  an exponent e[-]digits.  The g verb will out‐       put the argument in either e or f  with  the  goal  of       producing  the  smallest output.  Also, trailing zeros       are omitted from the fraction part of the output,  and       a  trailing  decimal  point appears only if it is fol‐       lowed by a digit.  When alternative format  is  speci‐       fied,  the result will always contain a decimal point,       and for g conversions, trailing zeros are not removed. E, G   These are the same as e and g respectively, but use  E       not e to specify an exponent when one appears. c      The c verb converts a single Unicode character from an       int argument to a UTF  encoding,  justified  within  a       field of f1 characters as described above. r      The  r  verb  takes  no arguments; it prints the error       string associated with the most recent system error. s      The s verb copies a string to the output.  The  number       of characters copied (n) is the minimum of the size of       the string and f2.  These n characters  are  justified       within a field of f1 characters as described above. q      The q verb copies a string to the output as for s, but       quotes the string in the style of sh(1) only if neces‐       sary  to  avoid  ambiguity (for instance if the string       contains quotes or spaces).   If  the  format  string,       however,  includes  the specifier # (for example %#q),       the printed string will always be quoted. == source/libinterp/runt.c:/^xprint/os/port/print.c/lib9/print.c == see ALSOsys-intro(2), sys-open(2) == bugsThe x verb does not apply the 0x prefix when f2  is  present.The prefix should probably be 16r anyway.