Compaq C
Compaq C Run-Time Library Reference Manual for 
OpenVMS Systems
 
 
 
strxfrm
 
Changes a string such that the changed string can be passed to the
strcmp
 function and produce the same result as passing the unchanged string to 
 the
strcoll
 function.
 
 
Format
#include <string.h>
size_t strxfrm (char *s1, const char *s2, size_t 
maxchar);
 
  
 
Arguments
s1, s2
Pointers to character strings.
maxchar
The maximum number of bytes (including the null terminator) to be 
stored in s1.
 
 
Description
This function transforms the string pointed to by
s2
, and stores the resulting string in the array pointed to by
s1
. No more than maxchar bytes, including the null terminator, 
are placed into the array pointed to by
s1
.
If the value of
maxchar
 is less than the required size to store the transformed string 
 (including the terminating null), the contents of the array pointed to 
 by
s1
 is indeterminate. In such a case, the function returns the size of the 
 transformed string.
 
If
maxchar
 is 0, then
s1
 is allowed to be a NULL pointer, and the function returns the required 
 size of the
s1
 array before making the transformation.
 
The string comparison functions,
strcoll
 and
strcmp
, can produce different results given the same two string to compare. 
The reason for this is that
strcmp
 does a straightforward comparison of the code point values of the 
 characters in the strings, whereas
strcoll
 uses the locale information to do the comparison. Depending on the 
 locale, the
strcoll
comparison can be a multipass operation, which is slower than
strcmp
.
 
The purpose of the
strxfrm
 function is to transform strings in such a way that if you pass two 
 transformed strings to the
strcmp
 function, the result is the same as passing the two original strings to 
 the
strcoll
 function. The
strxfrm
 function is useful in applications that need to do a large number of 
 comparisons on the same strings using
strcoll
. In this case, it might be more efficient (depending on the locale) to 
transform the strings once using
strxfrm
, and then do comparisons using
strcmp
.
  
 
Return Value
  
    | 
      x
     | 
    
Length of the resulting string pointed to by
s1, not including the terminating null character.
 No return value is reserved for error indication. However, the 
function can set
errno
 to EINVAL -- The string pointed to by
      ws2 contains characters outside the domain of the collating 
      sequence.
      | 
   
 
 
 
Example
 
  
    
       
      
/* This program verifies that two transformed strings when      */ 
/* passed through strxfrm and then compared, provide the same   */ 
/* result as if passed through strcoll without any              */ 
/* transformation.  
 
#include <string.h>                                        
#include <stdio.h> 
#include <stdlib.h> 
#include <locale.h> 
 
#define  BUFF_SIZE  256 
 
main() 
{ 
    char string1[BUFF_SIZE]; 
    char string2[BUFF_SIZE]; 
    int errno; 
    int coll_result; 
    int strcmp_result; 
    size_t strxfrm_result1; 
    size_t strxfrm_result2; 
 
    /* setlocale to French locale */ 
 
    if (setlocale(LC_ALL, "fr_FR.ISO8859-1") == NULL) { 
        perror("setlocale"); 
        exit(EXIT_FAILURE); 
    } 
 
    /* collate string 1 and string 2 and store the result */ 
 
    errno = 0; 
    coll_result = strcoll("<a`>bcd", "abcz"); 
    if (errno) { 
        perror("strcoll"); 
        exit(EXIT_FAILURE); 
    } 
 
    else { 
        /* Transform the strings (using strxfrm) into string1   */ 
        /* and string2                                          */ 
 
        strxfrm_result1 = strxfrm(string1, "<a`>bcd", BUFF_SIZE); 
 
        if (strxfrm_result1 == ((size_t) - 1)) { 
            perror("strxfrm"); 
            exit(EXIT_FAILURE); 
        } 
 
        else if (strxfrm_result1 > BUFF_SIZE) { 
            perror("\n** String is too long **\n"); 
            exit(EXIT_FAILURE); 
        } 
 
        else { 
            strxfrm_result2 = strxfrm(string2, "abcz", BUFF_SIZE); 
            if (strxfrm_result2 == ((size_t) - 1)) { 
                perror("strxfrm"); 
                exit(EXIT_FAILURE); 
            } 
 
            else if (strxfrm_result2 > BUFF_SIZE) { 
                perror("\n** String is too long **\n"); 
                exit(EXIT_FAILURE); 
            } 
 
            /* Compare the two transformed strings and verify   */ 
            /* that the result is the same as the result from   */ 
            /* strcoll on the original strings                  */ 
            else { 
                strcmp_result = strcmp(string1, string2); 
                if (strcmp_result == 0 && (coll_result == 0)) { 
                    printf("\nReturn value from strcoll() and " 
                      "return value from strcmp() are both zero."); 
                   printf("\nThe program was successful\n\n"); 
                } 
 
                else if ((strcmp_result < 0) && (coll_result < 0)) { 
                    printf("\nReturn value from strcoll() and " 
                 "return value from strcmp() are less than zero."); 
                    printf("\nThe program successful\n\n"); 
                } 
 
                else if ((strcmp_result > 0) && (coll_result > 0)) { 
                    printf("\nReturn value from strcoll() and return " 
                    " value from strcmp() are greater than zero."); 
                    printf("\nThe program was successful\n\n"); 
                } 
 
                else { 
                printf("** Error **\n"); 
                printf("\nReturn values are not of the same type"); 
                } 
            } 
        } 
   } 
} 
 |   
 
