Changeset 55


Ignore:
Timestamp:
Sep 26, 2024, 3:38:04 AM (11 months ago)
Author:
Alex Taylor
Message:

Slight code refactor and better validation handling in ULSQueryAttr.

Location:
rxuls/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • rxuls/trunk/Makefile

    r46 r55  
    2020BL_DESC = "REXX Universal Language Support functions"
    2121BL_VENDOR = "Alex Taylor"
    22 BL_VERSION = "0.6.2"
     22BL_VERSION = "0.6.3"
    2323
    2424
  • rxuls/trunk/rxuls.c

    r46 r55  
    6666
    6767#define SZ_LIBRARY_NAME         "RXULS"     // Name of this library
    68 //#define SZ_ERROR_NAME           "ULSERR"    // REXX variable used to store error codes
     68//#define SZ_ERROR_NAME           "ULSERR"    // REXX variable used to store error codes - now defined in Makefile
    6969
    7070#define US_VERSION_MAJOR        0           // Major version number of this library
    7171#define US_VERSION_MINOR        6           // Minor version number of this library
    72 #define US_VERSION_REFRESH      2           // Refresh level of this library
     72#define US_VERSION_REFRESH      3           // Refresh level of this library
    7373
    7474#define US_CPSPEC_MAXZ          72          // Maximum length of a conversion specifier
     
    750750    AttrObject   attrib;                // attribute object
    751751    LocaleObject locale;                // handle to the requested locale
    752     UniChar      suChar[ 2 ],           // input UniChar (as string)
    753                  *psuOffset,
     752    UniChar      *psuChar,              // input character as Unicode
    754753                 *psuAttrib;            // name of the requested attribute
    755     PSZ          pszOffset;
    756754    ULONG        ulSourceCP = 0,        // source codepage number
    757755                 ulRC       = 0;        // return code
    758     size_t       stInLen,
    759                  stOutLen,
    760                  stSubs;
    761756
    762757
     
    790785                                  UCS_ENDIAN_SYSTEM, CONTROLS_MAP_DATA, DBCS_PATH_NO, 0 );
    791786        if ( ulRC == ULS_SUCCESS ) {
    792             memset( suChar, 0, sizeof(suChar) );
    793             if ( ulSourceCP == 1200 ) {
    794                 // Input text is already UCS-2; parse it directly as such
    795                 suChar[ 0 ] = UNICHARFROM2BYTES( argv[0].strptr[0], argv[0].strptr[1] );
    796             } else {
    797                 // Convert the input text to UCS-2
    798                 stInLen   = argv[0].strlength;
    799                 stOutLen  = 2;
    800                 stSubs    = 0;
    801                 pszOffset = argv[0].strptr;
    802                 psuOffset = suChar;
    803                 ulRC = UniUconvToUcs( uconvCP, (PPVOID) &pszOffset, &stInLen, &psuOffset, &stOutLen, &stSubs );
    804                 if ( ulRC != ULS_SUCCESS ) {
    805                     WriteErrorCode( ulRC, "UniUconvToUcs");
    806                     SaveResultString( prsResult, NULL, 0 );
    807                 }
    808             }
    809 
    810             if ( ulRC == ULS_SUCCESS ) {
     787
     788            // Convert the input character into Unicode if necessary
     789            if ( InputStringToUnicode( argv[0], &psuChar, uconvCP, ulSourceCP )) {
     790
    811791                // Convert the requested attribute name into UCS-2
    812792                psuAttrib = (UniChar *) calloc( argv[1].strlength + 1, sizeof(UniChar) );
     
    818798
    819799                        // Now do the query and return the result
    820                         if ( UniQueryCharAttr( attrib, suChar[0] ) == 0 ) {
     800                        if ( UniQueryCharAttr( attrib, psuChar[0] ) == 0 ) {
    821801                            SaveResultString( prsResult, PSZ_ZERO, 1 );
    822802                        } else {
     
    835815                }
    836816                if ( psuAttrib ) free( psuAttrib );
     817                free( psuChar );
    837818            }
    838819            UniFreeUconvObject( uconvCP );
  • rxuls/trunk/rxuls.def

    r46 r55  
    11LIBRARY     RXULS INITINSTANCE TERMINSTANCE
    22DATA        MULTIPLE NONSHARED
    3 DESCRIPTION '@#Alex Taylor:0.6.1#@##1## 4 Apr 2018 12:50:08      REINFORCE::::::@@REXX Universal Language Support functions'
     3DESCRIPTION '@#Alex Taylor:0.6.3#@##1## 20 Sep 2024 08:48:06     VM-ArcaOS5::::::@@REXX Universal Language Support functions'
    44
    55EXPORTS     ULSLoadFuncs
Note: See TracChangeset for help on using the changeset viewer.