Changeset 32 for rxuls/trunk/rxuls.c


Ignore:
Timestamp:
Jul 11, 2016, 2:43:58 PM (9 years ago)
Author:
Alex Taylor
Message:

Move several common functions into shared directory.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rxuls/trunk/rxuls.c

    r28 r32  
    5252#include <rexxsaa.h>
    5353
     54#include "shfuncs.h"
     55
    5456
    5557// MACROS
     
    6466
    6567#define SZ_LIBRARY_NAME         "RXULS"     // Name of this library
    66 #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
    6769
    6870#define US_VERSION_MAJOR        0           // Major version number of this library
    69 #define US_VERSION_MINOR        5           // Minor version number of this library
    70 #define US_VERSION_REFRESH      9           // Refresh level of this library
     71#define US_VERSION_MINOR        6           // Minor version number of this library
     72#define US_VERSION_REFRESH      0           // Refresh level of this library
    7173
    7274#define US_CPSPEC_MAXZ          72          // Maximum length of a conversion specifier
    7375#define LOCALE_BUF_MAX          4096        // Maximum length of the locale list
    7476
    75 #define US_COMPOUND_MAXZ        250         // Maximum length of a compound variable
     77#ifdef NO_SHARED_SOURCE
     78    #define US_COMPOUND_MAXZ    250         // Maximum length of a compound variable
     79    #define US_ERRSTR_MAXZ      250         // Maximum length of an error string
     80#endif
    7681#define US_INTEGER_MAXZ         12          // Maximum length of an integer string
    7782#define US_STEM_MAXZ          ( US_COMPOUND_MAXZ - US_INTEGER_MAXZ )  // Maximum length of a stem
    78 #define US_ERRSTR_MAXZ          250         // Maximum length of an error string
    7983#define US_STRFTIME_MAXZ        256         // Maximum length of a formatted time string
    8084
     
    134138ULONG  CreateUconvObject( UconvObject *uco, ULONG ulCP, USHORT fEndian, USHORT fMap, USHORT fPath, USHORT ucSubChar );
    135139BOOL   InputStringToUnicode( RXSTRING rxstring, UniChar **psuOutput, UconvObject uconv, ULONG ulSourceCP );
    136 BOOL   SaveResultString( PRXSTRING prsResult, PCH pchBytes, ULONG ulBytes );
    137 void   WriteStemElement( PSZ pszStem, ULONG ulIndex, PSZ pszValue );
    138 void   WriteErrorCode( ULONG ulError, PSZ pszContext );
     140#ifdef NO_SHARED_SOURCE
     141    BOOL   SaveResultString( PRXSTRING prsResult, PCSZ pchBytes, ULONG ulBytes );
     142    void   WriteStemElement( PCSZ pszStem, ULONG ulIndex, PCSZ pszValue );
     143    void   WriteErrorCode( ULONG ulError, PCSZ pszContext );
     144#endif
    139145
    140146
     
    171177        RexxRegisterFunctionDll( RxFunctionTbl[i], SZ_LIBRARY_NAME, RxFunctionTbl[i] );
    172178
    173     MAKERXSTRING( *prsResult, "", 0 );
     179    SaveResultString( prsResult, NULL, 0 );
    174180    return ( 0 );
    175181}
     
    193199
    194200    if ( argc > 0 ) return ( 40 );
     201    RexxDeregisterFunction("ULSLoadFuncs");
    195202    entries = sizeof(RxFunctionTbl) / sizeof(PSZ);
    196203    for ( i = 0; i < entries; i++ )
    197204        RexxDeregisterFunction( RxFunctionTbl[i] );
    198 
    199     MAKERXSTRING( *prsResult, "", 0 );
     205    SaveResultString( prsResult, NULL, 0 );
    200206    return ( 0 );
    201207}
     
    218224
    219225    if ( argc > 0 ) return ( 40 );
    220     sprintf( szVersion, "%d.%d.%d", US_VERSION_MAJOR, US_VERSION_MINOR, US_VERSION_REFRESH );
    221 
    222     MAKERXSTRING( *prsResult, szVersion, strlen(szVersion) );
     226    sprintf( szVersion, "%u.%u.%u", US_VERSION_MAJOR, US_VERSION_MINOR, US_VERSION_REFRESH );
     227
     228    SaveResultString( prsResult, szVersion, strlen(szVersion) );
    223229    return ( 0 );
    224230}
     
    301307    // If source and target codepages are the same, just return the input string
    302308    if ( ulSourceCP == ulTargetCP ) {
    303         MAKERXSTRING( *prsResult, argv[0].strptr, argv[0].strlength );
     309        SaveResultString( prsResult, argv[0].strptr, argv[0].strlength );
    304310        return ( 0 );
    305311    }
     
    347353                }
    348354                if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) {
    349                     MAKERXSTRING( *prsResult, "", 0 );
     355                    SaveResultString( prsResult, NULL, 0 );
    350356                }
    351357                free( pszFinal );
     
    369375                        // Return the final converted string
    370376                        if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) {
    371                             MAKERXSTRING( *prsResult, "", 0 );
     377                            SaveResultString( prsResult, NULL, 0 );
    372378                        }
    373379                    } else {
    374380                        // UniUconvFromUcs failed
    375381                        WriteErrorCode( ulRC, "UniUconvFromUcs");
    376                         MAKERXSTRING( *prsResult, "", 0 );
     382                        SaveResultString( prsResult, NULL, 0 );
    377383                    }
    378384                    free( pszFinal );
     
    382388                    // Failed to create target UconvObject
    383389                    WriteErrorCode( ulRC, "UniCreateUconvObject");
    384                     MAKERXSTRING( *prsResult, "", 0 );
     390                    SaveResultString( prsResult, NULL, 0 );
    385391                }
    386392            }
     
    389395        } else {
    390396            // Conversion to UCS failed
    391             MAKERXSTRING( *prsResult, "", 0 );
     397            SaveResultString( prsResult, NULL, 0 );
    392398        }
    393399
     
    398404        // Failed to create source UconvObject
    399405        WriteErrorCode( ulRC, "UniCreateUconvObject");
    400         MAKERXSTRING( *prsResult, "", 0 );
     406        SaveResultString( prsResult, NULL, 0 );
    401407    }
    402408
     
    446452        } else
    447453            sprintf( szLocale, "%ls", suLocale );
    448         MAKERXSTRING( *prsResult, szLocale, strlen(szLocale) );
     454        SaveResultString( prsResult, szLocale, strlen(szLocale) );
    449455    } else {
    450456        WriteErrorCode( ulRC, "UniMapCtryToLocale");
    451         MAKERXSTRING( *prsResult, "", 0 );
     457        SaveResultString( prsResult, NULL, 0 );
    452458    }
    453459
     
    528534        sprintf( szNumber, "%d", ulCount );
    529535        WriteStemElement( szStem, 0, szNumber );
    530         MAKERXSTRING( *prsResult, szNumber, strlen(szNumber) );
     536        SaveResultString( prsResult, szNumber, strlen(szNumber) );
    531537
    532538        if ( uconv != NULL ) UniFreeUconvObject( uconv );
     
    534540    } else {
    535541        WriteErrorCode( ulRC, "UniQueryLocaleList");
    536         MAKERXSTRING( *prsResult, "", 0 );
     542        SaveResultString( prsResult, NULL, 0 );
    537543    }
    538544
     
    660666                if ( ulRC != ULS_SUCCESS ) {
    661667                    WriteErrorCode( ulRC, "UniUconvToUcs");
    662                     MAKERXSTRING( *prsResult, "", 0 );
     668                    SaveResultString( prsResult, NULL, 0 );
    663669                }
    664670            }
     
    689695                        } else {
    690696                            WriteErrorCode( ulRC, "UniScanForAttr");
    691                             MAKERXSTRING( *prsResult, "", 0 );
     697                            SaveResultString( prsResult, NULL, 0 );
    692698                        }
    693699
     
    695701                    } else {
    696702                        WriteErrorCode( ulRC, "UniCreateAttrObject");
    697                         MAKERXSTRING( *prsResult, "", 0 );
     703                        SaveResultString( prsResult, NULL, 0 );
    698704                    }
    699705                } else {
    700706                    if ( psuAttrib ) WriteErrorCode( 0, "mbstowcs");
    701707                    else             WriteErrorCode( 0, "calloc");
    702                     MAKERXSTRING( *prsResult, "", 0 );
     708                    SaveResultString( prsResult, NULL, 0 );
    703709                }
    704710                if ( psuAttrib ) free( psuAttrib );
     
    708714        } else {
    709715            WriteErrorCode( ulRC, "UniCreateUconvObject");
    710             MAKERXSTRING( *prsResult, "", 0 );
     716            SaveResultString( prsResult, NULL, 0 );
    711717        }
    712718
     
    716722    } else {
    717723        WriteErrorCode( ulRC, "UniCreateLocaleObject");
    718         MAKERXSTRING( *prsResult, "", 0 );
     724        SaveResultString( prsResult, NULL, 0 );
    719725    }
    720726
     
    798804                if ( ulRC != ULS_SUCCESS ) {
    799805                    WriteErrorCode( ulRC, "UniUconvToUcs");
    800                     MAKERXSTRING( *prsResult, "", 0 );
     806                    SaveResultString( prsResult, NULL, 0 );
    801807                }
    802808            }
     
    813819                        // Now do the query and return the result
    814820                        if ( UniQueryCharAttr( attrib, suChar[0] ) == 0 ) {
    815                             MAKERXSTRING( *prsResult, "0", 1 );
     821                            SaveResultString( prsResult, PSZ_ZERO, 1 );
    816822                        } else {
    817                             MAKERXSTRING( *prsResult, "1", 1 );
     823                            SaveResultString( prsResult, PSZ_ONE, 1 );
    818824                        }
    819825                        UniFreeAttrObject( attrib );
     
    821827                    } else {
    822828                        WriteErrorCode( ulRC, "UniCreateAttrObject");
    823                         MAKERXSTRING( *prsResult, "", 0 );
     829                        SaveResultString( prsResult, NULL, 0 );
    824830                    }
    825831                } else {
    826832                    if ( psuAttrib ) WriteErrorCode( 0, "mbstowcs");
    827833                    else             WriteErrorCode( 0, "calloc");
    828                     MAKERXSTRING( *prsResult, "", 0 );
     834                    SaveResultString( prsResult, NULL, 0 );
    829835                }
    830836                if ( psuAttrib ) free( psuAttrib );
     
    834840        } else {
    835841            WriteErrorCode( ulRC, "UniCreateUconvObject");
    836             MAKERXSTRING( *prsResult, "", 0 );
     842            SaveResultString( prsResult, NULL, 0 );
    837843        }
    838844        UniFreeLocaleObject( locale );
     
    840846    } else {
    841847        WriteErrorCode( ulRC, "UniCreateLocaleObject");
    842         MAKERXSTRING( *prsResult, "", 0 );
     848        SaveResultString( prsResult, NULL, 0 );
    843849    }
    844850
     
    10631069                }
    10641070                if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) {
    1065                     MAKERXSTRING( *prsResult, "", 0 );
     1071                    SaveResultString( prsResult, NULL, 0 );
    10661072                }
    10671073                free( pszFinal );
     
    10861092                        // Return the final converted string
    10871093                        if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) {
    1088                             MAKERXSTRING( *prsResult, "", 0 );
     1094                            SaveResultString( prsResult, NULL, 0 );
    10891095                        }
    10901096                        UniFreeUconvObject( uconvCP );
     
    10921098                        // UniUconvFromUcs failed
    10931099                        WriteErrorCode( ulRC, "UniUconvFromUcs");
    1094                         MAKERXSTRING( *prsResult, "", 0 );
     1100                        SaveResultString( prsResult, NULL, 0 );
    10951101                    }
    10961102                    free( pszFinal );
     
    10991105                    // Failed to create UconvObject
    11001106                    WriteErrorCode( ulRC, "UniCreateUconvObject");
    1101                     MAKERXSTRING( *prsResult, "", 0 );
     1107                    SaveResultString( prsResult, NULL, 0 );
    11021108                }
    11031109            }
     
    11101116    } else {
    11111117        WriteErrorCode( ulRC, "UniCreateLocaleObject");
    1112         MAKERXSTRING( *prsResult, "", 0 );
     1118        SaveResultString( prsResult, NULL, 0 );
    11131119    }
    11141120
     
    12111217                if ( ulRC != ULS_SUCCESS ) {
    12121218                    WriteErrorCode( ulRC, "UniUconvToUcs");
    1213                     MAKERXSTRING( *prsResult, "", 0 );
     1219                    SaveResultString( prsResult, NULL, 0 );
    12141220                }
    12151221            }
     
    12441250                                }
    12451251                                if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) {
    1246                                     MAKERXSTRING( *prsResult, "", 0 );
     1252                                    SaveResultString( prsResult, NULL, 0 );
    12471253                                }
    12481254                            } else {
     
    12601266                                if ( ulRC == ULS_SUCCESS ) {
    12611267                                    if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) {
    1262                                         MAKERXSTRING( *prsResult, "", 0 );
     1268                                        SaveResultString( prsResult, NULL, 0 );
    12631269                                    }
    12641270                                } else {
    12651271                                    WriteErrorCode( ulRC, "UniUconvFromUcs");
    1266                                     MAKERXSTRING( *prsResult, "", 0 );
     1272                                    SaveResultString( prsResult, NULL, 0 );
    12671273                                }
    12681274                            }
     
    12701276                        } else {
    12711277                            WriteErrorCode( ulRC, "UniTransformStr");
    1272                             MAKERXSTRING( *prsResult, "", 0 );
     1278                            SaveResultString( prsResult, NULL, 0 );
    12731279                        }
    12741280                        free( psuFinal );
     
    12771283                    } else {
    12781284                        WriteErrorCode( ulRC, "UniCreateTransformObject");
    1279                         MAKERXSTRING( *prsResult, "", 0 );
     1285                        SaveResultString( prsResult, NULL, 0 );
    12801286                    }
    12811287                } else {
    12821288                    if ( psuXform ) WriteErrorCode( 0, "mbstowcs");
    12831289                    else            WriteErrorCode( 0, "calloc");
    1284                     MAKERXSTRING( *prsResult, "", 0 );
     1290                    SaveResultString( prsResult, NULL, 0 );
    12851291                }
    12861292                if ( psuXform ) free( psuXform );
     
    12921298        } else {
    12931299            WriteErrorCode( ulRC, "UniCreateUconvObject");
    1294             MAKERXSTRING( *prsResult, "", 0 );
     1300            SaveResultString( prsResult, NULL, 0 );
    12951301        }
    12961302        UniFreeLocaleObject( locale );
     
    12981304    } else {
    12991305        WriteErrorCode( ulRC, "UniCreateLocaleObject");
    1300         MAKERXSTRING( *prsResult, "", 0 );
     1306        SaveResultString( prsResult, NULL, 0 );
    13011307    }
    13021308
     
    14561462                        WriteErrorCode( ERRORIDERROR(WinGetLastError(hab)), "WinSetClipbrdData");
    14571463                    else
    1458                         MAKERXSTRING( *prsResult, "", 0 );
     1464                        SaveResultString( prsResult, NULL, 0 );
    14591465                } else {
    14601466                    WriteErrorCode( ulRC, "DosAllocSharedMem");
    1461                     MAKERXSTRING( *prsResult, "", 0 );
     1467                    SaveResultString( prsResult, NULL, 0 );
    14621468                }
    14631469                WinCloseClipbrd( hab );
    14641470            } else {
    14651471                WriteErrorCode( ulRC, "WinOpenClipbrd");
    1466                 MAKERXSTRING( *prsResult, "", 0 );
     1472                SaveResultString( prsResult, NULL, 0 );
    14671473            }
    14681474
     
    14761482            // UniUconvToUcs failed
    14771483            WriteErrorCode( ulRC, "UniUconvFromUcs");
    1478             MAKERXSTRING( *prsResult, "", 0 );
     1484            SaveResultString( prsResult, NULL, 0 );
    14791485        }
    14801486
     
    14851491        // Failed to create source UconvObject
    14861492        WriteErrorCode( ulRC, "UniCreateUconvObject");
    1487         MAKERXSTRING( *prsResult, "", 0 );
     1493        SaveResultString( prsResult, NULL, 0 );
    14881494    }
    14891495
     
    16191625                }
    16201626                if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) {
    1621                     MAKERXSTRING( *prsResult, "", 0 );
     1627                    SaveResultString( prsResult, NULL, 0 );
    16221628                }
    16231629                free( pszFinal );
     
    16411647                        // Return the final converted string
    16421648                        if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) {
    1643                             MAKERXSTRING( *prsResult, "", 0 );
     1649                            SaveResultString( prsResult, NULL, 0 );
    16441650                        }
    16451651                    } else {
    16461652                        // UniUconvFromUcs failed
    16471653                        WriteErrorCode( ulRC, "UniUconvFromUcs");
    1648                         MAKERXSTRING( *prsResult, "", 0 );
     1654                        SaveResultString( prsResult, NULL, 0 );
    16491655                    }
    16501656                    free( pszFinal );
     
    16541660                    // Failed to create target UconvObject
    16551661                    WriteErrorCode( ulRC, "UniCreateUconvObject");
    1656                     MAKERXSTRING( *prsResult, "", 0 );
     1662                    SaveResultString( prsResult, NULL, 0 );
    16571663                }
    16581664            }
    16591665        } else {
    16601666            // Either no text exists, or clipboard is not readable
    1661             MAKERXSTRING( *prsResult, "", 0 );
     1667            SaveResultString( prsResult, NULL, 0 );
    16621668        }
    16631669
     
    16651671    } else {
    16661672        WriteErrorCode( ulRC, "WinOpenClipbrd");
    1667         MAKERXSTRING( *prsResult, "", 0 );
     1673        SaveResultString( prsResult, NULL, 0 );
    16681674    }
    16691675
     
    17411747            if ( ulRC != ULS_SUCCESS ) {
    17421748                WriteErrorCode( ulRC, "UniStrToUcs");
    1743                 MAKERXSTRING( *prsResult, "", 0 );
     1749                SaveResultString( prsResult, NULL, 0 );
    17441750                return 0;
    17451751            }
    17461752        } else {
    17471753            WriteErrorCode( ulRC, "UniCreateUconvObject");
    1748             MAKERXSTRING( *prsResult, "", 0 );
     1754            SaveResultString( prsResult, NULL, 0 );
    17491755            return 0;
    17501756        }
     
    17781784        free( psuFormat );
    17791785        WriteErrorCode( ulRC, "UniCreateLocaleObject");
    1780         MAKERXSTRING( *prsResult, "", 0 );
     1786        SaveResultString( prsResult, NULL, 0 );
    17811787        return 0;
    17821788    }
     
    18151821            UniFreeLocaleObject( locale );
    18161822            WriteErrorCode( 0, "gmtime");
    1817             MAKERXSTRING( *prsResult, "", 0 );
     1823            SaveResultString( prsResult, NULL, 0 );
    18181824            return ( 0 );
    18191825        }
     
    18231829            UniFreeLocaleObject( locale );
    18241830            WriteErrorCode( 0, "localtime");
    1825             MAKERXSTRING( *prsResult, "", 0 );
     1831            SaveResultString( prsResult, NULL, 0 );
    18261832            return ( 0 );
    18271833        }
     
    18421848            {
    18431849                if ( ! SaveResultString( prsResult, pszTime, strlen(pszTime) ))
    1844                     MAKERXSTRING( *prsResult, "", 0 );
     1850                    SaveResultString( prsResult, NULL, 0 );
    18451851            } else {
    18461852                WriteErrorCode( ulRC, "UniUconvFromUcs");
    1847                 MAKERXSTRING( *prsResult, "", 0 );
     1853                SaveResultString( prsResult, NULL, 0 );
    18481854            }
    18491855            free( pszTime );
     
    18521858        } else {
    18531859            WriteErrorCode( ulRC, "UniCreateUconvObject");
    1854             MAKERXSTRING( *prsResult, "", 0 );
     1860            SaveResultString( prsResult, NULL, 0 );
    18551861        }
    18561862
    18571863    } else {
    18581864        WriteErrorCode( ulRC, "UniStrftime");
    1859         MAKERXSTRING( *prsResult, "", 0 );
     1865        SaveResultString( prsResult, NULL, 0 );
    18601866    }
    18611867
     
    20722078
    20732079
     2080#ifdef NO_SHARED_SOURCE
     2081
    20742082/* ------------------------------------------------------------------------- *
    20752083 * SaveResultString                                                          *
     
    21772185}
    21782186
    2179 
     2187#endif
Note: See TracChangeset for help on using the changeset viewer.