Running the example program produces the following result:
 
 
  
    
       
      
Return value from strcoll() and return value 
               from strcmp() are less than zero. 
The program was successful 
 |   
 
subwin
 
Creates a new subwindow with numlines lines and 
numcols columns starting at the coordinates 
(begin_y,begin_x) on the terminal screen.
 
 
Format
#include <curses.h>
WINDOW *subwin (WINDOW *win, int numlines, int 
numcols, int begin_y, int begin_x);
 
  
 
Arguments
win
A pointer to the parent window.
numlines
The number of lines in the subwindow. If numlines is 0, then 
the function sets that dimension to LINES -- begin_y. To get a 
subwindow of dimensions LINES by COLS, use the following format:
 
numcols
The number of columns in the subwindow. If numcols is 0, then 
the function sets that dimension to COLS -- begin_x. To get a 
subwindow of dimensions LINES by COLS, use the following format:
 
begin_y
A window coordinate at which the subwindow is to be created.
begin_x
A window coordinate at which the subwindow is to be created.
 
 
Description
When creating the subwindow, begin_y and begin_x are 
relative to the entire terminal screen. If either numlines or 
numcols is 0, then the
subwin
 function sets that dimension to (LINES -- begin_y) or (COLS -- 
 begin_x), respectively.
The window pointed to by win must be large enough to contain 
the entire area of the subwindow. Any changes made to either window 
within the coordinates of the subwindow appear on both windows.
  
 
Return Values
  
    | 
      window pointer
     | 
    
      A pointer to an instance of the structure window corresponding to the 
      newly created subwindow.
     | 
   
  
    | 
      ERR
     | 
    
      Indicates an error.
     | 
   
 
 
 
swab
 
Swaps bytes.
 
 
Format
#include <unistd.h>
void swab (const void *src, void *dest, ssize_t 
nbytes);
 
  
 
Arguments
src
A pointer to the location of the string to copy.
dest
A pointer to where you want the results copied.
nbytes
The number of bytes to copy. Make this argument an even value. When it 
is an odd value, the
swab
 function uses nbytes --1 instead.
 
 
Description
This function copies the number of bytes specified by nbytes 
from the location pointed to by src to the array pointed to by 
dest. The function then exchanges adjacent bytes. If a copy 
takes place between objects that overlap, the result is undefined.
 
 
swprintf
 
