control-string
Specifies the fixed text of the output string, consisting of text and 
any number of FAO directives. The control string may be any length. 
Specify the control string as a character string expression.
The F$FAO function uses FAO directives to modify or insert ASCII data 
into the fixed text in the control string.
Table DCLI-4 lists the FAO directives you can specify in a control 
string.
argument[,...]
Specifies from 1 to 15 arguments required by the FAO directives used in 
the control string. Specify the arguments as integer or character 
string expressions. Table DCLI-4 lists the argument types required by 
each FAO directive.
FAO directives may require one or more arguments. The order of the 
arguments must correspond exactly with the order of the directives in 
the control string. In most cases, an error message is not displayed if 
you misplace an argument.
If you specify an argument whose type (integer or string) does not 
match that of the corresponding directive, unpredictable results are 
returned. You can use the F$INTEGER and F$STRING lexical functions to 
convert arguments to the proper type.
If there are not enough arguments listed, F$FAO continues reading past 
the end of an argument list. Therefore, always be sure to include 
enough arguments to satisfy the requirements of all the directives in a 
control string.
If you specify an invalid parameter for any directive, you may see 
unexpected errors, which indicate that the command did not succeed. 
(These errors are passed through to you from the $FAO system service.)
The F$FAO lexical function invokes the $FAO system service to convert 
character and numeric input to ASCII character strings. (FAO stands for 
formatted ASCII output.) By specifying formatting instructions, you can 
use the F$FAO function to convert integer values to character strings, 
to insert carriage returns and form feeds, to insert text, and so on.
Specify an FAO directive using any one of the following formats:
  
    | Format  | 
    Function  | 
  
  
    | 
      !DD
     | 
    
      One directive
     | 
  
  
    | 
      !n(DD)
     | 
    
      A directive repeated a specified number of times
     | 
  
  
    | 
      !lengthDD
     | 
    
      A directive that places its output in a field of a specified length
     | 
  
  
    | 
      !n(lengthDD)
     | 
    
      A directive that is repeated a specified number of times and generates 
      output fields of a specified length
     | 
  
