Previous | Contents | Index |
To ensure that addresses and integers are displayed properly on the system, use the following conventions when using the $FAO and $FAOL system services:
Table SYS-35 lists $FAO directives.
Directive | Description |
---|---|
Directives for Character String Substitution | |
!AC | Inserts a counted ASCII string. It requires one parameter: the address of the string to be inserted. The first byte of the string must contain the length (in characters) of the string. |
!AD | Inserts an ASCII string. It requires two parameters: the length of the string and the address of the string. Each of these parameters is a separate argument. |
!AF | Inserts an ASCII string and replaces all nonprintable ASCII codes with periods (.). It requires two parameters: the length of the string and the address of the string. Each of these parameters is a separate argument. |
!AS | Inserts an ASCID string. It requires one parameter: the address of a character string descriptor pointing to the string. $FAO assumes that the descriptor is a CLASS_S (static) or CLASS_D (dynamic) string descriptor. Other descriptor types might give incorrect results. |
!AZ | Inserts a zero-terminated (ASCIZ) string. It requires one parameter: the address of a zero-terminated string. |
Directives for Zero-Filled Numeric Conversion | |
!OB | Converts a byte value to the ASCII representation of the value's octal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order byte of the longword parameter. |
!OW | Converts a word value to the ASCII representation of the value's octal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order word of the longword parameter. |
!OL | Converts a longword value to the ASCII representation of the value's octal equivalent. It requires one parameter: the value to be converted. |
!OQ | Converts on Alpha and Integrity server systems a quadword to the ASCII representation of its octal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. This directive cannot be used from DCL. |
!OA | Converts an address to the ASCII representation of its octal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!OI | Converts an integer to the ASCII representation of its octal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!OH | Converts an address to the ASCII representation of its octal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!OJ | Converts an integer to the ASCII representation of its octal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!XB | Converts a byte value to the ASCII representation of the value's hexadecimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order byte of the longword parameter. |
!XW | Converts a word value to the ASCII representation of the value's hexadecimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order word of the longword parameter. |
!XL | Converts a longword value to the ASCII representation of the value's hexadecimal equivalent. It requires one parameter: the value to be converted. |
!XQ | Converts on Alpha and Integrity server systems a quadword to the ASCII representation of its hexadecimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit sign-extended value is written to the output buffer. It receives one parameter: the value to be converted. This directive cannot be used from DCL. |
!XA | Converts an address to the ASCII representation of its hexadecimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!XI | Converts an integer to the ASCII representation of its hexadecimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!XH | Converts an address to the ASCII representation of its hexadecimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!XJ | Converts an integer to the ASCII representation of its hexadecimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit sign-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!ZB | Converts an unsigned byte value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order byte of the longword parameter. |
!ZW | Converts an unsigned word value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order word of the longword parameter. |
!ZL | Converts an unsigned longword value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. |
!ZQ | Converts on Alpha and Integrity server systems an unsigned quadword to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit zero-extended value is written to the output buffer. It receives one parameter: the value to be converted. This directive cannot be used from DCL. |
!ZA | Converts an unsigned address to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!ZI | Converts an unsigned integer to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!ZH | Converts an unsigned address to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit zero-extended value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!ZJ | Converts an unsigned integer to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit zero-extended value is written to the output buffer. It receives one parameter: the value to be converted. 2 |
Directives for Blank-Filled Numeric Conversion | |
!UB | Converts an unsigned byte value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order byte of the longword parameter. |
!UW | Converts an unsigned word value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order word of the longword parameter. |
!UL | Converts an unsigned longword value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. |
!UQ | Converts on Alpha and Integrity server systems an unsigned quadword to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. This directive cannot be used from DCL. |
!UA | Converts an unsigned address to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!UI | Converts an unsigned integer to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!UH | Converts an unsigned address to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!UJ | Converts an unsigned integer to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 64-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!SB | Converts a signed byte value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order byte of the longword parameter. |
!SW | Converts a signed word value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. $FAO uses only the low-order word of the longword parameter. |
!SL | Converts a signed longword value to the ASCII representation of the value's decimal equivalent. It requires one parameter: the value to be converted. |
!SQ | Converts on Alpha and Integrity server systems a signed quadword to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. This directive cannot be used from DCL. |
!SA | Converts a signed address to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!SI | Converts a signed integer to the ASCII representation of its equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 1 |
!SH | Converts a signed address to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
!SJ | Converts a signed integer to the ASCII representation of its decimal equivalent. Must use the indirect directive @ to output the quadword value for $FAOL; otherwise, a 32-bit value is written to the output buffer. It receives one parameter: the address of the value to be converted. 2 |
Directives for Output String Formatting | |
!/ | Inserts a new line, that is, a carriage return and line feed. It takes no parameters. |
!_ | Inserts a tab. It takes no parameters. |
!^ | Inserts a form feed. It takes no parameters. |
!! | Inserts an exclamation point. It takes no parameters. |
!%S | Inserts the letter S if the most recently converted numeric value is not 1. An uppercase S is inserted if the character before the !%S directive is an uppercase character; a lowercase s is inserted if the character is lowercase. |
!%T | Inserts the system time. It takes one parameter: the address of a quadword time value to be converted to ASCII. If you specify 0, the current system time is inserted. |
!%U | Converts a longword integer UIC to a standard UIC specification in the format [xxx,yyy], where xxx is the group number and yyy is the member number. It takes one parameter: a longword integer. The directive inserts the surrounding brackets ([ ]) and comma (,). |
!%I | Converts a longword to the appropriate alphanumeric identifier. If the longword represents a UIC, surrounding brackets ([ ]) and comma (,) are added as necessary. If no identifier exists and the longword represents a UIC, the longword is formatted as in !%U. Otherwise it is formatted as in !XL with a preceding !%X added to the formatted result. |
!%D | Inserts the system date and time. It takes one parameter: the address of a quadword time value to be converted to ASCII. If you specify 0, the current system date and time is inserted. |
!n%C | Inserts a character string when the most recently evaluated argument has the value n. (Recommended for use with multilingual products.) |
!%E | 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 | Makes the end of a plurals statement. |
!n< | See description of next directive (!>). |
!> | This directive and the preceding one (!n<) are used together to define an output field width of n characters within which all data and directives to the right of !n< and to the left of !> are left-justified and blank-filled. It takes no parameters. |
!n*c | Repeats the character c in the output string n times. |
Directives for Parameter Interpretation | |
!-- | Causes $FAO to reuse the most recently used parameter in the list. It takes no parameters. |
!+ | Causes $FAO to skip the next parameter in the list. It takes no parameters. |
Table SYS-36 shows the $FAO output field lengths and their fill characters.
Conversion/Substitution Type | Default Length of Output Field | Action When Explicit Output Field Length Is Longer Than Default | Action When Explicit Output Field Length Is Shorter Than Default |
---|---|---|---|
Hexadecimal | |||
Byte
Word Longword Quadword |
2 (zero-filled)
4 (zero-filled) 8 (zero-filled) 16 (zero-filled) |
ASCII result is right-justified and blank-filled to the specified length. | ASCII result is truncated on the left. |
Octal | |||
Byte
Word Longword Quadword |
3 (zero-filled)
6 (zero-filled) 11 (zero-filled) 22 (zero-filled) |
Hexadecimal or octal output is always zero-filled to the default output field length, then blank-filled to specified length. | |
Signed or unsigned decimal | |||
Signed or unsigned decimal | As many characters as necessary | ASCII result is right-justified and blank-filled to the specified length. | Signed and unsigned decimal output fields and completely filled with asterisks (*). |
Unsigned zero-filled decimal | |||
Unsigned zero-filled decimal | As many characters as necessary | ASCII result is right-justified and zero-filled to the specified length. | |
ASCII string substitution | |||
ASCII string substitution | Length of input character string | ASCII string is left-justified and blank-filled to the specified length. | ASCII string is truncated on the right. |
None
None
$ALLOC, $ASSIGN, $BRKTHRU, $BRKTHRUW, $CANCEL, $CREMBX, $DALLOC, $DASSGN, $DELMBX, $DEVICE_SCAN, $DISMOU, $GETDVI, $GETDVIW, $GETMSG, $GETQUI, $GETQUIW, $INIT_VOL, $MOUNT, $PUTMSG, $QIO, $QIOW, $SNDERR, $SNDJBC, $SNDJBCW, $SNDOPR
SS$_BUFFEROVF The service completed successfully. The formatted output string overflowed the output buffer and has been truncated. SS$_NORMAL The service completed successfully. SS$_ACCVIO The ctrstr, p1 through pn, or prmlst arguments cannot be read, or the outlen argument cannot be written (it can specify 0). SS$_BADPARAM You specified an invalid directive in the $FAO control string. SS$_OVERMAXARG Maximum parameter count exceeded.
Each of the following examples shows an $FAO control string with several directives, parameters defined as input for the directives, and the calls to $FAO to format the output strings.
Each example is accompanied by notes. These notes show the output string created by the call to $FAO and describe in more detail some considerations for using directives. The sample output strings show the underscore character (_) for each space in all places where $FAO output contains multiple spaces.
Each of the first 10 examples (numbered 1 through 10) refers to the following output fields but does not include these fields within the examples.
int status, /* Status of system calls */ outlen; /* Length of output string from $FAO */ char out_buffer[80]; /* Buffer for $FAO output */ $DESCRIPTOR(out_desc, out_buffer); /* Descriptor for out_buffer */Each of the 10 examples also assumes the caller of each example will check the returned status, and write the output string produced by $FAO if no error occurred. The following code fragment shows how the example call may be made, and the resultant string output to the user's terminal.
#include <stdio.h> #include <stsdef.h> #include <lib$routines.h> . . . status = example(); /* Immediately signal (and quit) if error occurred */ if ((status & STS$M_SUCCESS) == 0) lib$signal(status); /* FAO directive succeeded, output resultant string */ out_buffer[outlen] = '\0'; /* add string terminator to buffer */ puts(out_buffer); /* output the result */The final example (numbered 11) shows a segment of a HP Fortran for OpenVMS program used to output an ASCII string.
#1 |
---|
/* SYS$FAO example - illustrating !AC, !AS, !AD, and !/ directives */ #include <string.h> #include <descrip.h> #include <starlet.h> /* MACRO and typedef for counted ASCII strings... */ typedef struct {char len, str[25];} ASCIC; #define ASCIC_STRING(name, string) ASCIC name = {sizeof(string) - 1, string} int example() { char *nod = "Nod"; /* Normal "C" string */ const int nodlen = strlen(nod); /* Length of "Nod" without '\0' */ static ASCIC_STRING(winken, "Winken"); static $DESCRIPTOR(blinken, "Blinken"); static $DESCRIPTOR(fao_desc, "!/Sailors: !AC !AS !AD"); return (sys$fao(&fao_desc, /* Control string for $FAO */ &outlen, /* Pointer for length of output string */ &out_desc, /* Descriptor for output buffer */ &winken, /* P1 - Counted ASCII string */ &blinken, /* P2 - ASCII string descriptor */ nodlen, /* P3 - Length of ASCII string */ nod)); /* P4 - ASCII string */ } |
Previous Next Contents Index