Writes output to an array of wide characters under control of the 
wide-character format string.
 
 
Format
#include <wchar.h>
int swprintf (wchar_t *s, size_t n, const wchar_t 
*format, ...);
 
  
 
Arguments
s
A pointer to the resulting wide-character sequence.
n
The maximum number of wide characters that can be written to an array 
pointed to by s, including a terminating null wide character.
format
A pointer to a wide-character string containing the format 
specifications. For more information about format and conversion 
specifications and their corresponding arguments, see Chapter 2.
...
Optional expressions whose resultant types correspond to conversion 
specifications given in the format specification.
If no conversion specifications are given, the output sources can be 
omitted. Otherwise, the function calls must have exactly as many output 
sources as there are conversion specifications, and the conversion 
specifications must match the types of the output sources.
 
Conversion specifications are matched to output sources in 
left-to-right order. Excess output pointers, if any, are ignored.
  
 
Description
The
swprintf
 function is equivalent to the
fwprintf
 function, except that the first argument specifies an array of wide 
 characters instead of a stream.
No more than n wide characters are written, including a 
terminating null wide character, which is always added (unless 
n is 0).
 
See also
fwprintf
 in this section.
  
 
Return Values
  
    | 
      x
     | 
    
      The number of wide characters written, not counting the terminating 
      null wide character.
     | 
   
  
    | 
      Negative value
     | 
    
Indicates an error. Either
n or more wide characters were requested to be written, or a 
conversion error occurred, in which case
errno
       is set to EILSEQ.
     | 
   
 
 
 
swscanf
 
Reads input from a wide-character string under control of the 
wide-character format string.
 
 
Format
#include <wchar.h>
int swscanf (const wchar_t *s, const wchar_t *format, 
...);
 
  
 
Arguments
s
A pointer to a wide-character string from which the input is to be 
obtained.
format
A pointer to a wide-character string containing the format 
specifications. For more information about format and conversion 
specifications and their corresponding arguments, see Chapter 2.
...
Optional expressions whose results correspond to conversion 
specifications given in the format specification.
If no conversion specifications are given, you can omit the input 
pointers. Otherwise, the function calls must have exactly as many input 
pointers as there are conversion specifications, and the conversion 
specifications must match the types of the input pointers.
 
Conversion specifications are matched to input sources in left-to-right 
order. Excess input pointers, if any, are ignored.
  
 
Description
The
swscanf
 function is equivalent to the
fwscanf
 function, except that the first argument specifies a wide-character 
 string rather than a stream. Reaching the end of the wide-character 
 string is the same as encountering EOF for the
fwscanf
 function.
See also
fwscanf
 in this section.
  
 
Return Values
  
    | 
      x
     | 
    
      The number of input items assigned, sometimes fewer than provided for, 
      or even 0 in the event of an early matching failure.
     | 
   
  
    | 
      EOF
     | 
    
      Indicates and error. An input failure occurred before any conversion.
     | 
   
 
 
 
sysconf
 
Gets configurable system variables.
 
 
Format
#include <unistd.h>
long int sysconf (int name);
 
  
 
Arguments
name
Specifies the system variable to be queried.
 
 
Description
This function provides a method for determining the current value of a 
configurable system limit or whether optional features are supported.
You supply a symbolic constant in the name argument, and
sysconf
 returns a value for the corresponding system variable:
 
  - The symbolic constants defined in the
<unistd.h>
 header file.
  
 - The system variables are defined in the
<limits.h>
 and
<unistd.h>
 header files.
  
Table REF-10 lists the system variables returned by the
sysconf
 function, and the symbolic constants that you can supply as the 
 name value.  
 
  Table REF-10 SYSCONF Argument and Return Values
  
    | System Variable Returned  | 
    Symbolic Constant for name  | 
    Meaning  | 
   
  
    | ISO POSIX-1  | 
   
  
    | 
      ARG_MAX
     | 
    
      _SC_ARG_MAX
     | 
    
