From e81c3d4058e937f0973c3976d133d4d3c860f9ee Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Wed, 15 Jul 2009 00:37:09 +0000 Subject: [PATCH] 2009-07-15 02:35 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/config/hpux/gcc.cf * harbour/config/darwin/gcc.cf * harbour/config/dos/watcom.cf * harbour/config/dos/djgpp.cf * harbour/config/win/watcom.cf * harbour/config/win/icc.cf * harbour/config/win/cygwin.cf * harbour/config/win/msvc.cf * harbour/config/win/xcc.cf * harbour/config/win/mingw.cf * harbour/config/win/pocc.cf * harbour/config/win/bcc.cf * harbour/config/linux/watcom.cf * harbour/config/linux/gcc.cf * harbour/config/linux/icc.cf * harbour/config/os2/watcom.cf * harbour/config/os2/gcc.cf * harbour/config/sunos/gcc.cf * harbour/config/bsd/gcc.cf * harbour/config/wce/msvcarm.cf * harbour/config/wce/mingwarm.cf * harbour/config/wce/poccarm.cf * cleanup: rtl -> hbrtl, rdd -> hbrdd * harbour/harbour.spec * harbour/harbour-win-spec * harbour/harbour-wce-spec * harbour/include/hbcomp.h * harbour/source/Makefile + harbour/source/nulrtl + harbour/source/nulrtl/nulrtl.c + harbour/source/nulrtl/Makefile + added hbnulrtl library to use non .prg harbour binaries * harbour/source/rtl/strmatch.c * harbour/source/common/Makefile + harbour/source/common/strwild.c * moved hb_strMatch*() functions from RTL to COMMON library Warning: copyright changed in new file. Viktor is rtl/strmatch.c copyright holder but hb_strMatch*() functions is my code. * harbour/source/rtl/Makefile - harbour/source/rtl/hbffind.c * harbour/source/common/Makefile * harbour/source/common/hbffind.c * moved hb_fsFind*() functions from RTL to COMMON library * harbour/source/main/harbour.c * harbour/source/main/Makefile * use hbnulrtl library to create harbour binaries * harbour/source/pp/Makefile * harbour/source/pp/hbpp.c * use hbnulrtl library to create hbpp binaries * added support for wildcard search * harbour/examples/pp/pp.c * harbour/examples/pp/pp.hbp * use hbnulrtl library to create pp binaries question: why is ignored -nohblib in pp.hbp? * harbour/contrib/rddads/ads1.c % removed always false if() { ... } statement --- harbour/ChangeLog | 65 +++ harbour/config/bsd/gcc.cf | 6 +- harbour/config/darwin/gcc.cf | 6 +- harbour/config/dos/djgpp.cf | 6 +- harbour/config/dos/watcom.cf | 6 +- harbour/config/hpux/gcc.cf | 6 +- harbour/config/linux/gcc.cf | 6 +- harbour/config/linux/icc.cf | 6 +- harbour/config/linux/watcom.cf | 6 +- harbour/config/os2/gcc.cf | 6 +- harbour/config/os2/watcom.cf | 6 +- harbour/config/sunos/gcc.cf | 6 +- harbour/config/wce/mingwarm.cf | 6 +- harbour/config/wce/msvcarm.cf | 6 +- harbour/config/wce/poccarm.cf | 6 +- harbour/config/win/bcc.cf | 6 +- harbour/config/win/cygwin.cf | 6 +- harbour/config/win/icc.cf | 6 +- harbour/config/win/mingw.cf | 6 +- harbour/config/win/msvc.cf | 6 +- harbour/config/win/pocc.cf | 6 +- harbour/config/win/watcom.cf | 6 +- harbour/config/win/xcc.cf | 6 +- harbour/contrib/rddads/ads1.c | 4 - harbour/examples/pp/pp.c | 47 -- harbour/examples/pp/pp.hbp | 5 + harbour/harbour-wce-spec | 1 + harbour/harbour-win-spec | 1 + harbour/harbour.spec | 1 + harbour/include/hbcomp.h | 2 + harbour/source/Makefile | 6 +- harbour/source/common/Makefile | 4 +- harbour/source/{rtl => common}/hbffind.c | 0 harbour/source/common/strwild.c | 285 +++++++++++ harbour/source/main/Makefile | 1 + harbour/source/main/harbour.c | 510 +------------------ harbour/source/nulrtl/Makefile | 14 + harbour/source/nulrtl/nulrtl.c | 600 +++++++++++++++++++++++ harbour/source/pp/Makefile | 1 + harbour/source/pp/hbpp.c | 114 +++-- harbour/source/rtl/Makefile | 1 - harbour/source/rtl/strmatch.c | 232 --------- 42 files changed, 1117 insertions(+), 909 deletions(-) rename harbour/source/{rtl => common}/hbffind.c (100%) create mode 100644 harbour/source/common/strwild.c create mode 100644 harbour/source/nulrtl/Makefile create mode 100644 harbour/source/nulrtl/nulrtl.c diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 66158d9c80..e19913de23 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,71 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-07-15 02:35 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/config/hpux/gcc.cf + * harbour/config/darwin/gcc.cf + * harbour/config/dos/watcom.cf + * harbour/config/dos/djgpp.cf + * harbour/config/win/watcom.cf + * harbour/config/win/icc.cf + * harbour/config/win/cygwin.cf + * harbour/config/win/msvc.cf + * harbour/config/win/xcc.cf + * harbour/config/win/mingw.cf + * harbour/config/win/pocc.cf + * harbour/config/win/bcc.cf + * harbour/config/linux/watcom.cf + * harbour/config/linux/gcc.cf + * harbour/config/linux/icc.cf + * harbour/config/os2/watcom.cf + * harbour/config/os2/gcc.cf + * harbour/config/sunos/gcc.cf + * harbour/config/bsd/gcc.cf + * harbour/config/wce/msvcarm.cf + * harbour/config/wce/mingwarm.cf + * harbour/config/wce/poccarm.cf + * cleanup: rtl -> hbrtl, rdd -> hbrdd + + * harbour/harbour.spec + * harbour/harbour-win-spec + * harbour/harbour-wce-spec + * harbour/include/hbcomp.h + * harbour/source/Makefile + + harbour/source/nulrtl + + harbour/source/nulrtl/nulrtl.c + + harbour/source/nulrtl/Makefile + + added hbnulrtl library to use non .prg harbour binaries + + * harbour/source/rtl/strmatch.c + * harbour/source/common/Makefile + + harbour/source/common/strwild.c + * moved hb_strMatch*() functions from RTL to COMMON library + Warning: copyright changed in new file. Viktor is rtl/strmatch.c + copyright holder but hb_strMatch*() functions is my code. + + * harbour/source/rtl/Makefile + - harbour/source/rtl/hbffind.c + * harbour/source/common/Makefile + * harbour/source/common/hbffind.c + * moved hb_fsFind*() functions from RTL to COMMON library + + * harbour/source/main/harbour.c + * harbour/source/main/Makefile + * use hbnulrtl library to create harbour binaries + + * harbour/source/pp/Makefile + * harbour/source/pp/hbpp.c + * use hbnulrtl library to create hbpp binaries + * added support for wildcard search + + * harbour/examples/pp/pp.c + * harbour/examples/pp/pp.hbp + * use hbnulrtl library to create pp binaries + question: why is ignored -nohblib in pp.hbp? + + * harbour/contrib/rddads/ads1.c + % removed always false if() { ... } statement + 2009-07-14 14:07 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * contrib/hbqt/hbqt.h * contrib/hbqt/hbqt_slots.cpp diff --git a/harbour/config/bsd/gcc.cf b/harbour/config/bsd/gcc.cf index 8ae07c9a1e..8dcba325f2 100644 --- a/harbour/config/bsd/gcc.cf +++ b/harbour/config/bsd/gcc.cf @@ -40,13 +40,13 @@ LINKLIBS += -Wl,--start-group LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library and other RTLs -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) diff --git a/harbour/config/darwin/gcc.cf b/harbour/config/darwin/gcc.cf index ff1bbeaeb8..6cc73d2a2d 100644 --- a/harbour/config/darwin/gcc.cf +++ b/harbour/config/darwin/gcc.cf @@ -52,13 +52,13 @@ LINKPATHS += -L$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library and other RTLs -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) -lhbrtl diff --git a/harbour/config/dos/djgpp.cf b/harbour/config/dos/djgpp.cf index 6f24e41a79..78d4c45479 100644 --- a/harbour/config/dos/djgpp.cf +++ b/harbour/config/dos/djgpp.cf @@ -39,13 +39,13 @@ LINKPATHS += -L$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library and other RTLs -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) endif diff --git a/harbour/config/dos/watcom.cf b/harbour/config/dos/watcom.cf index fdd5913f9e..5132088dfc 100644 --- a/harbour/config/dos/watcom.cf +++ b/harbour/config/dos/watcom.cf @@ -106,12 +106,12 @@ endif LINKLIBS += $(foreach lib, $(LIBS), $(LIB_DIR)/$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) RDDLIBS = $(foreach drv, $(HB_DB_DRIVERS), $(LIB_DIR)/$(drv)) endif -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) GTLIBS = $(foreach gt, $(HB_GT_LIBS), $(LIB_DIR)/$(gt)) endif diff --git a/harbour/config/hpux/gcc.cf b/harbour/config/hpux/gcc.cf index f53679765d..958181d17b 100644 --- a/harbour/config/hpux/gcc.cf +++ b/harbour/config/hpux/gcc.cf @@ -46,13 +46,13 @@ LD_OUT = -o LINKPATHS += -L$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) -lhbrtl diff --git a/harbour/config/linux/gcc.cf b/harbour/config/linux/gcc.cf index 1678c4b6f2..fa3e77af8c 100644 --- a/harbour/config/linux/gcc.cf +++ b/harbour/config/linux/gcc.cf @@ -58,13 +58,13 @@ LINKLIBS += -Wl,--start-group LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library and other RTLs -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) diff --git a/harbour/config/linux/icc.cf b/harbour/config/linux/icc.cf index 9ed47038db..d81ed36625 100644 --- a/harbour/config/linux/icc.cf +++ b/harbour/config/linux/icc.cf @@ -52,13 +52,13 @@ LINKLIBS += -Wl,--start-group LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library and other RTLs -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) diff --git a/harbour/config/linux/watcom.cf b/harbour/config/linux/watcom.cf index 6ec4e8bd07..1ee64839b2 100644 --- a/harbour/config/linux/watcom.cf +++ b/harbour/config/linux/watcom.cf @@ -71,12 +71,12 @@ endif LINKLIBS += $(foreach lib, $(LIBS), $(LIB_DIR)/$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) RDDLIBS = $(foreach drv, $(HB_DB_DRIVERS), $(LIB_DIR)/$(drv)) endif -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) GTLIBS = $(foreach gt, $(HB_GT_LIBS), $(LIB_DIR)/$(gt)) endif diff --git a/harbour/config/os2/gcc.cf b/harbour/config/os2/gcc.cf index ce2f403981..ea5c382d0e 100644 --- a/harbour/config/os2/gcc.cf +++ b/harbour/config/os2/gcc.cf @@ -49,13 +49,13 @@ LINKPATHS += -L$(LIB_DIR) #LINKLIBS += -Wl,-( LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) ifeq ($(C_MAIN),) ifeq ($(findstring os2pm,$(HB_GT_LIB)),os2pm) # Special handling for PM mode diff --git a/harbour/config/os2/watcom.cf b/harbour/config/os2/watcom.cf index 5778b84ba6..1c6c2b1db1 100644 --- a/harbour/config/os2/watcom.cf +++ b/harbour/config/os2/watcom.cf @@ -92,12 +92,12 @@ endif LINKLIBS += $(foreach lib, $(LIBS), $(LIB_DIR)/$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) RDDLIBS = $(foreach drv, $(HB_DB_DRIVERS), $(LIB_DIR)/$(drv)) endif -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) GTLIBS = $(foreach gt, $(HB_GT_LIBS), $(LIB_DIR)/$(gt)) endif diff --git a/harbour/config/sunos/gcc.cf b/harbour/config/sunos/gcc.cf index c41480a308..eefe3f4360 100644 --- a/harbour/config/sunos/gcc.cf +++ b/harbour/config/sunos/gcc.cf @@ -42,13 +42,13 @@ LD_OUT = -o LINKPATHS += -L$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) -lhbrtl diff --git a/harbour/config/wce/mingwarm.cf b/harbour/config/wce/mingwarm.cf index b4300883be..28b74c6d3a 100644 --- a/harbour/config/wce/mingwarm.cf +++ b/harbour/config/wce/mingwarm.cf @@ -43,13 +43,13 @@ LINKPATHS += -L$(LIB_DIR) LDLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LDLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LDLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) endif diff --git a/harbour/config/wce/msvcarm.cf b/harbour/config/wce/msvcarm.cf index afc06a61ae..de64c86caf 100644 --- a/harbour/config/wce/msvcarm.cf +++ b/harbour/config/wce/msvcarm.cf @@ -59,13 +59,13 @@ LINKPATHS += /libpath:$(LIB_DIR) # Add all libraries specified in LIBS. LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) endif diff --git a/harbour/config/wce/poccarm.cf b/harbour/config/wce/poccarm.cf index c56fc3643b..9773546e2f 100644 --- a/harbour/config/wce/poccarm.cf +++ b/harbour/config/wce/poccarm.cf @@ -46,13 +46,13 @@ LD_OUT = -OUT: LINKPATHS += -LIBPATH:$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) endif diff --git a/harbour/config/win/bcc.cf b/harbour/config/win/bcc.cf index 6edb1d34b3..39dc438544 100644 --- a/harbour/config/win/bcc.cf +++ b/harbour/config/win/bcc.cf @@ -45,13 +45,13 @@ LD_OUT = -e LINKPATHS += -L$(LIB_DIR) LIBLIST += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LIBLIST += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LIBLIST += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) endif diff --git a/harbour/config/win/cygwin.cf b/harbour/config/win/cygwin.cf index 065e7ebb0e..b95642a753 100644 --- a/harbour/config/win/cygwin.cf +++ b/harbour/config/win/cygwin.cf @@ -47,13 +47,13 @@ LINKLIBS += $(foreach lib, $(LIBS), -l$(lib)) # This library is needed for CharToOemBuff() and OemToCharBuff() support. LINKLIBS += -luser32 -lgdi32 -lws2_32 -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) -lhbrtl endif diff --git a/harbour/config/win/icc.cf b/harbour/config/win/icc.cf index 168a068130..94d38f22b2 100644 --- a/harbour/config/win/icc.cf +++ b/harbour/config/win/icc.cf @@ -44,13 +44,13 @@ LD_OUT = -Fe LINKPATHS += /link /libpath:$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) endif diff --git a/harbour/config/win/mingw.cf b/harbour/config/win/mingw.cf index 723e56564f..7c7aedac7b 100644 --- a/harbour/config/win/mingw.cf +++ b/harbour/config/win/mingw.cf @@ -45,8 +45,8 @@ LINKPATHS += -L$(LIB_DIR) LDLIBS += $(foreach lib, $(LIBS), -l$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LDLIBS += $(foreach drv, $(HB_DB_DRIVERS), -l$(drv)) endif @@ -58,7 +58,7 @@ endif endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LDLIBS += $(foreach gt, $(HB_GT_LIBS), -l$(gt)) endif diff --git a/harbour/config/win/msvc.cf b/harbour/config/win/msvc.cf index 74fc0168b0..cff2c33f15 100644 --- a/harbour/config/win/msvc.cf +++ b/harbour/config/win/msvc.cf @@ -54,13 +54,13 @@ LD_OUT = /out: LINKPATHS += /libpath:$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) endif diff --git a/harbour/config/win/pocc.cf b/harbour/config/win/pocc.cf index 5f0afd5507..cf42c91647 100644 --- a/harbour/config/win/pocc.cf +++ b/harbour/config/win/pocc.cf @@ -43,13 +43,13 @@ LD_OUT = -OUT: LINKPATHS += -LIBPATH:$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) endif diff --git a/harbour/config/win/watcom.cf b/harbour/config/win/watcom.cf index 87146d52cf..98909f4a43 100644 --- a/harbour/config/win/watcom.cf +++ b/harbour/config/win/watcom.cf @@ -95,12 +95,12 @@ endif LINKLIBS += $(foreach lib, $(LIBS), $(LIB_DIR)/$(lib)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) RDDLIBS = $(foreach drv, $(HB_DB_DRIVERS), $(LIB_DIR)/$(drv)) endif -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) GTLIBS = $(foreach gt, $(HB_GT_LIBS), $(LIB_DIR)/$(gt)) endif diff --git a/harbour/config/win/xcc.cf b/harbour/config/win/xcc.cf index 7617e5eff4..4d47ac3a4e 100644 --- a/harbour/config/win/xcc.cf +++ b/harbour/config/win/xcc.cf @@ -37,13 +37,13 @@ LD_OUT = -OUT: LINKPATHS += -LIBPATH:$(LIB_DIR) LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) +# If LIBS specifies the RDD library, add all DB drivers. +ifeq ($(findstring hbrdd,$(LIBS)),hbrdd) LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) endif # Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) +ifeq ($(findstring hbrtl,$(LIBS)),hbrtl) LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) endif diff --git a/harbour/contrib/rddads/ads1.c b/harbour/contrib/rddads/ads1.c index 51d5754d3a..73a2ec2c45 100644 --- a/harbour/contrib/rddads/ads1.c +++ b/harbour/contrib/rddads/ads1.c @@ -1020,10 +1020,6 @@ static HB_ERRCODE adsSeek( ADSAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL b else { commonError( pArea, EG_DATATYPE, 1020, 0, NULL, 0, NULL ); -#if defined( ADS_USE_OEM_TRANSLATION ) && ADS_LIB_VERSION < 600 - if( pszKeyFree ) - hb_adsOemAnsiFree( ( char * ) pszKeyFree ); -#endif return HB_FAILURE; } diff --git a/harbour/examples/pp/pp.c b/harbour/examples/pp/pp.c index f9449b2c84..61c9c1caab 100644 --- a/harbour/examples/pp/pp.c +++ b/harbour/examples/pp/pp.c @@ -485,53 +485,6 @@ void hb_compGenWarning( HB_COMP_DECL, const char* _szWarnings[], char cPrefix, i } } -void * hb_xgrab( ULONG ulSize ) /* allocates fixed memory, exits on failure */ -{ - void * pMem = malloc( ulSize ); - - HB_TRACE(HB_TR_DEBUG, ("hb_xgrab(%lu)", ulSize)); - - if( ! pMem ) - hb_compGenError( NULL, hb_pp_szErrors, 'P', HB_PP_ERR_MEMALLOC, NULL, NULL ); - - return pMem; -} - -void * hb_xrealloc( void * pMem, ULONG ulSize ) /* reallocates memory */ -{ - void * pResult = realloc( pMem, ulSize ); - - HB_TRACE(HB_TR_DEBUG, ("hb_xrealloc(%p, %lu)", pMem, ulSize)); - - if( ! pResult ) - hb_compGenError( NULL, hb_pp_szErrors, 'P', HB_PP_ERR_MEMREALLOC, NULL, NULL ); - - return pResult; -} - -void hb_xfree( void * pMem ) /* frees fixed memory */ -{ - HB_TRACE(HB_TR_DEBUG, ("hb_xfree(%p)", pMem)); - - if( pMem ) - free( pMem ); - else - hb_compGenError( NULL, hb_pp_szErrors, 'P', HB_PP_ERR_MEMFREE, NULL, NULL ); -} - -char * hb_fsNameConv( char * szFileName, BOOL * pfFree ) -{ - if( pfFree ) - * pfFree = FALSE; - - return szFileName; -} - -int hb_setGetDirSeparator( void ) -{ - return HB_OS_PATH_DELIM_CHR; -} - int hb_verSvnID( void ) { return 0; diff --git a/harbour/examples/pp/pp.hbp b/harbour/examples/pp/pp.hbp index 9ab3a80b25..71a89cc4e9 100644 --- a/harbour/examples/pp/pp.hbp +++ b/harbour/examples/pp/pp.hbp @@ -3,3 +3,8 @@ # pp.c hbppcomp.c hbppcore.c hbpptbl.c hbpragma.c +-lhbcommon +-lhbnulrtl +-static +# it does not work here +-nohblib diff --git a/harbour/harbour-wce-spec b/harbour/harbour-wce-spec index a6f710a525..296f6c19be 100644 --- a/harbour/harbour-wce-spec +++ b/harbour/harbour-wce-spec @@ -319,6 +319,7 @@ rm -fR $RPM_BUILD_ROOT %{_libdir}/%{name}/libhbzlib.a %{_libdir}/%{name}/libhbextern.a %{_libdir}/%{name}/libhbnulrdd.a +%{_libdir}/%{name}/libhbnulrtl.a %{_libdir}/%{name}/libhbpp.a %{_libdir}/%{name}/libhbrdd.a %{_libdir}/%{name}/libhbhsx.a diff --git a/harbour/harbour-win-spec b/harbour/harbour-win-spec index 72c267251f..5cf27abe87 100644 --- a/harbour/harbour-win-spec +++ b/harbour/harbour-win-spec @@ -319,6 +319,7 @@ rm -fR $RPM_BUILD_ROOT %{_libdir}/%{name}/libhbzlib.a %{_libdir}/%{name}/libhbextern.a %{_libdir}/%{name}/libhbnulrdd.a +%{_libdir}/%{name}/libhbnulrtl.a %{_libdir}/%{name}/libhbpp.a %{_libdir}/%{name}/libhbrdd.a %{_libdir}/%{name}/libhbhsx.a diff --git a/harbour/harbour.spec b/harbour/harbour.spec index b0b43df562..18252945c6 100644 --- a/harbour/harbour.spec +++ b/harbour/harbour.spec @@ -641,6 +641,7 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/%{name}/libhbzlib.a %{_libdir}/%{name}/libhbextern.a %{_libdir}/%{name}/libhbnulrdd.a +%{_libdir}/%{name}/libhbnulrtl.a %{_libdir}/%{name}/libhbpp.a %{_libdir}/%{name}/libhbrdd.a %{_libdir}/%{name}/libhbhsx.a diff --git a/harbour/include/hbcomp.h b/harbour/include/hbcomp.h index 9a2ca994b3..23702a83c4 100644 --- a/harbour/include/hbcomp.h +++ b/harbour/include/hbcomp.h @@ -82,6 +82,8 @@ extern void hb_compPCodeTrace( PFUNCTION, const HB_PCODE_FUNC_PTR *, void * ); extern void hb_compGenLabelTable( PFUNCTION pFunc, PHB_LABEL_INFO label_info ); extern PHB_DEBUGINFO hb_compGetDebugInfo( HB_COMP_DECL ); +extern void hb_compChkFileSwitches( int argc, char * argv[] ); + extern void hb_compInitPP( HB_COMP_DECL, int argc, const char * const argv[] ); extern void hb_compCompileEnd( HB_COMP_DECL ); diff --git a/harbour/source/Makefile b/harbour/source/Makefile index 6fdbc41604..40180c4def 100644 --- a/harbour/source/Makefile +++ b/harbour/source/Makefile @@ -8,7 +8,8 @@ ifeq ($(HB_HOST_BUILD),yes) DIRS=\ common \ - pp{common} \ + nulrtl \ + pp{common,nulrtl} \ compiler{pp} \ main{compiler} \ @@ -24,7 +25,8 @@ endif DIRS=\ common \ - pp{common} \ + nulrtl \ + pp{common,nulrtl} \ compiler{pp} \ $(HB_COMP_DIR) \ rtl$(HB_COMP_REF) \ diff --git a/harbour/source/common/Makefile b/harbour/source/common/Makefile index d5304c1025..64a8e3f6b8 100644 --- a/harbour/source/common/Makefile +++ b/harbour/source/common/Makefile @@ -7,8 +7,9 @@ ROOT = ../../ C_SOURCES=\ expropt1.c \ expropt2.c \ - hbfsapi.c \ + hbffind.c \ hbfopen.c \ + hbfsapi.c \ hbgete.c \ hbwince.c \ hbhash.c \ @@ -21,6 +22,7 @@ C_SOURCES=\ hbverdsp.c \ hbarch.c \ reserved.c \ + strwild.c \ PRG_SOURCES=\ diff --git a/harbour/source/rtl/hbffind.c b/harbour/source/common/hbffind.c similarity index 100% rename from harbour/source/rtl/hbffind.c rename to harbour/source/common/hbffind.c diff --git a/harbour/source/common/strwild.c b/harbour/source/common/strwild.c new file mode 100644 index 0000000000..15dbd7a294 --- /dev/null +++ b/harbour/source/common/strwild.c @@ -0,0 +1,285 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * wildcards / file match functions + * + * Copyright 2009 Przemyslaw Czerpak + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" + +#if defined( HB_OS_UNIX ) && !defined( HB_NO_FNMATCH ) +# include +#endif + +#define HB_MAX_WILDPATTERN 256 + +BOOL hb_strMatchWild( const char *szString, const char *szPattern ) +{ + BOOL fMatch = TRUE, fAny = FALSE; + ULONG pulBufPosP[ HB_MAX_WILDPATTERN ], pulBufPosV[ HB_MAX_WILDPATTERN ], + ulBufSize = HB_MAX_WILDPATTERN; + ULONG * ulAnyPosP = pulBufPosP, * ulAnyPosV = pulBufPosV, + ulSize, ulLen, ulAny, i, j; + + i = j = ulAny = 0; + ulLen = strlen( szString ); + ulSize = strlen( szPattern ); + while( i < ulSize ) + { + if( szPattern[i] == '*' ) + { + fAny = TRUE; + i++; + } + else if( j < ulLen && ( szPattern[i] == '?' || szPattern[i] == szString[j] ) ) + { + if( fAny ) + { + if( ulAny >= ulBufSize ) + { + if( ( ulBufSize <<= 1 ) == ( HB_MAX_WILDPATTERN << 1 ) ) + { + ulAnyPosP = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); + ulAnyPosV = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); + memcpy( ulAnyPosP, pulBufPosP, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); + memcpy( ulAnyPosV, pulBufPosV, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); + } + else + { + ulAnyPosP = ( ULONG * ) hb_xrealloc( ulAnyPosP, ulBufSize * sizeof( ULONG ) ); + ulAnyPosV = ( ULONG * ) hb_xrealloc( ulAnyPosV, ulBufSize * sizeof( ULONG ) ); + } + } + ulAnyPosP[ulAny] = i; + ulAnyPosV[ulAny] = j; + ulAny++; + fAny = FALSE; + } + j++; + i++; + } + else if( fAny && j < ulLen ) + { + j++; + } + else if( ulAny > 0 ) + { + ulAny--; + i = ulAnyPosP[ulAny]; + j = ulAnyPosV[ulAny] + 1; + fAny = TRUE; + } + else + { + fMatch = FALSE; + break; + } + } + if( ulBufSize > HB_MAX_WILDPATTERN ) + { + hb_xfree( ulAnyPosP ); + hb_xfree( ulAnyPosV ); + } + return fMatch; +} + +BOOL hb_strMatchWildExact( const char *szString, const char *szPattern ) +{ + BOOL fMatch = TRUE, fAny = FALSE; + ULONG pulBufPosP[ HB_MAX_WILDPATTERN ], pulBufPosV[ HB_MAX_WILDPATTERN ], + ulBufSize = HB_MAX_WILDPATTERN; + ULONG * ulAnyPosP = pulBufPosP, * ulAnyPosV = pulBufPosV, + ulSize, ulLen, ulAny, i, j; + + i = j = ulAny = 0; + ulLen = strlen( szString ); + ulSize = strlen( szPattern ); + while( i < ulSize || ( j < ulLen && !fAny ) ) + { + if( i < ulSize && szPattern[i] == '*' ) + { + fAny = TRUE; + i++; + } + else if( j < ulLen && i < ulSize && + ( szPattern[i] == '?' || szPattern[i] == szString[j] ) ) + { + if( fAny ) + { + if( ulAny >= ulBufSize ) + { + if( ( ulBufSize <<= 1 ) == ( HB_MAX_WILDPATTERN << 1 ) ) + { + ulAnyPosP = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); + ulAnyPosV = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); + memcpy( ulAnyPosP, pulBufPosP, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); + memcpy( ulAnyPosV, pulBufPosV, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); + } + else + { + ulAnyPosP = ( ULONG * ) hb_xrealloc( ulAnyPosP, ulBufSize * sizeof( ULONG ) ); + ulAnyPosV = ( ULONG * ) hb_xrealloc( ulAnyPosV, ulBufSize * sizeof( ULONG ) ); + } + } + ulAnyPosP[ulAny] = i; + ulAnyPosV[ulAny] = j; + ulAny++; + fAny = FALSE; + } + j++; + i++; + } + else if( fAny && j < ulLen ) + { + j++; + } + else if( ulAny > 0 ) + { + ulAny--; + i = ulAnyPosP[ulAny]; + j = ulAnyPosV[ulAny] + 1; + fAny = TRUE; + } + else + { + fMatch = FALSE; + break; + } + } + if( ulBufSize > HB_MAX_WILDPATTERN ) + { + hb_xfree( ulAnyPosP ); + hb_xfree( ulAnyPosV ); + } + return fMatch; +} + +BOOL hb_strMatchCaseWildExact( const char *szString, const char *szPattern ) +{ + BOOL fMatch = TRUE, fAny = FALSE; + ULONG pulBufPosP[ HB_MAX_WILDPATTERN ], pulBufPosV[ HB_MAX_WILDPATTERN ], + ulBufSize = HB_MAX_WILDPATTERN; + ULONG * ulAnyPosP = pulBufPosP, * ulAnyPosV = pulBufPosV, + ulSize, ulLen, ulAny, i, j; + + i = j = ulAny = 0; + ulLen = strlen( szString ); + ulSize = strlen( szPattern ); + while ( i < ulSize || ( j < ulLen && !fAny ) ) + { + if( i < ulSize && szPattern[i] == '*' ) + { + fAny = TRUE; + i++; + } + else if( j < ulLen && i < ulSize && + ( szPattern[i] == '?' || + hb_charUpper( szPattern[i] ) == hb_charUpper( szString[j] ) ) ) + { + if( fAny ) + { + if( ulAny >= ulBufSize ) + { + if( ( ulBufSize <<= 1 ) == ( HB_MAX_WILDPATTERN << 1 ) ) + { + ulAnyPosP = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); + ulAnyPosV = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); + memcpy( ulAnyPosP, pulBufPosP, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); + memcpy( ulAnyPosV, pulBufPosV, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); + } + else + { + ulAnyPosP = ( ULONG * ) hb_xrealloc( ulAnyPosP, ulBufSize * sizeof( ULONG ) ); + ulAnyPosV = ( ULONG * ) hb_xrealloc( ulAnyPosV, ulBufSize * sizeof( ULONG ) ); + } + } + ulAnyPosP[ulAny] = i; + ulAnyPosV[ulAny] = j; + ulAny++; + fAny = FALSE; + } + j++; + i++; + } + else if( fAny && j < ulLen ) + { + j++; + } + else if( ulAny > 0 ) + { + ulAny--; + i = ulAnyPosP[ulAny]; + j = ulAnyPosV[ulAny] + 1; + fAny = TRUE; + } + else + { + fMatch = FALSE; + break; + } + } + if( ulBufSize > HB_MAX_WILDPATTERN ) + { + hb_xfree( ulAnyPosP ); + hb_xfree( ulAnyPosV ); + } + return fMatch; +} + +BOOL hb_strMatchFile( const char * szString, const char * szPattern ) +{ +#if defined( HB_OS_UNIX ) +# if defined( HB_NO_FNMATCH ) + return hb_strMatchWildExact( szString, szPattern ); +# else + return fnmatch( szPattern, szString, FNM_PERIOD | FNM_PATHNAME ) == 0; +# endif +#else + return hb_strMatchCaseWildExact( szString, szPattern ); +#endif +} diff --git a/harbour/source/main/Makefile b/harbour/source/main/Makefile index 3a51842c74..f071225ef9 100644 --- a/harbour/source/main/Makefile +++ b/harbour/source/main/Makefile @@ -12,5 +12,6 @@ LIBS=\ hbcplr \ hbpp \ hbcommon \ + hbnulrtl \ include $(TOP)$(ROOT)config/bin.cf diff --git a/harbour/source/main/harbour.c b/harbour/source/main/harbour.c index bf5634edc3..e4196da776 100644 --- a/harbour/source/main/harbour.c +++ b/harbour/source/main/harbour.c @@ -51,514 +51,7 @@ */ #include "hbcomp.h" -#include "hbapifs.h" -#include "hbmemory.ch" #include "hbverbld.h" -#include "hbset.h" - -/* ------------------------------------------------------------------------- */ -/* FM statistic module */ -/* ------------------------------------------------------------------------- */ - -/* remove this 'undef' when number of memory leaks will be reduced to - reasonable size */ -/* #undef HB_FM_STATISTICS */ - - -#ifdef HB_FM_STATISTICS - -#define HB_MEMINFO_SIGNATURE 0xDEADBEAF -#define HB_MEMSTR_BLOCK_MAX 256 - -#ifndef HB_MEMFILER -# define HB_MEMFILER 0xff -#endif - -typedef struct _HB_MEMINFO -{ - struct _HB_MEMINFO * pPrevBlock; - struct _HB_MEMINFO * pNextBlock; - ULONG ulSize; - UINT32 Signature; -} HB_MEMINFO, * PHB_MEMINFO; - -#ifdef HB_ALLOC_ALIGNMENT -# define HB_MEMINFO_SIZE ( ( sizeof( HB_MEMINFO ) + HB_ALLOC_ALIGNMENT - 1 ) - \ - ( sizeof( HB_MEMINFO ) + HB_ALLOC_ALIGNMENT - 1 ) % HB_ALLOC_ALIGNMENT ) -#else -# define HB_MEMINFO_SIZE sizeof( HB_MEMINFO ) -#endif - -static PHB_MEMINFO s_pMemBlocks = NULL; -static long s_ulMemoryBlocks = 0; /* memory blocks used */ -static long s_ulMemoryMaxBlocks = 0; /* maximum number of used memory blocks */ -static long s_ulMemoryMaxConsumed = 0; /* memory size consumed */ -static long s_ulMemoryConsumed = 0; /* memory max size consumed */ - -#endif /* HB_FM_STATISTICS */ - -void * hb_xgrab( ULONG ulSize ) /* allocates fixed memory, exits on failure */ -{ - void * pMem; - - if( ulSize == 0 ) - hb_errInternal( HB_EI_XGRABNULLSIZE, "hb_xgrab requested to allocate zero bytes", NULL, NULL ); - -#ifdef HB_FM_STATISTICS - pMem = malloc( ulSize + HB_MEMINFO_SIZE + sizeof( UINT32 ) ); - if( pMem ) - { - if( s_pMemBlocks ) - s_pMemBlocks->pPrevBlock = ( PHB_MEMINFO ) pMem; - ( ( PHB_MEMINFO ) pMem )->pNextBlock = s_pMemBlocks; - ( ( PHB_MEMINFO ) pMem )->pPrevBlock = NULL; - s_pMemBlocks = ( PHB_MEMINFO ) pMem; - ( ( PHB_MEMINFO ) pMem )->ulSize = ulSize; - ( ( PHB_MEMINFO ) pMem )->Signature = HB_MEMINFO_SIGNATURE; - HB_PUT_LE_UINT32( ( ( BYTE * ) pMem ) + HB_MEMINFO_SIZE + ulSize, HB_MEMINFO_SIGNATURE ); - - s_ulMemoryConsumed += ulSize; - if( s_ulMemoryMaxConsumed < s_ulMemoryConsumed ) - s_ulMemoryMaxConsumed = s_ulMemoryConsumed; - s_ulMemoryBlocks++; - if( s_ulMemoryMaxBlocks < s_ulMemoryBlocks ) - s_ulMemoryMaxBlocks = s_ulMemoryBlocks; - pMem = ( BYTE * ) pMem + HB_MEMINFO_SIZE; - } - else -#else - pMem = malloc( ulSize ); - if( ! pMem ) -#endif - hb_errInternal( HB_EI_XGRABALLOC, "hb_xgrab can't allocate memory", NULL, NULL ); - - return pMem; -} - -void * hb_xrealloc( void * pMem, ULONG ulSize ) /* reallocates memory */ -{ -#ifdef HB_FM_STATISTICS - PHB_MEMINFO pMemBlock; - ULONG ulMemSize; - void * pResult; - - if( ulSize == 0 ) - { - if( pMem ) - hb_xfree( pMem ); - return NULL; - } - else if( ! pMem ) - return hb_xgrab( ulSize ); - - pMemBlock = ( PHB_MEMINFO ) ( ( BYTE * ) pMem - HB_MEMINFO_SIZE ); - ulMemSize = pMemBlock->ulSize; - - if( pMemBlock->Signature != HB_MEMINFO_SIGNATURE ) - hb_errInternal( HB_EI_XREALLOCINV, "hb_xrealloc called with an invalid pointer", NULL, NULL ); - - if( HB_GET_LE_UINT32( ( ( BYTE * ) pMem ) + ulMemSize ) != HB_MEMINFO_SIGNATURE ) - hb_errInternal( HB_EI_XMEMOVERFLOW, "Memory buffer overflow", NULL, NULL ); - - HB_PUT_LE_UINT32( ( ( BYTE * ) pMem ) + ulMemSize, 0 ); - - pResult = realloc( pMemBlock, ulSize + HB_MEMINFO_SIZE + sizeof( UINT32 ) ); - if( pResult ) - { - if( s_pMemBlocks == pMemBlock ) - s_pMemBlocks = ( PHB_MEMINFO ) pResult; - else - ( ( PHB_MEMINFO ) pResult )->pPrevBlock->pNextBlock = ( PHB_MEMINFO ) pResult; - - if( ( ( PHB_MEMINFO ) pResult )->pNextBlock ) - ( ( PHB_MEMINFO ) pResult )->pNextBlock->pPrevBlock = ( PHB_MEMINFO ) pResult; - s_ulMemoryConsumed += ( ulSize - ulMemSize ); - - if( s_ulMemoryMaxConsumed < s_ulMemoryConsumed ) - s_ulMemoryMaxConsumed = s_ulMemoryConsumed; - - ( ( PHB_MEMINFO ) pResult )->ulSize = ulSize; /* size of the memory block */ - HB_PUT_LE_UINT32( ( ( BYTE * ) pResult ) + ulSize + HB_MEMINFO_SIZE, HB_MEMINFO_SIGNATURE ); - pResult = ( BYTE * ) pResult + HB_MEMINFO_SIZE; - } -#else - void * pResult = realloc( pMem, ulSize ); -#endif - - if( ! pResult && ulSize ) - hb_errInternal( HB_EI_XREALLOC, "hb_xrealloc can't reallocate memory", NULL, NULL ); - - return pResult; -} - -void hb_xfree( void * pMem ) /* frees fixed memory */ -{ - if( pMem ) - { -#ifdef HB_FM_STATISTICS - PHB_MEMINFO pMemBlock = ( PHB_MEMINFO ) ( ( BYTE * ) pMem - HB_MEMINFO_SIZE ); - - if( pMemBlock->Signature != HB_MEMINFO_SIGNATURE ) - hb_errInternal( HB_EI_XFREEINV, "hb_xfree called with an invalid pointer", NULL, NULL ); - - if( HB_GET_LE_UINT32( ( ( BYTE * ) pMem ) + pMemBlock->ulSize ) != HB_MEMINFO_SIGNATURE ) - hb_errInternal( HB_EI_XMEMOVERFLOW, "Memory buffer overflow", NULL, NULL ); - - s_ulMemoryConsumed -= pMemBlock->ulSize; - s_ulMemoryBlocks--; - if( s_pMemBlocks == pMemBlock ) - s_pMemBlocks = pMemBlock->pNextBlock; - else - pMemBlock->pPrevBlock->pNextBlock = pMemBlock->pNextBlock; - - if( pMemBlock->pNextBlock ) - pMemBlock->pNextBlock->pPrevBlock = pMemBlock->pPrevBlock; - - pMemBlock->Signature = 0; - HB_PUT_LE_UINT32( ( ( BYTE * ) pMem ) + pMemBlock->ulSize, 0 ); - pMem = ( BYTE * ) pMem - HB_MEMINFO_SIZE; -#endif - free( pMem ); - } - else - hb_errInternal( HB_EI_XFREENULL, "hb_xfree called with a NULL pointer", NULL, NULL ); -} - -ULONG hb_xquery( int iMode ) -{ - ULONG ulResult = 0; - -#ifdef HB_FM_STATISTICS - switch( iMode ) - { - case HB_MEM_USED: - ulResult = s_ulMemoryConsumed; - break; - - case HB_MEM_USEDMAX: - ulResult = s_ulMemoryMaxConsumed; - break; - } -#else - HB_SYMBOL_UNUSED( iMode ); -#endif - return ulResult; -} - -#ifdef HB_FM_STATISTICS -static char * hb_memToStr( char * szBuffer, void * pMem, ULONG ulSize ) -{ - unsigned char *byMem = ( BYTE * ) pMem; - char * pDest = szBuffer; - int iSize, i, iPrintable; - - if( ulSize > HB_MEMSTR_BLOCK_MAX ) - iSize = HB_MEMSTR_BLOCK_MAX; - else - iSize = ( int ) ulSize; - - iPrintable = 0; - for( i = 0; i < iSize; ++i ) - if( ( byMem[ i ] & 0x7f ) >= 0x20 ) - iPrintable++; - - if( ( iPrintable * 100 ) / iSize > 70 ) /* more then 70% printable chars */ - { - /* format as string of original chars */ - for( i = 0; i < iSize; ++i ) - if( ( byMem[ i ] & 0x7f ) >= 0x20 ) - * pDest++ = byMem[ i ]; - else - * pDest++ = '.'; - } - else - { - /* format as hex */ - for( i = 0; i < iSize; ++i ) - { - int iLo = byMem[ i ] & 0x0f, iHi = byMem[ i ] >> 4; - * pDest++ = '\\'; - * pDest++ = iHi <= 9 ? '0' + iHi : 'A' - 10 + iHi; - * pDest++ = iLo <= 9 ? '0' + iLo : 'A' - 10 + iLo; - } - } - * pDest = '\0'; - - return szBuffer; -} -#endif - -void hb_xexit( void ) -{ -#ifdef HB_FM_STATISTICS - if( s_ulMemoryBlocks /* || hb_cmdargCheck( "INFO" ) */ ) - { - char szBuffer[ HB_MAX( 3 * HB_MEMSTR_BLOCK_MAX + 1, 100 ) ]; - PHB_MEMINFO pMemBlock; - int i; - - hb_conOutErr( hb_conNewLine(), 0 ); - hb_conOutErr( "----------------------------------------", 0 ); - hb_conOutErr( hb_conNewLine(), 0 ); - hb_snprintf( szBuffer, sizeof( szBuffer ), "Total memory allocated: %lu bytes (%lu blocks)", s_ulMemoryMaxConsumed, s_ulMemoryMaxBlocks ); - hb_conOutErr( szBuffer, 0 ); - - if( s_ulMemoryBlocks ) - { - hb_conOutErr( hb_conNewLine(), 0 ); - hb_snprintf( szBuffer, sizeof( szBuffer ), "WARNING! Memory allocated but not released: %lu bytes (%lu blocks)", s_ulMemoryConsumed, s_ulMemoryBlocks ); - hb_conOutErr( szBuffer, 0 ); - } - - hb_conOutErr( hb_conNewLine(), 0 ); - - for( i = 1, pMemBlock = s_pMemBlocks; pMemBlock; ++i, pMemBlock = pMemBlock->pNextBlock ) - HB_TRACE( HB_TR_ERROR, ( "Block %i %p (size %lu) \"%s\"", i, - ( char * ) pMemBlock + HB_MEMINFO_SIZE, pMemBlock->ulSize, - hb_memToStr( szBuffer, ( char * ) pMemBlock + HB_MEMINFO_SIZE, - pMemBlock->ulSize ) ) ); - } -#endif -} - -/* NOTE: Use as minimal calls from here, as possible. - Don't allocate memory from this function. [vszakats] */ -void hb_errInternal( ULONG ulIntCode, const char * szText, const char * szPar1, const char * szPar2 ) -{ - char buffer[ 1024 ]; - - HB_TRACE(HB_TR_DEBUG, ("hb_errInternal(%lu, %s, %s, %s)", ulIntCode, szText, szPar1, szPar2)); - - hb_conOutErr( hb_conNewLine(), 0 ); - hb_snprintf( buffer, sizeof( buffer ), "Unrecoverable error %lu: ", ulIntCode ); - hb_conOutErr( buffer, 0 ); - if( szText ) - { - hb_snprintf( buffer, sizeof( buffer ), szText, szPar1, szPar2 ); - hb_conOutErr( buffer, 0 ); - } - hb_conOutErr( hb_conNewLine(), 0 ); - exit( EXIT_FAILURE ); -} - -void hb_conOutErr( const char * pStr, ULONG ulLen ) -{ - if( ulLen == 0 ) - ulLen = strlen( pStr ); - - fprintf( stderr, "%.*s", ( int ) ulLen, pStr ); -} - -const char * hb_conNewLine( void ) -{ - return "\n"; -} - -static int s_iFileCase = HB_SET_CASE_MIXED; -static int s_iDirCase = HB_SET_CASE_MIXED; -static BOOL s_fFnTrim = FALSE; -static char s_cDirSep = HB_OS_PATH_DELIM_CHR; - -const char * hb_fsNameConv( const char * szFileName, char ** pszFree ) -{ - if( s_fFnTrim || s_cDirSep != HB_OS_PATH_DELIM_CHR || - s_iFileCase != HB_SET_CASE_MIXED || s_iDirCase != HB_SET_CASE_MIXED ) - { - PHB_FNAME pFileName; - ULONG ulLen; - - if( pszFree ) - { - szFileName = *pszFree = hb_strncpy( ( char * ) hb_xgrab( HB_PATH_MAX ), - szFileName, HB_PATH_MAX - 1 ); - } - - if( s_cDirSep != HB_OS_PATH_DELIM_CHR ) - { - char *p = ( char * ) szFileName; - while( *p ) - { - if( *p == s_cDirSep ) - *p = HB_OS_PATH_DELIM_CHR; - p++; - } - } - - pFileName = hb_fsFNameSplit( szFileName ); - - /* strip trailing and leading spaces */ - if( s_fFnTrim ) - { - if( pFileName->szName ) - { - ulLen = strlen( pFileName->szName ); - while( ulLen && pFileName->szName[ulLen - 1] == ' ' ) - --ulLen; - while( ulLen && pFileName->szName[0] == ' ' ) - { - ++pFileName->szName; - --ulLen; - } - ( ( char * ) pFileName->szName )[ulLen] = '\0'; - } - if( pFileName->szExtension ) - { - ulLen = strlen( pFileName->szExtension ); - while( ulLen && pFileName->szExtension[ulLen - 1] == ' ' ) - --ulLen; - while( ulLen && pFileName->szExtension[0] == ' ' ) - { - ++pFileName->szExtension; - --ulLen; - } - ( ( char * ) pFileName->szExtension )[ulLen] = '\0'; - } - } - - /* FILECASE */ - if( s_iFileCase == HB_SET_CASE_LOWER ) - { - if( pFileName->szName ) - hb_strlow( ( char * ) pFileName->szName ); - if( pFileName->szExtension ) - hb_strlow( ( char * ) pFileName->szExtension ); - } - else if( s_iFileCase == HB_SET_CASE_UPPER ) - { - if( pFileName->szName ) - hb_strupr( ( char * ) pFileName->szName ); - if( pFileName->szExtension ) - hb_strupr( ( char * ) pFileName->szExtension ); - } - - /* DIRCASE */ - if( pFileName->szPath ) - { - if( s_iDirCase == HB_SET_CASE_LOWER ) - hb_strlow( ( char * ) pFileName->szPath ); - else if( s_iDirCase == HB_SET_CASE_UPPER ) - hb_strupr( ( char * ) pFileName->szPath ); - } - - hb_fsFNameMerge( ( char * ) szFileName, pFileName ); - hb_xfree( pFileName ); - } - else if( pszFree ) - *pszFree = NULL; - - return szFileName; -} - -int hb_setGetDirSeparator( void ) -{ - return s_cDirSep; -} - -static void hb_compChkFileSwitches( int argc, char * argv[] ) -{ - int i, n; - - for( i = 1; i < argc; ++i ) - { - if( HB_ISOPTSEP( argv[i][0] ) && argv[i][1] == 'f' ) - { - n = 0; - switch( argv[i][2] ) - { - case 'n': - if( !argv[i][3] ) - { - s_iFileCase = HB_SET_CASE_MIXED; - n = 3; - } - else if( argv[i][3] == ':' ) - { - if( argv[i][4] == 'u' ) - { - s_iFileCase = HB_SET_CASE_UPPER; - n = 5; - } - else if( argv[i][4] == 'l' ) - { - s_iFileCase = HB_SET_CASE_LOWER; - n = 5; - } - } - else if( argv[i][3] == '-' ) - { - s_iFileCase = HB_SET_CASE_MIXED; - n = 4; - } - break; - - case 'd': - if( !argv[i][3] ) - { - s_iDirCase = HB_SET_CASE_MIXED; - n = 3; - } - else if( argv[i][3] == ':' ) - { - if( argv[i][4] == 'u' ) - { - s_iDirCase = HB_SET_CASE_UPPER; - n = 5; - } - else if( argv[i][4] == 'l' ) - { - s_iDirCase = HB_SET_CASE_LOWER; - n = 5; - } - } - else if( argv[i][3] == '-' ) - { - s_iDirCase = HB_SET_CASE_MIXED; - n = 4; - } - break; - - case 'p': - if( !argv[i][3] ) - { - s_cDirSep = HB_OS_PATH_DELIM_CHR; - n = 3; - } - else if( argv[i][3] == '-' ) - { - s_cDirSep = HB_OS_PATH_DELIM_CHR; - n = 4; - } - else if( argv[i][3] == ':' && argv[i][4] ) - { - s_cDirSep = argv[i][4]; - n = 5; - } - break; - - case 's': - if( !argv[i][3] ) - { - s_fFnTrim = TRUE; - n = 3; - } - else if( argv[i][3] == '-' ) - { - s_fFnTrim = FALSE; - n = 4; - } - break; - } - if( n ) - { - argv[i] += n; - if( argv[i][0] ) - --i; - else - argv[i] = ( char * ) "-"; - } - } - } -} /* ChangeLog SVN revision number */ int hb_verSvnID( void ) @@ -608,6 +101,8 @@ const char * hb_verFlagsPRG( void ) #endif } + +#if 0 /* build time Harbour architecture setting */ const char * hb_verHB_ARCH( void ) { @@ -627,6 +122,7 @@ const char * hb_verHB_COMP( void ) return ""; #endif } +#endif int main( int argc, char * argv[] ) { diff --git a/harbour/source/nulrtl/Makefile b/harbour/source/nulrtl/Makefile new file mode 100644 index 0000000000..8b03877eba --- /dev/null +++ b/harbour/source/nulrtl/Makefile @@ -0,0 +1,14 @@ +# +# $Id$ +# + +ROOT = ../../ + +C_SOURCES=\ + nulrtl.c \ + +PRG_SOURCES=\ + +LIBNAME=hbnulrtl + +include $(TOP)$(ROOT)config/lib.cf diff --git a/harbour/source/nulrtl/nulrtl.c b/harbour/source/nulrtl/nulrtl.c new file mode 100644 index 0000000000..310e5a0649 --- /dev/null +++ b/harbour/source/nulrtl/nulrtl.c @@ -0,0 +1,600 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * + * + * Copyright 2009 Przemyslaw Czerpak + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" +#include "hbapifs.h" +#include "hbapierr.h" +#include "hbset.h" +#include "hbvm.h" +#include "hbcomp.h" + +/* ------------------------------------------------------------------------- */ +/* FM statistic module */ +/* ------------------------------------------------------------------------- */ + +/* remove this 'undef' when number of memory leaks will be reduced to + reasonable size */ +/* #undef HB_FM_STATISTICS */ + + +#ifdef HB_FM_STATISTICS + +#define HB_MEMINFO_SIGNATURE 0xDEADBEAF +#define HB_MEMSTR_BLOCK_MAX 256 + +#ifndef HB_MEMFILER +# define HB_MEMFILER 0xff +#endif + +typedef struct _HB_MEMINFO +{ + struct _HB_MEMINFO * pPrevBlock; + struct _HB_MEMINFO * pNextBlock; + ULONG ulSize; + UINT32 Signature; +} HB_MEMINFO, * PHB_MEMINFO; + +#ifdef HB_ALLOC_ALIGNMENT +# define HB_MEMINFO_SIZE ( ( sizeof( HB_MEMINFO ) + HB_ALLOC_ALIGNMENT - 1 ) - \ + ( sizeof( HB_MEMINFO ) + HB_ALLOC_ALIGNMENT - 1 ) % HB_ALLOC_ALIGNMENT ) +#else +# define HB_MEMINFO_SIZE sizeof( HB_MEMINFO ) +#endif + +static PHB_MEMINFO s_pMemBlocks = NULL; +static long s_ulMemoryBlocks = 0; /* memory blocks used */ +static long s_ulMemoryMaxBlocks = 0; /* maximum number of used memory blocks */ +static long s_ulMemoryMaxConsumed = 0; /* memory size consumed */ +static long s_ulMemoryConsumed = 0; /* memory max size consumed */ + +#endif /* HB_FM_STATISTICS */ + +void * hb_xgrab( ULONG ulSize ) /* allocates fixed memory, exits on failure */ +{ + void * pMem; + + if( ulSize == 0 ) + hb_errInternal( HB_EI_XGRABNULLSIZE, "hb_xgrab requested to allocate zero bytes", NULL, NULL ); + +#ifdef HB_FM_STATISTICS + pMem = malloc( ulSize + HB_MEMINFO_SIZE + sizeof( UINT32 ) ); + if( pMem ) + { + if( s_pMemBlocks ) + s_pMemBlocks->pPrevBlock = ( PHB_MEMINFO ) pMem; + ( ( PHB_MEMINFO ) pMem )->pNextBlock = s_pMemBlocks; + ( ( PHB_MEMINFO ) pMem )->pPrevBlock = NULL; + s_pMemBlocks = ( PHB_MEMINFO ) pMem; + ( ( PHB_MEMINFO ) pMem )->ulSize = ulSize; + ( ( PHB_MEMINFO ) pMem )->Signature = HB_MEMINFO_SIGNATURE; + HB_PUT_LE_UINT32( ( ( BYTE * ) pMem ) + HB_MEMINFO_SIZE + ulSize, HB_MEMINFO_SIGNATURE ); + + s_ulMemoryConsumed += ulSize; + if( s_ulMemoryMaxConsumed < s_ulMemoryConsumed ) + s_ulMemoryMaxConsumed = s_ulMemoryConsumed; + s_ulMemoryBlocks++; + if( s_ulMemoryMaxBlocks < s_ulMemoryBlocks ) + s_ulMemoryMaxBlocks = s_ulMemoryBlocks; + pMem = ( BYTE * ) pMem + HB_MEMINFO_SIZE; + } + else +#else + pMem = malloc( ulSize ); + if( ! pMem ) +#endif + hb_errInternal( HB_EI_XGRABALLOC, "hb_xgrab can't allocate memory", NULL, NULL ); + + return pMem; +} + +void * hb_xrealloc( void * pMem, ULONG ulSize ) /* reallocates memory */ +{ +#ifdef HB_FM_STATISTICS + PHB_MEMINFO pMemBlock; + ULONG ulMemSize; + void * pResult; + + if( ulSize == 0 ) + { + if( pMem ) + hb_xfree( pMem ); + return NULL; + } + else if( ! pMem ) + return hb_xgrab( ulSize ); + + pMemBlock = ( PHB_MEMINFO ) ( ( BYTE * ) pMem - HB_MEMINFO_SIZE ); + ulMemSize = pMemBlock->ulSize; + + if( pMemBlock->Signature != HB_MEMINFO_SIGNATURE ) + hb_errInternal( HB_EI_XREALLOCINV, "hb_xrealloc called with an invalid pointer", NULL, NULL ); + + if( HB_GET_LE_UINT32( ( ( BYTE * ) pMem ) + ulMemSize ) != HB_MEMINFO_SIGNATURE ) + hb_errInternal( HB_EI_XMEMOVERFLOW, "Memory buffer overflow", NULL, NULL ); + + HB_PUT_LE_UINT32( ( ( BYTE * ) pMem ) + ulMemSize, 0 ); + + pResult = realloc( pMemBlock, ulSize + HB_MEMINFO_SIZE + sizeof( UINT32 ) ); + if( pResult ) + { + if( s_pMemBlocks == pMemBlock ) + s_pMemBlocks = ( PHB_MEMINFO ) pResult; + else + ( ( PHB_MEMINFO ) pResult )->pPrevBlock->pNextBlock = ( PHB_MEMINFO ) pResult; + + if( ( ( PHB_MEMINFO ) pResult )->pNextBlock ) + ( ( PHB_MEMINFO ) pResult )->pNextBlock->pPrevBlock = ( PHB_MEMINFO ) pResult; + s_ulMemoryConsumed += ( ulSize - ulMemSize ); + + if( s_ulMemoryMaxConsumed < s_ulMemoryConsumed ) + s_ulMemoryMaxConsumed = s_ulMemoryConsumed; + + ( ( PHB_MEMINFO ) pResult )->ulSize = ulSize; /* size of the memory block */ + HB_PUT_LE_UINT32( ( ( BYTE * ) pResult ) + ulSize + HB_MEMINFO_SIZE, HB_MEMINFO_SIGNATURE ); + pResult = ( BYTE * ) pResult + HB_MEMINFO_SIZE; + } +#else + void * pResult = realloc( pMem, ulSize ); +#endif + + if( ! pResult && ulSize ) + hb_errInternal( HB_EI_XREALLOC, "hb_xrealloc can't reallocate memory", NULL, NULL ); + + return pResult; +} + +void hb_xfree( void * pMem ) /* frees fixed memory */ +{ + if( pMem ) + { +#ifdef HB_FM_STATISTICS + PHB_MEMINFO pMemBlock = ( PHB_MEMINFO ) ( ( BYTE * ) pMem - HB_MEMINFO_SIZE ); + + if( pMemBlock->Signature != HB_MEMINFO_SIGNATURE ) + hb_errInternal( HB_EI_XFREEINV, "hb_xfree called with an invalid pointer", NULL, NULL ); + + if( HB_GET_LE_UINT32( ( ( BYTE * ) pMem ) + pMemBlock->ulSize ) != HB_MEMINFO_SIGNATURE ) + hb_errInternal( HB_EI_XMEMOVERFLOW, "Memory buffer overflow", NULL, NULL ); + + s_ulMemoryConsumed -= pMemBlock->ulSize; + s_ulMemoryBlocks--; + if( s_pMemBlocks == pMemBlock ) + s_pMemBlocks = pMemBlock->pNextBlock; + else + pMemBlock->pPrevBlock->pNextBlock = pMemBlock->pNextBlock; + + if( pMemBlock->pNextBlock ) + pMemBlock->pNextBlock->pPrevBlock = pMemBlock->pPrevBlock; + + pMemBlock->Signature = 0; + HB_PUT_LE_UINT32( ( ( BYTE * ) pMem ) + pMemBlock->ulSize, 0 ); + pMem = ( BYTE * ) pMem - HB_MEMINFO_SIZE; +#endif + free( pMem ); + } + else + hb_errInternal( HB_EI_XFREENULL, "hb_xfree called with a NULL pointer", NULL, NULL ); +} + +ULONG hb_xquery( int iMode ) +{ + ULONG ulResult = 0; + +#ifdef HB_FM_STATISTICS + switch( iMode ) + { + case HB_MEM_USED: + ulResult = s_ulMemoryConsumed; + break; + + case HB_MEM_USEDMAX: + ulResult = s_ulMemoryMaxConsumed; + break; + } +#else + HB_SYMBOL_UNUSED( iMode ); +#endif + return ulResult; +} + +#ifdef HB_FM_STATISTICS +static char * hb_memToStr( char * szBuffer, void * pMem, ULONG ulSize ) +{ + unsigned char *byMem = ( BYTE * ) pMem; + char * pDest = szBuffer; + int iSize, i, iPrintable; + + if( ulSize > HB_MEMSTR_BLOCK_MAX ) + iSize = HB_MEMSTR_BLOCK_MAX; + else + iSize = ( int ) ulSize; + + iPrintable = 0; + for( i = 0; i < iSize; ++i ) + if( ( byMem[ i ] & 0x7f ) >= 0x20 ) + iPrintable++; + + if( ( iPrintable * 100 ) / iSize > 70 ) /* more then 70% printable chars */ + { + /* format as string of original chars */ + for( i = 0; i < iSize; ++i ) + if( ( byMem[ i ] & 0x7f ) >= 0x20 ) + * pDest++ = byMem[ i ]; + else + * pDest++ = '.'; + } + else + { + /* format as hex */ + for( i = 0; i < iSize; ++i ) + { + int iLo = byMem[ i ] & 0x0f, iHi = byMem[ i ] >> 4; + * pDest++ = '\\'; + * pDest++ = iHi <= 9 ? '0' + iHi : 'A' - 10 + iHi; + * pDest++ = iLo <= 9 ? '0' + iLo : 'A' - 10 + iLo; + } + } + * pDest = '\0'; + + return szBuffer; +} +#endif + +void hb_xexit( void ) +{ +#ifdef HB_FM_STATISTICS + if( s_ulMemoryBlocks /* || hb_cmdargCheck( "INFO" ) */ ) + { + char szBuffer[ HB_MAX( 3 * HB_MEMSTR_BLOCK_MAX + 1, 100 ) ]; + PHB_MEMINFO pMemBlock; + int i; + + hb_conOutErr( hb_conNewLine(), 0 ); + hb_conOutErr( "----------------------------------------", 0 ); + hb_conOutErr( hb_conNewLine(), 0 ); + hb_snprintf( szBuffer, sizeof( szBuffer ), "Total memory allocated: %lu bytes (%lu blocks)", s_ulMemoryMaxConsumed, s_ulMemoryMaxBlocks ); + hb_conOutErr( szBuffer, 0 ); + + if( s_ulMemoryBlocks ) + { + hb_conOutErr( hb_conNewLine(), 0 ); + hb_snprintf( szBuffer, sizeof( szBuffer ), "WARNING! Memory allocated but not released: %lu bytes (%lu blocks)", s_ulMemoryConsumed, s_ulMemoryBlocks ); + hb_conOutErr( szBuffer, 0 ); + } + + hb_conOutErr( hb_conNewLine(), 0 ); + + for( i = 1, pMemBlock = s_pMemBlocks; pMemBlock; ++i, pMemBlock = pMemBlock->pNextBlock ) + HB_TRACE( HB_TR_ERROR, ( "Block %i %p (size %lu) \"%s\"", i, + ( char * ) pMemBlock + HB_MEMINFO_SIZE, pMemBlock->ulSize, + hb_memToStr( szBuffer, ( char * ) pMemBlock + HB_MEMINFO_SIZE, + pMemBlock->ulSize ) ) ); + } +#endif +} + +/* NOTE: Use as minimal calls from here, as possible. + Don't allocate memory from this function. [vszakats] */ +void hb_errInternal( ULONG ulIntCode, const char * szText, const char * szPar1, const char * szPar2 ) +{ + char buffer[ 1024 ]; + + HB_TRACE(HB_TR_DEBUG, ("hb_errInternal(%lu, %s, %s, %s)", ulIntCode, szText, szPar1, szPar2)); + + hb_conOutErr( hb_conNewLine(), 0 ); + hb_snprintf( buffer, sizeof( buffer ), "Unrecoverable error %lu: ", ulIntCode ); + hb_conOutErr( buffer, 0 ); + if( szText ) + { + hb_snprintf( buffer, sizeof( buffer ), szText, szPar1, szPar2 ); + hb_conOutErr( buffer, 0 ); + } + hb_conOutErr( hb_conNewLine(), 0 ); + exit( EXIT_FAILURE ); +} + +/* console */ +void hb_conOutErr( const char * pStr, ULONG ulLen ) +{ + if( ulLen == 0 ) + ulLen = strlen( pStr ); + + fprintf( stderr, "%.*s", ( int ) ulLen, pStr ); +} + +const char * hb_conNewLine( void ) +{ + return "\n"; +} + +int hb_charUpper( int iChar ) +{ + return HB_TOUPPER( iChar ); +} + +int hb_charLower( int iChar ) +{ + return HB_TOLOWER( iChar ); +} + +const char * hb_osEncode( const char * szFileName, char ** pszFree ) +{ + if( pszFree ) + *pszFree = NULL; + return szFileName; +} + +const char * hb_osDecode( const char * szFileName, char ** pszFree ) +{ + if( pszFree ) + *pszFree = NULL; + return szFileName; +} + +/* VM */ +void hb_vmLock( void ) {} + +void hb_vmUnlock( void ) {} + +void hb_fsSetIOError( BOOL fResult, USHORT uiOperation ) +{ + HB_SYMBOL_UNUSED( fResult ); + HB_SYMBOL_UNUSED( uiOperation ); +} + +/* file name conversion */ + +static int s_iFileCase = HB_SET_CASE_MIXED; +static int s_iDirCase = HB_SET_CASE_MIXED; +static BOOL s_fFnTrim = FALSE; +static char s_cDirSep = HB_OS_PATH_DELIM_CHR; + +const char * hb_fsNameConv( const char * szFileName, char ** pszFree ) +{ + if( s_fFnTrim || s_cDirSep != HB_OS_PATH_DELIM_CHR || + s_iFileCase != HB_SET_CASE_MIXED || s_iDirCase != HB_SET_CASE_MIXED ) + { + PHB_FNAME pFileName; + ULONG ulLen; + + if( pszFree ) + { + szFileName = *pszFree = hb_strncpy( ( char * ) hb_xgrab( HB_PATH_MAX ), + szFileName, HB_PATH_MAX - 1 ); + } + + if( s_cDirSep != HB_OS_PATH_DELIM_CHR ) + { + char *p = ( char * ) szFileName; + while( *p ) + { + if( *p == s_cDirSep ) + *p = HB_OS_PATH_DELIM_CHR; + p++; + } + } + + pFileName = hb_fsFNameSplit( szFileName ); + + /* strip trailing and leading spaces */ + if( s_fFnTrim ) + { + if( pFileName->szName ) + { + ulLen = strlen( pFileName->szName ); + while( ulLen && pFileName->szName[ulLen - 1] == ' ' ) + --ulLen; + while( ulLen && pFileName->szName[0] == ' ' ) + { + ++pFileName->szName; + --ulLen; + } + ( ( char * ) pFileName->szName )[ulLen] = '\0'; + } + if( pFileName->szExtension ) + { + ulLen = strlen( pFileName->szExtension ); + while( ulLen && pFileName->szExtension[ulLen - 1] == ' ' ) + --ulLen; + while( ulLen && pFileName->szExtension[0] == ' ' ) + { + ++pFileName->szExtension; + --ulLen; + } + ( ( char * ) pFileName->szExtension )[ulLen] = '\0'; + } + } + + /* FILECASE */ + if( s_iFileCase == HB_SET_CASE_LOWER ) + { + if( pFileName->szName ) + hb_strlow( ( char * ) pFileName->szName ); + if( pFileName->szExtension ) + hb_strlow( ( char * ) pFileName->szExtension ); + } + else if( s_iFileCase == HB_SET_CASE_UPPER ) + { + if( pFileName->szName ) + hb_strupr( ( char * ) pFileName->szName ); + if( pFileName->szExtension ) + hb_strupr( ( char * ) pFileName->szExtension ); + } + + /* DIRCASE */ + if( pFileName->szPath ) + { + if( s_iDirCase == HB_SET_CASE_LOWER ) + hb_strlow( ( char * ) pFileName->szPath ); + else if( s_iDirCase == HB_SET_CASE_UPPER ) + hb_strupr( ( char * ) pFileName->szPath ); + } + + hb_fsFNameMerge( ( char * ) szFileName, pFileName ); + hb_xfree( pFileName ); + } + else if( pszFree ) + *pszFree = NULL; + + return szFileName; +} + +int hb_setGetDirSeparator( void ) +{ + return s_cDirSep; +} + +void hb_compChkFileSwitches( int argc, char * argv[] ) +{ + int i, n; + + for( i = 1; i < argc; ++i ) + { + if( HB_ISOPTSEP( argv[i][0] ) && argv[i][1] == 'f' ) + { + n = 0; + switch( argv[i][2] ) + { + case 'n': + if( !argv[i][3] ) + { + s_iFileCase = HB_SET_CASE_MIXED; + n = 3; + } + else if( argv[i][3] == ':' ) + { + if( argv[i][4] == 'u' ) + { + s_iFileCase = HB_SET_CASE_UPPER; + n = 5; + } + else if( argv[i][4] == 'l' ) + { + s_iFileCase = HB_SET_CASE_LOWER; + n = 5; + } + } + else if( argv[i][3] == '-' ) + { + s_iFileCase = HB_SET_CASE_MIXED; + n = 4; + } + break; + + case 'd': + if( !argv[i][3] ) + { + s_iDirCase = HB_SET_CASE_MIXED; + n = 3; + } + else if( argv[i][3] == ':' ) + { + if( argv[i][4] == 'u' ) + { + s_iDirCase = HB_SET_CASE_UPPER; + n = 5; + } + else if( argv[i][4] == 'l' ) + { + s_iDirCase = HB_SET_CASE_LOWER; + n = 5; + } + } + else if( argv[i][3] == '-' ) + { + s_iDirCase = HB_SET_CASE_MIXED; + n = 4; + } + break; + + case 'p': + if( !argv[i][3] ) + { + s_cDirSep = HB_OS_PATH_DELIM_CHR; + n = 3; + } + else if( argv[i][3] == '-' ) + { + s_cDirSep = HB_OS_PATH_DELIM_CHR; + n = 4; + } + else if( argv[i][3] == ':' && argv[i][4] ) + { + s_cDirSep = argv[i][4]; + n = 5; + } + break; + + case 's': + if( !argv[i][3] ) + { + s_fFnTrim = TRUE; + n = 3; + } + else if( argv[i][3] == '-' ) + { + s_fFnTrim = FALSE; + n = 4; + } + break; + } + if( n ) + { + argv[i] += n; + if( argv[i][0] ) + --i; + else + argv[i] = ( char * ) "-"; + } + } + } +} diff --git a/harbour/source/pp/Makefile b/harbour/source/pp/Makefile index 20d0ade519..a0fd04151a 100644 --- a/harbour/source/pp/Makefile +++ b/harbour/source/pp/Makefile @@ -15,6 +15,7 @@ LIBNAME=hbpp LIBS=\ hbcommon \ + hbnulrtl \ ifeq ($(HB_PPGEN_PATH),) HB_PPGEN_PATH=. diff --git a/harbour/source/pp/hbpp.c b/harbour/source/pp/hbpp.c index 7fb1bc6bf1..5650ed5112 100644 --- a/harbour/source/pp/hbpp.c +++ b/harbour/source/pp/hbpp.c @@ -52,26 +52,10 @@ * */ -#include "hbset.h" +#include "hbapi.h" -/* - * library functions used by PP core code - * necessary to create standalone binaries - */ -void * hb_xgrab( ULONG ulSize ) { return malloc( ulSize ); } -void * hb_xrealloc( void * pMem, ULONG ulSize ) { return realloc( pMem, ulSize ); } -void hb_xfree( void * pMem ) { free( pMem ); } -const char * hb_fsNameConv( const char * szFileName, char ** pszFree ) { if( pszFree ) * pszFree = NULL; return szFileName; } -int hb_setGetDirSeparator( void ) { return HB_OS_PATH_DELIM_CHR; } int hb_verSvnID( void ) { return 0; } -/* workaround for warning in some GCC versions which can lost - * user casting during function autoinline optimization. - */ -#define hb_xgrab malloc -#define hb_xfree free -#define hb_xrealloc realloc - #include "ppcore.c" /* @@ -434,60 +418,86 @@ static int hb_pp_generateVerInfo( char * szVerFile, int iSVNID, char * szChangeL return iResult; } +static char * hb_fsFileFind( const char * pszFileMask ) +{ + PHB_FFIND ffind; + char * pszFree; + + pszFileMask = hb_fsNameConv( pszFileMask, &pszFree ); + if( ( ffind = hb_fsFindFirst( pszFileMask, HB_FA_ALL ) ) != NULL ) + { + char pszFileName[ HB_PATH_MAX ]; + PHB_FNAME pFileName = hb_fsFNameSplit( pszFileMask ); + pFileName->szName = ffind->szName; + hb_fsFNameMerge( pszFileName, pFileName ); + hb_fsFindClose( ffind ); + if( pszFree ) + hb_xfree( pszFree ); + hb_xfree( pFileName ); + return hb_strdup( pszFileName ); + } + if( pszFree ) + hb_xfree( pszFree ); + return NULL; +} + static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName, int iQuiet, int * piSVNID, char ** pszChangeLogID, char ** pszLastEntry ) { + char * pszFree = NULL; int iResult = 0; - const char * pszFile; FILE * file_in; - int tmp; - BOOL bFound; - const char * names[] = { NULL - , "../../../../ChangeLog" - , "../../../../CHANGES" -#if defined( HB_OS_DOS ) - , "../../../../ChangeLo" - , "../../../../Change~1" - , "../../../../Chang~01" -#endif - }; - - names[ 0 ] = pszFileName; - - pszFile = NULL; - bFound = FALSE; - for( tmp = 0; tmp < ( int ) HB_SIZEOFARRAY( names ) && ! bFound; ++tmp ) + if( !pszFileName ) { - pszFile = names[ tmp ]; + static const char * s_szNames[] = { + "../../../../ChangeLog", + "../../../../CHANGES", +#if defined( HB_OS_DOS ) + "../../../../ChangeLo", + "../../../../Change~1", + "../../../../Change~?", + "../../../../Chang~??", +#endif + NULL }; + int i = 0; - if( pszFile ) + pszFileName = s_szNames[ i++ ]; + while( pszFileName ) { - while( *pszFile == '.' ) + if( hb_fsFileExists( pszFileName ) ) + break; + if( strchr( pszFileName, '?' ) != NULL ) { - if( hb_fsFileExists( pszFile ) ) + pszFree = hb_fsFileFind( pszFileName ); + if( pszFree ) { - bFound = TRUE; + pszFileName = pszFree; break; } - pszFile += 3; } + /* disabled it was for old non GNU make system */ +#if 0 + if( *pszFileName == '.' ) + pszFileName += 3; + else +#endif + pszFileName = s_szNames[ i++ ]; } + if( !pszFileName ) + pszFileName = s_szNames[ 0 ]; } - if( pszFile ) - fprintf( stdout, "Using ChangeLog file: %s\n", pszFile ); - - file_in = hb_fopen( pszFile, "r" ); + file_in = hb_fopen( pszFileName, "r" ); if( !file_in ) { if( iQuiet < 2 ) { #if !defined( HB_OS_WIN_CE ) - perror( pszFile ); + perror( pszFileName ); #else - fprintf( stderr, "Cannot open the %s file.\n", pszFile ); + fprintf( stderr, "Cannot open the %s file.\n", pszFileName ); #endif } iResult = 1; @@ -500,6 +510,9 @@ static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName, char * szFrom, *szTo; int iLen; + if( iQuiet == 0 ) + fprintf( stdout, "Reading ChangeLog file: %s\n", pszFileName ); + *szId = *szLog = '\0'; do @@ -550,7 +563,7 @@ static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName, if( !*szLog ) { if( iQuiet < 2 ) - fprintf( stderr, "Cannot find valid $Id entry in the %s file.\n", pszFile ); + fprintf( stderr, "Cannot find valid $Id entry in the %s file.\n", pszFileName ); iResult = 1; } else @@ -592,12 +605,15 @@ static int hb_pp_parseChangelog( PHB_PP_STATE pState, const char * pszFileName, else { if( iQuiet < 2 ) - fprintf( stderr, "Unrecognized Id entry in the %s file.\n", pszFile ); + fprintf( stderr, "Unrecognized Id entry in the %s file.\n", pszFileName ); iResult = 1; } } } + if( pszFree ) + hb_xfree( pszFree ); + return iResult; } diff --git a/harbour/source/rtl/Makefile b/harbour/source/rtl/Makefile index 5cb9a467bc..a12d85cf85 100644 --- a/harbour/source/rtl/Makefile +++ b/harbour/source/rtl/Makefile @@ -70,7 +70,6 @@ C_SOURCES=\ hbhex.c \ hbmd5.c \ hbntos.c \ - hbffind.c \ hbfile.c \ hbgtcore.c \ hbi18n1.c \ diff --git a/harbour/source/rtl/strmatch.c b/harbour/source/rtl/strmatch.c index cb668acfd4..ca83adfba5 100644 --- a/harbour/source/rtl/strmatch.c +++ b/harbour/source/rtl/strmatch.c @@ -53,225 +53,6 @@ #include "hbapi.h" #include "hbregex.h" -#if defined( HB_OS_UNIX ) && !defined( HB_NO_FNMATCH ) -# include -#endif - -#define HB_MAX_WILDPATTERN 256 - -BOOL hb_strMatchWild( const char *szString, const char *szPattern ) -{ - BOOL fMatch = TRUE, fAny = FALSE; - ULONG pulBufPosP[ HB_MAX_WILDPATTERN ], pulBufPosV[ HB_MAX_WILDPATTERN ], - ulBufSize = HB_MAX_WILDPATTERN; - ULONG * ulAnyPosP = pulBufPosP, * ulAnyPosV = pulBufPosV, - ulSize, ulLen, ulAny, i, j; - - i = j = ulAny = 0; - ulLen = strlen( szString ); - ulSize = strlen( szPattern ); - while( i < ulSize ) - { - if( szPattern[i] == '*' ) - { - fAny = TRUE; - i++; - } - else if( j < ulLen && ( szPattern[i] == '?' || szPattern[i] == szString[j] ) ) - { - if( fAny ) - { - if( ulAny >= ulBufSize ) - { - if( ( ulBufSize <<= 1 ) == ( HB_MAX_WILDPATTERN << 1 ) ) - { - ulAnyPosP = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); - ulAnyPosV = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); - memcpy( ulAnyPosP, pulBufPosP, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); - memcpy( ulAnyPosV, pulBufPosV, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); - } - else - { - ulAnyPosP = ( ULONG * ) hb_xrealloc( ulAnyPosP, ulBufSize * sizeof( ULONG ) ); - ulAnyPosV = ( ULONG * ) hb_xrealloc( ulAnyPosV, ulBufSize * sizeof( ULONG ) ); - } - } - ulAnyPosP[ulAny] = i; - ulAnyPosV[ulAny] = j; - ulAny++; - fAny = FALSE; - } - j++; - i++; - } - else if( fAny && j < ulLen ) - { - j++; - } - else if( ulAny > 0 ) - { - ulAny--; - i = ulAnyPosP[ulAny]; - j = ulAnyPosV[ulAny] + 1; - fAny = TRUE; - } - else - { - fMatch = FALSE; - break; - } - } - if( ulBufSize > HB_MAX_WILDPATTERN ) - { - hb_xfree( ulAnyPosP ); - hb_xfree( ulAnyPosV ); - } - return fMatch; -} - -BOOL hb_strMatchWildExact( const char *szString, const char *szPattern ) -{ - BOOL fMatch = TRUE, fAny = FALSE; - ULONG pulBufPosP[ HB_MAX_WILDPATTERN ], pulBufPosV[ HB_MAX_WILDPATTERN ], - ulBufSize = HB_MAX_WILDPATTERN; - ULONG * ulAnyPosP = pulBufPosP, * ulAnyPosV = pulBufPosV, - ulSize, ulLen, ulAny, i, j; - - i = j = ulAny = 0; - ulLen = strlen( szString ); - ulSize = strlen( szPattern ); - while( i < ulSize || ( j < ulLen && !fAny ) ) - { - if( i < ulSize && szPattern[i] == '*' ) - { - fAny = TRUE; - i++; - } - else if( j < ulLen && i < ulSize && - ( szPattern[i] == '?' || szPattern[i] == szString[j] ) ) - { - if( fAny ) - { - if( ulAny >= ulBufSize ) - { - if( ( ulBufSize <<= 1 ) == ( HB_MAX_WILDPATTERN << 1 ) ) - { - ulAnyPosP = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); - ulAnyPosV = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); - memcpy( ulAnyPosP, pulBufPosP, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); - memcpy( ulAnyPosV, pulBufPosV, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); - } - else - { - ulAnyPosP = ( ULONG * ) hb_xrealloc( ulAnyPosP, ulBufSize * sizeof( ULONG ) ); - ulAnyPosV = ( ULONG * ) hb_xrealloc( ulAnyPosV, ulBufSize * sizeof( ULONG ) ); - } - } - ulAnyPosP[ulAny] = i; - ulAnyPosV[ulAny] = j; - ulAny++; - fAny = FALSE; - } - j++; - i++; - } - else if( fAny && j < ulLen ) - { - j++; - } - else if( ulAny > 0 ) - { - ulAny--; - i = ulAnyPosP[ulAny]; - j = ulAnyPosV[ulAny] + 1; - fAny = TRUE; - } - else - { - fMatch = FALSE; - break; - } - } - if( ulBufSize > HB_MAX_WILDPATTERN ) - { - hb_xfree( ulAnyPosP ); - hb_xfree( ulAnyPosV ); - } - return fMatch; -} - -BOOL hb_strMatchCaseWildExact( const char *szString, const char *szPattern ) -{ - BOOL fMatch = TRUE, fAny = FALSE; - ULONG pulBufPosP[ HB_MAX_WILDPATTERN ], pulBufPosV[ HB_MAX_WILDPATTERN ], - ulBufSize = HB_MAX_WILDPATTERN; - ULONG * ulAnyPosP = pulBufPosP, * ulAnyPosV = pulBufPosV, - ulSize, ulLen, ulAny, i, j; - - i = j = ulAny = 0; - ulLen = strlen( szString ); - ulSize = strlen( szPattern ); - while ( i < ulSize || ( j < ulLen && !fAny ) ) - { - if( i < ulSize && szPattern[i] == '*' ) - { - fAny = TRUE; - i++; - } - else if( j < ulLen && i < ulSize && - ( szPattern[i] == '?' || - hb_charUpper( szPattern[i] ) == hb_charUpper( szString[j] ) ) ) - { - if( fAny ) - { - if( ulAny >= ulBufSize ) - { - if( ( ulBufSize <<= 1 ) == ( HB_MAX_WILDPATTERN << 1 ) ) - { - ulAnyPosP = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); - ulAnyPosV = ( ULONG * ) hb_xgrab( ulBufSize * sizeof( ULONG ) ); - memcpy( ulAnyPosP, pulBufPosP, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); - memcpy( ulAnyPosV, pulBufPosV, HB_MAX_WILDPATTERN * sizeof( ULONG ) ); - } - else - { - ulAnyPosP = ( ULONG * ) hb_xrealloc( ulAnyPosP, ulBufSize * sizeof( ULONG ) ); - ulAnyPosV = ( ULONG * ) hb_xrealloc( ulAnyPosV, ulBufSize * sizeof( ULONG ) ); - } - } - ulAnyPosP[ulAny] = i; - ulAnyPosV[ulAny] = j; - ulAny++; - fAny = FALSE; - } - j++; - i++; - } - else if( fAny && j < ulLen ) - { - j++; - } - else if( ulAny > 0 ) - { - ulAny--; - i = ulAnyPosP[ulAny]; - j = ulAnyPosV[ulAny] + 1; - fAny = TRUE; - } - else - { - fMatch = FALSE; - break; - } - } - if( ulBufSize > HB_MAX_WILDPATTERN ) - { - hb_xfree( ulAnyPosP ); - hb_xfree( ulAnyPosV ); - } - return fMatch; -} - BOOL hb_strMatchRegExp( const char * szString, const char * szPattern ) { PHB_REGEX pRegEx; @@ -290,19 +71,6 @@ BOOL hb_strMatchRegExp( const char * szString, const char * szPattern ) return hb_strMatchWildExact( szString, szPattern ); } -BOOL hb_strMatchFile( const char * szString, const char * szPattern ) -{ -#if defined( HB_OS_UNIX ) -# if defined( HB_NO_FNMATCH ) - return hb_strMatchWildExact( szString, szPattern ); -# else - return fnmatch( szPattern, szString, FNM_PERIOD | FNM_PATHNAME ) == 0; -# endif -#else - return hb_strMatchCaseWildExact( szString, szPattern ); -#endif -} - /* * WildMatch( cPattern, cValue [, lExact] ) compares * cValue with cPattern, cPattern * may contain wildcard characters (?*)