Changeset 32
- Timestamp:
- Jul 11, 2016, 2:43:58 PM (9 years ago)
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
rxprtutl/trunk/Makefile
r7 r32 1 1 # Makefile for IBM C Compiler 3.x and NMAKE32. 2 3 SHARED = ..\..\shared 4 2 5 CC = icc 3 6 LINK = ilink 4 CFLAGS = /Ss /Q /Wuse /Gm /Gd 7 CFLAGS = /Ss /Q /Wuse /Gm /Gd /I$(SHARED) /DSZ_ERROR_NAME="\"RPUERROR\"" 5 8 LFLAGS = /NOLOGO /MAP 6 9 NAME = rxprtutl … … 9 12 # Set environment variable DEBUG (=anything) to build with debugging symbols 10 13 !ifdef DEBUG 11 12 14 CFLAGS = $(CFLAGS) /Ti /Tm 15 LFLAGS = $(LFLAGS) /DEBUG 13 16 !endif 14 17 15 $(NAME).dll : $(NAME).obj 18 $(NAME).dll : $(NAME).obj shfuncs.obj Makefile 16 19 @makedesc -N"Alex Taylor" -D"REXX Printer Management Utilities" -V"^#define=SZ_VERSION,$(NAME).c" $(NAME).def 17 $(LINK) $(LFLAGS) $(NAME).obj $(NAME).def $(LIBS) /O:$@20 $(LINK) $(LFLAGS) $(NAME).obj shfuncs.obj $(NAME).def $(LIBS) /O:$@ 18 21 @dllrname.exe $@ CPPOM30=OS2OM30 /Q /R 19 22 20 $(NAME).obj : $(NAME).c $(NAME).def23 $(NAME).obj : $(NAME).c {$(SHARED)}shfuncs.h $(NAME).def Makefile 21 24 $(CC) $(CFLAGS) /C /Ge- $(NAME).c 25 26 shfuncs.obj : $(SHARED)\shfuncs.c {$(SHARED)}shfuncs.h Makefile 27 $(CC) $(CFLAGS) /C /Ge- $(SHARED)\shfuncs.c 22 28 23 29 clean : 24 30 if exist $(NAME).dll del $(NAME).dll 25 31 if exist $(NAME).obj del $(NAME).obj 32 if exist shfuncs.obj del shfuncs.obj 26 33 27 -
rxprtutl/trunk/rxprtutl.c
r27 r32 55 55 #include <rexxsaa.h> 56 56 57 #include "shfuncs.h" 58 57 59 58 60 // CONSTANTS 59 61 60 62 #define SZ_LIBRARY_NAME "RXPRTUTL" // Name of this library 61 #define SZ_ERROR_NAME "RPUERROR" // REXX variable used to store error codes63 //#define SZ_ERROR_NAME "RPUERROR" // REXX variable used to store error codes 62 64 #define SZ_VERSION "0.2.4" // Current version of this library 63 65 … … 87 89 88 90 // Maximum string lengths... 89 #define US_COMPOUND_MAXZ 250 // ...of a compound variable 91 #ifdef NO_SHARED_SOURCE 92 #define US_COMPOUND_MAXZ 250 // ...of a compound variable 93 #define US_ERRSTR_MAXZ 250 // ...of an error string 94 #endif 95 90 96 #define US_INTEGER_MAXZ 12 // ...of an integer string 91 97 #define US_STEM_MAXZ ( US_COMPOUND_MAXZ - US_INTEGER_MAXZ ) // ...of a stem 92 #define US_ERRSTR_MAXZ 250 // ...of an error string93 98 #define US_DRVINFO_MAXZ ( CCHMAXPATH + 8 + 32 ) // ...of an driver/port info string 94 99 #define US_PRTINFO_MAXZ 180 // ...of a printer info string … … 122 127 // List of functions to be registered by RPULoadFuncs 123 128 static PSZ RxFunctionTbl[] = { 129 "RPULoadFuncs", // drop only 124 130 "RPUDropFuncs", 125 131 "RPUDeviceDelete", … … 173 179 PSZ GetObjectID( PSZ pszHandle ); 174 180 HOBJECT PrinterObjectHandle( PSZ pszQueueName ); 175 BOOL SaveResultString( PRXSTRING prsResult, PCH pchBytes, ULONG ulBytes );176 181 ULONG UniqueDeviceName( PSZ pszName ); 177 BOOL WriteCompoundVariable( PSZ pszStem, PSZ pszTail, PSZ pszValue ); 178 BOOL WriteSimpleVariable( PSZ pszName, PSZ pszValue ); 179 BOOL WriteStemElement( PSZ pszStem, ULONG ulIndex, PSZ pszValue ); 180 void WriteErrorCode( ULONG ulError, PSZ pszContext ); 181 182 #ifdef NO_SHARED_SOURCE 183 BOOL SaveResultString( PRXSTRING prsResult, PCH pchBytes, ULONG ulBytes ); 184 BOOL WriteCompoundVariable( PSZ pszStem, PSZ pszTail, PSZ pszValue ); 185 // BOOL WriteSimpleVariable( PSZ pszName, PSZ pszValue ); 186 BOOL WriteStemElement( PSZ pszStem, ULONG ulIndex, PSZ pszValue ); 187 void WriteErrorCode( ULONG ulError, PSZ pszContext ); 188 #endif 182 189 183 190 … … 204 211 if ( argc > 0 ) return ( 40 ); 205 212 entries = sizeof(RxFunctionTbl) / sizeof(PSZ); 206 for ( i = 0; i < entries; i++ ) 213 214 // Start from 1 to skip RPULoadFuncs (we don't want to re-register ourselves) 215 for ( i = 1; i < entries; i++ ) 207 216 RexxRegisterFunctionDll( RxFunctionTbl[i], SZ_LIBRARY_NAME, RxFunctionTbl[i] ); 208 217 209 MAKERXSTRING( *prsResult, "", 0 );218 SaveResultString( prsResult, NULL, 0 ); 210 219 return ( 0 ); 211 220 } … … 233 242 RexxDeregisterFunction( RxFunctionTbl[i] ); 234 243 235 MAKERXSTRING( *prsResult, "", 0 );244 SaveResultString( prsResult, NULL, 0 ); 236 245 return ( 0 ); 237 246 } … … 256 265 sprintf( szVersion, "%s", SZ_VERSION ); 257 266 258 MAKERXSTRING( *prsResult, szVersion, strlen(szVersion) );267 SaveResultString( prsResult, szVersion, strlen(szVersion) ); 259 268 return ( 0 ); 260 269 } … … 291 300 if ( rc != NO_ERROR ) { 292 301 WriteErrorCode( rc, "SplDeleteDevice"); 293 MAKERXSTRING( *prsResult, "0", 1 );302 SaveResultString( prsResult, PSZ_ZERO, 1 ); 294 303 return 0; 295 304 } 296 305 297 MAKERXSTRING( *prsResult, "1", 1 );306 SaveResultString( prsResult, PSZ_ONE, 1 ); 298 307 return ( 0 ); 299 308 } … … 346 355 if ( !hab ) { 347 356 WriteErrorCode( 0, "WinInitialize"); 348 MAKERXSTRING( *prsResult, "0", 1 );357 SaveResultString( prsResult, PSZ_ZERO, 1 ); 349 358 return ( 0 ); 350 359 } … … 354 363 if ( !fSuccess ) { 355 364 WriteErrorCode( ERRORIDERROR( WinGetLastError( hab )), "DevQueryDeviceNames"); 356 MAKERXSTRING( *prsResult, "0", 1 );365 SaveResultString( prsResult, PSZ_ZERO, 1 ); 357 366 goto cleanup; 358 367 } 359 368 360 369 // Now get the actual data 370 /* (This originally used malloc() - switched to DosAllocMem() while in the 371 * process of trying to hunt down an intermittent trap. In fact, the trap 372 * was probably caused by a flaw in WriteStemElement() which has since been 373 * fixed.) 374 */ 361 375 #if 1 362 376 rc = DosAllocMem( (PVOID) &aDeviceName, (ULONG) pldn * sizeof( STR32 ), PAG_WRITE | PAG_COMMIT ); 363 377 if ( rc != NO_ERROR ) { 364 378 WriteErrorCode( rc, "DosAllocMem"); 365 MAKERXSTRING( *prsResult, "0", 1 );379 SaveResultString( prsResult, PSZ_ZERO, 1 ); 366 380 goto cleanup; 367 381 } … … 369 383 if ( rc != NO_ERROR ) { 370 384 WriteErrorCode( rc, "DosAllocMem"); 371 MAKERXSTRING( *prsResult, "0", 1 );385 SaveResultString( prsResult, PSZ_ZERO, 1 ); 372 386 DosFreeMem( aDeviceName ); 373 387 goto cleanup; … … 376 390 if ( rc != NO_ERROR ) { 377 391 WriteErrorCode( rc, "DosAllocMem"); 378 MAKERXSTRING( *prsResult, "0", 1 );392 SaveResultString( prsResult, PSZ_ZERO, 1 ); 379 393 DosFreeMem( aDeviceName ); 380 394 DosFreeMem( aDeviceDesc ); … … 385 399 if ( !aDeviceName ) { 386 400 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 387 MAKERXSTRING( *prsResult, "0", 1 );401 SaveResultString( prsResult, PSZ_ZERO, 1 ); 388 402 goto cleanup; 389 403 } … … 391 405 if ( !aDeviceDesc ) { 392 406 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 393 MAKERXSTRING( *prsResult, "0", 1 );407 SaveResultString( prsResult, PSZ_ZERO, 1 ); 394 408 free( aDeviceName ); 395 409 goto cleanup; … … 398 412 if ( !aDataType ) { 399 413 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 400 MAKERXSTRING( *prsResult, "0", 1 );414 SaveResultString( prsResult, PSZ_ZERO, 1 ); 401 415 free( aDeviceName ); 402 416 free( aDeviceDesc ); … … 413 427 414 428 // Return 1 on success 415 MAKERXSTRING( *prsResult, "1", 1 );429 SaveResultString( prsResult, PSZ_ONE, 1 ); 416 430 417 431 #if 1 … … 472 486 if (( rc != ERROR_MORE_DATA ) && ( rc != NERR_BufTooSmall )) { 473 487 WriteErrorCode( rc, "SplEnumPort"); 474 MAKERXSTRING( *prsResult, "0", 1 );488 SaveResultString( prsResult, PSZ_ZERO, 1 ); 475 489 return ( 0 ); 476 490 } … … 480 494 if ( !pbuf ) { 481 495 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 482 MAKERXSTRING( *prsResult, "0", 1 );496 SaveResultString( prsResult, PSZ_ZERO, 1 ); 483 497 return ( 0 ); 484 498 } … … 498 512 sprintf( szNumber, "%u", cReturned ); 499 513 WriteStemElement( szStem, 0, szNumber ); 500 MAKERXSTRING( *prsResult, "1", 1 );514 SaveResultString( prsResult, PSZ_ONE, 1 ); 501 515 } 502 516 else { 503 517 WriteErrorCode( rc, "SplEnumPort"); 504 MAKERXSTRING( *prsResult, "0", 1 );518 SaveResultString( prsResult, PSZ_ZERO, 1 ); 505 519 } 506 520 free( pbuf ); … … 550 564 if (( rc != ERROR_MORE_DATA ) && ( rc != NERR_BufTooSmall )) { 551 565 WriteErrorCode( rc, "SplEnumDriver"); 552 MAKERXSTRING( *prsResult, "0", 1 );566 SaveResultString( prsResult, PSZ_ZERO, 1 ); 553 567 return ( 0 ); 554 568 } … … 558 572 if ( !pbuf ) { 559 573 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 560 MAKERXSTRING( *prsResult, "0", 1 );574 SaveResultString( prsResult, PSZ_ZERO, 1 ); 561 575 return ( 0 ); 562 576 } … … 571 585 sprintf( szNumber, "%u", cReturned ); 572 586 WriteStemElement( szStem, 0, szNumber ); 573 MAKERXSTRING( *prsResult, "1", 1 );587 SaveResultString( prsResult, PSZ_ONE, 1 ); 574 588 } 575 589 else { 576 590 WriteErrorCode( rc, "SplEnumDriver"); 577 MAKERXSTRING( *prsResult, "0", 1 );591 SaveResultString( prsResult, PSZ_ZERO, 1 ); 578 592 } 579 593 free( pbuf ); … … 670 684 { 671 685 WriteErrorCode( rc, "SplEnumPrinter"); 672 MAKERXSTRING( *prsResult, "0", 1 );686 SaveResultString( prsResult, PSZ_ZERO, 1 ); 673 687 return ( 0 ); 674 688 } … … 678 692 if ( !pbEnum ) { 679 693 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 680 MAKERXSTRING( *prsResult, "0", 1 );694 SaveResultString( prsResult, PSZ_ZERO, 1 ); 681 695 return ( 0 ); 682 696 } … … 686 700 if ( rc != NO_ERROR ) { 687 701 WriteErrorCode( rc, "SplEnumPrinter"); 688 MAKERXSTRING( *prsResult, "0", 1 );702 SaveResultString( prsResult, PSZ_ZERO, 1 ); 689 703 goto cleanup; 690 704 } … … 723 737 if (( rc != NO_ERROR ) && ( rc != NERR_BufTooSmall )) { 724 738 WriteErrorCode( rc, "SplQueryQueue"); 725 MAKERXSTRING( *prsResult, "0", 1 );739 SaveResultString( prsResult, PSZ_ZERO, 1 ); 726 740 //goto cleanup; 727 741 continue; … … 730 744 if ( !pbQueue ) { 731 745 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 732 MAKERXSTRING( *prsResult, "0", 1 );746 SaveResultString( prsResult, PSZ_ZERO, 1 ); 733 747 //goto cleanup; 734 748 continue; … … 739 753 if ( rc != NO_ERROR ) { 740 754 WriteErrorCode( rc, "SplQueryQueue"); 741 MAKERXSTRING( *prsResult, "0", 1 );755 SaveResultString( prsResult, PSZ_ZERO, 1 ); 742 756 free( pbQueue ); 743 757 //goto cleanup; … … 782 796 sprintf( szNumber, "%u", ulCount ); 783 797 WriteStemElement( szStem, 0, szNumber ); 784 MAKERXSTRING( *prsResult, "1", 1 );798 SaveResultString( prsResult, PSZ_ONE, 1 ); 785 799 786 800 cleanup: … … 844 858 hObj = PrinterObjectHandle( pszName ); 845 859 if ( !hObj ) { 846 MAKERXSTRING( *prsResult, "0", 1 );860 SaveResultString( prsResult, PSZ_ZERO, 1 ); 847 861 return ( 0 ); 848 862 } … … 850 864 fRC = WinOpenObject( hObj, ulView, TRUE ); 851 865 852 MAKERXSTRING( *prsResult, fRC? "1": "0", 1 );866 SaveResultString( prsResult, fRC? PSZ_ONE: PSZ_ZERO, 1 ); 853 867 return ( 0 ); 854 868 } … … 909 923 { 910 924 WriteErrorCode( rc, "SplQueryPort"); 911 MAKERXSTRING( *prsResult, "0", 1 );925 SaveResultString( prsResult, PSZ_ZERO, 1 ); 912 926 return ( 0 ); 913 927 } … … 917 931 if ( !pbuf ) { 918 932 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 919 MAKERXSTRING( *prsResult, "0", 1 );933 SaveResultString( prsResult, PSZ_ZERO, 1 ); 920 934 return ( 0 ); 921 935 } … … 927 941 WriteCompoundVariable( szStem, "!driver", pInfo->pszPortDriver ); 928 942 WriteCompoundVariable( szStem, "!converter", pInfo->pszProtocolConverter ); 929 MAKERXSTRING( *prsResult, "1", 1 );943 SaveResultString( prsResult, PSZ_ONE, 1 ); 930 944 } 931 945 else { 932 946 WriteErrorCode( rc, "SplQueryPort"); 933 MAKERXSTRING( *prsResult, "0", 1 );947 SaveResultString( prsResult, PSZ_ZERO, 1 ); 934 948 } 935 949 … … 985 999 if ( !hab ) { 986 1000 WriteErrorCode( 0, "WinInitialize"); 987 MAKERXSTRING( *prsResult, "0", 1 );1001 SaveResultString( prsResult, PSZ_ZERO, 1 ); 988 1002 return ( 0 ); 989 1003 } … … 993 1007 if ( !ulCB ) { 994 1008 WriteErrorCode( ERRORIDERROR( WinGetLastError( hab )), "PrfQueryProfileString"); 995 MAKERXSTRING( *prsResult, "0", 1 );1009 SaveResultString( prsResult, PSZ_ZERO, 1 ); 996 1010 goto cleanup; 997 1011 } … … 1001 1015 if ( rc != NO_ERROR || !hPdr ) { 1002 1016 WriteErrorCode( rc, "DosLoadModule"); 1003 MAKERXSTRING( *prsResult, "0", 1 );1017 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1004 1018 goto cleanup; 1005 1019 } … … 1007 1021 if ( rc != NO_ERROR ) { 1008 1022 WriteErrorCode( rc, "DosQueryProcAddr"); 1009 MAKERXSTRING( *prsResult, "0", 1 );1023 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1010 1024 goto finish; 1011 1025 } … … 1015 1029 if ( rc == NO_ERROR ) { 1016 1030 // Return 1 on success 1017 MAKERXSTRING( *prsResult, "1", 1 );1031 SaveResultString( prsResult, PSZ_ONE, 1 ); 1018 1032 } 1019 1033 else { 1020 1034 WriteErrorCode( rc, "SplPdInstallPort"); 1021 MAKERXSTRING( *prsResult, "0", 1 );1035 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1022 1036 } 1023 1037 … … 1080 1094 if ( !hab ) { 1081 1095 WriteErrorCode( 0, "WinInitialize"); 1082 MAKERXSTRING( *prsResult, "", 0 );1096 SaveResultString( prsResult, NULL, 0 ); 1083 1097 return ( 0 ); 1084 1098 } … … 1088 1102 if ( !ulCB ) { 1089 1103 WriteErrorCode( ERRORIDERROR( WinGetLastError( hab )), "PrfQueryProfileString"); 1090 MAKERXSTRING( *prsResult, "", 0 );1104 SaveResultString( prsResult, NULL, 0 ); 1091 1105 goto cleanup; 1092 1106 } … … 1096 1110 if ( rc != NO_ERROR || !hPdr ) { 1097 1111 WriteErrorCode( rc, "DosLoadModule"); 1098 MAKERXSTRING( *prsResult, "", 0 );1112 SaveResultString( prsResult, NULL, 0 ); 1099 1113 goto cleanup; 1100 1114 } … … 1102 1116 if ( rc != NO_ERROR ) { 1103 1117 WriteErrorCode( rc, "DosQueryProcAddr"); 1104 MAKERXSTRING( *prsResult, "", 0 );1118 SaveResultString( prsResult, NULL, 0 ); 1105 1119 goto finish; 1106 1120 } … … 1117 1131 // Write the data contents to our return RXSTRING 1118 1132 if ( !SaveResultString( prsResult, pBuf, cBuf )) 1119 MAKERXSTRING( *prsResult, "", 0 );1133 SaveResultString( prsResult, NULL, 0 ); 1120 1134 } 1121 1135 else { 1122 1136 WriteErrorCode( rc, "SplPdQuery 2"); 1123 MAKERXSTRING( *prsResult, "", 0 );1137 SaveResultString( prsResult, NULL, 0 ); 1124 1138 } 1125 1139 free( pBuf ); … … 1127 1141 else { 1128 1142 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 1129 MAKERXSTRING( *prsResult, "", 0 );1143 SaveResultString( prsResult, NULL, 0 ); 1130 1144 } 1131 1145 } 1132 1146 else { 1133 1147 WriteErrorCode( rc, "SplPdQuery 1"); 1134 MAKERXSTRING( *prsResult, "", 0 );1148 SaveResultString( prsResult, NULL, 0 ); 1135 1149 } 1136 1150 … … 1209 1223 if ( !hab ) { 1210 1224 WriteErrorCode( 0, "WinInitialize"); 1211 MAKERXSTRING( *prsResult, "0", 1 );1225 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1212 1226 return ( 0 ); 1213 1227 } … … 1217 1231 if ( !ulCB ) { 1218 1232 WriteErrorCode( ERRORIDERROR( WinGetLastError( hab )), "PrfQueryProfileString"); 1219 MAKERXSTRING( *prsResult, "0", 1 );1233 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1220 1234 goto cleanup; 1221 1235 } … … 1225 1239 if ( rc != NO_ERROR || !hPdr ) { 1226 1240 WriteErrorCode( rc, "DosLoadModule"); 1227 MAKERXSTRING( *prsResult, "0", 1 );1241 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1228 1242 goto cleanup; 1229 1243 } … … 1231 1245 if ( rc != NO_ERROR ) { 1232 1246 WriteErrorCode( rc, "DosQueryProcAddr"); 1233 MAKERXSTRING( *prsResult, "0", 1 );1247 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1234 1248 goto finish; 1235 1249 } … … 1239 1253 if ( rc == NO_ERROR ) { 1240 1254 // Return 1 on success 1241 MAKERXSTRING( *prsResult, "1", 1 );1255 SaveResultString( prsResult, PSZ_ONE, 1 ); 1242 1256 } 1243 1257 else { 1244 1258 WriteErrorCode( rc, "SplPdSet"); 1245 MAKERXSTRING( *prsResult, "0", 1 );1259 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1246 1260 } 1247 1261 … … 1297 1311 if ( !hab ) { 1298 1312 WriteErrorCode( 0, "WinInitialize"); 1299 MAKERXSTRING( *prsResult, "0", 1 );1313 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1300 1314 return ( 0 ); 1301 1315 } … … 1305 1319 if ( !ulCB ) { 1306 1320 WriteErrorCode( ERRORIDERROR( WinGetLastError( hab )), "PrfQueryProfileString"); 1307 MAKERXSTRING( *prsResult, "0", 1 );1321 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1308 1322 goto cleanup; 1309 1323 } … … 1313 1327 if ( rc != NO_ERROR || !hPdr ) { 1314 1328 WriteErrorCode( rc, "DosLoadModule"); 1315 MAKERXSTRING( *prsResult, "0", 1 );1329 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1316 1330 goto cleanup; 1317 1331 } … … 1319 1333 if ( rc != NO_ERROR ) { 1320 1334 WriteErrorCode( rc, "DosQueryProcAddr"); 1321 MAKERXSTRING( *prsResult, "0", 1 );1335 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1322 1336 goto finish; 1323 1337 } … … 1327 1341 if ( rc == NO_ERROR ) { 1328 1342 // Return 1 if settings were modified 1329 MAKERXSTRING( *prsResult, flModified? "1": "0", 1 );1343 SaveResultString( prsResult, flModified? PSZ_ONE: PSZ_ZERO, 1 ); 1330 1344 } 1331 1345 else { 1332 1346 WriteErrorCode( rc, "SplPdSetPort"); 1333 MAKERXSTRING( *prsResult, "0", 1 );1347 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1334 1348 } 1335 1349 … … 1369 1383 if ( rc == NO_ERROR ) { 1370 1384 // Return 1 on success 1371 MAKERXSTRING( *prsResult, "1", 1 );1385 SaveResultString( prsResult, PSZ_ONE, 1 ); 1372 1386 } 1373 1387 else { 1374 1388 WriteErrorCode( rc, "SplDeletePort"); 1375 MAKERXSTRING( *prsResult, "0", 1 );1389 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1376 1390 } 1377 1391 … … 1439 1453 else 1440 1454 WriteErrorCode( rc, "SplEnumDevice"); 1441 MAKERXSTRING( *prsResult, "0", 1 );1455 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1442 1456 return ( 0 ); 1443 1457 } … … 1453 1467 if ( rc != NO_ERROR ) { 1454 1468 WriteErrorCode( rc, "SplCreateDevice"); 1455 MAKERXSTRING( *prsResult, "0", 1 );1469 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1456 1470 return ( 0 ); 1457 1471 } … … 1468 1482 if ( rc != NO_ERROR ) { 1469 1483 WriteErrorCode( rc, "SplCreateQueue"); 1470 MAKERXSTRING( *prsResult, "0", 1 );1484 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1471 1485 SplDeleteDevice( NULL, szDevice ); 1472 1486 return ( 0 ); 1473 1487 } 1474 1488 1475 MAKERXSTRING( *prsResult, "1", 1 );1489 SaveResultString( prsResult, PSZ_ONE, 1 ); 1476 1490 return ( 0 ); 1477 1491 } … … 1514 1528 if (( rc != NO_ERROR ) && ( rc != NERR_BufTooSmall )) { 1515 1529 WriteErrorCode( rc, "SplQueryQueue"); 1516 MAKERXSTRING( *prsResult, "0", 1 );1530 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1517 1531 return ( 0 ); 1518 1532 } … … 1520 1534 if ( !pInfo ) { 1521 1535 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 1522 MAKERXSTRING( *prsResult, "0", 1 );1536 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1523 1537 return ( 0 ); 1524 1538 } … … 1526 1540 if ( rc != NO_ERROR ) { 1527 1541 WriteErrorCode( rc, "SplQueryQueue"); 1528 MAKERXSTRING( *prsResult, "0", 1 );1542 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1529 1543 goto cleanup; 1530 1544 } … … 1533 1547 if ( rc != NO_ERROR ) { 1534 1548 WriteErrorCode( rc, "SplDeleteDevice"); 1535 MAKERXSTRING( *prsResult, "0", 1 );1549 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1536 1550 goto cleanup; 1537 1551 } … … 1541 1555 if ( hObj != NULLHANDLE ) WinDestroyObject( hObj ); 1542 1556 1543 MAKERXSTRING( *prsResult, "1", 1 );1557 SaveResultString( prsResult, PSZ_ONE, 1 ); 1544 1558 cleanup: 1545 1559 free( pInfo ); … … 1605 1619 { 1606 1620 WriteErrorCode( rc, "SplQueryDevice"); 1607 MAKERXSTRING( *prsResult, "0", 1 );1621 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1608 1622 return ( 0 ); 1609 1623 } … … 1613 1627 if ( !pbuf ) { 1614 1628 WriteErrorCode( ERROR_NOT_ENOUGH_MEMORY, "malloc"); 1615 MAKERXSTRING( *prsResult, "0", 1 );1629 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1616 1630 return ( 0 ); 1617 1631 } … … 1631 1645 if ( pInfo->fsStatus & PRJ_DESTNOPAPER ) strcat( szFlags, "P"); 1632 1646 WriteCompoundVariable( szStem, "!jobflags", szFlags ); 1633 MAKERXSTRING( *prsResult, "1", 1 );1647 SaveResultString( prsResult, PSZ_ONE, 1 ); 1634 1648 } 1635 1649 else { 1636 1650 WriteErrorCode( rc, "SplQueryDevice"); 1637 MAKERXSTRING( *prsResult, "0", 1 );1651 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1638 1652 } 1639 1653 … … 1671 1685 fRC = WinSetObjectData( hObj, "APPDEFAULT=YES;"); 1672 1686 1673 MAKERXSTRING( *prsResult, fRC? "1": "0", 1 );1687 SaveResultString( prsResult, fRC? PSZ_ONE: PSZ_ZERO, 1 ); 1674 1688 return ( 0 ); 1675 1689 } … … 1722 1736 if ( rc != NO_ERROR ) { 1723 1737 WriteErrorCode( rc, fHold ? "SplHoldQueue" : "SplReleaseQueue"); 1724 MAKERXSTRING( *prsResult, "0", 1 ); 1725 } 1726 else MAKERXSTRING( *prsResult, "1", 1 ); 1738 SaveResultString( prsResult, PSZ_ZERO, 1 ); 1739 } 1740 else 1741 SaveResultString( prsResult, PSZ_ONE, 1 ); 1727 1742 1728 1743 return ( 0 ); … … 2007 2022 * ************************************************************************* */ 2008 2023 2024 #ifdef NO_SHARED_SOURCE 2009 2025 2010 2026 /* ------------------------------------------------------------------------- * … … 2015 2031 * zero length, nothing is done. * 2016 2032 * * 2017 * This function should be used in place of MAKERXSTRING if there is a*2018 * possibility that the string contents could be longer than 256 characters.*2033 * This function should be used in place of MAKERXSTRING to generate all * 2034 * REXX return values. * 2019 2035 * * 2020 2036 * ARGUMENTS: * … … 2206 2222 } 2207 2223 2208 2224 #endif -
rxprtutl/trunk/rxprtutl.def
r15 r32 1 1 LIBRARY RXPRTUTL INITINSTANCE TERMINSTANCE 2 2 DATA MULTIPLE NONSHARED 3 DESCRIPTION '@#Alex Taylor:0.2.4#@##1## 8 Sep 2013 20:30:22REINFORCE::::::@@REXX Printer Management Utilities'3 DESCRIPTION '@#Alex Taylor:0.2.4#@##1## 11 May 2016 18:58:22 REINFORCE::::::@@REXX Printer Management Utilities' 4 4 5 5 EXPORTS RPULoadFuncs -
rxuls/trunk/Makefile
r28 r32 1 1 # Makefile for IBM C Compiler 3.x and NMAKE32. 2 3 SHARED = ..\..\shared 4 2 5 CC = icc 3 6 LINK = ilink 4 7 RC = rc 5 CFLAGS = /Ss /Q /Wuse 8 CFLAGS = /Ss /Q /Wuse /Gm /I$(SHARED) /DSZ_ERROR_NAME="\"ULSERR\"" 6 9 LFLAGS = /NOLOGO 7 10 NAME = rxuls … … 10 13 # Set environment variable DEBUG (=anything) to build with debugging symbols 11 14 !ifdef DEBUG 12 13 15 CFLAGS = $(CFLAGS) /Ti /Tm 16 LFLAGS = $(LFLAGS) /DEBUG 14 17 !endif 15 18 16 $(NAME).dll : $(NAME).obj 17 $(LINK) $(LFLAGS) $(NAME).obj $(NAME).def $(LIBS) /O:$@ 19 # BLDLEVEL parameters 20 BL_DESC = "REXX Universal Language Support functions" 21 BL_VENDOR = "Alex Taylor" 22 BL_VERSION = "0.6.1" 18 23 19 $(NAME).obj : $(NAME).c $(NAME).def 24 25 $(NAME).dll : $(NAME).obj shfuncs.obj Makefile 26 makedesc -D$(BL_DESC) -N$(BL_VENDOR) -V$(BL_VERSION) $(NAME).def 27 $(LINK) $(LFLAGS) $(NAME).obj shfuncs.obj $(NAME).def $(LIBS) /O:$@ 28 29 $(NAME).obj : $(NAME).c {$(SHARED)}shfuncs.h $(NAME).def Makefile 20 30 $(CC) $(CFLAGS) /C /Ge- $(NAME).c 31 32 shfuncs.obj : $(SHARED)\shfuncs.c {$(SHARED)}shfuncs.h Makefile 33 $(CC) $(CFLAGS) /C /Ge- $(SHARED)\shfuncs.c 21 34 22 35 clean : 23 36 if exist $(NAME).dll del $(NAME).dll 24 37 if exist $(NAME).obj del $(NAME).obj 38 if exist shfuncs.obj del shfuncs.obj 25 39 26 -
rxuls/trunk/rxuls.c
r28 r32 52 52 #include <rexxsaa.h> 53 53 54 #include "shfuncs.h" 55 54 56 55 57 // MACROS … … 64 66 65 67 #define SZ_LIBRARY_NAME "RXULS" // Name of this library 66 #define SZ_ERROR_NAME "ULSERR" // REXX variable used to store error codes68 //#define SZ_ERROR_NAME "ULSERR" // REXX variable used to store error codes 67 69 68 70 #define US_VERSION_MAJOR 0 // Major version number of this library 69 #define US_VERSION_MINOR 5// Minor version number of this library70 #define US_VERSION_REFRESH 9// Refresh level of this library71 #define US_VERSION_MINOR 6 // Minor version number of this library 72 #define US_VERSION_REFRESH 0 // Refresh level of this library 71 73 72 74 #define US_CPSPEC_MAXZ 72 // Maximum length of a conversion specifier 73 75 #define LOCALE_BUF_MAX 4096 // Maximum length of the locale list 74 76 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 76 81 #define US_INTEGER_MAXZ 12 // Maximum length of an integer string 77 82 #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 string79 83 #define US_STRFTIME_MAXZ 256 // Maximum length of a formatted time string 80 84 … … 134 138 ULONG CreateUconvObject( UconvObject *uco, ULONG ulCP, USHORT fEndian, USHORT fMap, USHORT fPath, USHORT ucSubChar ); 135 139 BOOL 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 139 145 140 146 … … 171 177 RexxRegisterFunctionDll( RxFunctionTbl[i], SZ_LIBRARY_NAME, RxFunctionTbl[i] ); 172 178 173 MAKERXSTRING( *prsResult, "", 0 );179 SaveResultString( prsResult, NULL, 0 ); 174 180 return ( 0 ); 175 181 } … … 193 199 194 200 if ( argc > 0 ) return ( 40 ); 201 RexxDeregisterFunction("ULSLoadFuncs"); 195 202 entries = sizeof(RxFunctionTbl) / sizeof(PSZ); 196 203 for ( i = 0; i < entries; i++ ) 197 204 RexxDeregisterFunction( RxFunctionTbl[i] ); 198 199 MAKERXSTRING( *prsResult, "", 0 ); 205 SaveResultString( prsResult, NULL, 0 ); 200 206 return ( 0 ); 201 207 } … … 218 224 219 225 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) ); 223 229 return ( 0 ); 224 230 } … … 301 307 // If source and target codepages are the same, just return the input string 302 308 if ( ulSourceCP == ulTargetCP ) { 303 MAKERXSTRING( *prsResult, argv[0].strptr, argv[0].strlength );309 SaveResultString( prsResult, argv[0].strptr, argv[0].strlength ); 304 310 return ( 0 ); 305 311 } … … 347 353 } 348 354 if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) { 349 MAKERXSTRING( *prsResult, "", 0 );355 SaveResultString( prsResult, NULL, 0 ); 350 356 } 351 357 free( pszFinal ); … … 369 375 // Return the final converted string 370 376 if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) { 371 MAKERXSTRING( *prsResult, "", 0 );377 SaveResultString( prsResult, NULL, 0 ); 372 378 } 373 379 } else { 374 380 // UniUconvFromUcs failed 375 381 WriteErrorCode( ulRC, "UniUconvFromUcs"); 376 MAKERXSTRING( *prsResult, "", 0 );382 SaveResultString( prsResult, NULL, 0 ); 377 383 } 378 384 free( pszFinal ); … … 382 388 // Failed to create target UconvObject 383 389 WriteErrorCode( ulRC, "UniCreateUconvObject"); 384 MAKERXSTRING( *prsResult, "", 0 );390 SaveResultString( prsResult, NULL, 0 ); 385 391 } 386 392 } … … 389 395 } else { 390 396 // Conversion to UCS failed 391 MAKERXSTRING( *prsResult, "", 0 );397 SaveResultString( prsResult, NULL, 0 ); 392 398 } 393 399 … … 398 404 // Failed to create source UconvObject 399 405 WriteErrorCode( ulRC, "UniCreateUconvObject"); 400 MAKERXSTRING( *prsResult, "", 0 );406 SaveResultString( prsResult, NULL, 0 ); 401 407 } 402 408 … … 446 452 } else 447 453 sprintf( szLocale, "%ls", suLocale ); 448 MAKERXSTRING( *prsResult, szLocale, strlen(szLocale) );454 SaveResultString( prsResult, szLocale, strlen(szLocale) ); 449 455 } else { 450 456 WriteErrorCode( ulRC, "UniMapCtryToLocale"); 451 MAKERXSTRING( *prsResult, "", 0 );457 SaveResultString( prsResult, NULL, 0 ); 452 458 } 453 459 … … 528 534 sprintf( szNumber, "%d", ulCount ); 529 535 WriteStemElement( szStem, 0, szNumber ); 530 MAKERXSTRING( *prsResult, szNumber, strlen(szNumber) );536 SaveResultString( prsResult, szNumber, strlen(szNumber) ); 531 537 532 538 if ( uconv != NULL ) UniFreeUconvObject( uconv ); … … 534 540 } else { 535 541 WriteErrorCode( ulRC, "UniQueryLocaleList"); 536 MAKERXSTRING( *prsResult, "", 0 );542 SaveResultString( prsResult, NULL, 0 ); 537 543 } 538 544 … … 660 666 if ( ulRC != ULS_SUCCESS ) { 661 667 WriteErrorCode( ulRC, "UniUconvToUcs"); 662 MAKERXSTRING( *prsResult, "", 0 );668 SaveResultString( prsResult, NULL, 0 ); 663 669 } 664 670 } … … 689 695 } else { 690 696 WriteErrorCode( ulRC, "UniScanForAttr"); 691 MAKERXSTRING( *prsResult, "", 0 );697 SaveResultString( prsResult, NULL, 0 ); 692 698 } 693 699 … … 695 701 } else { 696 702 WriteErrorCode( ulRC, "UniCreateAttrObject"); 697 MAKERXSTRING( *prsResult, "", 0 );703 SaveResultString( prsResult, NULL, 0 ); 698 704 } 699 705 } else { 700 706 if ( psuAttrib ) WriteErrorCode( 0, "mbstowcs"); 701 707 else WriteErrorCode( 0, "calloc"); 702 MAKERXSTRING( *prsResult, "", 0 );708 SaveResultString( prsResult, NULL, 0 ); 703 709 } 704 710 if ( psuAttrib ) free( psuAttrib ); … … 708 714 } else { 709 715 WriteErrorCode( ulRC, "UniCreateUconvObject"); 710 MAKERXSTRING( *prsResult, "", 0 );716 SaveResultString( prsResult, NULL, 0 ); 711 717 } 712 718 … … 716 722 } else { 717 723 WriteErrorCode( ulRC, "UniCreateLocaleObject"); 718 MAKERXSTRING( *prsResult, "", 0 );724 SaveResultString( prsResult, NULL, 0 ); 719 725 } 720 726 … … 798 804 if ( ulRC != ULS_SUCCESS ) { 799 805 WriteErrorCode( ulRC, "UniUconvToUcs"); 800 MAKERXSTRING( *prsResult, "", 0 );806 SaveResultString( prsResult, NULL, 0 ); 801 807 } 802 808 } … … 813 819 // Now do the query and return the result 814 820 if ( UniQueryCharAttr( attrib, suChar[0] ) == 0 ) { 815 MAKERXSTRING( *prsResult, "0", 1 );821 SaveResultString( prsResult, PSZ_ZERO, 1 ); 816 822 } else { 817 MAKERXSTRING( *prsResult, "1", 1 );823 SaveResultString( prsResult, PSZ_ONE, 1 ); 818 824 } 819 825 UniFreeAttrObject( attrib ); … … 821 827 } else { 822 828 WriteErrorCode( ulRC, "UniCreateAttrObject"); 823 MAKERXSTRING( *prsResult, "", 0 );829 SaveResultString( prsResult, NULL, 0 ); 824 830 } 825 831 } else { 826 832 if ( psuAttrib ) WriteErrorCode( 0, "mbstowcs"); 827 833 else WriteErrorCode( 0, "calloc"); 828 MAKERXSTRING( *prsResult, "", 0 );834 SaveResultString( prsResult, NULL, 0 ); 829 835 } 830 836 if ( psuAttrib ) free( psuAttrib ); … … 834 840 } else { 835 841 WriteErrorCode( ulRC, "UniCreateUconvObject"); 836 MAKERXSTRING( *prsResult, "", 0 );842 SaveResultString( prsResult, NULL, 0 ); 837 843 } 838 844 UniFreeLocaleObject( locale ); … … 840 846 } else { 841 847 WriteErrorCode( ulRC, "UniCreateLocaleObject"); 842 MAKERXSTRING( *prsResult, "", 0 );848 SaveResultString( prsResult, NULL, 0 ); 843 849 } 844 850 … … 1063 1069 } 1064 1070 if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) { 1065 MAKERXSTRING( *prsResult, "", 0 );1071 SaveResultString( prsResult, NULL, 0 ); 1066 1072 } 1067 1073 free( pszFinal ); … … 1086 1092 // Return the final converted string 1087 1093 if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) { 1088 MAKERXSTRING( *prsResult, "", 0 );1094 SaveResultString( prsResult, NULL, 0 ); 1089 1095 } 1090 1096 UniFreeUconvObject( uconvCP ); … … 1092 1098 // UniUconvFromUcs failed 1093 1099 WriteErrorCode( ulRC, "UniUconvFromUcs"); 1094 MAKERXSTRING( *prsResult, "", 0 );1100 SaveResultString( prsResult, NULL, 0 ); 1095 1101 } 1096 1102 free( pszFinal ); … … 1099 1105 // Failed to create UconvObject 1100 1106 WriteErrorCode( ulRC, "UniCreateUconvObject"); 1101 MAKERXSTRING( *prsResult, "", 0 );1107 SaveResultString( prsResult, NULL, 0 ); 1102 1108 } 1103 1109 } … … 1110 1116 } else { 1111 1117 WriteErrorCode( ulRC, "UniCreateLocaleObject"); 1112 MAKERXSTRING( *prsResult, "", 0 );1118 SaveResultString( prsResult, NULL, 0 ); 1113 1119 } 1114 1120 … … 1211 1217 if ( ulRC != ULS_SUCCESS ) { 1212 1218 WriteErrorCode( ulRC, "UniUconvToUcs"); 1213 MAKERXSTRING( *prsResult, "", 0 );1219 SaveResultString( prsResult, NULL, 0 ); 1214 1220 } 1215 1221 } … … 1244 1250 } 1245 1251 if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) { 1246 MAKERXSTRING( *prsResult, "", 0 );1252 SaveResultString( prsResult, NULL, 0 ); 1247 1253 } 1248 1254 } else { … … 1260 1266 if ( ulRC == ULS_SUCCESS ) { 1261 1267 if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) { 1262 MAKERXSTRING( *prsResult, "", 0 );1268 SaveResultString( prsResult, NULL, 0 ); 1263 1269 } 1264 1270 } else { 1265 1271 WriteErrorCode( ulRC, "UniUconvFromUcs"); 1266 MAKERXSTRING( *prsResult, "", 0 );1272 SaveResultString( prsResult, NULL, 0 ); 1267 1273 } 1268 1274 } … … 1270 1276 } else { 1271 1277 WriteErrorCode( ulRC, "UniTransformStr"); 1272 MAKERXSTRING( *prsResult, "", 0 );1278 SaveResultString( prsResult, NULL, 0 ); 1273 1279 } 1274 1280 free( psuFinal ); … … 1277 1283 } else { 1278 1284 WriteErrorCode( ulRC, "UniCreateTransformObject"); 1279 MAKERXSTRING( *prsResult, "", 0 );1285 SaveResultString( prsResult, NULL, 0 ); 1280 1286 } 1281 1287 } else { 1282 1288 if ( psuXform ) WriteErrorCode( 0, "mbstowcs"); 1283 1289 else WriteErrorCode( 0, "calloc"); 1284 MAKERXSTRING( *prsResult, "", 0 );1290 SaveResultString( prsResult, NULL, 0 ); 1285 1291 } 1286 1292 if ( psuXform ) free( psuXform ); … … 1292 1298 } else { 1293 1299 WriteErrorCode( ulRC, "UniCreateUconvObject"); 1294 MAKERXSTRING( *prsResult, "", 0 );1300 SaveResultString( prsResult, NULL, 0 ); 1295 1301 } 1296 1302 UniFreeLocaleObject( locale ); … … 1298 1304 } else { 1299 1305 WriteErrorCode( ulRC, "UniCreateLocaleObject"); 1300 MAKERXSTRING( *prsResult, "", 0 );1306 SaveResultString( prsResult, NULL, 0 ); 1301 1307 } 1302 1308 … … 1456 1462 WriteErrorCode( ERRORIDERROR(WinGetLastError(hab)), "WinSetClipbrdData"); 1457 1463 else 1458 MAKERXSTRING( *prsResult, "", 0 );1464 SaveResultString( prsResult, NULL, 0 ); 1459 1465 } else { 1460 1466 WriteErrorCode( ulRC, "DosAllocSharedMem"); 1461 MAKERXSTRING( *prsResult, "", 0 );1467 SaveResultString( prsResult, NULL, 0 ); 1462 1468 } 1463 1469 WinCloseClipbrd( hab ); 1464 1470 } else { 1465 1471 WriteErrorCode( ulRC, "WinOpenClipbrd"); 1466 MAKERXSTRING( *prsResult, "", 0 );1472 SaveResultString( prsResult, NULL, 0 ); 1467 1473 } 1468 1474 … … 1476 1482 // UniUconvToUcs failed 1477 1483 WriteErrorCode( ulRC, "UniUconvFromUcs"); 1478 MAKERXSTRING( *prsResult, "", 0 );1484 SaveResultString( prsResult, NULL, 0 ); 1479 1485 } 1480 1486 … … 1485 1491 // Failed to create source UconvObject 1486 1492 WriteErrorCode( ulRC, "UniCreateUconvObject"); 1487 MAKERXSTRING( *prsResult, "", 0 );1493 SaveResultString( prsResult, NULL, 0 ); 1488 1494 } 1489 1495 … … 1619 1625 } 1620 1626 if ( ! SaveResultString( prsResult, pszFinal, ulBytes )) { 1621 MAKERXSTRING( *prsResult, "", 0 );1627 SaveResultString( prsResult, NULL, 0 ); 1622 1628 } 1623 1629 free( pszFinal ); … … 1641 1647 // Return the final converted string 1642 1648 if ( ! SaveResultString( prsResult, pszFinal, strlen(pszFinal) )) { 1643 MAKERXSTRING( *prsResult, "", 0 );1649 SaveResultString( prsResult, NULL, 0 ); 1644 1650 } 1645 1651 } else { 1646 1652 // UniUconvFromUcs failed 1647 1653 WriteErrorCode( ulRC, "UniUconvFromUcs"); 1648 MAKERXSTRING( *prsResult, "", 0 );1654 SaveResultString( prsResult, NULL, 0 ); 1649 1655 } 1650 1656 free( pszFinal ); … … 1654 1660 // Failed to create target UconvObject 1655 1661 WriteErrorCode( ulRC, "UniCreateUconvObject"); 1656 MAKERXSTRING( *prsResult, "", 0 );1662 SaveResultString( prsResult, NULL, 0 ); 1657 1663 } 1658 1664 } 1659 1665 } else { 1660 1666 // Either no text exists, or clipboard is not readable 1661 MAKERXSTRING( *prsResult, "", 0 );1667 SaveResultString( prsResult, NULL, 0 ); 1662 1668 } 1663 1669 … … 1665 1671 } else { 1666 1672 WriteErrorCode( ulRC, "WinOpenClipbrd"); 1667 MAKERXSTRING( *prsResult, "", 0 );1673 SaveResultString( prsResult, NULL, 0 ); 1668 1674 } 1669 1675 … … 1741 1747 if ( ulRC != ULS_SUCCESS ) { 1742 1748 WriteErrorCode( ulRC, "UniStrToUcs"); 1743 MAKERXSTRING( *prsResult, "", 0 );1749 SaveResultString( prsResult, NULL, 0 ); 1744 1750 return 0; 1745 1751 } 1746 1752 } else { 1747 1753 WriteErrorCode( ulRC, "UniCreateUconvObject"); 1748 MAKERXSTRING( *prsResult, "", 0 );1754 SaveResultString( prsResult, NULL, 0 ); 1749 1755 return 0; 1750 1756 } … … 1778 1784 free( psuFormat ); 1779 1785 WriteErrorCode( ulRC, "UniCreateLocaleObject"); 1780 MAKERXSTRING( *prsResult, "", 0 );1786 SaveResultString( prsResult, NULL, 0 ); 1781 1787 return 0; 1782 1788 } … … 1815 1821 UniFreeLocaleObject( locale ); 1816 1822 WriteErrorCode( 0, "gmtime"); 1817 MAKERXSTRING( *prsResult, "", 0 );1823 SaveResultString( prsResult, NULL, 0 ); 1818 1824 return ( 0 ); 1819 1825 } … … 1823 1829 UniFreeLocaleObject( locale ); 1824 1830 WriteErrorCode( 0, "localtime"); 1825 MAKERXSTRING( *prsResult, "", 0 );1831 SaveResultString( prsResult, NULL, 0 ); 1826 1832 return ( 0 ); 1827 1833 } … … 1842 1848 { 1843 1849 if ( ! SaveResultString( prsResult, pszTime, strlen(pszTime) )) 1844 MAKERXSTRING( *prsResult, "", 0 );1850 SaveResultString( prsResult, NULL, 0 ); 1845 1851 } else { 1846 1852 WriteErrorCode( ulRC, "UniUconvFromUcs"); 1847 MAKERXSTRING( *prsResult, "", 0 );1853 SaveResultString( prsResult, NULL, 0 ); 1848 1854 } 1849 1855 free( pszTime ); … … 1852 1858 } else { 1853 1859 WriteErrorCode( ulRC, "UniCreateUconvObject"); 1854 MAKERXSTRING( *prsResult, "", 0 );1860 SaveResultString( prsResult, NULL, 0 ); 1855 1861 } 1856 1862 1857 1863 } else { 1858 1864 WriteErrorCode( ulRC, "UniStrftime"); 1859 MAKERXSTRING( *prsResult, "", 0 );1865 SaveResultString( prsResult, NULL, 0 ); 1860 1866 } 1861 1867 … … 2072 2078 2073 2079 2080 #ifdef NO_SHARED_SOURCE 2081 2074 2082 /* ------------------------------------------------------------------------- * 2075 2083 * SaveResultString * … … 2177 2185 } 2178 2186 2179 2187 #endif -
rxuls/trunk/rxuls.def
r28 r32 1 1 LIBRARY RXULS INITINSTANCE TERMINSTANCE 2 2 DATA MULTIPLE NONSHARED 3 DESCRIPTION "@#Alex Taylor:0.6.0#@REXX Universal Language Support functions"3 DESCRIPTION '@#Alex Taylor:0.6.1#@##1## 12 May 2016 20:39:20 REINFORCE::::::@@REXX Universal Language Support functions' 4 4 5 5 EXPORTS ULSLoadFuncs 6 7 8 9 10 11 12 13 14 15 16 17 6 ULSDropFuncs 7 ULSVersion 8 ULSConvertCodepage 9 ULSCountryLocale 10 ULSFindAttr 11 ULSGetLocales 12 ULSQueryAttr 13 ULSQueryLocaleItem 14 ULSTransform 15 ULSPutUnicodeClipboard 16 ULSGetUnicodeClipboard 17 ULSFormatTime 18 18 -
rxuls/trunk/rxuls.txt
r28 r32 1 1 RXULS - REXX Universal Language Support API 2 | Version 0.6. 0 (August 31, 2010)2 | Version 0.6.1 (May 12, 2016) 3 3 4 4 REXX Universal Language Support (RxULS) provides a REXX interface to selected … … 18 18 If you are unfamiliar with ULS, or with Unicode in general, I suggest reading 19 19 my ULS Programming Guide, which is available on my website at: 20 | http:// users.socis.ca/~ataylo00/os2/toolkits/uls/#ulsguide20 | http://altsan.org/os2/toolkits/uls/#ulsguide 21 21 Although it was originally written for C programmers, much of the information 22 22 is useful and relevant to RxULS as well. … … 62 62 63 63 The latest version of RxULS resides on my ULS website: 64 http:// users.socis.ca/~ataylo00/os2/toolkits/uls/#rxuls64 http://altsan.org/os2/toolkits/uls/#rxuls 65 65 66 66 … … 1062 1062 HISTORY 1063 1063 1064 | 0.6.0 (2010-08-31) 1065 | - Added new function: ULSFormatTime 1066 | - Added library documentation in INF format. 1064 0.6.1 (2016-05-12) 1065 - More potential errors in return logic fixed (thanks to Steve Levine) 1066 - Additional bldlevel information now included. 1067 1068 0.6.0 (2015-08-02) 1069 - Added new function: ULSFormatTime 1070 - Added library documentation in INF format. 1071 - Fixed memory leak and possible crash when returning result strings. 1067 1072 1068 1073 0.5.2 (2008-03-10) … … 1084 1089 LICENSE 1085 1090 1086 | RxULS is (C) 2006, 201 0Alexander Taylor.1091 | RxULS is (C) 2006, 2016 Alexander Taylor. 1087 1092 1088 1093 Redistribution and use in source and binary forms, with or without
Note:
See TracChangeset
for help on using the changeset viewer.