The maximum length, in bytes, of the arguments for one of the
exec
       functions, including environment data.
     | 
   
  
    | 
      CHILD_MAX
     | 
    
      _SC_CHILD_MAX
     | 
    
      The maximum number of simultaneous processes for each real user ID.
     | 
   
  
    | 
      CLK_TCK
     | 
    
      _SC_CLK_TCK
     | 
    
      The number of clock ticks per second. The value of CLK_TCK can be 
      variable. Do not assume that CLK_TCK is a compile time constant.
     | 
   
  
    | 
      NGROUPS_MAX
     | 
    
      _SC_NGROUPS_MAX
     | 
    
      The maximum number of simultaneous supplementary group IDs for each 
      process.
     | 
   
  
    | 
      OPEN_MAX
     | 
    
      _SC_OPEN_MAX
     | 
    
      The maximum number of files that one process can have open at one time.
     | 
   
  
    | 
      STREAM_MAX
     | 
    
      _SC_STREAM_MAX
     | 
    
      The number of streams that one process can have open at one time.
     | 
   
  
    | 
      TZNAME_MAX
     | 
    
      _SC_TZNAME_MAX
     | 
    
The maximum number of bytes supported for the name of a time zone (not 
the length of the
TZ
       environmental variable).
     | 
   
  
    | 
      _POSIX_JOB_CONTROL
     | 
    
      _SC_JOB_CONTROL
     | 
    
      This variable has a value of 1 if the system supports job control; 
      otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX_SAVED_IDS
     | 
    
      _SC_SAVED_IDS
     | 
    
      This variable has a value of 1 if each process has a saved set user ID 
      and a saved set group ID; otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX_VERSION
     | 
    
      _SC_VERSION
     | 
    
The date of approval of the most current version of the POSIX-1 
standard that the system supports. The date is a 6-digit number, with 
the first 4 digits signifying the year and the last 2 digits the month.
 If_POSIX_VERSION is not defined, --1 is returned.
       Different versions of the POSIX-1 standard are periodically approved 
      by the IEEE Standards Board, and the date of approval is used to 
      distinguish between different versions.
      | 
   
  
    | ISO POSIX-2  | 
   
  
    | 
      BC_BASE_MAX
     | 
    
      _SC_BC_BASE_MAX
     | 
    
The maximum value allowed for the
obase
 variable with the
bc
       command.
     | 
   
  
    | 
      BC_DIM_MAX
     | 
    
      _SC_BC_DIM_MAX
     | 
    
The maximum number of elements permitted in an array by the
bc
       command.
     | 
   
  
    | 
      BC_SCALE_MAX
     | 
    
      _SC_BC_SCALE_MAX
     | 
    
The maximum value allowed for the scale variable with the
bc
       command.
     | 
   
  
    | 
      BC_STRING_MAX
     | 
    
      _SC_BC_STRING_MAX
     | 
    
The maximum length of string constants accepted by the
bc
       command.
     | 
   
  
    | 
      COLL_WEIGHTS_MAX
     | 
    
      _SC_COLL_WEIGHTS_MAX
     | 
    
      The maximum number of weights that can be assigned to an entry in the 
      LC_COLLATE locale-dependent information in a locale definition file.
     | 
   
  
    | 
      EXPR_NEST_MAX
     | 
    
      _SC_EXPR_NEST_MAX
     | 
    
The maximum number of expressions that you can nest within parentheses 
by the
expr
       command.
     | 
   
  
    | 
      LINE_MAX
     | 
    
      _SC_LINE_MAX
     | 
    
      The maximum length, in bytes, of a command input line (either standard 
      input or another file) when the utility is described as processing text 
      files. The length includes room for the trailing newline character.
     | 
   
  
    | 
      RE_DUP_MAX
     | 
    
      _SC_RE_DUP_MAX
     | 
    