The exclamation point (!) indicates that the following character or 
characters are to be interpreted as an FAO directive. DD 
represents a 1- or 2-character uppercase code indicating the action 
that F$FAO is to perform. When specifying repeat counts, n is 
a decimal value specifying the number of times the directive is to be 
repeated. The length value is a decimal number that instructs 
F$FAO to generate an output field of "length" characters.
Repeat counts and output lengths may also be specified by using a 
number sign (#) in place of absolute numeric value. If you use a number 
sign, you must specify the numeric value as an integer expression in 
the corresponding place in the argument list.
When a variable output field is specified with a repeat count, only one 
length parameter is required, because each output string has the 
specified length.
The FAO directives are grouped in the following categories:
  - Character string insertion
  
 - Zero-filled numeric conversion
  
 - Blank-filled numeric conversion
  
 - Special formatting
  
 - Parameter interpretation
 
Table DCLI-4 summarizes the FAO directives and shows the required 
argument types. In addition, the following sections describe output 
strings from directives that perform character string insertion, 
zero-filled numeric conversion, and blank-filled numeric conversion.
  Note 
Two types of directives that are supported by the $FAO system service 
are not supported by the DCL F$FAO lexical function. These types are:
  - Quadword numeric directives (Q, H, and J), which are not supported 
  in DCL because all DCL numeric values are stored and manipulated as 
  longwords.
  
 - String directives other than the !AS directive, which are not 
  supported in DCL because all DCL strings are stored and manipulated by 
  descriptor.
  
For further information on the $FAO system service directive, see the 
HP OpenVMS System Services Reference Manual.  
     | 
  
  Table DCLI-4 Summary of FAO Directives
  
    | Directive  | 
    Argument Type  | 
    Description  | 
  
  
    | 
      Character string insertion:
     | 
  
  
    | 
      !AS
     | 
    
      String
     | 
    
      Inserts a character string as is.
     | 
  
  
    | 
      Zero-filled numeric conversion:
     | 
  
  
    | 
      !OB
     | 
    
      Integer
     | 
    
      Converts a byte to octal notation.
     | 
  
  
    | 
      !OW
     | 
    
      Integer
     | 
    
      Converts a word to octal notation.
     | 
  
  
    | 
      !OL
     | 
    
      Integer
     | 
    
      Converts a longword to octal notation.
     | 
  
  
    | 
      !XB
     | 
    
      Integer
     | 
    
      Converts a byte to hexadecimal notation.
     | 
  
  
    | 
      !XW
     | 
    
      Integer
     | 
    
      Converts a word to hexadecimal notation.
     | 
  
  
    | 
      !XL
     | 
    
      Integer
     | 
    
      Converts a longword to hexadecimal notation.
     | 
  
  
    | 
      !ZB
     | 
    
      Integer
     | 
    
      Converts a byte to decimal notation.
     | 
  
  
    | 
      !ZW
     | 
    
      Integer
     | 
    
      Converts a word to decimal notation.
     | 
  
  
    | 
      !ZL
     | 
    
      Integer
     | 
    
      Converts a longword to decimal notation.
     | 
  
  
    | 
      Blank-filled numeric conversion:
     | 
  
  
    | 
      !UB
     | 
    
      Integer
     | 
    
      Converts a byte to decimal notation
        without adjusting for negative numbers.
     | 
  
  
    | 
      !UW
     | 
    
      Integer
     | 
    
      Converts a word to decimal notation
        without adjusting for negative numbers.
     | 
  
  
    | 
      !UL
     | 
    
      Integer
     | 
    
      Converts a longword to decimal notation
        without adjusting for negative numbers.
     | 
  
  
    | 
      !SB
     | 
    
      Integer
     | 
    
      Converts a byte to decimal notation
        with negative numbers converted properly.
     | 
  
  
    | 
      !SW
     | 
    
      Integer
     | 
    
      Converts a word to decimal notation
        with negative numbers converted properly.
     | 
  
  
    | 
      !SL
     | 
    
      Integer
     | 
    
      Converts a longword to decimal notation
        with negative numbers converted properly.
     | 
  
  
    | 
      Special formatting:
     | 
  
  
    | 
      !/
     | 
    
      None
     | 
    
      Inserts a carriage return and a line feed.
     | 
  
  
    | 
      !_
     | 
    
      None
     | 
    
      Inserts a tab.
     | 
  
  
    | 
      !^
     | 
    
      None
     | 
    
      Inserts a form feed.
     | 
  
  
    | 
      !!
     | 
    
      None
     | 
    
      Inserts an exclamation point (!).
     | 
  
  
    | 
      !%I
     | 
    
      Integer
     | 
    
      Converts a longword integer to a named
        UIC in the format
        [group-identifier,member-identifier].
     | 
  
  
    | 
      !%S
     | 
    
      None
     | 
    
      Inserts an "s" if the most recently
        converted number is not 1. (Not recommended for use with 
      multilingual products.)
     | 
  
  
    | 
      !%U
     | 
    
      Integer
     | 
    
      Converts a longword integer to a numeric UIC in the format [g,m], where
      g is the group number and
      m is the member number.
     | 
  
  
    |  
      
     | 
     
      
     | 
    
      The directive inserts the brackets and
        the comma.
     | 
  
  
    | 
      !n<...!>
     | 
    
      None
     | 
    
      Left-justifies and blank-fills all data
        represented by the instructions ... in
        fields
      n characters wide.
     | 
  
  
    | 
      !n*
      c
     | 
    
      None
     | 
    
      Repeats the character represented
        by
      c for
      n times.
     | 
  
  
    | 
      !n%C
     | 
    
      String
     | 
    
      Inserts a character string when the most recently evaluated argument 
      has the value
      n. (Recommended for use with multilingual products.)
     | 
  
  
    | 
      !%E
     | 
    
      String
     | 
    
      Inserts a character string when the value of the most recently 
      evaluated argument does not match any preceding !n%C directives. 
      (Recommended for use with multilingual products.)
     | 
  
  
    | 
      !%F
     | 
    
      None
     | 
    
      Marks the end of a plurals statement.
     | 
  
  
    | 
      !%T
     | 
    
      Integer equal to 0
     | 
    
      Inserts the current time.
     | 
  
  
    | 
      !%D
     | 
    
      Integer equal to 0
     | 
    
      Inserts the current date/time.
     | 
  
  
    | 
      Argument interpretation:
     | 
  
  
    | 
      !-
     | 
    
      None
     | 
    
      Reuses the last argument.
     | 
  
  
    | 
      !+
     | 
    
      None
     | 
    
      Skips the next argument.
     | 
  
Output Strings from Character String Insertion
The !AS directive inserts a character string (specified as an argument 
for the directive) into the control string. The field length of the 
character string when it is inserted into the control string defaults 
to the length of the character string. If the default length is shorter 
than an explicitly stated field length, the string is left-justified 
and blank-filled. If the default length is longer than an explicitly 
stated field length, the string is truncated on the right.
Output Strings from Zero-Filled Numeric Conversion
Directives for zero-filled numeric conversion convert an integer 
(specified as an argument for the directive) to decimal, octal, or 
hexadecimal notation. The ASCII representation of the integer is 
inserted into the control string. Default output field lengths for the 
converted argument are determined as follows:
  - Directives that convert arguments to octal notation return 3 digits 
  for byte conversion, 6 digits for word conversion, and 11 digits for 
  longword conversion. Numbers are right-justified and zero-filled on the 
  left. Explicit-length fields longer than the default are blank-filled 
  on the left. Explicit-length fields shorter than the default are 
  truncated on the left.
  
 - Directives that convert arguments to hexadecimal notation return 2 
  digits for byte conversion, 4 digits for word conversion, and 8 digits 
  for longword conversion. Numbers are right-justified and zero-filled on 
  the left. Explicit-length fields longer than the default are 
  blank-filled on the left. Explicit-length fields shorter than the 
  default are truncated on the left.
  
 - Directives that convert arguments to decimal notation return the 
  required number of characters for the decimal number. Explicit-length 
  fields longer than the default are zero-filled on the left. If an 
  explicit-length field is shorter than the number of characters required 
  for the decimal number, the output field is completely filled with 
  asterisks (*).
 
For byte conversion, only the low-order 8 bits of the binary 
representation of the argument are used. For word conversion, only the 
low-order 16 bits of the binary representation of the argument are 
used. For longword conversion, the entire 32-bit binary representation 
of the argument is used.
Output Strings from Blank-Filled Numeric Conversion
Directives for blank-filled numeric conversion convert an integer 
(specified as an argument for the directive) to decimal notation. These 
directives can convert the integer as a signed or unsigned number. The 
ASCII representation of the integer is inserted into the control string.
Output field lengths for the converted argument default to the required 
number of characters. Values shorter than explicit-length fields are 
right-justified and blank-filled; values longer than explicit-length 
fields cause the field to be filled with asterisks.
For byte conversion, only the low-order 8 bits of the binary 
representation of the argument are used. For word conversion, only the 
low-order 16 bits of the binary representation of the argument are 
used. For longword conversion, the entire 32-bit binary representation 
of the argument is used.
Output Strings from Special Formatting Directives
The !n%C and !%E directives insert an ASCII string (based on the value 
of the most recently evaluated argument) into the output string. These 
directives are useful for inserting irregular plural nouns and verbs.
If the most recently evaluated argument equals n, the text 
between one directive and the next is inserted into the output string. 
If the most recently evaluated argument does not equal n, the 
next !n%C directive is processed.
If n must be a negative number, you must specify it as an 
argument and use the number sign (#).
You can specify the !n%C and !%E directives with repeat counts. If you 
specify repeat counts, the text between one directive and the next is 
copied to the output string the specified number of times.
The %F directive marks the end of a plurals statement.