Jump to content

UniStrFromUcs: Difference between revisions

From EDM2
m correction
m expanded example code
Line 28: Line 28:


=== Example Code ===
=== Example Code ===
  [[OS2 API:DataType:UconvObject|UconvObject]] uconvObj;
character  in = "C:\SOMEPATH\FILE.TXT";
  [[OS2 API:DataType:CHAR|CHAR]]*       outBuffer;
  [[OS2 API:DataType:UniChar|UniChar]]    ucsString;
size_t      unicodeBuffLen = 12;
integer    outBufferLen;
  [[OS2 API:DataType:ULONG|ULONG]]       codePage;
  [[OS2 API:DataType:APIRET|APIRET]]     rc;
  [[OS2 API:DataType:ULONG|ULONG]]      cpLen;       // length set by [[OS2 API:DosQueryCp|DosQueryCp]]
  ...
  [[OS2 API:DataType:UniChar|UniChar]]    unicodeBuff, // length of unicodeBuffLen
  rc = UniStrFromUcs(uconvObj, outBuffer, ucsString, outBufferLen);
            ucsString;   // length of CCHMAXPATH
  ...
  [[OS2 API:DataType:UconvObject|UconvObject]] uconv;
character  outBuffer;  // allocate to CCHMAXPATH
integer    rc;
 
rc = DosQueryCp(size of ULONG, codePage, cpLen);
 
/* determine string for the conversion of codePage */
rc = UniMapCpToUcsCp(codePage, unicodeBuff, unicodeBuffLen);
rc = UniCreateUconvObject(unicodeBuff, uconvObj);
rc = UniStrToUcs(uconvObj, ucsString, in, CCHMAXPATH);
rc = UniFreeUconvObject(uconvObj);
 
  /* conversion for current codepage that can be used for paths */
rc = UniCreateUconvObject((UniChar pointer)L"@path=yes", uconvObj);
  rc = UniStrFromUcs(uconvObj, outBuffer, ucsString, CCHMAXPATH);
rc = UniFreeUconvObject(uconvObj);
 
  /* use outBuffer - don't forget to de-allocate outBuffer when finished with it. */
/* error checking left out for brevity */


=== Related Functions ===
=== Related Functions ===

Revision as of 23:03, 14 May 2008

UniStrFromUcs

UniStrFromUcs(uconvObj, outBuffer, ucsString, outBufferLen)
Convert a UCS string to a code page string.

Parameters

uconvObj - UconvObject - input
The conversion object created from UniCreateUconvObject.
outBuffer - CHAR - output
The output buffer to hold code page.
ucsString - UniChar - input
Null terminated Unicode string.
outBufferLen - (int) - input/output
The output buffer's length, in bytes.

Constants

None

Returns

An integer with values of:

Module

Define (C/C++)

Export name/Ordinal

Calling conversion

Cdecl32

Example Code

character   in = "C:\SOMEPATH\FILE.TXT";

size_t      unicodeBuffLen = 12;
ULONG       codePage;
ULONG       cpLen;       // length set by DosQueryCp
UniChar     unicodeBuff, // length of unicodeBuffLen
            ucsString;   // length of CCHMAXPATH
UconvObject uconv;
character   outBuffer;   // allocate to CCHMAXPATH
integer     rc;
rc = DosQueryCp(size of ULONG, codePage, cpLen);
/* determine string for the conversion of codePage */
rc = UniMapCpToUcsCp(codePage, unicodeBuff, unicodeBuffLen);
rc = UniCreateUconvObject(unicodeBuff, uconvObj);
rc = UniStrToUcs(uconvObj, ucsString, in, CCHMAXPATH);
rc = UniFreeUconvObject(uconvObj);
/* conversion for current codepage that can be used for paths */
rc = UniCreateUconvObject((UniChar pointer)L"@path=yes", uconvObj);
rc = UniStrFromUcs(uconvObj, outBuffer, ucsString, CCHMAXPATH);
rc = UniFreeUconvObject(uconvObj);
/* use outBuffer - don't forget to de-allocate outBuffer when finished with it. */
/* error checking left out for brevity */

Related Functions

UniconvFromUcs UniconvToUcs UniStrToUcs

Notes

The sequence of code elements in ucsString is converted into a sequence of code page characters to outBuffer. The code page was set by UniCreateUnconvObject call in the UconvObject.

If the outBuffer isn't large enough, conversion ends on the byte previous to any buffer overflow. outBuffer is updated truncating the point of failure to the end and updating the outBufferLen to indicate the number of successfully converted bytes.

If UniStrFromUcs contains a code sequence in ucsString that is legal with no corresponding character in the target codepage this function will replace it with a predefined substituted character.

OS Version Introduced

OS/2 Warp