The maximum number of repeated occurrences of a regular expression 
permitted when using the interval notation arguments, such as the
m and
n arguments with the
ed
       command.
     | 
   
  
    | 
      _POSIX2_CHAR_TERM
     | 
    
      _SC_2_CHAR_TERM
     | 
    
      This variable has a value of 1 if the system supports at least one 
      terminal type; otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX2_C_BIND
     | 
    
       _SC_2_C_BIND
     | 
    
      This variable has a value of 1 if the system supports the C language 
      binding option; otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX2_C_DEV
     | 
    
      _SC_2_C_DEV
     | 
    
      This variable has a value of 1 if the system supports the optional C 
      Language Development Utilities from the ISO POSIX-2 standard; 
      otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX2_C_VERSION
     | 
    
      _SC_2_C_VERSION
     | 
    
      Integer value indicating the version of the ISO POSIX-2 standard (C 
      language binding). It changes with each new version of the ISO POSIX-2 
      standard.
     | 
   
  
    | 
      _POSIX2_VERSION
     | 
    
      _SC_2_VERSION
     | 
    
      Integer value indicating the version of the ISO POSIX-2 standard 
      (Commands). It changes with each new version of the ISO POSIX-2 
      standard.
     | 
   
  
    | 
      _POSIX2_FORT_DEV
     | 
    
      _SC_2_FORT_DEV
     | 
    
      The variable has a value of 1 if the system supports the FORTRAN 
      Development Utilities Option from the ISO POSIX-2 standard; otherwise, 
      --1 is returned.
     | 
   
  
    | 
      _POSIX2_FORT_RUN
     | 
    
      _SC_2_FORT_RUN
     | 
    
      The variable has a value of 1 if the system supports the FORTRAN 
      Runtime Utilities Option from the ISO POSIX-2 standard; otherwise, --1 
      is returned.
     | 
   
  
    | 
      _POSIX2_LOCALEDEF
     | 
    
      _SC_2_LOCALEDEF
     | 
    
The variable has a value of 1 if the system supports the creation of 
new locales with the
localedef
       command; otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX2_SW_DEV
     | 
    
      _SC_2_SW_DEV
     | 
    
      The variable has a value of 1 if the system supports the Software 
      Development Utilities Option from the ISO POSIX-2 standard; otherwise, 
      --1 is returned.
     | 
   
  
    | 
      _POSIX2_UPE
     | 
    
      _SC_2_UPE
     | 
    
      The variable has a value of 1 if the system supports the User 
      Portability Utilities Option; otherwise, --1 is returned.
     | 
   
  
    | POSIX 1003.1c-1995  | 
   
  
    | 
      _POSIX_THREADS
     | 
    
      _SC_THREADS
     | 
    
      This variable has a value of 1 if the system supports POSIX threads; 
      otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX_THREAD_ATTR_STACKSIZE
     | 
    
      _SC_THREAD_ATTR_STACKSIZE
     | 
    
      This variable has a value of 1 if the system supports the POSIX threads 
      stack size attribute; otherwise, --1 is returned.
     | 
   
  
    | 
      _POSIX_THREAD_PRIORITY_SCHEDULING
     | 
    
      _SC_THREAD_PRIORITY_SCHEDULING
     | 
    
      The 1003.1c implementation supports the realtime scheduling functions.
     | 
   
  
    | 
      _POSIX_THREAD_SAFE_FUNCTIONS
     | 
    
      _SC_THREAD_SAFE_FUNCTIONS
     | 
    
      TRUE if the implementation supports the thread-safe ANSI C functions in 
      POSIX 1003.1c.
     | 
   
  
    | 
      PTHREAD_DESTRUCTOR_ITERATIONS
     | 
    
       _SC_THREAD_DESTRUCTOR_ITERATIONS
     | 
    
