The default functions for reading in and writing out character codes using one of the three supported encodings are available through
SP_WcxGetcHook *SP_wcx_getc(int usage); SP_WcxPutcHook *SP_wcx_putc(int usage);
These functions return the decoding/encoding functions appropriate for
usage, where the latter is one of the constants
The following utility functions may be useful when dealing with wide characters in internal encoding (WCI). These functions are modeled after multibyte character handling functions of Solaris.
int SP_wci_code(int *pcode, char *wci);
SP_wci_code()determines the number of bytes that comprise the internally encoded character pointed to by
wci. Also, if
pcodeis not a null pointer,
SP_wci_code()converts the internally encoded character to a wide character code and places the result in the object pointed to by
pcode. (The value of the wide character corresponding to the null character is zero.) At most
WCI_MAX_BYTESbytes will be examined, starting at the byte pointed to by
wci is a null pointer,
SP_wci_code() simply returns
wci is not a null pointer, then, if
wci points to
the null character,
SP_wci_code() returns 0; if the next bytes
form a valid internally encoded character,
the number of bytes that comprise the internal encoding; otherwise
wci does not point to a valid internally encoded character and
SP_wci_code() returns the negated length of the invalid byte
sequence. This latter case can not happen, if
wci points to the
beginning of a Prolog atom string, or to a position within such a
string reached by repeated stepping over correctly encoded wide
WCI_MAX_BYTESis a constant defined by SICStus Prolog showing the maximal length (in bytes) of the internal encoding of a single character code. (As the internal encoding is UTF-8, this constant has the value 6).
int SP_wci_len(char *wci);
SP_wci_len()determines the number of bytes comprising the multi-byte character pointed to by
wci. It is equivalent to:
SP_wci_code((int *)0, wci);
int SP_code_wci(char *wci, int code);
SP_code_wci()determines the number of bytes needed to represent the internal encoding of the character
code, and, if
wciis not a null pointer, stores the internal encoding in the array pointed to by
wci. At most
WCI_MAX_BYTESbytes are stored.
SP_code_wci() returns -1 if the value of
code is outside
the wide character code range; otherwise it returns the number of
bytes that comprise the internal encoding of
The following functions give access to the default character type mapping and the currently selected operating system encoding/decoding functions.
int SP_latin1_chartype(int char_code);
SP_latin1_chartypereturns the character type category of the character code
char_code, according to the ISO 8859/1 code-set. The
char_codevalue is assumed to be in the 1..255 range.
char* SP_to_os(char *string, int context)
char* SP_from_os(char *string, int context)
wcx_from_os()hook functions, respectively. These are useful in foreign functions that handle strings passed to/from the operating system, such as file names, options, etc.