From a11d2dd83992564558a5fb4e6a85b79a1e68762d Mon Sep 17 00:00:00 2001 From: Martin Vogel Date: Sun, 5 May 2002 19:03:27 +0000 Subject: [PATCH] 2002-05-05 21:05 UTC+0100 Martin Vogel --- harbour/ChangeLog | 9 +++ harbour/contrib/libct/range.c | 23 ++++++- harbour/contrib/libct/tests/Makefile | 2 + harbour/contrib/libct/tests/rangerem.prg | 83 ++++++++++++++++++++++++ harbour/contrib/libct/tests/rangerep.prg | 83 ++++++++++++++++++++++++ 5 files changed, 197 insertions(+), 3 deletions(-) create mode 100644 harbour/contrib/libct/tests/rangerem.prg create mode 100644 harbour/contrib/libct/tests/rangerep.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index a25100e45a..170a6c5656 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -7,6 +7,15 @@ For example: 2002-12-01 23:12 UTC+0100 Foo Bar */ + but will be kept in memory, what significantly increases the performance. + This may be especially helpful in case of creating temporary indexes for + reporting, etc. + +2002-05-05 21:05 UTC+0100 Martin Vogel + * contrib/libct/range.c + + contrib/libct/tests/rangerem.prg + + contrib/libct/tests/rangerepl.prg + * contrib/libct/tests/Makefile * fix of a bug in RANGEREPL() and RANGEREM(): return string too long, reported by Guenther Steiner diff --git a/harbour/contrib/libct/range.c b/harbour/contrib/libct/range.c index f87e3d27f5..1d3cf3a9f9 100644 --- a/harbour/contrib/libct/range.c +++ b/harbour/contrib/libct/range.c @@ -70,7 +70,14 @@ * $DESCRIPTION$ * TODO: add documentation * $EXAMPLES$ + * ? rangerem ("0","9","year2002.dbf") // "year.dbf", remove all digits + * ? rangerem ("9","0","year2002.dbf") // "22", testing removal from "9" to chr(255) + * // and from chr(0) to "0" + * ? rangerem ("0","9","yearcurr.dbf") // "yearcurr.dbf", test leaving string untouched * $TESTS$ + * rangerem ("0","9","year2002.dbf") == "year.dbf" + * rangerem ("9","0","year2002.dbf") == "22" + * rangerem ("0","9","yearcurr.dbf") == "yearcurr.dbf" * $STATUS$ * Started * $COMPLIANCE$ @@ -140,7 +147,8 @@ HB_FUNC (RANGEREM) } } - hb_retclen (pcRet, sRetIndex+1); + hb_retclen (pcRet, sRetIndex); + hb_xfree (pcRet); } else /* ((hb_parclen (1) > 0) || ISNUM (1)) && @@ -196,7 +204,14 @@ HB_FUNC (RANGEREM) * $DESCRIPTION$ * TODO: add documentation * $EXAMPLES$ + * ? rangerepl ("0","9","year2002.dbf","?") // "year????.dbf", replace all digits + * ? rangerepl ("9","0","year2002.dbf","?") // "????2??2????", testing replacement from "9" to chr(255) + * // and from chr(0) to "0" + * ? rangerepl ("0","9","yearcurr.dbf","?") // "yearcurr.dbf", test leaving string untouched * $TESTS$ + * rangerepl ("0","9","year2002.dbf","?") == "year????.dbf" + * rangerepl ("9","0","year2002.dbf","?") == "????2??2????" + * rangerepl ("0","9","yearcurr.dbf","?") == "yearcurr.dbf" * $STATUS$ * Started * $COMPLIANCE$ @@ -285,7 +300,7 @@ HB_FUNC (RANGEREPL) if (ISBYREF (3)) { - hb_storclen (pcRet, sRetIndex+1, 3); + hb_storclen (pcRet, sStrLen, 3); } if (iNoRef) @@ -294,8 +309,10 @@ HB_FUNC (RANGEREPL) } else { - hb_retclen (pcRet, sRetIndex+1); + hb_retclen (pcRet, sStrLen); } + + hb_xfree (pcRet); } else /* ((hb_parclen (1) > 0) || ISNUM (1)) && diff --git a/harbour/contrib/libct/tests/Makefile b/harbour/contrib/libct/tests/Makefile index 06b9198d36..91f27c683b 100644 --- a/harbour/contrib/libct/tests/Makefile +++ b/harbour/contrib/libct/tests/Makefile @@ -71,6 +71,8 @@ PRG_SOURCES=\ math.prg \ num1.prg \ numtoken.prg \ + rangerem.prg \ + rangerepl.prg \ setatlik.prg \ strdiff.prg \ tab.prg \ diff --git a/harbour/contrib/libct/tests/rangerem.prg b/harbour/contrib/libct/tests/rangerem.prg new file mode 100644 index 0000000000..463b9d4c26 --- /dev/null +++ b/harbour/contrib/libct/tests/rangerem.prg @@ -0,0 +1,83 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Test CT3 function RANGEREM() + * + * Copyright 2001 IntTec GmbH, Neunlindenstr 32, 79106 Freiburg, Germany + * Author: Martin Vogel + * + * 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 "../ct.ch" + + +procedure main + + ctinit() + + qout ("Begin test of RANGEREM()") + qout ("") + + qout ([ rangerem ("0","9","year2002.dbf") == "year.dbf" ? --> "] + ; + rangerem ("0","9","year2002.dbf") + ["]) + qout ([ rangerem ("9","0","year2002.dbf") == "22" ? --> "] + ; + rangerem ("9","0","year2002.dbf") + ["]) + qout ([ rangerem ("0","9","yearcurr.dbf") == "yearcurr.dbf" ? --> "] + ; + rangerem ("0","9","yearcurr.dbf") + ["]) + + qout ("") + qout ("End test of RANGEREM()") + qout ("") + + ctexit() + +return + + + + diff --git a/harbour/contrib/libct/tests/rangerep.prg b/harbour/contrib/libct/tests/rangerep.prg new file mode 100644 index 0000000000..20dd23df89 --- /dev/null +++ b/harbour/contrib/libct/tests/rangerep.prg @@ -0,0 +1,83 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Test CT3 function RANGEREPL() + * + * Copyright 2002 IntTec GmbH, Neunlindenstr 32, 79106 Freiburg, Germany + * Author: Martin Vogel + * + * 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 "../ct.ch" + + +procedure main + + ctinit() + + qout ("Begin test of RANGEREPL()") + qout ("") + + qout ([ rangerepl ("0","9","year2002.dbf","?") == "year????.dbf" ? --> "] + ; + rangerepl ("0","9","year2002.dbf","?") + ["]) + qout ([ rangerepl ("9","0","year2002.dbf","?") == "????2??2????" ? --> "] + ; + rangerepl ("9","0","year2002.dbf","?") + ["]) + qout ([ rangerepl ("0","9","yearcurr.dbf","?") == "yearcurr.dbf" ? --> "] + ; + rangerepl ("0","9","yearcurr.dbf","?") + ["]) + + qout ("") + qout ("End test of RANGEREPL()") + qout ("") + + ctexit() + +return + + + +