1 /* 2 * Copyright (C) 1998-2001 Mark Hessling <M.Hessling@qut.edu.au> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the Free 16 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 */ 18 19 #ifndef _RXPACK_H 20 #define _RXPACK_H 21 22 #ifdef HAVE_CONFIG_H 23 # include "config.h" 24 #else 25 # include "defines.h" 26 #endif 27 28 #include <stdio.h> 29 30 #ifdef HAVE_CTYPE_H 31 # include <ctype.h> 32 #endif 33 34 #ifdef HAVE_STDLIB_H 35 # include <stdlib.h> 36 #endif 37 38 #ifdef HAVE_STRING_H 39 # include <string.h> 40 #endif 41 42 #ifdef HAVE_ERRNO_H 43 # include <errno.h> 44 #endif 45 46 #ifdef HAVE_ASSERT_H 47 # include <assert.h> 48 #endif 49 50 #ifdef HAVE_SYS_TYPES_H 51 # include <sys/types.h> 52 #endif 53 54 #ifdef HAVE_SYS_STAT_H 55 # include <sys/stat.h> 56 #endif 57 58 #ifdef HAVE_DIRENT_H 59 # include <dirent.h> 60 #endif 61 62 #ifdef HAVE_MALLOC_H 63 # include <malloc.h> 64 #endif 65 66 #ifdef HAVE_MATH_H 67 # include <math.h> 68 #endif 69 70 #ifdef HAVE_STDARG_H 71 # include <stdarg.h> 72 #endif 73 74 #ifdef HAVE_UNISTD_H 75 # include <unistd.h> 76 #endif 77 78 #ifdef HAVE_GETOPT_H 79 # include <getopt.h> 80 #endif 81 82 #ifdef HAVE_IO_H 83 # include <io.h> 84 #endif 85 86 #ifdef HAVE_FCNTL_H 87 # include <fcntl.h> 88 #endif 89 /* 90 * The includes for stdint.h and inttypes.h are deliberately included in quotes 91 * so that the Windows replacement files can be found in the "win" directory 92 */ 93 #ifdef HAVE_STDINT_H 94 # include "stdint.h" 95 #endif 96 #ifdef HAVE_INTTYPES_H 97 # include "inttypes.h" 98 #endif 99 100 /* 101 * All things that this application may require out of os2.h must be 102 * specified here in one place. This is because EMX includes all Rexx 103 * related stuff in os2.h, not in a serperate header file. This makes 104 * it difficult to use another Rexx interpreter with EMX :-( 105 */ 106 #if defined(OS2) || defined(__OS2__) 107 # if !defined(EMXVIDEO) 108 # define INCL_VIO 109 # define INCL_KBD 110 # endif 111 # if defined(USE_OS2REXX) 112 # define INCL_RXSHV /* Shared variable support */ 113 # define INCL_RXFUNC /* External functions support */ 114 # define INCL_RXSYSEXIT /* System exit routines */ 115 # define INCL_RXSUBCOM /* Subcommand routines */ 116 # include <os2.h> 117 # else 118 # include <os2.h> 119 # define INCL_RXSHV /* Shared variable support */ 120 # define INCL_RXFUNC /* External functions support */ 121 # define INCL_RXSYSEXIT /* System exit routines */ 122 # define INCL_RXSUBCOM /* Subcommand routines */ 123 # endif 124 #else 125 # define INCL_RXSHV /* Shared variable support */ 126 # define INCL_RXFUNC /* External functions support */ 127 # define INCL_RXSYSEXIT /* System exit routines */ 128 # define INCL_RXSUBCOM /* Subcommand routines */ 129 #endif 130 131 /* 132 * The following header file is supplied by the application package. 133 * It specifies any application-specific header files and #defines 134 * the following: 135 * RXPACKAGE_MAGIC_NUMBER 12345 - any number 136 * RXPACKAGE_DEBUG_VAR "ENV_VAR" - an env variable enclosed in quotes 137 */ 138 #include "apphead.h" 139 140 #include "rxdef.h" 141 142 #include "rxmt.h" 143 144 #define RETBUFLEN 250 145 146 #if defined(DYNAMIC) 147 # define DYNAMIC_LIBRARY 1 148 #endif 149 150 #ifndef TRUE 151 # define TRUE 1 152 # define FALSE 0 153 #endif 154 155 /* 156 * Run time modes 157 */ 158 #define MODE_DEBUG 1 159 #define MODE_VERBOSE 2 160 #define MODE_INTERNAL 4 161 #define MODE_HALTONERROR 8 162 163 #define REXX_FAIL 1 164 165 #define RXSTRCAT(dst,dstlen,src,srclen) \ 166 { \ 167 memcpy((dst)+(dstlen),(src),(srclen)); \ 168 (dstlen)+=(srclen); \ 169 *((dst)+(dstlen))='\0'; \ 170 } 171 #define RXSTRCPY(dst,dstlen,src,srclen) \ 172 { \ 173 memcpy((dst),(src),(srclen)); \ 174 (dstlen)=(srclen); \ 175 *((dst)+(dstlen))='\0'; \ 176 } 177 178 #if !defined(max) 179 # define max(a,b) (((a) > (b)) ? (a) : (b)) 180 #endif 181 182 #if !defined(min) 183 # define min(a,b) (((a) < (b)) ? (a) : (b)) 184 #endif 185 186 #if !defined(MAX_PATH) 187 # if defined(NAME_MAX) 188 # define MAX_PATH NAME_MAX 189 # elif defined(MAXNAMLEN) 190 # define MAX_PATH MAXNAMLEN 191 # else 192 # define MAX_PATH 255 193 # endif 194 #endif 195 196 typedef int8_t RX_INT8; 197 typedef uint8_t RX_UINT8; 198 typedef int RX_INT; 199 typedef unsigned int RX_UINT; 200 typedef uint16_t RX_UINT16; 201 typedef long RX_LONG; 202 typedef unsigned long RX_ULONG; 203 typedef unsigned long RX_BOOL; 204 typedef unsigned int RX_INTBOOL; 205 206 /* 207 * Typedef a common "long long" 208 */ 209 #if defined(_MSC_VER) || defined(__LCC__) 210 /* MS VC++ or LCC on Win32 */ 211 typedef signed __int64 rx_long_long; 212 # define RX_LL_FORMAT "%I64d" 213 #elif defined(__QNX__) 214 typedef long rx_long_long; 215 # define RX_LL_FORMAT "%ld" 216 #elif (defined(__WATCOMC__) && !defined(__QNX__)) || (defined(__GNUC__) && defined(WIN32)) 217 /* Watcom C++ on WIn32 or OS/2 or Cygwin on Win32 */ 218 typedef long long rx_long_long; 219 # define RX_LL_FORMAT "%I64d" 220 #elif defined(HAVE_LONG_LONG) 221 /* Any compiler that supports "long long" */ 222 typedef long long rx_long_long; 223 # define RX_LL_FORMAT "%lld" 224 #else 225 /* No "long long" support; make it "long" */ 226 typedef long rx_long_long; 227 # define RX_LL_FORMAT "%ld" 228 #endif 229 230 #if defined(HAVE__STATI64) 231 # define rx_stat_buf _stati64 232 # if defined(WIN32) || defined(WIN64) 233 # define rx_stat rx_w32_stat 234 # else 235 # define rx_stat stati64 236 # endif 237 # define rx_fstat _fstati64 238 # define rx_fseek _fseeki64 239 # define rx_ftell _ftelli64 240 #else 241 # define rx_stat_buf stat 242 # if defined(WIN32) || defined(WIN64) 243 # define rx_stat rx_w32_stat 244 #else 245 # define rx_stat stat 246 #endif 247 # define rx_fstat fstat 248 # define rx_fseek fseek 249 # define rx_ftell ftell 250 #endif 251 252 #ifdef USE_REXX6000 253 typedef USHORT RexxFunctionHandler(PSZ, ULONG, PRXSTRING, PSZ, PRXSTRING) ; 254 #endif 255 /* 256 * Standard REXX API function - idea borrowed from Patrick McPhee's Regutil 257 */ 258 #define rxfunc(x) RFH_RETURN x( RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr ) 259 /*#define rxfunc(x) APIRET APIENTRY x( RFH_ARG0_TYPE name, RFH_ARG1_TYPE argc, RFH_ARG2_TYPE argv, RFH_ARG3_TYPE stck, RFH_ARG4_TYPE retstr )*/ 260 261 /*----------------------------------------------------------------------------- 262 * Definition of an external function 263 *----------------------------------------------------------------------------*/ 264 typedef struct { 265 RRFD_ARG0_TYPE ExternalName; 266 RRFE_ARG1_TYPE EntryPoint; 267 RRFD_ARG2_TYPE InternalName; 268 int DllLoad; 269 } RexxFunction; 270 271 272 /* 273 * The following structure contains details of a package's constants 274 */ 275 typedef struct 276 { 277 char *name; /* base name of constant */ 278 int type; /* 0 (numeric), 1 (text), 2 (float), 3 (char) */ 279 long numeric_value; /* numeric value of constant */ 280 char *text_value; /* text value of constant */ 281 double double_value; /* double value of constant */ 282 char char_value; /* char value of constant */ 283 } RxPackageConstantDef; 284 285 typedef int PackageInitialiser( RxPackageGlobalDataDef * ); 286 typedef int PackageTerminator( RxPackageGlobalDataDef * ); 287 288 #ifdef HAVE_PROTO 289 # define Args(a) a 290 #else 291 # define Args(a) () 292 #endif 293 294 /* 295 * The following #defines are intended to prevent a problem with duplicate function names 296 * when code is statically linked with the non-thread-safe version of this code. ie Rexx/SQL 297 * static library linked with Rexx/ISAM static library 298 */ 299 #define FunctionPrologue RxpFunctionPrologue 300 #define FunctionTrace RxpFunctionTrace 301 #define FunctionEpilogue RxpFunctionEpilogue 302 #define InternalTrace RxpInternalTrace 303 #define RxDisplayError RxpRxDisplayError 304 #define InitRxPackage RxpInitRxPackage 305 #define TermRxPackage RxpTermRxPackage 306 #define RegisterRxFunctions RxpRegisterRxFunctions 307 #define RegisterRxSubcom RxpRegisterRxSubcom 308 #define RegisterRxInit RxpRegisterRxInit 309 #define QueryRxFunction RxpQueryRxFunction 310 #define DeregisterRxFunctions RxpDeregisterRxFunctions 311 #define SetPackageConstants RxpSetPackageConstants 312 #define make_upper Rxpmake_upper 313 #define make_lower Rxpmake_lower 314 #define AllocString RxpAllocString 315 #define MkAsciz RxpMkAsciz 316 #define SetRexxVariable RxpSetRexxVariable 317 #define GetRexxVariable RxpGetRexxVariable 318 #define GetRexxVariableInteger RxpGetRexxVariableInteger 319 #define DropRexxVariable RxpDropRexxVariable 320 #define RxSetTraceFile RxpRxSetTraceFile 321 #define RxGetTraceFile RxpRxGetTraceFile 322 #define RxSetConstantPrefix RxpRxSetConstantPrefix 323 #define RxGetConstantPrefix RxpRxGetConstantPrefix 324 #define RxSetRunFlags RxpRxSetRunFlags 325 #define RxGetRunFlags RxpRxGetRunFlags 326 #define RxReturn RxpRxReturn 327 #define RxReturnHex RxpRxReturnHex 328 #define RxReturnString RxpRxReturnString 329 #define RxReturnStringAndFree RxpRxReturnStringAndFree 330 #define RxReturnDataAndFree RxpRxReturnDataAndFree 331 /* the following 3 should be deprecated */ 332 #define RxReturnNumber RxpRxReturnNumber 333 #define RxReturnLongLong RxpRxReturnLongLong 334 #define RxReturnUnsignedNumber RxpRxReturnUnsignedNumber 335 #define RxReturnINT8 RxpRxReturnINT8 336 #define RxReturnUINT8 RxpRxReturnUINT8 337 #define RxReturnINT16 RxpRxReturnINT16 338 #define RxReturnUINT16 RxpRxReturnUINT16 339 #define RxReturnINT32 RxpRxReturnINT32 340 #define RxReturnUINT32 RxpRxReturnUINT32 341 #define RxReturnINT64 RxpRxReturnINT64 342 #define RxReturnUINT64 RxpRxReturnUINT64 343 #define RxReturnDouble RxpRxReturnDouble 344 #define RxReturnFloat RxpRxReturnFloat 345 #define RxReturnPointer RxpRxReturnPointer 346 #define memcmpi Rxpmemcmpi 347 #define rxstrcmpi Rxprxstrcmpi 348 #define my_checkparam Rxpmy_checkparam 349 #define RxStrToBool RxpRxStrToBool 350 #define RxStrToIntBool RxpRxStrToIntBool 351 /* the following 5 should be deprecated */ 352 #define RxStrToInt RxpRxStrToInt 353 #define RxStrToUInt RxpRxStrToUInt 354 #define RxStrToLong RxpRxStrToLong 355 #define RxStrToULong RxpRxStrToULong 356 #define RxStrToLongLong RxpRxStrToLongLong 357 #define RxStrToINT8 RxpRxStrToINT8 358 #define RxStrToUINT8 RxpRxStrToUINT8 359 #define RxStrToINT16 RxpRxStrToINT16 360 #define RxStrToUINT16 RxpRxStrToUINT16 361 #define RxStrToINT32 RxpRxStrToINT32 362 #define RxStrToUINT32 RxpRxStrToUINT32 363 #define RxStrToINT64 RxpRxStrToINT64 364 #define RxStrToUINT64 RxpRxStrToUINT64 365 #define RxStrToDouble RxpRxStrToDouble 366 #define RxStrToFloat RxpRxStrToFloat 367 #define RxStemToCharArray RxpRxStemToCharArray 368 #define RxFreeCharArray RxpRxFreeCharArray 369 #define RxStemToIntArray RxpRxStemToIntArray 370 #define RxFreeIntArray RxpRxFreeIntArray 371 #define RxStemToUIntArray RxpRxStemToUIntArray 372 #define RxFreeUIntArray RxpRxFreeUIntArray 373 #define RxStemToUINT16Array RxpRxStemToUINT16Array 374 #define RxFreeUINT16Array RxpRxFreeUINT16Array 375 #define RxStemToLongArray RxpRxStemToLongArray 376 #define RxFreeLongArray RxpRxFreeLongArray 377 #define RxStemToULongArray RxpRxStemToULongArray 378 #define RxFreeULongArray RxpRxFreeULongArray 379 #define RxNumberToVariable RxpRxNumberToVariable 380 #define RxGetRexxInterpreterVersion RxpRxGetRexxInterpreterVersion 381 382 RxPackageGlobalDataDef *FunctionPrologue Args(( RxPackageGlobalDataDef *, PackageInitialiser *, char *, char *, ULONG, RFH_ARG2_TYPE )); 383 long FunctionEpilogue Args(( RxPackageGlobalDataDef *, char *, long )); 384 #ifdef HAVE_PROTO 385 void FunctionTrace( RxPackageGlobalDataDef *, char *, ... ); 386 void InternalTrace( RxPackageGlobalDataDef *, char *, ... ); 387 void RxDisplayError( RxPackageGlobalDataDef *, RFH_ARG0_TYPE, ... ); 388 #else 389 void RxDisplayError( ); 390 void FunctionTrace(); 391 void InternalTrace(); 392 #endif 393 394 RxPackageGlobalDataDef *InitRxPackage Args(( RxPackageGlobalDataDef *, PackageInitialiser *, char *, int * )); 395 int TermRxPackage Args(( RxPackageGlobalDataDef *, PackageTerminator *, RexxFunction *, char *, int )); 396 int RegisterRxFunctions Args(( RxPackageGlobalDataDef *, RexxFunction *, char * )); 397 int RegisterRxSubcom Args(( RxPackageGlobalDataDef *, RexxSubcomHandler )); 398 int RegisterRxInit Args(( RxPackageGlobalDataDef *, RexxExitHandler, char *)); 399 int QueryRxFunction Args(( RxPackageGlobalDataDef *, char * )); 400 int DeregisterRxFunctions Args(( RxPackageGlobalDataDef *, RexxFunction *, int )); 401 int SetPackageConstants Args(( RxPackageGlobalDataDef *, RxPackageConstantDef *, int )); 402 char *make_upper Args(( RxPackageGlobalDataDef *,char * )); 403 char *make_lower Args(( RxPackageGlobalDataDef *,char * )); 404 char *AllocString Args(( RxPackageGlobalDataDef *, char *, int )); 405 char *MkAsciz Args(( RxPackageGlobalDataDef *,char *, int, char *, int )); 406 int SetRexxVariable Args(( RxPackageGlobalDataDef *,char *, int, char *, int )); 407 RXSTRING *GetRexxVariable Args(( RxPackageGlobalDataDef *, char *, RXSTRING *, int )); 408 int *GetRexxVariableInteger Args(( RxPackageGlobalDataDef *, char *, int *, int )); 409 int DropRexxVariable Args(( RxPackageGlobalDataDef *,char *, int )); 410 int RxSetTraceFile Args(( RxPackageGlobalDataDef *, char * )); 411 char *RxGetTraceFile Args(( RxPackageGlobalDataDef * )); 412 int RxSetConstantPrefix Args(( RxPackageGlobalDataDef *, char * )); 413 char *RxGetConstantPrefix Args(( RxPackageGlobalDataDef * )); 414 void RxSetRunFlags Args(( RxPackageGlobalDataDef *, int )); 415 int RxGetRunFlags Args(( RxPackageGlobalDataDef * )); 416 int RxReturn Args(( RxPackageGlobalDataDef *, RXSTRING * )); 417 int RxReturnHex Args(( RxPackageGlobalDataDef *, RXSTRING * )); 418 int RxReturnString Args(( RxPackageGlobalDataDef *, RXSTRING *, char * )); 419 int RxReturnStringAndFree Args(( RxPackageGlobalDataDef *, RXSTRING *, char *, int )); 420 int RxReturnDataAndFree Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *retstr, void *str, long len, int freeit )); 421 int RxReturnNumber Args(( RxPackageGlobalDataDef *, RXSTRING *, long )); 422 int RxReturnLongLong Args(( RxPackageGlobalDataDef *, RXSTRING *, rx_long_long num )); 423 int RxReturnUnsignedNumber Args(( RxPackageGlobalDataDef *, RXSTRING *, ULONG )); 424 int RxReturnINT8 Args(( RxPackageGlobalDataDef *, RXSTRING *, int8_t)); 425 int RxReturnUINT8 Args(( RxPackageGlobalDataDef *, RXSTRING *, uint8_t)); 426 int RxReturnINT16 Args(( RxPackageGlobalDataDef *, RXSTRING *, int16_t)); 427 int RxReturnUINT16 Args(( RxPackageGlobalDataDef *, RXSTRING *, uint16_t)); 428 int RxReturnINT32 Args(( RxPackageGlobalDataDef *, RXSTRING *, int32_t)); 429 int RxReturnUINT32 Args(( RxPackageGlobalDataDef *, RXSTRING *, uint32_t)); 430 int RxReturnINT64 Args(( RxPackageGlobalDataDef *, RXSTRING *, int64_t)); 431 int RxReturnUINT64 Args(( RxPackageGlobalDataDef *, RXSTRING *, uint64_t)); 432 int RxReturnDouble Args(( RxPackageGlobalDataDef *, RXSTRING *, double )); 433 int RxReturnFloat Args(( RxPackageGlobalDataDef *, RXSTRING *, float )); 434 int RxReturnPointer Args(( RxPackageGlobalDataDef *, RXSTRING *, void * )); 435 int memcmpi Args(( RxPackageGlobalDataDef *,char *, char *, int )); 436 int rxstrcmpi Args(( RxPackageGlobalDataDef *, char *, char * )); 437 int my_checkparam Args(( RxPackageGlobalDataDef *, RFH_ARG0_TYPE, int, int, int )); 438 int RxStrToBool Args(( RxPackageGlobalDataDef *,RXSTRING *, ULONG * )); 439 int RxStrToIntBool Args(( RxPackageGlobalDataDef *, RXSTRING *, unsigned int * )); 440 int RxStrToInt Args(( RxPackageGlobalDataDef *, RXSTRING *, int * )); 441 int RxStrToUInt Args(( RxPackageGlobalDataDef *, RXSTRING *, unsigned int * )); 442 int RxStrToLong Args(( RxPackageGlobalDataDef *, RXSTRING *, long * )); 443 int RxStrToULong Args(( RxPackageGlobalDataDef *, RXSTRING *, unsigned long * )); 444 int RxStrToLongLong Args(( RxPackageGlobalDataDef *, RXSTRING *, rx_long_long * )); 445 int RxStrToINT8 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, int8_t *result )); 446 int RxStrToUINT8 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, uint8_t *result )); 447 int RxStrToINT16 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, int16_t *result )); 448 int RxStrToUINT16 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, uint16_t *result )); 449 int RxStrToINT32 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, int32_t *result )); 450 int RxStrToUINT32 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, uint32_t *result )); 451 int RxStrToINT64 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, int64_t *result )); 452 int RxStrToUINT64 Args(( RxPackageGlobalDataDef *RxPackageGlobalData, RXSTRING *ptr, uint64_t *result )); 453 int RxStrToDouble Args(( RxPackageGlobalDataDef *, RXSTRING *, double * )); 454 int RxStrToFloat Args(( RxPackageGlobalDataDef *, RXSTRING *, float * )); 455 int RxStemToCharArray Args(( RxPackageGlobalDataDef *, RXSTRING *, char *** )); 456 void RxFreeCharArray Args(( RxPackageGlobalDataDef *,char **, int )); 457 int RxStemToIntArray Args(( RxPackageGlobalDataDef *, RXSTRING *, int ** )); 458 void RxFreeIntArray Args(( RxPackageGlobalDataDef *,int * )); 459 int RxStemToUIntArray Args(( RxPackageGlobalDataDef *, RXSTRING *, unsigned int ** )); 460 void RxFreeUIntArray Args(( RxPackageGlobalDataDef *,unsigned int * )); 461 int RxStemToUINT16Array Args(( RxPackageGlobalDataDef *, RXSTRING *, uint16_t ** )); 462 void RxFreeUINT16Array Args(( RxPackageGlobalDataDef *,uint16_t * )); 463 int RxStemToLongArray Args(( RxPackageGlobalDataDef *, RXSTRING *, long ** )); 464 void RxFreeLongArray Args(( RxPackageGlobalDataDef *,long * )); 465 int RxStemToULongArray Args(( RxPackageGlobalDataDef *, RXSTRING *, unsigned long ** )); 466 void RxFreeULongArray Args(( RxPackageGlobalDataDef *,unsigned long * )); 467 int RxNumberToVariable Args(( RxPackageGlobalDataDef *, RXSTRING *, ULONG )); 468 int RxBinaryStringToUINT8 Args(( RxPackageGlobalDataDef *, RXSTRING *, uint8_t * )); 469 char *RxGetRexxInterpreterVersion Args(( char *buf )); 470 #if defined(WIN32) || defined(WIN64) 471 # if defined(HAVE__STATI64) 472 int rx_w32_stat( const char *path, struct _stati64 *buffer ); 473 # else 474 int rx_w32_stat( const char *path, struct _stat *buffer ); 475 # endif 476 #endif 477 478 #ifdef DEBUG 479 # define DEBUGDUMP(x) {x;} 480 #else 481 # define DEBUGDUMP(x) {} 482 #endif 483 /* 484 * Directory and PATH separators 485 */ 486 #if defined(MSDOS) || ( defined(__WATCOMC__) && !defined(__QNX__) ) || defined(_MSC_VER) || defined(DOS) || defined(OS2) ||defined(__OS2__) || defined(__WINS__) || defined(__EPOC32__) || defined(__LCC__) 487 # define FILE_SEPARATORS "\\/:" 488 # define FILE_SEPARATOR '\\' 489 # define FILE_SEPARATOR_STR "\\" 490 # define PATH_SEPARATOR ';' 491 # define PATH_SEPARATOR_STR ";" 492 #elif defined(VMS) 493 # define FILE_SEPARATORS "]" 494 # define FILE_SEPARATOR ']' 495 # define FILE_SEPARATOR_STR "]" 496 # define PATH_SEPARATOR '?' 497 # define PATH_SEPARATOR_STR "?" 498 #elif defined(MAC) 499 # define FILE_SEPARATOR "]" 500 # define FILE_SEPARATOR ']' 501 # define FILE_SEPARATOR_STR "]" 502 # define PATH_SEPARATOR '?' 503 # define PATH_SEPARATOR_STR "?" 504 #else 505 # define FILE_SEPARATORS "/" 506 # define FILE_SEPARATOR '/' 507 # define FILE_SEPARATOR_STR "/" 508 # define PATH_SEPARATOR ':' 509 # define PATH_SEPARATOR_STR ":" 510 #endif 511 512 #define MALLOC_TSD( TSD, bytes ) (TSD)->RxMTMalloc( TSD, bytes ) 513 #define FREE_TSD( TSD, ptr ) (TSD)->RxMTFree( TSD, ptr ) 514 515 /* special test for va_copy() availability */ 516 #if defined(_MSC_VER) 517 # if _MSC_VER < 1800 518 # define va_copy(dest,src) (dest = src) 519 # endif 520 #endif 521 522 #endif /* !_RXPACK_H */ 523