When a thread terminates, DECthreads iterates through all non-NULL 
thread-specific data values in the thread, and calls a registered 
destructor routine (if any) for each. It is possible for a destructor 
routine to create new values for one or more thread-specific data keys. 
In that case, DECthreads goes through the entire process again.
       _SC_THREAD_DESTRUCTOR_ITERATIONS is the maximum number of times the 
      implementation loops before it terminates the thread even if there are 
      still non-NULL values.
      | 
   
  
    | 
      PTHREAD_KEYS_MAX
     | 
    
      _SC_THREAD_KEYS_MAX
     | 
    
      The maximum number of thread-specific data keys that an application can 
      create.
     | 
   
  
    | 
      PTHREAD_STACK_MIN
     | 
    
      _SC_THREAD_STACK_MIN
     | 
    
      The minimum allowed size of a stack for a new thread. Any lower value 
      specified for the "stacksize" thread attribute is rounded up.
     | 
   
  
    | 
      UINT_MAX
     | 
    
      _SC_THREAD_THREADS_MAX
     | 
    
      The maximum number of threads an application is allowed to create. 
      Since DECthreads does not enforce any fixed limit, this value is --1.
     | 
   
  
    | X/Open  | 
   
  
    | 
      _XOPEN_VERSION
     | 
    
      _SC_XOPEN_VERSION
     | 
    
      An integer indicating the most current version of the X/OPEN standard 
      that the system supports.
     | 
   
  
    | 
      PASS_MAX
     | 
    
      _SC_PASS_MAX
     | 
    
      Maximum number of significant bytes in a password (not including 
      terminating null).
     | 
   
  
    | 
      XOPEN_CRYPT
     | 
    
      _SC_XOPEN_CRYPT
     | 
    
      This variable has a value of 1 if the system supports the X/Open 
      Encryption Feature Group; otherwise, --1 is returned.
     | 
   
  
    | 
      XOPEN_ENH_I18N
     | 
    
      _SC_XOPEN_ENH_I18N
     | 
    
      This variable has a value of 1 if the system supports the X/Open 
      enhanced Internationalization Feature Group; otherwise, --1 is returned.
     | 
   
  
    | 
      XOPEN_SHM
     | 
    
      _SC_XOPEN_SHM
     | 
    
      This variable has a value of 1 if the system supports the X/Open Shared 
      Memory Feature Group; otherwise, --1 is returned.
     | 
   
  
    | X/Open Extended  | 
   
  
    | 
      ATEXIT_MAX
     | 
    
      _SC_ATEXIT_MAX
     | 
    
The maximum number of functions that you can register with
atexit
       per process.
     | 
   
  
    | 
      PAGESIZE
     | 
    
      _SC_PAGESIZE
     | 
    
      Size in bytes of a page.
     | 
   
  
    | 
      PAGE_SIZE
     | 
    
      _SC_PAGE_SIZE
     | 
    
      Same as PAGESIZE. If either PAGESIZE or PAGE_SIZE is defined, the other 
      is defined with the same value.
     | 
   
  
    | 
      IOV_MAX
     | 
    
      _SC_IOV_MAX
     | 
    
Maximum number of iovec structures that one process has available for 
use with
readv
 or
writev
      .
     | 
   
  
    | 
      XOPEN_UNIX
     | 
    
      _SC_XOPEN_UNIX
     | 
    
      This variable has a value of 1 if the system supports the X/Open CAE 
      Specification, August 1994, System Interfaces and Headers, Issue 4, 
      Version 2, (ISBN: 1-85912-037-7, C435); otherwise, --1 is returned.
     | 
   
 
 
 
Return Values
  
    | 
      x
     | 
    
      The current variable value on the system. The value does not change 
      during the lifetime of the calling process.
     | 
   
  
    | 
      --1
     | 
    
Indicates an error.
 If the value of the
name argument is invalid,
errno
 is set to indicate the error.
 If the value of the
name argument is undefined,
errno
       is unchanged.
      | 
   
 
 
  
         |