19990825-12:50 GMT+1

This commit is contained in:
Viktor Szakats
1999-08-25 11:05:30 +00:00
parent 7a894bac91
commit 6233f45db9
19 changed files with 1642 additions and 1472 deletions

View File

@@ -1,3 +1,60 @@
19990825-12:50 GMT+1 Victor Szel <info@szelvesz.hu>
* source/rdd/dbcmd.c
- Removed symbol init code.
* source/tools/io.c
! Modified so that it defines each function everytime, not just when
__DOS__ constant is defined. __DOS__ guard was moved around the function
bodies.
! Removed FILE() function from here, since it's already declared in
Harbour RTL/filesys.c
* include/external.ch
source/runner/stdalone/external.prg
+ Updated list of EXTERNAL, now including RDD and HBPP functions.
* source/compiler/harbour.y
! Compile time parameter checking modified for RTRIM(), TRIM() since we
have a Harbour extension here, which should be allowed, added missing
LEFT() from the compile-time parameter checking list.
* source/rtl/filesys.c
+ Added parameter count checking to FILE()
* source/rtl/transfrm.c
+ Added parameter count checking to TRANSFORM()
* source/rtl/dates.c
+ Added parameter count checking to CTOD(), DTOC(), DAY(), MONTH(), YEAR(),
DOW().
* Code reformatting, variable scoping, some small optimalizations.
* source/rtl/strings.c
doc/subcodes.txt
* Some pcount() checkings converted to IS*() macros in PAD*(), *TRIM().
* RTRIM(), TRIM() will now consider more than two parameters as an error.
- Removed parameter count checking from RIGHT().
+ NOTE: added about RTRIM(), TRIM(), ALLTRIM() Harbour extension.
% Simplified checking code for LEFT() and RIGHT()
! LEFT(),STRTRAN() are no longer launching custom Harbour error codes
3009/3010, this was not compatible, Clipper launches a standard error
code here.
* AT() parameter checking standardized.
* source/rtl/itemapi.c
* hb_itemGetL() and hb_itemGetNL() made consistent with the recent changes
in hb_parl() and hb_parnl().
* Some code reformatting, some casts added, some branch and retval
optimalization. 0 -> NULL, '\0'
* source/debug/debugger.prg
* SHADOW() -> __SHADOW()
* source/rtl/console.c
- SHADOW() changed to __SHADOW() since it's not a std Clipper function.
! SETCURSOR() is returning SC_NORMAL if there's no GT API.
* Some reformatting, some small optimalizations, added some copyright
info.
+ Parameter count error added to DEVPOS(), SETPOS(), PROW(), PCOL(),
COL(), ROW()
* source/rtl/copyfile.c ( #include "itemapi.h" removed )
source/rtl/hardcr.c
source/rtl/mtran.c
source/rtl/arrays.c ( 0 -> NULL )
source/rtl/descend.c ( hb_pcount() call removed )
* Reformatting. Small cleanup. Some small optimalizations.
19990825-09:02 GMT+1 Antonio Linares <alinares@fivetech.com>
* source/debug/tbrwtext.prg
* Improved display functionality.
@@ -73,6 +130,7 @@
WITH PARAMETERS PASSED BY REFERENCE, PLEASE ALSO NOTE THAT
FRead() IS NOT WORKING RIGHT NOW )
* source/rtl/filesys.c
doc/subcodes.txt
* Huge cleanup, reformatted, eliminated usage of internal structures,
fixed types, standardized variable names, explicit constants changed
@@ -111,7 +169,7 @@
decimals now are only accessed for DOUBLE types (and of course only set
for DOUBLE return types). The bug could be observed by running AC_TEST
pressing PgDn at the bottom of the list then pressing Up button, the
index display was shown with decimals in it.
index display was shown with decimals in it (DOS/DJGPP).
% MIN(), MAX() code optimalized.
* Some direct hb_param() calls changed to macros.

View File

@@ -684,7 +684,6 @@ start from 3000
* $STATUS$
* Clipper
* $SEEALSO$
* BASE/3009
* $END$
*/
@@ -1212,7 +1211,6 @@ start from 3000
* $STATUS$
* Harbour specific
* $SEEALSO$
*
* $END$
*/
@@ -1220,17 +1218,12 @@ start from 3000
* $SUBCODE$
* BASE/3009
* $CATEGORY$
* arguments
* (not used yet)
* $ONELINER$
* Incorrect type of argument
* $DESCRIPTION$
* The second argument is not a numeric value.
* $FUNCTION$
* LEFT
* $STATUS$
* Harbour specific
* $SEEALSO$
*
* $END$
*/
@@ -1238,15 +1231,11 @@ start from 3000
* $SUBCODE$
* BASE/3010
* $CATEGORY$
* arguments
* (not used yet)
* $ONELINER$
* Invalid argument passed to a function
* $DESCRIPTION$
* The second arguments passed to a function is not a string.
* $FUNCTION$
* STRTRAN
* $STATUS$
* Harbour specific
* $SEEALSO$
*
* $END$
@@ -1254,7 +1243,7 @@ start from 3000
/* $DOC$
* $SUBCODE$
* BASE/3010
* BASE/3011
* $CATEGORY$
* arguments
* $ONELINER$

View File

@@ -33,11 +33,16 @@
their web site at http://www.gnu.org/).
*/
//
// Files from: vm
//
//
//symbols from file: vm/hvm.c
//symbols from file: vm\dynsym.c
//
EXTERNAL __DYNSCOUNT
EXTERNAL __DYNSGETNAME
EXTERNAL __DYNSGETINDEX
//
//symbols from file: vm\hvm.c
//
EXTERNAL ERRORSYS
EXTERNAL ERRORNEW
@@ -52,50 +57,30 @@ EXTERNAL __QUIT
EXTERNAL ERRORLEVEL
EXTERNAL PCOUNT
EXTERNAL PVALUE
EXTERNAL BREAK
//
//symbols from file: vm/dynsym.c
//
EXTERNAL __DYNSCOUNT
EXTERNAL __DYNSGETNAME
EXTERNAL __DYNSGETINDEX
//
//symbols from file: vm/initsymb.c
//symbols from file: vm\initsymb.c
//
//------------------------------------------------------------
// Files from: rtl
//
//
//symbols from file: rtl/arrays.c
//symbols from file: rtl\arrays.c
//
EXTERNAL AADD
EXTERNAL ACLONE
EXTERNAL ACOPY
EXTERNAL ADEL
EXTERNAL AEVAL
EXTERNAL AFILL
EXTERNAL AINS
EXTERNAL ARRAY
EXTERNAL ASCAN
EXTERNAL AADD
EXTERNAL ASIZE
EXTERNAL ASORT
EXTERNAL ATAIL
EXTERNAL AINS
EXTERNAL ADEL
EXTERNAL AFILL
EXTERNAL ASCAN
EXTERNAL AEVAL
EXTERNAL ACOPY
EXTERNAL ACLONE
//
//symbols from file: rtl/classes.c
//symbols from file: rtl\classes.c
//
EXTERNAL __CLSNEW
EXTERNAL __CLSINST
EXTERNAL __CLSINSTSUPER
EXTERNAL __CLSADDMSG
EXTERNAL __CLSDELMSG
EXTERNAL __CLSMODMSG
EXTERNAL __CLS_CNTCLSDATA
EXTERNAL __CLS_CNTDATA
EXTERNAL __CLS_DECDATA
EXTERNAL __CLS_INCDATA
EXTERNAL __OBJGETCLSNAME
EXTERNAL __OBJCLONE
EXTERNAL __OBJHASMSG
EXTERNAL __OBJSENDMSG
EXTERNAL __OBJGETMSGLIST
EXTERNAL __OBJGETMETHODLIST
EXTERNAL __OBJGETVALUELIST
@@ -110,139 +95,152 @@ EXTERNAL __OBJDELINLINE
EXTERNAL __OBJDELMETHOD
EXTERNAL __OBJMODINLINE
EXTERNAL __OBJMODMETHOD
EXTERNAL __CLSADDMSG
EXTERNAL __CLSNEW
EXTERNAL __CLSDELMSG
EXTERNAL __CLSINST
EXTERNAL __CLSMODMSG
EXTERNAL __OBJGETCLSNAME
EXTERNAL __OBJHASMSG
EXTERNAL __OBJCLONE
EXTERNAL __OBJSENDMSG
EXTERNAL __CLSINSTSUPER
EXTERNAL __CLS_CNTCLSDATA
EXTERNAL __CLS_CNTDATA
EXTERNAL __CLS_DECDATA
EXTERNAL __CLS_INCDATA
//
//symbols from file: rtl/codebloc.c
//symbols from file: rtl\codebloc.c
//
//
//symbols from file: rtl/console.c
//symbols from file: rtl\console.c
//
EXTERNAL __ACCEPT
EXTERNAL __EJECT
EXTERNAL COL
EXTERNAL ROW
EXTERNAL DBGSHADOW
EXTERNAL DEVOUT
EXTERNAL DEVOUTPICT
EXTERNAL DEVPOS
EXTERNAL DISPBEGIN
EXTERNAL DISPBOX
EXTERNAL DISPCOUNT
EXTERNAL DISPEND
EXTERNAL DISPOUT
EXTERNAL ISCOLOR
EXTERNAL MAXCOL
EXTERNAL MAXROW
EXTERNAL NOSNOW
EXTERNAL OUTSTD
EXTERNAL OUTERR
EXTERNAL PCOL
EXTERNAL QQOUT
EXTERNAL QOUT
EXTERNAL SETPOS
EXTERNAL DEVPOS
EXTERNAL DEVOUT
EXTERNAL DISPOUT
EXTERNAL __EJECT
EXTERNAL PROW
EXTERNAL RESTSCREEN
EXTERNAL PCOL
EXTERNAL SETPRC
EXTERNAL SCROLL
EXTERNAL MAXROW
EXTERNAL MAXCOL
EXTERNAL ROW
EXTERNAL COL
EXTERNAL DISPBOX
EXTERNAL DISPBEGIN
EXTERNAL DISPEND
EXTERNAL DISPCOUNT
EXTERNAL ISCOLOR
EXTERNAL NOSNOW
EXTERNAL __SHADOW
EXTERNAL DBGSHADOW
EXTERNAL SAVESCREEN
EXTERNAL RESTSCREEN
EXTERNAL SETCURSOR
EXTERNAL SETBLINK
EXTERNAL SETPOS
EXTERNAL SETPRC
EXTERNAL SHADOW
EXTERNAL QOUT
EXTERNAL QQOUT
EXTERNAL __ACCEPT
EXTERNAL __COLORINDEX
//
//symbols from file: rtl/copyfile.c
//symbols from file: rtl\copyfile.c
//
EXTERNAL __COPYFILE
//
//symbols from file: rtl/dates.c
//symbols from file: rtl\dates.c
//
EXTERNAL CDOW
EXTERNAL CMONTH
EXTERNAL CTOD
EXTERNAL DATE
EXTERNAL DAY
EXTERNAL DOW
EXTERNAL DTOC
EXTERNAL DTOS
EXTERNAL MONTH
EXTERNAL SECONDS
EXTERNAL STOD
EXTERNAL TIME
EXTERNAL DAY
EXTERNAL MONTH
EXTERNAL YEAR
EXTERNAL TIME
EXTERNAL DATE
EXTERNAL DOW
EXTERNAL CMONTH
EXTERNAL CDOW
EXTERNAL SECONDS
//
//symbols from file: rtl/descend.c
//symbols from file: rtl\descend.c
//
EXTERNAL DESCEND
//
//symbols from file: rtl/dir.c
//symbols from file: rtl\dir.c
//
EXTERNAL DIRECTORY
//
//symbols from file: rtl/do.c
//symbols from file: rtl\do.c
//
EXTERNAL DO
//
//symbols from file: rtl/environ.c
//symbols from file: rtl\environ.c
//
EXTERNAL __RUN
EXTERNAL GETENV
EXTERNAL OS
EXTERNAL VERSION
EXTERNAL GETENV
EXTERNAL __RUN
//
//symbols from file: rtl/errorapi.c
//symbols from file: rtl\errorapi.c
//
EXTERNAL __ERRRT_BASE
//
//symbols from file: rtl/extend.c
//symbols from file: rtl\extend.c
//
//
//symbols from file: rtl/filesys.c
//symbols from file: rtl\filesys.c
//
EXTERNAL FOPEN
EXTERNAL FCREATE
EXTERNAL FREAD
EXTERNAL FWRITE
EXTERNAL FERROR
EXTERNAL FCLOSE
EXTERNAL FERASE
EXTERNAL FRENAME
EXTERNAL FSEEK
EXTERNAL FILE
EXTERNAL FREADSTR
EXTERNAL CURDIR
EXTERNAL BIN2I
EXTERNAL BIN2L
EXTERNAL BIN2W
EXTERNAL FCLOSE
EXTERNAL FCREATE
EXTERNAL FERASE
EXTERNAL FERROR
EXTERNAL FILE
EXTERNAL FOPEN
EXTERNAL FREAD
EXTERNAL FREADSTR
EXTERNAL FRENAME
EXTERNAL FSEEK
EXTERNAL FWRITE
EXTERNAL CURDIR
EXTERNAL I2BIN
EXTERNAL L2BIN
EXTERNAL W2BIN
//
//symbols from file: rtl/fm.c
//symbols from file: rtl\fm.c
//
//
//symbols from file: rtl/gtapi.c
//symbols from file: rtl\gtapi.c
//
//
//symbols from file: rtl/gtxxx.c
//symbols from file: rtl\gtxxx.c
//
//
//symbols from file: rtl/hardcr.c
//symbols from file: rtl\hardcr.c
//
EXTERNAL HARDCR
//
//symbols from file: rtl/inkey.c
//symbols from file: rtl\inkey.c
//
EXTERNAL __KEYBOARD
EXTERNAL INKEY
EXTERNAL LASTKEY
EXTERNAL __KEYBOARD
EXTERNAL NEXTKEY
EXTERNAL LASTKEY
//
//symbols from file: rtl/itemapi.c
//symbols from file: rtl\itemapi.c
//
//
//symbols from file: rtl/langapi.c
//symbols from file: rtl\langapi.c
//
//
//symbols from file: rtl/math.c
//symbols from file: rtl\math.c
//
EXTERNAL ABS
EXTERNAL EXP
@@ -254,7 +252,7 @@ EXTERNAL MOD
EXTERNAL ROUND
EXTERNAL SQRT
//
//symbols from file: rtl/memvars.c
//symbols from file: rtl\memvars.c
//
EXTERNAL __MVPUBLIC
EXTERNAL __MVPRIVATE
@@ -263,192 +261,295 @@ EXTERNAL __MVRELEASE
EXTERNAL __MVSCOPE
EXTERNAL __MVCLEAR
//
//symbols from file: rtl/msgxxx.c
//symbols from file: rtl\msgxxx.c
//
//
//symbols from file: rtl/mtran.c
//symbols from file: rtl\mtran.c
//
EXTERNAL MEMOTRAN
//
//symbols from file: rtl/set.c
//symbols from file: rtl\set.c
//
EXTERNAL SET
EXTERNAL __SETCENTURY
EXTERNAL SET
//
//symbols from file: rtl/setcolor.c
//symbols from file: rtl\setcolor.c
//
EXTERNAL SETCOLOR
EXTERNAL COLORSELECT
//
//symbols from file: rtl/strings.c
//symbols from file: rtl\strings.c
//
EXTERNAL ALLTRIM
EXTERNAL ASC
EXTERNAL AT
EXTERNAL CHR
EXTERNAL ISALPHA
EXTERNAL ISDIGIT
EXTERNAL ISUPPER
EXTERNAL ISLOWER
EXTERNAL LEFT
EXTERNAL LOWER
EXTERNAL LTRIM
EXTERNAL PAD
EXTERNAL PADC
EXTERNAL PADL
EXTERNAL PADR
EXTERNAL RAT
EXTERNAL REPLICATE
EXTERNAL RIGHT
EXTERNAL RTRIM
EXTERNAL SPACE
EXTERNAL STR
EXTERNAL STRTRAN
EXTERNAL STUFF
EXTERNAL SUBSTR
EXTERNAL TRIM
EXTERNAL ALLTRIM
EXTERNAL PADR
EXTERNAL PAD
EXTERNAL PADL
EXTERNAL PADC
EXTERNAL AT
EXTERNAL RAT
EXTERNAL CHR
EXTERNAL ASC
EXTERNAL LEFT
EXTERNAL RIGHT
EXTERNAL SUBSTR
EXTERNAL LOWER
EXTERNAL UPPER
EXTERNAL REPLICATE
EXTERNAL SPACE
EXTERNAL STUFF
EXTERNAL STRTRAN
EXTERNAL VAL
EXTERNAL STR
EXTERNAL STRZERO
//
//symbols from file: rtl/transfrm.c
//
EXTERNAL TRANSFORM
//
//symbols from file: rtl/tone.c
//symbols from file: rtl\tone.c
//
EXTERNAL TONE
//
//symbols from file: rtl/achoice.prg
//symbols from file: rtl\transfrm.c
//
EXTERNAL TRANSFORM
//
//symbols from file: rtl\achoice.prg
//
EXTERNAL ACHOICE
//
//symbols from file: rtl/adir.prg
//symbols from file: rtl\adir.prg
//
EXTERNAL ADIR
//
//symbols from file: rtl/alert.prg
//symbols from file: rtl\alert.prg
//
EXTERNAL ALERT
//
//symbols from file: rtl/asort.prg
//symbols from file: rtl\asort.prg
//
EXTERNAL ASORT
//
//symbols from file: rtl\browdb.prg
//
EXTERNAL TBROWSEDB
//
//symbols from file: rtl\devoutp.prg
//
EXTERNAL DEVOUTPICT
//
//symbols from file: rtl\errorsys.prg
//
//
//symbols from file: rtl/devoutp.prg
//
//
//symbols from file: rtl/terror.prg
//
//
//symbols from file: rtl/errorsys.prg
//
//
//symbols from file: rtl/menuto.prg
//symbols from file: rtl\menuto.prg
//
EXTERNAL __ATPROMPT
EXTERNAL __MENUTO
//
//symbols from file: rtl/objfunc.prg
//symbols from file: rtl\objfunc.prg
//
//
//symbols from file: rtl/readvar.prg
//symbols from file: rtl\readvar.prg
//
EXTERNAL READVAR
//
//symbols from file: rtl/setkey.prg
//symbols from file: rtl\setkey.prg
//
EXTERNAL SETKEY
EXTERNAL SETKEYGET
EXTERNAL SETKEYSAVE
EXTERNAL SETKEYCHECK
//
//symbols from file: rtl/tclass.prg
//symbols from file: rtl\tbcolumn.prg
//
EXTERNAL TBCOLUMNNEW
//
//symbols from file: rtl\tbrowse.prg
//
EXTERNAL TBROWSENEW
//
//symbols from file: rtl\tclass.prg
//
EXTERNAL TCLASS
//
//symbols from file: rtl/tget.prg
//symbols from file: rtl\terror.prg
//
//
//symbols from file: rtl\tget.prg
//
EXTERNAL GETNEW
EXTERNAL _GET_
//
//symbols from file: rtl/tgetlist.prg
//symbols from file: rtl\tgetlist.prg
//
EXTERNAL READMODAL
//
//symbols from file: rtl/tbcolumn.prg
//
EXTERNAL TBCOLUMNNEW
//
//symbols from file: rtl/tbrowse.prg
//
EXTERNAL TBROWSENEW
//
//symbols from file: rtl/xsavescr.prg
//symbols from file: rtl\xsavescr.prg
//
EXTERNAL __XSAVESCREEN
EXTERNAL __XRESTSCREEN
//------------------------------------------------------------
// Files from: rdd
//
//symbols from file: rtl/browdb.prg
//
EXTERNAL TBROWSEDB
//symbols from file: rdd\dbcmd.c
//
EXTERNAL DBF
EXTERNAL SDF
EXTERNAL DELIM
EXTERNAL RDDSYS
EXTERNAL AFIELDS
EXTERNAL ALIAS
EXTERNAL BOF
EXTERNAL DBCLOSEALL
EXTERNAL DBCLOSEAREA
EXTERNAL DBCOMMIT
EXTERNAL DBCREATE
EXTERNAL DBDELETE
EXTERNAL DBGOBOTTOM
EXTERNAL DBGOTO
EXTERNAL DBGOTOP
EXTERNAL DBRECALL
EXTERNAL DBRLOCK
EXTERNAL DBRLOCKLIST
EXTERNAL DBRUNLOCK
EXTERNAL DBSELECTAREA
EXTERNAL DBSETDRIVER
EXTERNAL DBSKIP
EXTERNAL DBSTRUCT
EXTERNAL DBTABLEEXT
EXTERNAL DBUNLOCK
EXTERNAL DBUNLOCKALL
EXTERNAL DBUSEAREA
EXTERNAL DELETED
EXTERNAL EOF
EXTERNAL FCOUNT
EXTERNAL FIELDGET
EXTERNAL FIELDNAME
EXTERNAL FIELDPOS
EXTERNAL FIELDPUT
EXTERNAL FLOCK
EXTERNAL FOUND
EXTERNAL HEADER
EXTERNAL LASTREC
EXTERNAL LUPDATE
EXTERNAL NETERR
EXTERNAL RDDLIST
EXTERNAL RDDNAME
EXTERNAL RDDREGISTER
EXTERNAL RDDSETDEFAULT
EXTERNAL RDDSHUTDOWN
EXTERNAL RECCOUNT
EXTERNAL RECNO
EXTERNAL RECSIZE
EXTERNAL RLOCK
EXTERNAL SELECT
EXTERNAL USED
//
//symbols from file: rdd\dbf1.c
//
EXTERNAL _DBF
EXTERNAL DBF_GETFUNCTABLE
//
//symbols from file: rdd\delim1.c
//
EXTERNAL _DELIM
EXTERNAL DELIM_GETFUNCTABLE
//
//symbols from file: rdd\sdf1.c
//
EXTERNAL _SDF
EXTERNAL SDF_GETFUNCTABLE
//
//symbols from file: rdd\dbf0.prg
//
//
//symbols from file: rdd\delim0.prg
//
//
//symbols from file: rdd\rddsys.prg
//
//
//symbols from file: rdd\sdf0.prg
//
//------------------------------------------------------------
// Files from: hbpp
//
//
//symbols from file: hbpp\hbpp.c
//
//
//symbols from file: hbpp\hbppint.c
//
//
//symbols from file: hbpp\hbpplib.c
//
EXTERNAL __PREPROCESS
//
//symbols from file: hbpp\table.c
//
//------------------------------------------------------------
// Files from: tools
//
//
//symbols from file: tools/asciisum.c
//symbols from file: tools\asciisum.c
//
EXTERNAL GT_ASCIISUM
//
//symbols from file: tools/ascpos.c
//symbols from file: tools\ascpos.c
//
EXTERNAL GT_ASCPOS
//
//symbols from file: tools/atdiff.c
//symbols from file: tools\atdiff.c
//
EXTERNAL GT_ATDIFF
//
//symbols from file: tools/chareven.c
//symbols from file: tools\chareven.c
//
EXTERNAL GT_CHAREVEN
//
//symbols from file: tools/charmix.c
//symbols from file: tools\charmix.c
//
EXTERNAL GT_CHARMIX
//
//symbols from file: tools/charodd.c
//symbols from file: tools\charodd.c
//
EXTERNAL GT_CHARODD
//
//symbols from file: tools/chrcount.c
//symbols from file: tools\chrcount.c
//
EXTERNAL GT_CHRCOUNT
//
//symbols from file: tools/chrfirst.c
//symbols from file: tools\chrfirst.c
//
EXTERNAL GT_CHRFIRST
//
//symbols from file: tools/chrtotal.c
//symbols from file: tools\chrtotal.c
//
EXTERNAL GT_CHRTOTAL
//
//symbols from file: tools/dates2.c
//symbols from file: tools\dates2.c
//
EXTERNAL ADAYS
EXTERNAL AMONTHS
EXTERNAL BOM
EXTERNAL BOY
EXTERNAL DAYSINMONTH
EXTERNAL DOY
EXTERNAL EOM
EXTERNAL EOY
EXTERNAL ADAYS
EXTERNAL ISLEAPYEAR
EXTERNAL DAYSINMONTH
EXTERNAL EOM
EXTERNAL BOM
EXTERNAL WOM
EXTERNAL DOY
EXTERNAL WOY
EXTERNAL EOY
EXTERNAL BOY
//
//symbols from file: tools/datesx.c
//symbols from file: tools\datesx.c
//
EXTERNAL DATETIME
//
//symbols from file: tools/debug.c
//symbols from file: tools\debug.c
//
EXTERNAL __ASTATIC
EXTERNAL __STATIC
@@ -458,7 +559,7 @@ EXTERNAL __STACKLEN
EXTERNAL __ASTACK
EXTERNAL __APARAM
//
//symbols from file: tools/hb_f.c
//symbols from file: tools\hb_f.c
//
EXTERNAL HB_FUSE
EXTERNAL HB_FRECNO
@@ -471,11 +572,17 @@ EXTERNAL HB_FGOTOP
EXTERNAL HB_FLASTREC
EXTERNAL HB_FSELECT
//
//symbols from file: tools/io.c
//symbols from file: tools\io.c
//
//removed manually
EXTERNAL RENFILE
EXTERNAL CD
EXTERNAL MD
EXTERNAL RD
EXTERNAL DISKUSED
EXTERNAL DISKFREE
EXTERNAL DISKFULL
//
//symbols from file: tools/mathx.c
//symbols from file: tools\mathx.c
//
EXTERNAL ACOS
EXTERNAL ASIN
@@ -489,60 +596,60 @@ EXTERNAL TAN
EXTERNAL TANH
EXTERNAL PI
//
//symbols from file: tools/strasint.c
//symbols from file: tools\strasint.c
//
//
//symbols from file: tools/strcount.c
//symbols from file: tools\strcount.c
//
EXTERNAL GT_STRCOUNT
//
//symbols from file: tools/strcspn.c
//symbols from file: tools\strcspn.c
//
EXTERNAL GT_STRCSPN
//
//symbols from file: tools/strdiff.c
//symbols from file: tools\strdiff.c
//
EXTERNAL GT_STRDIFF
//
//symbols from file: tools/strexpan.c
//symbols from file: tools\strexpan.c
//
EXTERNAL GT_STREXPAND
//
//symbols from file: tools/strfmt.c
//symbols from file: tools\strfmt.c
//
EXTERNAL STRFORMAT
//
//symbols from file: tools/stringsx.c
//symbols from file: tools\stringsx.c
//
EXTERNAL STRTOKEN
EXTERNAL STRDUMP
EXTERNAL ROT13
//
//symbols from file: tools/strleft.c
//symbols from file: tools\strleft.c
//
EXTERNAL GT_STRLEFT
//
//symbols from file: tools/strpbrk.c
//symbols from file: tools\strpbrk.c
//
EXTERNAL GT_STRPBRK
//
//symbols from file: tools/strright.c
//symbols from file: tools\strright.c
//
EXTERNAL GT_STRRIGHT
//
//symbols from file: tools/fileread.prg
//symbols from file: tools\fileread.prg
//
EXTERNAL TFILEREAD
//
//symbols from file: tools/numtxten.prg
//symbols from file: tools\numtxten.prg
//
EXTERNAL NUMTOTXTEN
//
//symbols from file: tools/numtxthu.prg
//symbols from file: tools\numtxthu.prg
//
EXTERNAL NUMTOTXTHU
//
//symbols from file: tools/stringp.prg
//symbols from file: tools\stringp.prg
//
EXTERNAL DEFAULT
EXTERNAL TOCHAR

View File

@@ -5843,6 +5843,7 @@ static FUNCINFO _StdFun[] = {
{ "INKEY" , 0, 2 },
{ "INT" , 1, 1 },
{ "LASTREC" , 0, 0 },
{ "LEFT" , 2, 2 },
{ "LEN" , 1, 1 },
{ "LOG" , 1, 1 },
{ "LOWER" , 1, 1 },
@@ -5859,7 +5860,7 @@ static FUNCINFO _StdFun[] = {
{ "RLOCK" , 0, 0 },
{ "ROUND" , 2, 2 },
{ "ROW" , 0, 0 },
{ "RTRIM" , 1, 1 },
{ "RTRIM" , 1, 2 }, /* Second parameter is a Harbour extension */
{ "SECONDS" , 0, 0 },
{ "SELECT" , 0, 1 },
{ "SETPOS" , 2, 2 },
@@ -5869,7 +5870,7 @@ static FUNCINFO _StdFun[] = {
{ "SUBSTR" , 2, 3 },
{ "TIME" , 0, 0 },
{ "TRANSFORM" , 2, 2 },
{ "TRIM" , 1, 1 },
{ "TRIM" , 1, 2 }, /* Second parameter is a Harbour extension */
{ "TYPE" , 1, 1 },
{ "UPPER" , 1, 1 },
{ "VAL" , 1, 1 },

View File

@@ -327,7 +327,7 @@ METHOD InputBox( cMsg, uValue ) CLASS TDebugger
@ nTop, nLeft, nBottom, nRight BOX B_SINGLE COLOR ::oPullDown:cClrPopup
@ nTop, nLeft + ( ( nRight - nLeft ) ) / 2 - Len( cMsg ) / 2 SAY ;
cMsg COLOR ::oPullDown:cClrPopup
Shadow( nTop, nLeft, nBottom, nRight )
__Shadow( nTop, nLeft, nBottom, nRight )
@ nTop + 1, nLeft + 1 GET uTemp
nOldCursor = SetCursor( 1 )
@@ -653,7 +653,7 @@ METHOD Display() CLASS TDbMenu
else
::cBackImage = SaveScreen( ::nTop, ::nLeft, ::nBottom + 1, ::nRight + 1 )
@ ::nTop, ::nLeft, ::nBottom, ::nRight BOX B_SINGLE
Shadow( ::nTop, ::nLeft, ::nBottom, ::nRight )
__Shadow( ::nTop, ::nLeft, ::nBottom, ::nRight )
endif
for n = 1 to Len( ::aItems )

View File

@@ -25,7 +25,6 @@
#include <ctype.h>
#include "extend.h"
#include "itemapi.h"
#include "init.h"
#include "errorapi.h"
#include "rddapi.h"
#include "set.h"
@@ -110,59 +109,6 @@ HARBOUR HB_RLOCK( void );
HARBOUR HB_SELECT( void );
HARBOUR HB_USED( void );
HB_INIT_SYMBOLS_BEGIN( dbCmd__InitSymbols )
{ "AFIELDS", FS_PUBLIC, HB_AFIELDS, 0 },
{ "ALIAS", FS_PUBLIC, HB_ALIAS, 0 },
{ "BOF", FS_PUBLIC, HB_BOF, 0 },
{ "DBCLOSEALL", FS_PUBLIC, HB_DBCLOSEALL, 0 },
{ "DBCLOSEAREA", FS_PUBLIC, HB_DBCLOSEAREA, 0 },
{ "DBCOMMIT", FS_PUBLIC, HB_DBCOMMIT, 0 },
{ "DBCREATE", FS_PUBLIC, HB_DBCREATE, 0 },
{ "DBDELETE", FS_PUBLIC, HB_DBDELETE, 0 },
{ "DBGOBOTTOM", FS_PUBLIC, HB_DBGOBOTTOM, 0 },
{ "DBGOTO", FS_PUBLIC, HB_DBGOTO, 0 },
{ "DBGOTOP", FS_PUBLIC, HB_DBGOTOP, 0 },
{ "DBRECALL", FS_PUBLIC, HB_DBRECALL, 0 },
{ "DBRLOCK", FS_PUBLIC, HB_DBRLOCK, 0 },
{ "DBRLOCKLIST", FS_PUBLIC, HB_DBRLOCKLIST, 0 },
{ "DBRUNLOCK", FS_PUBLIC, HB_DBRUNLOCK, 0 },
{ "DBSELECTAREA", FS_PUBLIC, HB_DBSELECTAREA, 0 },
{ "DBSETDRIVER", FS_PUBLIC, HB_DBSETDRIVER, 0 },
{ "DBSKIP", FS_PUBLIC, HB_DBSKIP, 0 },
{ "DBSTRUCT", FS_PUBLIC, HB_DBSTRUCT, 0 },
{ "DBTABLEEXT", FS_PUBLIC, HB_DBTABLEEXT, 0 },
{ "DBUNLOCK", FS_PUBLIC, HB_DBUNLOCK, 0 },
{ "DBUNLOCKALL", FS_PUBLIC, HB_DBUNLOCKALL, 0 },
{ "DBUSEAREA", FS_PUBLIC, HB_DBUSEAREA, 0 },
{ "DELETED", FS_PUBLIC, HB_DELETED, 0 },
{ "EOF", FS_PUBLIC, HB_EOF, 0 },
{ "FCOUNT", FS_PUBLIC, HB_FCOUNT, 0 },
{ "FIELDGET", FS_PUBLIC, HB_FIELDGET, 0 },
{ "FIELDNAME", FS_PUBLIC, HB_FIELDNAME, 0 },
{ "FIELDPOS", FS_PUBLIC, HB_FIELDPOS, 0 },
{ "FIELDPUT", FS_PUBLIC, HB_FIELDPUT, 0 },
{ "FLOCK", FS_PUBLIC, HB_FLOCK, 0 },
{ "FOUND", FS_PUBLIC, HB_FOUND, 0 },
{ "HEADER", FS_PUBLIC, HB_HEADER, 0 },
{ "LASTREC", FS_PUBLIC, HB_LASTREC, 0 },
{ "LUPDATE", FS_PUBLIC, HB_LUPDATE, 0 },
{ "NETERR", FS_PUBLIC, HB_NETERR, 0 },
{ "RDDLIST", FS_PUBLIC, HB_RDDLIST, 0 },
{ "RDDNAME", FS_PUBLIC, HB_RDDNAME, 0 },
{ "RDDREGISTER", FS_PUBLIC, HB_RDDREGISTER, 0 },
{ "RDDSETDEFAULT", FS_PUBLIC, HB_RDDSETDEFAULT, 0 },
{ "RDDSHUTDOWN", FS_PUBLIC, HB_RDDSHUTDOWN, 0 },
{ "RECCOUNT", FS_PUBLIC, HB_RECCOUNT, 0 },
{ "RECNO", FS_PUBLIC, HB_RECNO, 0 },
{ "RECSIZE", FS_PUBLIC, HB_RECSIZE, 0 },
{ "RLOCK", FS_PUBLIC, HB_RLOCK, 0 },
{ "SELECT", FS_PUBLIC, HB_SELECT, 0 },
{ "USED", FS_PUBLIC, HB_USED, 0 }
HB_INIT_SYMBOLS_END( dbCmd__InitSymbols )
#if ! defined(__GNUC__)
#pragma startup dbCmd__InitSymbols
#endif
static char * szDefDriver = 0; /* Default RDD name */
static USHORT uiCurrArea = 1; /* Selectd area */
static LPRDDNODE pRddList = 0; /* Registered RDD's */

View File

@@ -582,7 +582,7 @@ void hb_arrayCopy( PHB_ITEM pSrcArray, PHB_ITEM pDstArray, ULONG ulStart,
PHB_ITEM hb_arrayClone( PHB_ITEM pSrcArray )
{
PHB_ITEM pDstArray = hb_itemNew( 0 );
PHB_ITEM pDstArray = hb_itemNew( NULL );
if( IS_ARRAY( pSrcArray ) )
{
@@ -671,8 +671,7 @@ HARBOUR HB_AADD( void )
hb_errRT_BASE( EG_ARG, 1123, NULL, "AADD" );
}
else
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "AADD" );
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "AADD" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_ASIZE( void )

View File

@@ -34,22 +34,31 @@
HB_DEVPOS(), hb_dispout(), HB___EJECT(), hb_max_col(), HB_MAXCOL(),
hb_max_row(), HB_MAXROW(), hb_out(), hb_outerr(), HB_OUTERR(),
hb_outstd(), HB_OUTSTD(), HB_PCOL(), HB_PROW(), hb_setpos(),
HB_SETPOS(), HB_SETPRC(), HB_SCROLL(), and InitializeConsole().
HB_SETPOS(), HB_SETPRC(), HB_SCROLL(), and hb_consoleInitialize().
See doc/hdr_tpl.txt, Version 1.2 or later, for licensing terms.
*/
/* Harbour Project source code
http://www.Harbour-Project.org/
The following functions are Copyright 1999 Victor Szel <info@szelvesz.hu>:
HB_DISPBOX() GT version.
HB_DISPBEGIN()
HB_DISPEND()
HB_DISPCOUNT()
HB_ISCOLOR()
HB_NOSNOW()
HB___COLORINDEX().
See doc/hdr_tpl.txt, Version 1.2 or later, for licensing terms.
*/
#include "extend.h"
#include "itemapi.h"
#include "errorapi.h"
#include "dates.h"
#include "set.h"
#include "inkey.h"
#include "gtapi.h" /* HARBOUR_USE_GTAPI is checked inside gtapi.h, so that
we can always get the border styles */
#if defined(__GNUC__)
#include <unistd.h>
@@ -60,8 +69,6 @@
#include <io.h>
#endif
#include <fcntl.h>
#include "gtapi.h" /* HARBOUR_USE_GTAPI is checked inside gtapi.h, so that
we can always get the border styles */
#define ACCEPT_BUFFER_LEN 256 /*length of input buffer for ACCEPT command */
@@ -72,24 +79,24 @@
#endif
static USHORT dev_row, dev_col, p_row, p_col;
static char CrLf [ CRLF_BUFFER_LEN ];
static char CrLf[ CRLF_BUFFER_LEN ];
void hb_consoleRelease( void )
{
#ifdef HARBOUR_USE_GTAPI
hb_gtExit ();
hb_gtExit();
#endif
}
void hb_consoleInitialize( void )
{
#if defined(OS_DOS_COMPATIBLE)
CrLf [0] = 13;
CrLf [1] = 10;
CrLf [2] = 0;
CrLf[ 0 ] = 13;
CrLf[ 1 ] = 10;
CrLf[ 2 ] = 0;
#else
CrLf [0] = 10;
CrLf [1] = 0;
CrLf[ 0 ] = 10;
CrLf[ 1 ] = 0;
#endif
p_row = p_col = 0;
@@ -116,7 +123,7 @@ void hb_consoleInitialize( void )
WORD hb_max_row( void )
{
#ifdef HARBOUR_USE_GTAPI
return hb_gtMaxRow ();
return hb_gtMaxRow();
#else
return 23; /* QUESTION: Shouldn't this be 24 ? info@szelvesz.hu */
#endif /* ANSWER : No. ANSI terminals commonly only have 24 lines */
@@ -125,7 +132,7 @@ WORD hb_max_row( void )
WORD hb_max_col( void )
{
#ifdef HARBOUR_USE_GTAPI
return hb_gtMaxCol ();
return hb_gtMaxCol();
#else
return 79;
#endif
@@ -144,76 +151,76 @@ static void adjust_pos( char * fpStr, ULONG len, WORD * row, WORD * col, WORD ma
case 7:
break;
case 8:
if( *col ) (*col)--;
if( *col ) ( *col )--;
else
{
*col = max_col;
if( *row ) (*row)--;
if( *row ) ( *row )--;
}
break;
case 10:
if( *row < max_row ) (*row)++;
if( *row < max_row ) ( *row )++;
break;
case 13:
*col = 0;
break;
default:
if( *col < max_col ) (*col)++;
if( *col < max_col ) ( *col )++;
else
{
*col = 0;
if( *row < max_row ) (*row)++;
if( *row < max_row ) ( *row )++;
}
}
}
}
#endif
typedef void hb_out_func_typedef (char *, ULONG);
typedef void hb_out_func_typedef( char *, ULONG );
/* Format items for output, then call specified output function */
static void hb_out( WORD wParam, hb_out_func_typedef * hb_out_func )
{
char * szText;
PHB_ITEM pItem = hb_param( wParam, IT_ANY );
char szBuffer [ 11 ];
char szBuffer[ 11 ];
switch( hb_parinfo( wParam ) )
{
case IT_STRING:
hb_out_func( hb_parc( wParam ), hb_parclen( wParam ) );
break;
hb_out_func( hb_parc( wParam ), hb_parclen( wParam ) );
break;
case IT_DATE:
szText = hb_dtoc( hb_pards( wParam ), szBuffer, hb_set.HB_SET_DATEFORMAT );
if( szText )
hb_out_func( szText, strlen( szText ) );
break;
szText = hb_dtoc( hb_pards( wParam ), szBuffer, hb_set.HB_SET_DATEFORMAT );
if( szText )
hb_out_func( szText, strlen( szText ) );
break;
case IT_DOUBLE:
case IT_INTEGER:
case IT_LONG:
szText = hb_itemStr( pItem, 0, 0 ); /* Let hb_itemStr() do the hard work */
if( szText )
{
hb_out_func( szText, strlen( szText ) );
hb_xfree( szText );
}
break;
szText = hb_itemStr( pItem, 0, 0 ); /* Let hb_itemStr() do the hard work */
if( szText )
{
hb_out_func( szText, strlen( szText ) );
hb_xfree( szText );
}
break;
case IT_NIL:
hb_out_func( "NIL", 3 );
break;
hb_out_func( "NIL", 3 );
break;
case IT_LOGICAL:
if( hb_parl( wParam ) )
hb_out_func( ".T.", 3 );
else
hb_out_func( ".F.", 3 );
break;
if( hb_parl( wParam ) )
hb_out_func( ".T.", 3 );
else
hb_out_func( ".F.", 3 );
break;
default:
break;
break;
}
}
@@ -233,9 +240,9 @@ static void hb_outstd( char * fpStr, ULONG len )
printf( "%s", fpStr );
fflush( stdout );
#ifdef HARBOUR_USE_GTAPI
#ifndef __CYGWIN__
#ifndef __CYGWIN__
if( isatty( fileno( stdout ) ) )
#endif
#endif
{
dev_row = hb_gt_Row();
dev_col = hb_gt_Col();
@@ -263,9 +270,9 @@ static void hb_outerr( char * fpStr, ULONG len )
fprintf( stderr, "%s", fpStr );
fflush( stderr );
#ifdef HARBOUR_USE_GTAPI
#ifndef __CYGWIN__
#ifndef __CYGWIN__
if( isatty( fileno( stderr ) ) )
#endif
#endif
{
dev_row = hb_gt_Row();
dev_col = hb_gt_Col();
@@ -284,17 +291,17 @@ static void hb_altout( char * fpStr, ULONG len )
if( hb_set.HB_SET_CONSOLE )
{
#ifdef HARBOUR_USE_GTAPI
#ifdef HARBOUR_USE_GTAPI
hb_gtWriteCon( fpStr, len );
hb_gtGetPos( &dev_row, &dev_col );
#else
#else
ULONG count = len;
if( strlen( fpStr ) != count )
while( count-- ) printf( "%c", *fpPtr++ );
else
printf( "%s", fpStr );
adjust_pos( fpStr, len, &dev_row, &dev_col, hb_max_row(), hb_max_col() );
#endif
#endif
}
if( hb_set.HB_SET_ALTERNATE && hb_set_althan >= 0 )
{
@@ -395,11 +402,11 @@ static void hb_devout( char * fpStr, ULONG len )
}
else
{
#ifdef HARBOUR_USE_GTAPI
#ifdef HARBOUR_USE_GTAPI
/* Otherwise, display to console */
hb_gtWrite( fpStr, len );
hb_gtGetPos( &dev_row, &dev_col );
#else
#else
ULONG count = len;
char * fpPtr = fpStr;
if( strlen( fpStr ) != count )
@@ -407,33 +414,33 @@ static void hb_devout( char * fpStr, ULONG len )
else
printf( "%s", fpStr );
adjust_pos( fpStr, len, &dev_row, &dev_col, hb_max_row(), hb_max_col() );
#endif
#endif
}
}
/* Output an item to the screen */
static void hb_dispout( char * fpStr, ULONG len )
{
#ifdef HARBOUR_USE_GTAPI
/* Display to console */
hb_gtWrite( fpStr, len );
hb_gtGetPos( &dev_row, &dev_col );
#else
ULONG count = len;
char * fpPtr = fpStr;
if( strlen( fpStr ) != count )
while( count-- ) printf( "%c", *fpPtr++ );
else
printf( "%s", fpStr );
adjust_pos( fpStr, len, &dev_row, &dev_col, hb_max_row(), hb_max_col() );
#endif
#ifdef HARBOUR_USE_GTAPI
/* Display to console */
hb_gtWrite( fpStr, len );
hb_gtGetPos( &dev_row, &dev_col );
#else
ULONG count = len;
char * fpPtr = fpStr;
if( strlen( fpStr ) != count )
while( count-- ) printf( "%c", *fpPtr++ );
else
printf( "%s", fpStr );
adjust_pos( fpStr, len, &dev_row, &dev_col, hb_max_row(), hb_max_col() );
#endif
}
void hb_setpos( WORD row, WORD col )
{
#ifdef HARBOUR_USE_GTAPI
#ifdef HARBOUR_USE_GTAPI
hb_gtSetPos( row, col );
#else
#else
WORD count;
if( row < dev_row || col < dev_col )
@@ -445,9 +452,10 @@ void hb_setpos( WORD row, WORD col )
else if( row > dev_row ) dev_col = 0;
for( count = dev_row; count < row; count++ ) printf("\n");
for( count = dev_col; count < col; count++ ) printf(" ");
#endif
dev_row = row;
dev_col = col;
#endif
dev_row = row;
dev_col = col;
}
void hb_devpos( WORD row, WORD col )
@@ -511,7 +519,9 @@ HARBOUR HB_QQOUT( void ) /* writes a list of values to the current device (scree
HARBOUR HB_QOUT( void )
{
WORD count;
hb_altout( CrLf, CRLF_BUFFER_LEN-1 );
hb_altout( CrLf, CRLF_BUFFER_LEN - 1 );
if( hb_set.HB_SET_PRINTER && hb_set_printhan >= 0 )
{
p_row++;
@@ -519,12 +529,13 @@ HARBOUR HB_QOUT( void )
count = p_col;
while( count-- > 0 ) write( hb_set_printhan, " ", 1 );
}
HB_QQOUT();
}
HARBOUR HB_SETPOS( void ) /* Sets the screen position */
{
if( hb_pcount() > 1 )
if( hb_pcount() == 2 )
{
if( ISNUM( 1 ) && ISNUM( 2 ) )
{
@@ -536,6 +547,7 @@ HARBOUR HB_SETPOS( void ) /* Sets the screen position */
if( i_row < 0 ) row = 0;
else if( i_row > hb_max_row() ) row = hb_max_row();
else row = i_row;
if( i_col < 0 ) col = 0;
else if( i_col > hb_max_col() ) col = hb_max_col();
else col = i_col;
@@ -544,11 +556,13 @@ HARBOUR HB_SETPOS( void ) /* Sets the screen position */
hb_setpos( row, col );
}
}
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "SETPOS" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_DEVPOS( void ) /* Sets the screen and/or printer position */
{
if( hb_pcount() > 1 )
if( hb_pcount() == 2 )
{
if( ISNUM( 1 ) && ISNUM( 2 ) )
{
@@ -560,6 +574,7 @@ HARBOUR HB_DEVPOS( void ) /* Sets the screen and/or printer position */
if( l_row < 0 ) row = 0;
else if( l_row > USHRT_MAX ) row = USHRT_MAX;
else row = l_row;
if( l_col < 0 ) col = 0;
else if( l_col > USHRT_MAX ) col = USHRT_MAX;
else col = l_col;
@@ -568,6 +583,8 @@ HARBOUR HB_DEVPOS( void ) /* Sets the screen and/or printer position */
hb_devpos( row, col );
}
}
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "DEVPOS" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_DEVOUT( void ) /* writes a single value to the current device (screen or printer), but is not affected by SET ALTERNATE */
@@ -576,10 +593,11 @@ HARBOUR HB_DEVOUT( void ) /* writes a single value to the current device (screen
{
#ifdef HARBOUR_USE_GTAPI
char fpOldColor[ CLR_STRLEN ];
if( ISCHAR( 2 ) )
{
hb_gtGetColorStr( fpOldColor );
hb_gtSetColorStr( hb_parc(2) );
hb_gtSetColorStr( hb_parc( 2 ) );
}
#endif
@@ -604,7 +622,7 @@ HARBOUR HB_DISPOUT( void ) /* writes a single value to the current device (scree
if( ISCHAR( 2 ) )
{
hb_gtGetColorStr( fpOldColor );
hb_gtSetColorStr( hb_parc(2) );
hb_gtSetColorStr( hb_parc( 2 ) );
}
#endif
@@ -630,31 +648,36 @@ HARBOUR HB___EJECT( void ) /* Ejects the current page from the printer */
HARBOUR HB_PROW( void ) /* Returns the current printer row position */
{
hb_retni( p_row );
if( hb_pcount() == 0 )
hb_retni( p_row );
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "PROW" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_PCOL( void ) /* Returns the current printer row position */
{
hb_retni( p_col );
if( hb_pcount() == 0 )
hb_retni( p_col );
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "PCOL" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_SETPRC( void ) /* Sets the current printer row and column positions */
{
if( hb_pcount() > 1 )
if( ISNUM( 1 ) && ISNUM( 2 ) )
{
if( ISNUM( 1 ) && ISNUM( 2 ) )
{
long l_row = hb_parnl( 1 );
long l_col = hb_parnl( 2 );
long l_row = hb_parnl( 1 );
long l_col = hb_parnl( 2 );
/* Limit the new position to the range (0,0) to (65535,65535) */
if( l_row < 0 ) p_row = 0;
else if( l_row > USHRT_MAX ) p_row = USHRT_MAX;
else p_row = l_row;
if( l_col < 0 ) p_col = 0;
else if( l_col > USHRT_MAX ) p_col = USHRT_MAX;
else p_col = l_col;
}
/* Limit the new position to the range (0,0) to (65535,65535) */
if( l_row < 0 ) p_row = 0;
else if( l_row > USHRT_MAX ) p_row = USHRT_MAX;
else p_row = l_row;
if( l_col < 0 ) p_col = 0;
else if( l_col > USHRT_MAX ) p_col = USHRT_MAX;
else p_col = l_col;
}
}
@@ -708,28 +731,38 @@ HARBOUR HB_SCROLL( void ) /* Scrolls a screen region (requires the GT API) */
HARBOUR HB_MAXROW( void ) /* Return the maximum screen row number (zero origin) */
{
hb_retni( hb_max_row () );
hb_retni( hb_max_row() );
}
HARBOUR HB_MAXCOL( void ) /* Return the maximum screen column number (zero origin) */
{
hb_retni( hb_max_col () );
hb_retni( hb_max_col() );
}
HARBOUR HB_ROW( void ) /* Return the current screen row position (zero origin) */
{
if( hb_pcount() == 0 )
{
#ifdef HARBOUR_USE_GTAPI
hb_gtGetPos( &dev_row, & dev_col);
hb_gtGetPos( &dev_row, & dev_col);
#endif
hb_retni( dev_row );
hb_retni( dev_row );
}
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "ROW" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_COL( void ) /* Return the current screen column position (zero origin) */
{
if( hb_pcount() == 0 )
{
#ifdef HARBOUR_USE_GTAPI
hb_gtGetPos( &dev_row, & dev_col);
hb_gtGetPos( &dev_row, &dev_col);
#endif
hb_retni( dev_col );
hb_retni( dev_col );
}
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "COL" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_DISPBOX (void)
@@ -737,30 +770,30 @@ HARBOUR HB_DISPBOX (void)
#ifdef HARBOUR_USE_GTAPI
if( ISNUM( 1 ) && ISNUM( 2 ) && ISNUM( 3 ) && ISNUM( 4 ) )
{
char szOldColor [CLR_STRLEN];
char szOldColor[ CLR_STRLEN ];
if( ISCHAR( 6 ) )
{
hb_gtGetColorStr(szOldColor);
hb_gtSetColorStr(hb_parc(6));
hb_gtGetColorStr( szOldColor );
hb_gtSetColorStr( hb_parc( 6 ) );
}
if( ISCHAR( 5 ) )
{
hb_gtBox(hb_parni(1), hb_parni(2), hb_parni(3), hb_parni(4), hb_parc(5));
hb_gtBox( hb_parni( 1 ), hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ), hb_parc( 5 ));
}
else if( ISNUM( 5 ) && hb_parni( 5 ) == 2 )
{
hb_gtBoxD(hb_parni(1), hb_parni(2), hb_parni(3), hb_parni(4));
hb_gtBoxD( hb_parni( 1 ), hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ) );
}
else
{
hb_gtBoxS(hb_parni(1), hb_parni(2), hb_parni(3), hb_parni(4));
hb_gtBoxS( hb_parni( 1 ), hb_parni( 2 ), hb_parni( 3 ), hb_parni( 4 ) );
}
if( ISCHAR( 6 ) )
{
hb_gtSetColorStr(szOldColor);
hb_gtSetColorStr( szOldColor );
}
}
#else
@@ -774,10 +807,10 @@ HARBOUR HB_DISPBOX (void)
char Borders[ 9 ];
/* Set limits on the box coordinates to (0,0) and (max_row(),max_col()) */
if( i_top < 0 ) top = 0; else top = (WORD)i_top;
if( i_left < 0 ) left = 0; else left = (WORD)i_left;
if( i_bottom < 0 ) bottom = 0; else bottom = (WORD)i_bottom;
if( i_right < 0 ) right = 0; else right = (WORD)i_right;
if( i_top < 0 ) top = 0; else top = ( WORD ) i_top;
if( i_left < 0 ) left = 0; else left = ( WORD ) i_left;
if( i_bottom < 0 ) bottom = 0; else bottom = ( WORD ) i_bottom;
if( i_right < 0 ) right = 0; else right = ( WORD ) i_right;
if( top > hb_max_row() ) top = hb_max_row();
if( left > hb_max_col() ) left = hb_max_col();
if( bottom > hb_max_row() ) bottom = hb_max_row();
@@ -849,11 +882,11 @@ HARBOUR HB_DISPBOX (void)
hb_setpos( top, left );
if( height > 1 && width > 1 )
printf( "%c", Borders[ 0 ] ); /* Upper left corner */
for( col = (height > 1 ? left + 1 : left ); col < (height > 1 ? right : right + 1); col++ )
for( col = ( height > 1 ? left + 1 : left ); col < ( height > 1 ? right : right + 1 ); col++ )
printf( "%c", Borders[ 1 ] ); /* Top line */
if( height > 1 && width > 1 )
printf( "%c", Borders[ 2 ] ); /* Upper right corner */
for( row = (height > 1 ? top + 1 : top); row < (width > 1 ? bottom : bottom + 1); row++ )
for( row = ( height > 1 ? top + 1 : top ); row < ( width > 1 ? bottom : bottom + 1 ); row++ )
{
hb_setpos( row, left );
if( height > 1 )
@@ -894,18 +927,18 @@ HARBOUR HB_DISPEND (void)
HARBOUR HB_DISPCOUNT (void)
{
#ifdef HARBOUR_USE_GTAPI
hb_retni(hb_gtDispCount());
hb_retni( hb_gtDispCount() );
#else
hb_retni(0);
hb_retni( 0 );
#endif
}
HARBOUR HB_ISCOLOR (void)
{
#ifdef HARBOUR_USE_GTAPI
hb_retl(hb_gtIsColor());
hb_retl( hb_gtIsColor() );
#else
hb_retl(FALSE);
hb_retl( FALSE );
#endif
}
@@ -914,29 +947,32 @@ HARBOUR HB_NOSNOW (void)
#ifdef HARBOUR_USE_GTAPI
if( ISLOG( 1 ) )
{
hb_gtSetSnowFlag(hb_parl(1));
hb_gtSetSnowFlag( hb_parl( 1 ) );
}
#endif
}
HARBOUR HB_SHADOW (void)
HARBOUR HB___SHADOW (void)
{
#ifdef HARBOUR_USE_GTAPI
USHORT uiAttr;
USHORT uiAttr;
if( hb_pcount() == 4 )
uiAttr = 7;
else if( hb_pcount() == 5 )
uiAttr = hb_parni(5);
uiAttr = hb_parni( 5 );
if( hb_pcount() > 3 )
hb_gt_DrawShadow(hb_parni(1)+1,hb_parni(2)+1,hb_parni(3)+1,hb_parni(4)+1,uiAttr);
hb_gt_DrawShadow( hb_parni( 1 ) + 1,
hb_parni( 2 ) + 1,
hb_parni( 3 ) + 1,
hb_parni( 4 ) + 1, uiAttr);
#endif
}
HARBOUR HB_DBGSHADOW (void)
{
HB_SHADOW();
HB___SHADOW();
}
HARBOUR HB_SAVESCREEN (void)
@@ -955,9 +991,9 @@ HARBOUR HB_SAVESCREEN (void)
if( ISNUM( uiX ) )
uiCoords[uiX - 1 ] = hb_parni( uiX );
hb_gtRectSize( uiCoords[0], uiCoords[1], uiCoords[2], uiCoords[3], &uiX );
hb_gtRectSize( uiCoords[ 0 ], uiCoords[ 1 ], uiCoords[ 2 ], uiCoords[ 3 ], &uiX );
pBuffer = ( char * ) hb_xgrab( uiX );
hb_gtSave( uiCoords[0], uiCoords[1], uiCoords[2], uiCoords[3], pBuffer );
hb_gtSave( uiCoords[ 0 ], uiCoords[ 1 ], uiCoords[ 2 ], uiCoords[ 3 ], pBuffer );
hb_retclen( pBuffer, uiX );
hb_xfree( ( void * ) pBuffer );
#endif
@@ -966,21 +1002,21 @@ HARBOUR HB_SAVESCREEN (void)
HARBOUR HB_RESTSCREEN (void)
{
#ifdef HARBOUR_USE_GTAPI
USHORT uiX;
USHORT uiCoords[ 4 ];
uiCoords[ 0 ] = 0;
uiCoords[ 1 ] = 0;
uiCoords[ 2 ] = hb_gtMaxRow();
uiCoords[ 3 ] = hb_gtMaxCol();
if( hb_pcount() == 5 )
{
USHORT uiX;
USHORT uiCoords[ 4 ];
uiCoords[ 0 ] = 0;
uiCoords[ 1 ] = 0;
uiCoords[ 2 ] = hb_gtMaxRow();
uiCoords[ 3 ] = hb_gtMaxCol();
for( uiX = 1; uiX < 5; uiX++ )
if( ISNUM( uiX ) )
uiCoords[uiX - 1 ] = hb_parni( uiX );
hb_gtRest( uiCoords[0], uiCoords[1], uiCoords[2], uiCoords[3],
hb_gtRest( uiCoords[ 0 ], uiCoords[ 1 ], uiCoords[ 2 ], uiCoords[ 3 ],
hb_parc( 5 ) );
}
#endif
@@ -996,6 +1032,8 @@ HARBOUR HB_SETCURSOR( void )
hb_gtSetCursor( hb_parni( 1 ) );
hb_retni( usPreviousCursor );
#else
hb_retni( SC_NORMAL );
#endif
}
@@ -1015,26 +1053,26 @@ HARBOUR HB_SETBLINK( void )
}
HARBOUR HB___ACCEPT( void ) /* Internal Clipper function used in ACCEPT command */
/* Basically the simplest Clipper function to */
/* receive data. Parameter : cPrompt. Returns : cRet */
/* Basically the simplest Clipper function to */
/* receive data. Parameter : cPrompt. Returns : cRet */
{
char *szResult = ( char * ) hb_xgrab(ACCEPT_BUFFER_LEN); /* Return parameter. */
char *szPrompt = hb_parc(1); /* Pass prompt */
ULONG len = hb_parclen(1);
char * szResult = ( char * ) hb_xgrab( ACCEPT_BUFFER_LEN ); /* Return parameter. */
char * szPrompt = hb_parc( 1 ); /* Pass prompt */
ULONG len = hb_parclen( 1 );
int input;
if( hb_pcount() == 1 ) /* cPrompt passed */
{
hb_altout( CrLf, CRLF_BUFFER_LEN-1 );
hb_altout( CrLf, CRLF_BUFFER_LEN - 1 );
hb_altout( szPrompt, len );
}
#ifdef OS_UNIX_COMPATIBLE
/* Read the data using fgets(), because hb_inkeyPoll() doesn't support
Unix compatible operating systems yet. */
szResult[0] = '\x0'; /* start with something defined */
szResult[ 0 ] = '\0'; /* start with something defined */
if( fgets( szResult, ACCEPT_BUFFER_LEN, stdin ) )
{
strtok(szResult, "\n"); /* strip off the trailing newline
strtok( szResult, "\n" ); /* strip off the trailing newline
if it exists */
}
#else

View File

@@ -23,7 +23,6 @@
*/
#include "extend.h"
#include "itemapi.h"
#include "errorapi.h"
#include "filesys.h"
@@ -34,7 +33,7 @@
#define BUFFER_SIZE 8192
static BOOL hb_fsCopy(char* szSource, char* szDest, ULONG* pulWrittenTotal)
static BOOL hb_fsCopy( char * szSource, char * szDest, ULONG * pulWrittenTotal )
{
BOOL bRetVal = FALSE;
ULONG ulWrittenTotal = 0L;
@@ -42,27 +41,27 @@ static BOOL hb_fsCopy(char* szSource, char* szDest, ULONG* pulWrittenTotal)
FHANDLE fhndSource;
FHANDLE fhndDest;
while ((fhndSource = hb_fsOpen(( BYTE * ) szSource, FO_READ)) == FS_ERROR)
while( ( fhndSource = hb_fsOpen( ( BYTE * ) szSource, FO_READ ) ) == FS_ERROR )
{
if (hb_errRT_BASE_Ext1(EG_OPEN, 2012, NULL, szSource, hb_fsError(), EF_CANDEFAULT | EF_CANRETRY ) == E_DEFAULT)
if( hb_errRT_BASE_Ext1( EG_OPEN, 2012, NULL, szSource, hb_fsError(), EF_CANDEFAULT | EF_CANRETRY ) == E_DEFAULT )
{
ulWrittenTotal = (ULONG)-1L;
ulWrittenTotal = ( ULONG ) -1L;
break;
}
}
if (fhndSource != FS_ERROR)
if( fhndSource != FS_ERROR )
{
while ((fhndDest = hb_fsCreate(( BYTE * ) szDest, FC_NORMAL)) == FS_ERROR)
while( ( fhndDest = hb_fsCreate( ( BYTE * ) szDest, FC_NORMAL ) ) == FS_ERROR )
{
if (hb_errRT_BASE_Ext1(EG_CREATE, 2012, NULL, szDest, hb_fsError(), EF_CANDEFAULT | EF_CANRETRY ) == E_DEFAULT)
if( hb_errRT_BASE_Ext1( EG_CREATE, 2012, NULL, szDest, hb_fsError(), EF_CANDEFAULT | EF_CANRETRY ) == E_DEFAULT )
{
ulWrittenTotal = (ULONG)-2L;
ulWrittenTotal = ( ULONG ) -2L;
break;
}
}
if (fhndDest != FS_ERROR)
if( fhndDest != FS_ERROR )
{
#ifdef OS_UNIX_COMPATIBLE
struct stat struFileInfo;
@@ -72,41 +71,41 @@ static BOOL hb_fsCopy(char* szSource, char* szDest, ULONG* pulWrittenTotal)
USHORT usRead;
USHORT usWritten;
buffer = (BYTE * ) hb_xgrab( BUFFER_SIZE );
buffer = ( BYTE * ) hb_xgrab( BUFFER_SIZE );
/* QUESTION: Does Clipper throw an error on read or write operation ? */
/* QUESTION: What is the E_DEFAULT behaviour on that error ? */
bRetVal = TRUE;
while ((usRead = hb_fsRead(fhndSource, buffer, BUFFER_SIZE)) != 0)
while( ( usRead = hb_fsRead( fhndSource, buffer, BUFFER_SIZE ) ) != 0 )
{
while ((usWritten = hb_fsWrite(fhndDest, buffer, usRead)) != usRead)
while( ( usWritten = hb_fsWrite( fhndDest, buffer, usRead ) ) != usRead )
{
if (hb_errRT_BASE_Ext1(EG_WRITE, 2012, NULL, szDest, hb_fsError(), EF_CANDEFAULT | EF_CANRETRY ) == E_DEFAULT)
if( hb_errRT_BASE_Ext1( EG_WRITE, 2012, NULL, szDest, hb_fsError(), EF_CANDEFAULT | EF_CANRETRY ) == E_DEFAULT )
{
bRetVal = FALSE;
break;
}
}
ulWrittenTotal += (ULONG)usWritten;
ulWrittenTotal += ( ULONG ) usWritten;
}
hb_xfree(buffer);
hb_xfree( buffer );
#ifdef OS_UNIX_COMPATIBLE
if( iSuccess == 0 )
fchmod( fhndDest, struFileInfo.st_mode );
#endif
hb_fsClose(fhndDest);
hb_fsClose( fhndDest );
}
hb_fsClose(fhndSource);
hb_fsClose( fhndSource );
}
if ( pulWrittenTotal != NULL )
if( pulWrittenTotal != NULL )
*pulWrittenTotal = ulWrittenTotal;
return bRetVal;
@@ -116,21 +115,17 @@ static BOOL hb_fsCopy(char* szSource, char* szDest, ULONG* pulWrittenTotal)
HARBOUR HB___COPYFILE( void )
{
if ( ISCHAR(1) && ISCHAR(2) )
if( ISCHAR( 1 ) && ISCHAR( 2 ) )
{
#ifdef HARBOUR_STRICT_CLIPPER_COMPATIBILITY
if (!hb_fsCopy( hb_parc(1), hb_parc(2), NULL ))
{
if( ! hb_fsCopy( hb_parc( 1 ), hb_parc( 2 ), NULL ) )
hb_retl( FALSE );
}
#else
ULONG ulWrittenTotal;
hb_fsCopy( hb_parc(1), hb_parc(2), &ulWrittenTotal );
hb_fsCopy( hb_parc( 1 ), hb_parc( 2 ), &ulWrittenTotal );
hb_retnl( ulWrittenTotal );
#endif
}
else
{
hb_errRT_BASE( EG_ARG, 2010, NULL, "__COPYFILE" );
}
}

View File

@@ -60,72 +60,77 @@ double hb_secondsToday( void )
#if defined(__TURBOC__) || defined(__BORLANDC__) || defined(__DJGPP__) /* || defined(_MSC_VER) */
struct time t;
gettime( &t );
return( ( ( t.ti_hour * 3600 ) + ( t.ti_min * 60 ) + t.ti_sec ) + (double)t.ti_hund /100 );
return( ( ( t.ti_hour * 3600 ) + ( t.ti_min * 60 ) + t.ti_sec ) + ( double ) t.ti_hund / 100 );
#elif defined(_MSC_VER)
struct _timeb tb;
struct tm *oTime;
_ftime( &tb );
oTime = localtime(&tb.time);
return( ( oTime->tm_hour * 3600 ) +
( oTime->tm_min * 60 ) +
oTime->tm_sec +
( (double) tb.millitm /1000 ) );
oTime = localtime( &tb.time );
return ( oTime->tm_hour * 3600 ) +
( oTime->tm_min * 60 ) +
oTime->tm_sec +
( ( double ) tb.millitm / 1000 );
#else
time_t t;
struct tm *oTime;
time(&t);
oTime = localtime(&t);
return( ( oTime->tm_hour * 3600 ) + ( oTime->tm_min * 60 ) + oTime->tm_sec );
time( &t );
oTime = localtime( &t );
return ( oTime->tm_hour * 3600 ) + ( oTime->tm_min * 60 ) + oTime->tm_sec;
#endif
}
char *hb_cmonth( int month )
char * hb_cmonth( int month )
{
if( month >= 1 && month <= 12 )
return hb_monthsname[ month - 1 ];
return "";
else
return "";
}
char *hb_cdow( int day )
char * hb_cdow( int day )
{
if( day >= 1 && day <= 7 )
return hb_daysname[ day - 1 ];
return "";
else
return "";
}
long hb_dateEncode( long lDay, long lMonth, long lYear )
{
BOOL bValid = FALSE;
long lFactor = ( lMonth < 3 ) ? -1: 0;
long lFactor = ( lMonth < 3 ) ? -1 : 0;
/* Perform date validation */
if (lMonth >= 1 && lMonth <= 12 && lDay >= 1
&& lYear >= 1 && lYear <= 2999)
if( lMonth >= 1 && lMonth <= 12 && lDay >= 1
&& lYear >= 1 && lYear <= 2999 )
{
/* Month, year, and lower day limits are simple,
but upper day limit is dependent upon month and leap year */
int aiDayLimit [12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if( (( lYear % 4 == 0 && lYear % 100 != 0 ) || lYear % 400 == 0 ) )
int aiDayLimit[ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if( ( ( lYear % 4 == 0 && lYear % 100 != 0 ) || lYear % 400 == 0 ) )
aiDayLimit[ 1 ] = 29;
if( lDay <= (long)aiDayLimit[ (int)lMonth - 1 ] ) bValid = TRUE;
if( lDay <= ( long ) aiDayLimit[ ( int ) lMonth - 1 ] )
bValid = TRUE;
}
if( bValid )
return ( 1461 * ( lFactor + 4800 + lYear ) / 4 ) +
( ( lMonth - 2 - ( lFactor * 12 ) ) * 367 ) / 12 -
( 3 * ( ( lYear + 4900 + lFactor ) / 100 ) / 4 ) +
lDay - 32075;
else return ( 0 );
else
return 0;
}
void hb_dateDecode( long julian, long * plDay, long * plMonth, long * plYear )
{
long U, V, W, X;
if( julian > 0 )
{
long U, V, W, X;
julian += 68569;
W = ( julian * 4 ) / 146097;
julian -= ( ( 146097 * W ) + 3 ) / 4;
@@ -133,16 +138,15 @@ void hb_dateDecode( long julian, long * plDay, long * plMonth, long * plYear )
julian -= ( ( 1461 * X ) / 4 ) - 31;
V = 80 * julian / 2447;
U = V / 11;
if( plDay ) * plDay = julian - ( 2447 * V / 80 );
if( plMonth ) * plMonth = V + 2 - ( U * 12 );
if( plYear ) * plYear = X + U + ( W - 49 ) * 100;
if( plDay ) *plDay = julian - ( 2447 * V / 80 );
if( plMonth ) *plMonth = V + 2 - ( U * 12 );
if( plYear ) *plYear = X + U + ( W - 49 ) * 100;
}
else
{
* plDay = 0;
* plMonth = 0;
* plYear = 0;
}
*plDay =
*plMonth =
*plYear = 0;
}
void hb_dateStrPut( char * szDate, long lDay, long lMonth, long lYear )
@@ -169,218 +173,244 @@ void hb_dateStrGet( const char * szDate, long * plDay, long * plMonth, long * pl
*plYear = ( ( szDate[ 0 ] - '0' ) * 1000 ) + ( ( szDate[ 1 ] - '0' ) * 100 ) +
( ( szDate[ 2 ] - '0' ) * 10 ) + ( szDate[ 3 ] - '0' );
}
else *plDay = *plMonth = *plYear = 0; /* Date string missing or bad length,
so force an empty date */
else
/* Date string missing or bad length, so force an empty date */
*plDay =
*plMonth =
*plYear = 0;
}
HARBOUR HB_CTOD( void )
{
char * szDate = hb_parc( 1 );
int d_value = 0, m_value = 0, y_value = 0;
int d_pos = 0, m_pos = 0, y_pos = 0;
int count, digit, size = strlen (hb_set.HB_SET_DATEFORMAT);
char szDateFormat[ 9 ];
if( szDate )
if( hb_pcount() == 1 )
{
for( count = 0; count < size; count++)
char * szDate = hb_parc( 1 );
int d_value = 0, m_value = 0, y_value = 0;
char szDateFormat[ 9 ];
if( szDate )
{
switch (hb_set.HB_SET_DATEFORMAT [count])
int d_pos = 0, m_pos = 0, y_pos = 0;
int count, digit, size = strlen( hb_set.HB_SET_DATEFORMAT );
for( count = 0; count < size; count++)
{
case 'D':
case 'd':
if (d_pos == 0)
{
if (m_pos == 0 && y_pos == 0) d_pos = 1;
else if (m_pos == 0 || y_pos == 0) d_pos = 2;
else d_pos = 3;
}
break;
case 'M':
case 'm':
if (m_pos == 0)
{
if (d_pos == 0 && y_pos == 0) m_pos = 1;
else if (d_pos == 0 || y_pos == 0) m_pos = 2;
else m_pos = 3;
}
break;
case 'Y':
case 'y':
if (y_pos == 0)
{
if (m_pos == 0 && d_pos == 0) y_pos = 1;
else if (m_pos == 0 || d_pos == 0) y_pos = 2;
else y_pos = 3;
}
}
}
size = strlen (szDate);
for( count = 0; count < size; count++)
{
digit = szDate [count];
if (isdigit (digit))
{
if (d_pos == 1)
switch( hb_set.HB_SET_DATEFORMAT[ count ] )
{
d_value = (d_value * 10) + digit - '0';
}
else if (m_pos == 1)
{
m_value = (m_value * 10) + digit - '0';
}
else if (y_pos == 1)
{
y_value = (y_value * 10) + digit - '0';
case 'D':
case 'd':
if( d_pos == 0 )
{
if( m_pos == 0 && y_pos == 0 ) d_pos = 1;
else if( m_pos == 0 || y_pos == 0 ) d_pos = 2;
else d_pos = 3;
}
break;
case 'M':
case 'm':
if( m_pos == 0 )
{
if( d_pos == 0 && y_pos == 0 ) m_pos = 1;
else if( d_pos == 0 || y_pos == 0 ) m_pos = 2;
else m_pos = 3;
}
break;
case 'Y':
case 'y':
if( y_pos == 0 )
{
if( m_pos == 0 && d_pos == 0 ) y_pos = 1;
else if( m_pos == 0 || d_pos == 0 ) y_pos = 2;
else y_pos = 3;
}
}
}
else if( digit != ' ' )
size = strlen( szDate );
for( count = 0; count < size; count++ )
{
d_pos--;
m_pos--;
y_pos--;
digit = szDate[ count ];
if( isdigit( digit ) )
{
if( d_pos == 1 )
{
d_value = ( d_value * 10 ) + digit - '0';
}
else if( m_pos == 1 )
{
m_value = ( m_value * 10 ) + digit - '0';
}
else if( y_pos == 1 )
{
y_value = ( y_value * 10 ) + digit - '0';
}
}
else if( digit != ' ' )
{
d_pos--;
m_pos--;
y_pos--;
}
}
if( y_value > 0 && y_value < 100 )
{
count = hb_set.HB_SET_EPOCH % 100;
digit = hb_set.HB_SET_EPOCH / 100;
if( y_value >= count )
y_value += ( digit * 100 );
else
y_value += ( ( digit * 100 ) + 100 );
}
}
if (y_value > 0 && y_value < 100)
{
count = hb_set.HB_SET_EPOCH % 100;
digit = hb_set.HB_SET_EPOCH / 100;
if (y_value >= count) y_value += (digit * 100);
else y_value += ((digit * 100) + 100);
}
sprintf( szDateFormat, "%04i%02i%02i", y_value, m_value, d_value );
hb_retds( szDateFormat );
}
sprintf (szDateFormat, "%04i%02i%02i", y_value, m_value, d_value);
hb_retds( szDateFormat );
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "CTOD" ); /* NOTE: Clipper catches this at compile time! */
}
char * hb_dtoc (const char * szDate, char * szFormattedDate, const char * szDateFormat)
char * hb_dtoc( const char * szDate, char * szFormattedDate, const char * szDateFormat )
{
/*
* NOTE: szFormattedDate must point to a buffer of at least 11 bytes.
* szDateFormat must point to a buffer holding the date format to use.
*/
int digit, digit_count, format_count, size;
BOOL used_d, used_m, used_y;
const char *szPtr;
int format_count, digit_count, size;
/*
* Determine the maximum size of the formatted date string
*/
size = strlen (szDateFormat);
if (size > 10) size = 10;
size = strlen( szDateFormat );
if( size > 10 ) size = 10;
if( szDate && szFormattedDate && strlen( szDate ) == 8 ) /* A valid date is always 8 characters */
{
const char *szPtr;
int digit;
BOOL used_d, used_m, used_y;
format_count = 0;
used_d = used_m = used_y = FALSE;
szPtr = szDateFormat;
while (format_count < size)
while( format_count < size )
{
digit = toupper (*szPtr);
digit = toupper( *szPtr );
szPtr++;
digit_count = 1;
while (toupper (*szPtr) == digit && format_count < size)
while( toupper( *szPtr ) == digit && format_count < size )
{
szPtr++;
if (format_count + digit_count < size) digit_count++;
if( format_count + digit_count < size ) digit_count++;
}
switch (digit)
switch( digit )
{
case 'D':
switch (digit_count)
switch( digit_count )
{
case 4:
if (!used_d && format_count < size)
if( ! used_d && format_count < size )
{
szFormattedDate [format_count++] = '0';
szFormattedDate[ format_count++ ] = '0';
digit_count--;
}
case 3:
if (!used_d && format_count < size)
if( ! used_d && format_count < size )
{
szFormattedDate [format_count++] = '0';
szFormattedDate[ format_count++ ] = '0';
digit_count--;
}
case 2:
if (!used_d && format_count < size)
if( ! used_d && format_count < size )
{
szFormattedDate [format_count++] = szDate [6];
szFormattedDate[ format_count++ ] = szDate[ 6 ];
digit_count--;
}
default:
if (!used_d && format_count < size)
if( ! used_d && format_count < size )
{
szFormattedDate [format_count++] = szDate [7];
szFormattedDate[ format_count++ ] = szDate[ 7 ];
digit_count--;
}
while (digit_count-- > 0 && format_count < size) szFormattedDate [format_count++] = digit;
while( digit_count-- > 0 && format_count < size ) szFormattedDate[ format_count++ ] = digit;
}
used_d = TRUE;
break;
case 'M':
switch (digit_count)
switch ( digit_count )
{
case 4:
if (!used_m && format_count < size)
if( ! used_m && format_count < size )
{
szFormattedDate [format_count++] = '0';
szFormattedDate[ format_count++ ] = '0';
digit_count--;
}
case 3:
if (!used_m && format_count < size)
if( ! used_m && format_count < size )
{
szFormattedDate [format_count++] = '0';
szFormattedDate[ format_count++ ] = '0';
digit_count--;
}
case 2:
if (!used_m && format_count < size)
if( ! used_m && format_count < size )
{
szFormattedDate [format_count++] = szDate [4];
szFormattedDate[ format_count++ ] = szDate[ 4 ];
digit_count--;
}
default:
if (!used_m && format_count < size)
if( ! used_m && format_count < size )
{
szFormattedDate [format_count++] = szDate [5];
szFormattedDate[ format_count++ ] = szDate[ 5 ];
digit_count--;
}
while (digit_count-- > 0 && format_count < size) szFormattedDate [format_count++] = digit;
while( digit_count-- > 0 && format_count < size ) szFormattedDate[ format_count++ ] = digit;
}
used_m = TRUE;
break;
case 'Y':
switch (digit_count)
switch( digit_count )
{
case 4:
if (!used_y && format_count < size)
if( ! used_y && format_count < size )
{
szFormattedDate [format_count++] = szDate [0];
szFormattedDate[ format_count++ ] = szDate[ 0 ];
digit_count--;
}
case 3:
if (!used_y && format_count < size)
if( ! used_y && format_count < size )
{
szFormattedDate [format_count++] = szDate [1];
szFormattedDate[ format_count++ ] = szDate[ 1 ];
digit_count--;
}
case 2:
if (!used_y && format_count < size)
if( ! used_y && format_count < size )
{
szFormattedDate [format_count++] = szDate [2];
szFormattedDate[ format_count++ ] = szDate[ 2 ];
digit_count--;
}
default:
if (!used_y && format_count < size)
if( ! used_y && format_count < size )
{
szFormattedDate [format_count++] = szDate [3];
szFormattedDate[ format_count++ ] = szDate[ 3 ];
digit_count--;
}
while (digit_count-- > 0 && format_count < size) szFormattedDate [format_count++] = digit;
while( digit_count-- > 0 && format_count < size ) szFormattedDate[ format_count++ ] = digit;
}
used_y = TRUE;
break;
default:
while (digit_count-- > 0 && format_count < size) szFormattedDate [format_count++] = digit;
while( digit_count-- > 0 && format_count < size ) szFormattedDate[ format_count++ ] = digit;
}
}
}
@@ -389,8 +419,9 @@ char * hb_dtoc (const char * szDate, char * szFormattedDate, const char * szDate
/* Not a valid date string, so return a blank date with separators */
format_count = size; /* size is either 8 or 10 */
strncpy( szFormattedDate, szDateFormat, size );
for (digit_count = 0; digit_count < size; digit_count++)
switch (szFormattedDate [digit_count])
for( digit_count = 0; digit_count < size; digit_count++ )
switch( szFormattedDate[ digit_count ] )
{
case 'D':
case 'd':
@@ -398,18 +429,26 @@ char * hb_dtoc (const char * szDate, char * szFormattedDate, const char * szDate
case 'm':
case 'Y':
case 'y':
szFormattedDate [digit_count] = ' ';
szFormattedDate[ digit_count ] = ' ';
}
}
szFormattedDate [format_count] = 0;
return (szFormattedDate);
szFormattedDate[ format_count ] = '\0';
return szFormattedDate;
}
HARBOUR HB_DTOC( void )
{
char * szDate = hb_pards( 1 );
char szFormatted[ 11 ];
hb_retc( hb_dtoc( szDate, szFormatted, hb_set.HB_SET_DATEFORMAT ) );
if( hb_pcount() == 1 )
{
char * szDate = hb_pards( 1 );
char szFormatted[ 11 ];
hb_retc( hb_dtoc( szDate, szFormatted, hb_set.HB_SET_DATEFORMAT ) );
}
else
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "DTOC" ); /* NOTE: Clipper catches this at compile time! */
}
/* QUESTION: Should we drop error checkings to make it faster ? */
@@ -428,105 +467,111 @@ HARBOUR HB_DTOS( void )
#ifndef HB_OPTIMIZE_DTOS
}
else
{
hb_errRT_BASE(EG_ARG, 1120, NULL, "DTOS");
}
hb_errRT_BASE( EG_ARG, 1120, NULL, "DTOS" );
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE(EG_ARGCOUNT, 3000, NULL, "DTOS");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "DTOS" ); /* NOTE: Clipper catches this at compile time! */
#endif
}
/* NOTE: XBase++ checks for the parameter count at compile time */
HARBOUR HB_STOD( void )
{
hb_retds( hb_parc(1) );
hb_retds( hb_parc( 1 ) );
}
HARBOUR HB_DAY( void )
{
PHB_ITEM pDate = hb_param( 1, IT_DATE );
long lDay, lMonth, lYear;
if( pDate )
if( hb_pcount() == 1 )
{
PHB_ITEM pReturn = hb_itemNew( NULL );
PHB_ITEM pDate = hb_param( 1, IT_DATE );
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
if( pDate )
{
PHB_ITEM pReturn = hb_itemNew( NULL );
long lDay, lMonth, lYear;
pReturn->type = IT_LONG;
pReturn->item.asLong.value =lDay;
pReturn->item.asLong.length =3;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
pReturn->type = IT_LONG;
pReturn->item.asLong.value = lDay;
pReturn->item.asLong.length = 3;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
/*
hb_retni( lDay );
hb_retni( lDay );
* It is dangerous to manipulate the stack return value directly!
stack.Return.item.asInteger.length = 3;
stack.Return.item.asInteger.length = 3;
*/
}
else
hb_errRT_BASE( EG_ARG, 1114, NULL, "DAY" );
}
else
{
hb_errRT_BASE(EG_ARG, 1114, NULL, "DAY");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "DAY" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_MONTH( void )
{
PHB_ITEM pDate = hb_param( 1, IT_DATE );
long lDay, lMonth, lYear;
if( pDate )
if( hb_pcount() == 1 )
{
PHB_ITEM pReturn = hb_itemNew( NULL );
PHB_ITEM pDate = hb_param( 1, IT_DATE );
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
if( pDate )
{
PHB_ITEM pReturn = hb_itemNew( NULL );
long lDay, lMonth, lYear;
pReturn->type = IT_LONG;
pReturn->item.asLong.value =lMonth;
pReturn->item.asLong.length =3;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
pReturn->type = IT_LONG;
pReturn->item.asLong.value = lMonth;
pReturn->item.asLong.length = 3;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
/*
hb_retni( lMonth );
hb_retni( lMonth );
* It is dangerous to manipulate the stack return value directly!
stack.Return.item.asInteger.length = 3;
stack.Return.item.asInteger.length = 3;
*/
}
else
hb_errRT_BASE( EG_ARG, 1113, NULL, "MONTH" );
}
else
{
hb_errRT_BASE(EG_ARG, 1113, NULL, "MONTH");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "MONTH" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_YEAR( void )
{
PHB_ITEM pDate = hb_param( 1, IT_DATE );
long lDay, lMonth, lYear;
if( pDate )
if( hb_pcount() == 1 )
{
PHB_ITEM pReturn = hb_itemNew( NULL );
PHB_ITEM pDate = hb_param( 1, IT_DATE );
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
if( pDate )
{
PHB_ITEM pReturn = hb_itemNew( NULL );
long lDay, lMonth, lYear;
pReturn->type = IT_LONG;
pReturn->item.asLong.value =lYear;
pReturn->item.asLong.length =5;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
pReturn->type = IT_LONG;
pReturn->item.asLong.value = lYear;
pReturn->item.asLong.length = 5;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
/*
hb_retni( lYear );
hb_retni( lYear );
* It is dangerous to manipulate the stack return value directly!
stack.Return.item.asInteger.length = 5;
stack.Return.item.asInteger.length = 5;
*/
}
else
hb_errRT_BASE( EG_ARG, 1112, NULL, "YEAR" );
}
else
{
hb_errRT_BASE(EG_ARG, 1112, NULL, "YEAR");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "YEAR" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_TIME( void )
@@ -534,18 +579,16 @@ HARBOUR HB_TIME( void )
if( hb_pcount() == 0 )
{
time_t t;
struct tm *oTime;
char szTime[9];
struct tm * oTime;
char szTime[ 9 ];
time(&t);
oTime = localtime(&t);
sprintf(szTime, "%02d:%02d:%02d", oTime->tm_hour, oTime->tm_min, oTime->tm_sec);
hb_retclen(szTime, 8);
time( &t );
oTime = localtime( &t );
sprintf( szTime, "%02d:%02d:%02d", oTime->tm_hour, oTime->tm_min, oTime->tm_sec );
hb_retclen( szTime, 8 );
}
else
{
hb_errRT_BASE(EG_ARGCOUNT, 3000, NULL, "TIME");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "TIME" );
}
HARBOUR HB_DATE( void )
@@ -553,28 +596,25 @@ HARBOUR HB_DATE( void )
if( hb_pcount() == 0 )
{
time_t t;
struct tm *oTime;
char szTime[9];
struct tm * oTime;
char szTime[ 9 ];
time(&t);
oTime = localtime(&t);
sprintf(szTime, "%04d%02d%02d", oTime->tm_year + 1900, oTime->tm_mon + 1, oTime->tm_mday);
hb_retds(szTime);
time( &t );
oTime = localtime( &t );
sprintf( szTime, "%04d%02d%02d", oTime->tm_year + 1900, oTime->tm_mon + 1, oTime->tm_mday );
hb_retds( szTime );
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE(EG_ARGCOUNT, 3000, NULL, "DATE");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "DATE" ); /* NOTE: Clipper catches this at compile time! */
}
long hb_dow( long d, long m, long y )
{
if( m < 3 )
{
m += 13;
y--;
}
{
m += 13;
y--;
}
else
m++;
@@ -583,86 +623,82 @@ long hb_dow( long d, long m, long y )
HARBOUR HB_DOW( void )
{
PHB_ITEM pDate = hb_param( 1, IT_DATE );
long lDay, lMonth, lYear;
if( pDate )
if( hb_pcount() == 1 )
{
PHB_ITEM pReturn = hb_itemNew( NULL );
PHB_ITEM pDate = hb_param( 1, IT_DATE );
pReturn->type = IT_LONG;
if( pDate->item.asDate.value )
if( pDate )
{
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
pReturn->item.asLong.value =hb_dow( lDay, lMonth, lYear );
/* hb_retni( hb_dow( lDay, lMonth, lYear ) );
*/
PHB_ITEM pReturn = hb_itemNew( NULL );
pReturn->type = IT_LONG;
if( pDate->item.asDate.value )
{
long lDay, lMonth, lYear;
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
pReturn->item.asLong.value = hb_dow( lDay, lMonth, lYear );
/* hb_retni( hb_dow( lDay, lMonth, lYear ) );
*/
}
else
pReturn->item.asLong.value = 0;
/* hb_retni( 0 );
*/
pReturn->item.asLong.length = 3;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
/*
stack.Return.item.asInteger.length = 3;
*/
}
else
pReturn->item.asLong.value =0;
/* hb_retni( 0 );
*/
pReturn->item.asLong.length =3;
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
/*
stack.Return.item.asInteger.length = 3;
*/
hb_errRT_BASE( EG_ARG, 1115, NULL, "DOW" );
}
else
{
hb_errRT_BASE(EG_ARG, 1115, NULL, "DOW");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "DOW" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_CMONTH( void )
{
PHB_ITEM pDate = hb_param( 1, IT_DATE );
long lDay, lMonth, lYear;
if( hb_pcount() )
if( hb_pcount() == 1 )
{
if( pDate )
{
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
hb_retc( hb_cmonth( lMonth ) );
}
else
{
hb_errRT_BASE(EG_ARG, 1116, NULL, "CMONTH");
}
PHB_ITEM pDate = hb_param( 1, IT_DATE );
if( pDate )
{
long lDay, lMonth, lYear;
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
hb_retc( hb_cmonth( lMonth ) );
}
else
hb_errRT_BASE( EG_ARG, 1116, NULL, "CMONTH" );
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE(EG_ARGCOUNT, 3000, NULL, "CMONTH");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "CMONTH" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_CDOW( void )
{
PHB_ITEM pDate = hb_param( 1, IT_DATE );
long lDay, lMonth, lYear;
if( hb_pcount() )
if( hb_pcount() == 1 )
{
PHB_ITEM pDate = hb_param( 1, IT_DATE );
if( pDate )
{
long lDay, lMonth, lYear;
hb_dateDecode( pDate->item.asDate.value, &lDay, &lMonth, &lYear );
hb_retc( hb_cdow( hb_dow( lDay, lMonth, lYear ) ) );
}
else
{
hb_errRT_BASE(EG_ARG, 1117, NULL, "CDOW");
}
hb_errRT_BASE( EG_ARG, 1117, NULL, "CDOW" );
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE(EG_ARGCOUNT, 3000, NULL, "CDOW");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "CDOW" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_SECONDS( void )
@@ -670,8 +706,5 @@ HARBOUR HB_SECONDS( void )
if( hb_pcount() == 0 )
hb_retnd( hb_secondsToday() );
else
{
/* QUESTION: Clipper catches this at compile time! */
hb_errRT_BASE(EG_ARGCOUNT, 3000, NULL, "SECONDS");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "SECONDS" ); /* NOTE: Clipper catches this at compile time! */
}

View File

@@ -80,38 +80,35 @@ char * hb_strDescend( char * szText, ULONG ulLen )
HARBOUR HB_DESCEND( void )
{
if( hb_pcount() == 1 )
PHB_ITEM pItem = hb_param( 1, IT_ANY );
if( pItem )
{
PHB_ITEM pItem = hb_param( 1, IT_ANY );
if( pItem )
if( IS_STRING( pItem ) )
hb_retclen( hb_strDescend( pItem->item.asString.value, pItem->item.asString.length ), pItem->item.asString.length );
else if( IS_DATE( pItem ) )
hb_retnl( 5231808 - pItem->item.asDate.value );
else if( IS_NUMERIC( pItem ) )
{
if( IS_STRING( pItem ) )
hb_retclen( hb_strDescend( pItem->item.asString.value, pItem->item.asString.length ), pItem->item.asString.length );
else if( IS_DATE( pItem ) )
hb_retnl( 5231808 - pItem->item.asDate.value );
else if( IS_NUMERIC( pItem ) )
{
PHB_ITEM pReturn;
double dValue;
PHB_ITEM pReturn;
double dValue;
if( IS_DOUBLE( pItem ) )
dValue = pItem->item.asDouble.value;
else if( IS_INTEGER( pItem ) )
dValue = ( double ) pItem->item.asInteger.value;
else if( IS_LONG( pItem ) )
dValue = ( double ) pItem->item.asLong.value;
if( IS_DOUBLE( pItem ) )
dValue = pItem->item.asDouble.value;
else if( IS_INTEGER( pItem ) )
dValue = ( double ) pItem->item.asInteger.value;
else if( IS_LONG( pItem ) )
dValue = ( double ) pItem->item.asLong.value;
pReturn = hb_itemPutND( NULL, -1 * dValue );
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
pReturn = hb_itemPutND( NULL, -1 * dValue );
hb_itemReturn( pReturn );
hb_itemRelease( pReturn );
/* It is dangerous to operate on the stack directly
stack.Return.wDec = pItem->wDec;
stack.Return.wDec = pItem->wDec;
*/
}
else if( IS_LOGICAL( pItem ) )
hb_retl( ! pItem->item.asLogical.value );
}
else if( IS_LOGICAL( pItem ) )
hb_retl( ! pItem->item.asLogical.value );
}
}

View File

@@ -2,7 +2,7 @@
* $Id$
*/
/* NOTE: In DOS/DJGPP under WinNT4 hb_fsSeek( fhnd, offset < 0, FS_SET) will
/* NOTE: In DOS/DJGPP under WinNT4 hb_fsSeek( fhnd, offset < 0, FS_SET) will
set the file pointer to the passed negative value, and the subsequent
hb_fsWrite() call will fail. In CA-Clipper hb_fsSeek() will fail,
the pointer will not be moved, and thus the hb_fsWrite() call will
@@ -698,7 +698,7 @@ HARBOUR HB_FOPEN( void )
{
if( ISCHAR( 1 ) )
{
hb_retni( hb_fsOpen( ( BYTE * ) hb_parc( 1 ),
hb_retni( hb_fsOpen( ( BYTE * ) hb_parc( 1 ),
ISNUM( 2 ) ? hb_parni( 2 ) : FO_READ ) );
}
else
@@ -713,7 +713,7 @@ HARBOUR HB_FCREATE( void )
FHANDLE hFileHandle;
if( ISCHAR( 1 ) )
hFileHandle = hb_fsCreate( ( BYTE * ) hb_parc( 1 ),
hFileHandle = hb_fsCreate( ( BYTE * ) hb_parc( 1 ),
ISNUM( 2 ) ? hb_parni( 2 ) : FC_NORMAL );
else
hFileHandle = FS_ERROR;
@@ -756,8 +756,8 @@ HARBOUR HB_FWRITE( void )
ULONG ulWritten;
if( ISNUM( 1 ) && ISCHAR( 2 ) )
ulWritten = hb_fsWrite( hb_parni( 1 ),
( BYTE * ) hb_parc( 2 ),
ulWritten = hb_fsWrite( hb_parni( 1 ),
( BYTE * ) hb_parc( 2 ),
ISNUM( 3 ) ? hb_parnl( 3 ) : hb_parclen( 2 ) );
else
ulWritten = 0;
@@ -797,7 +797,7 @@ HARBOUR HB_FRENAME( void )
{
if( ISCHAR( 1 ) && ISCHAR( 2 ) )
{
hb_fsRename( ( BYTE * ) hb_parc( 1 ),
hb_fsRename( ( BYTE * ) hb_parc( 1 ),
( BYTE * ) hb_parc( 2 ) );
}
@@ -809,8 +809,8 @@ HARBOUR HB_FSEEK( void )
ULONG ulPos;
if( ISNUM( 1 ) && ISNUM( 2 ) )
ulPos = hb_fsSeek( hb_parni( 1 ),
hb_parnl( 2 ),
ulPos = hb_fsSeek( hb_parni( 1 ),
hb_parnl( 2 ),
ISNUM( 3 ) ? hb_parni( 3 ) : FS_SET );
else
ulPos = 0;
@@ -820,39 +820,44 @@ HARBOUR HB_FSEEK( void )
HARBOUR HB_FILE( void )
{
if( ISCHAR( 1 ) )
if( hb_pcount() == 1 )
{
if( ISCHAR( 1 ) )
{
/* TODO: Check if F_OK is defined in all compilers */
#ifdef OS_UNIX_COMPATIBLE
hb_retl( access( hb_parc( 1 ), F_OK ) == 0 );
hb_retl( access( hb_parc( 1 ), F_OK ) == 0 );
#else
#ifdef __MPW__
int hFileHandle;
int hFileHandle;
if( ( hFileHandle = open( hb_parc( 1 ), O_RDONLY ) ) >= 0 )
{
close( hFileHandle );
hb_retl( TRUE );
}
else
hb_retl( FALSE );
if( ( hFileHandle = open( hb_parc( 1 ), O_RDONLY ) ) >= 0 )
{
close( hFileHandle );
hb_retl( TRUE );
}
else
hb_retl( FALSE );
#else
hb_retl( access( hb_parc( 1 ), 0 ) == 0 );
hb_retl( access( hb_parc( 1 ), 0 ) == 0 );
#endif
#endif
}
else
hb_retl( FALSE );
}
else
hb_retl( FALSE );
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "FILE" ); /* NOTE: Clipper catches this at compile time! */
}
HARBOUR HB_FREADSTR( void )
@@ -887,7 +892,7 @@ HARBOUR HB_FREADSTR( void )
HARBOUR HB_CURDIR( void )
{
hb_retc( ( char * ) hb_fsCurDir( ( ISCHAR( 1 ) && hb_parclen( 1 ) > 0 ) ?
hb_retc( ( char * ) hb_fsCurDir( ( ISCHAR( 1 ) && hb_parclen( 1 ) > 0 ) ?
( USHORT )( toupper( *hb_parc( 1 ) ) - 'A' + 1 ) : 0 ) );
}

View File

@@ -64,19 +64,19 @@
#include "extend.h"
#define CHR_HARD1 ((char)13)
#define CHR_HARD1 ( ( char ) 13 )
#define CHR_SOFT1 ((char)141)
#define CHR_SOFT2 ((char)10)
#define CHR_SOFT1 ( ( char ) 141 )
#define CHR_SOFT2 ( ( char ) 10 )
char * hb_strHardCR( char * pszString, ULONG ulStringLen )
{
ULONG ulStringPos;
for ( ulStringPos = 0; ulStringPos < ulStringLen; ulStringPos++ )
for( ulStringPos = 0; ulStringPos < ulStringLen; ulStringPos++ )
{
if ( pszString[ ulStringPos ] == CHR_SOFT1 &&
pszString[ ulStringPos + 1 ] == CHR_SOFT2 )
if( pszString[ ulStringPos ] == CHR_SOFT1 &&
pszString[ ulStringPos + 1 ] == CHR_SOFT2 )
{
pszString[ ulStringPos ] = CHR_HARD1;
}
@@ -87,7 +87,7 @@ char * hb_strHardCR( char * pszString, ULONG ulStringLen )
HARBOUR HB_HARDCR( void )
{
if ( ISCHAR( 1 ) )
if( ISCHAR( 1 ) )
{
ULONG ulStringLen = hb_parclen( 1 );

View File

@@ -39,6 +39,7 @@ BOOL hb_evalNew( PEVALINFO pEvalInfo, PHB_ITEM pItem )
pEvalInfo->pItems[ 0 ] = pItem;
bResult = TRUE;
}
return bResult;
}
@@ -54,13 +55,14 @@ BOOL hb_evalPutParam( PEVALINFO pEvalInfo, PHB_ITEM pItem )
{
if( ! pEvalInfo->pItems[ w ] )
{
pEvalInfo->pItems[ w ] = hb_itemNew( 0 );
pEvalInfo->pItems[ w ] = hb_itemNew( NULL );
hb_itemCopy( pEvalInfo->pItems[ w ], pItem );
bResult = TRUE;
break;
}
}
}
return bResult;
}
@@ -74,14 +76,16 @@ BOOL hb_evalRelease( PEVALINFO pEvalInfo )
for( w = 0; w < HB_EVAL_PARAM_MAX_ + 1; w++ )
hb_itemRelease( pEvalInfo->pItems[ w ] );
bResult = TRUE;
}
return bResult;
}
PHB_ITEM hb_evalLaunch( PEVALINFO pEvalInfo )
{
PHB_ITEM pResult = 0;
PHB_ITEM pResult = NULL;
if( pEvalInfo )
{
@@ -91,23 +95,26 @@ PHB_ITEM hb_evalLaunch( PEVALINFO pEvalInfo )
{
hb_vmPushSymbol( hb_dynsymGet( hb_itemGetC( pEvalInfo->pItems[ 0 ] ) )->pSymbol );
hb_vmPushNil();
while( w < (HB_EVAL_PARAM_MAX_ + 1) && pEvalInfo->pItems[ w ] )
while( w < ( HB_EVAL_PARAM_MAX_ + 1 ) && pEvalInfo->pItems[ w ] )
hb_vmPush( pEvalInfo->pItems[ w++ ] );
hb_vmDo( w - 1 );
pResult = hb_itemNew( 0 );
pResult = hb_itemNew( NULL );
hb_itemCopy( pResult, &stack.Return );
}
else if( IS_BLOCK( pEvalInfo->pItems[ 0 ] ) )
{
hb_vmPushSymbol( &symEval );
hb_vmPush( pEvalInfo->pItems[ 0 ] );
while( w < (HB_EVAL_PARAM_MAX_ + 1) && pEvalInfo->pItems[ w ] )
while( w < ( HB_EVAL_PARAM_MAX_ + 1 ) && pEvalInfo->pItems[ w ] )
hb_vmPush( pEvalInfo->pItems[ w++ ] );
hb_vmDo( w - 1 );
pResult = hb_itemNew( 0 );
pResult = hb_itemNew( NULL );
hb_itemCopy( pResult, &stack.Return );
}
}
return pResult;
}
@@ -125,10 +132,10 @@ PHB_ITEM hb_itemNew( PHB_ITEM pNull )
PHB_ITEM hb_itemParam( WORD wParam )
{
PHB_ITEM pNew = hb_itemNew( 0 );
PHB_ITEM pNew = hb_itemNew( NULL );
if( hb_param( wParam, IT_ANY ) )
hb_itemCopy(pNew, hb_param( wParam, IT_ANY ));
hb_itemCopy( pNew, hb_param( wParam, IT_ANY ));
return pNew;
}
@@ -139,34 +146,36 @@ BOOL hb_itemRelease( PHB_ITEM pItem )
if( pItem )
{
hb_itemClear(pItem);
hb_itemClear( pItem );
hb_xfree( pItem );
bResult = TRUE;
}
return bResult;
}
PHB_ITEM hb_itemArrayNew( ULONG ulLen )
{
PHB_ITEM pItem = hb_itemNew(0);
PHB_ITEM pItem = hb_itemNew( NULL );
hb_arrayNew(pItem, ulLen);
hb_arrayNew( pItem, ulLen );
return pItem;
}
PHB_ITEM hb_itemArrayGet( PHB_ITEM pArray, ULONG ulIndex )
{
PHB_ITEM pItem = hb_itemNew(0);
PHB_ITEM pItem = hb_itemNew( NULL );
hb_arrayGet(pArray, ulIndex, pItem);
hb_arrayGet( pArray, ulIndex, pItem );
return pItem;
}
PHB_ITEM hb_itemArrayPut( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem )
{
hb_arraySet(pArray, ulIndex, pItem);
hb_arraySet( pArray, ulIndex, pItem );
return pArray;
}
@@ -175,12 +184,13 @@ PHB_ITEM hb_itemPutC( PHB_ITEM pItem, char * szText )
if( pItem )
hb_itemClear( pItem );
else
pItem = hb_itemNew(0);
pItem = hb_itemNew( NULL );
pItem->type = IT_STRING;
pItem->item.asString.length = strlen( szText );
pItem->item.asString.value = ( char * ) hb_xgrab( pItem->item.asString.length + 1 );
strcpy( pItem->item.asString.value, szText );
return pItem;
}
@@ -189,24 +199,24 @@ PHB_ITEM hb_itemPutCL( PHB_ITEM pItem, char * nszText, ULONG ulLen )
if( pItem )
hb_itemClear( pItem );
else
pItem = hb_itemNew(0);
pItem = hb_itemNew( NULL );
pItem->type = IT_STRING;
pItem->item.asString.length = ulLen;
pItem->item.asString.value = ( char * ) hb_xgrab( ulLen + 1 );
memcpy( pItem->item.asString.value, nszText, ulLen );
pItem->item.asString.value[ ulLen ] = 0;
pItem->item.asString.value[ ulLen ] = '\0';
return pItem;
}
char *hb_itemGetC( PHB_ITEM pItem )
char * hb_itemGetC( PHB_ITEM pItem )
{
if( pItem && IS_STRING( pItem ) )
{
char *szResult = (char *) hb_xgrab(pItem->item.asString.length + 1);
memcpy(szResult, pItem->item.asString.value, pItem->item.asString.length);
szResult[ pItem->item.asString.length ] = 0;
char * szResult = ( char * ) hb_xgrab( pItem->item.asString.length + 1 );
memcpy( szResult, pItem->item.asString.value, pItem->item.asString.length );
szResult[ pItem->item.asString.length ] = '\0';
return szResult;
}
@@ -214,14 +224,15 @@ char *hb_itemGetC( PHB_ITEM pItem )
return NULL;
}
ULONG hb_itemCopyC( PHB_ITEM pItem, char *szBuffer, ULONG ulLen )
ULONG hb_itemCopyC( PHB_ITEM pItem, char * szBuffer, ULONG ulLen )
{
if( pItem && IS_STRING(pItem) )
if( pItem && IS_STRING( pItem ) )
{
if( !ulLen )
if( ulLen == 0 )
ulLen = pItem->item.asString.length;
memcpy(szBuffer, pItem->item.asString.value, ulLen);
memcpy( szBuffer, pItem->item.asString.value, ulLen );
return ulLen;
}
else
@@ -234,15 +245,16 @@ BOOL hb_itemFreeC( char *szText )
if( szText )
{
hb_xfree(szText);
hb_xfree( szText );
bResult = TRUE;
}
return bResult;
}
char *hb_itemGetDS( PHB_ITEM pItem, char *szDate )
{
if( pItem && IS_DATE(pItem) )
if( pItem && IS_DATE( pItem ) )
{
long lDay, lMonth, lYear;
@@ -259,12 +271,18 @@ char *hb_itemGetDS( PHB_ITEM pItem, char *szDate )
BOOL hb_itemGetL( PHB_ITEM pItem )
{
if( pItem && IS_LOGICAL(pItem) )
if( pItem )
{
return pItem->item.asLogical.value;
switch( pItem->type )
{
case IT_LOGICAL: return pItem->item.asLogical.value;
case IT_INTEGER: return pItem->item.asInteger.value != 0;
case IT_LONG: return pItem->item.asLong.value != 0;
case IT_DOUBLE: return pItem->item.asDouble.value != 0.0;
}
}
else
return FALSE;
return FALSE;
}
double hb_itemGetND( PHB_ITEM pItem )
@@ -273,14 +291,13 @@ double hb_itemGetND( PHB_ITEM pItem )
{
switch( pItem->type )
{
case IT_INTEGER: return pItem->item.asInteger.value;
case IT_DOUBLE: return pItem->item.asDouble.value;
case IT_LONG: return pItem->item.asLong.value;
default: return 0;
case IT_INTEGER: return ( double ) pItem->item.asInteger.value;
case IT_LONG: return ( double ) pItem->item.asLong.value;
}
}
else
return 0;
return 0;
}
long hb_itemGetNL( PHB_ITEM pItem )
@@ -289,20 +306,20 @@ long hb_itemGetNL( PHB_ITEM pItem )
{
switch( pItem->type )
{
case IT_INTEGER: return pItem->item.asInteger.value;
case IT_DOUBLE: return pItem->item.asDouble.value;
case IT_LONG: return pItem->item.asLong.value;
default: return 0;
case IT_INTEGER: return ( long ) pItem->item.asInteger.value;
case IT_DOUBLE: return ( long ) pItem->item.asDouble.value;
case IT_DATE: return pItem->item.asDate.value;
}
}
else
return 0;
return 0;
}
PHB_ITEM hb_itemReturn( PHB_ITEM pItem )
{
if( pItem )
hb_itemCopy(&stack.Return, pItem);
hb_itemCopy( &stack.Return, pItem );
return pItem;
}
@@ -314,16 +331,16 @@ PHB_ITEM hb_itemPutDS( PHB_ITEM pItem, char *szDate )
if( pItem )
hb_itemClear( pItem );
else
pItem = hb_itemNew(0);
pItem = hb_itemNew( NULL );
hb_dateStrGet( szDate, &lDay, &lMonth, &lYear );
hb_itemClear( pItem );
pItem->type = IT_DATE;
pItem->type = IT_DATE;
/* QUESTION: Is this ok ? we are going to use a long to store the date */
/* QUESTION: What happens if we use sizeof( LONG ) instead ? */
/* QUESTION: Would it break Clipper language code ? */
pItem->item.asDate.value = hb_dateEncode(lDay, lMonth, lYear);
pItem->item.asDate.value = hb_dateEncode( lDay, lMonth, lYear );
return pItem;
}
@@ -333,10 +350,11 @@ PHB_ITEM hb_itemPutL( PHB_ITEM pItem, BOOL bValue )
if( pItem )
hb_itemClear( pItem );
else
pItem = hb_itemNew(0);
pItem = hb_itemNew( NULL );
pItem->type = IT_LOGICAL;
pItem->item.asLogical.value = bValue;
return pItem;
}
@@ -345,13 +363,14 @@ PHB_ITEM hb_itemPutND( PHB_ITEM pItem, double dNumber )
if( pItem )
hb_itemClear( pItem );
else
pItem = hb_itemNew(0);
pItem = hb_itemNew( NULL );
pItem->type = IT_DOUBLE;
if( dNumber > 10000000000.0 ) pItem->item.asDouble.length = 20;
else pItem->item.asDouble.length = 10;
pItem->item.asDouble.decimal = hb_set.HB_SET_DECIMALS;
pItem->item.asDouble.decimal = hb_set.HB_SET_DECIMALS;
pItem->item.asDouble.value = dNumber;
return pItem;
}
@@ -360,11 +379,12 @@ PHB_ITEM hb_itemPutNL( PHB_ITEM pItem, long lNumber )
if( pItem )
hb_itemClear( pItem );
else
pItem = hb_itemNew(0);
pItem = hb_itemNew( NULL );
pItem->type = IT_LONG;
pItem->item.asLong.length = 10;
pItem->item.asLong.value = lNumber;
return pItem;
}
@@ -374,10 +394,11 @@ ULONG hb_itemSize( PHB_ITEM pItem )
{
switch( pItem->type )
{
case IT_ARRAY: return hb_arrayLen(pItem);
case IT_ARRAY: return hb_arrayLen( pItem );
case IT_STRING: return pItem->item.asString.length;
}
}
return 0;
}
@@ -432,7 +453,7 @@ void hb_itemCopy( PHB_ITEM pDest, PHB_ITEM pSource )
{
pDest->item.asString.value = ( char * ) hb_xgrab( pSource->item.asString.length + 1 );
memcpy( pDest->item.asString.value, pSource->item.asString.value, pSource->item.asString.length );
pDest->item.asString.value[ pSource->item.asString.length ] = 0;
pDest->item.asString.value[ pSource->item.asString.length ] = '\0';
}
else if( IS_ARRAY( pSource ) )
@@ -459,21 +480,21 @@ PHB_ITEM hb_itemUnRef( PHB_ITEM pItem )
{
HB_VALUE_PTR pValue;
pValue = *(pItem->item.asMemvar.itemsbase) + pItem->item.asMemvar.offset +
pItem->item.asMemvar.value;
pValue = *( pItem->item.asMemvar.itemsbase ) + pItem->item.asMemvar.offset +
pItem->item.asMemvar.value;
pItem = &pValue->item;
}
else
{
if( pItem->item.asRefer.value >= 0 )
pItem = *(pItem->item.asRefer.itemsbase) + pItem->item.asRefer.offset +
pItem->item.asRefer.value;
pItem = *( pItem->item.asRefer.itemsbase ) + pItem->item.asRefer.offset +
pItem->item.asRefer.value;
else
{
/* local variable referenced in a codeblock
*/
pItem = hb_codeblockGetRef( *(pItem->item.asRefer.itemsbase) + pItem->item.asRefer.offset,
pItem );
pItem = hb_codeblockGetRef( *( pItem->item.asRefer.itemsbase ) + pItem->item.asRefer.offset,
pItem );
}
}
}
@@ -492,27 +513,29 @@ PHB_ITEM hb_itemUnRef( PHB_ITEM pItem )
/* Check whether two strings are equal (0), smaller (-1), or greater (1) */
int hb_itemStrCmp( PHB_ITEM pFirst, PHB_ITEM pSecond, BOOL bForceExact )
{
char *szFirst = pFirst->item.asString.value;
char *szSecond = pSecond->item.asString.value;
char * szFirst = pFirst->item.asString.value;
char * szSecond = pSecond->item.asString.value;
ULONG lLenFirst = pFirst->item.asString.length;
ULONG lLenSecond = pSecond->item.asString.length;
long lMinLen;
long lCounter;
int iRet = 0; /* Current status */
long lMinLen;
long lCounter;
int iRet = 0; /* Current status */
if (hb_set.HB_SET_EXACT && !bForceExact)
if ( hb_set.HB_SET_EXACT && ! bForceExact )
{ /* SET EXACT ON and not using == */
/* Don't include trailing spaces */
while( lLenFirst > 0 && szFirst[ lLenFirst - 1 ] == ' ') lLenFirst--;
while( lLenSecond > 0 && szSecond[ lLenSecond - 1 ] == ' ') lLenSecond--;
}
lMinLen = lLenFirst < lLenSecond ? lLenFirst : lLenSecond;
if( lMinLen ) /* One of the strings is empty */
{
for( lCounter = 0; lCounter < lMinLen && !iRet; lCounter++ )
{
if( *szFirst != *szSecond ) /* Difference found */
iRet = (*szFirst < *szSecond) ? -1 : 1;
iRet = ( *szFirst < *szSecond ) ? -1 : 1;
else /* TODO : #define some constants*/
{
szFirst++;
@@ -521,9 +544,9 @@ int hb_itemStrCmp( PHB_ITEM pFirst, PHB_ITEM pSecond, BOOL bForceExact )
}
if( hb_set.HB_SET_EXACT || bForceExact || lLenSecond > lCounter )
{ /* Force an exact comparison */
if( !iRet && lLenFirst != lLenSecond )
if( ! iRet && lLenFirst != lLenSecond )
/* If length is different ! */
iRet = (lLenFirst < lLenSecond) ? -1 : 1;
iRet = ( lLenFirst < lLenSecond ) ? -1 : 1;
}
}
else
@@ -531,12 +554,13 @@ int hb_itemStrCmp( PHB_ITEM pFirst, PHB_ITEM pSecond, BOOL bForceExact )
if( lLenFirst != lLenSecond ) /* Both empty ? */
{
if( hb_set.HB_SET_EXACT || bForceExact )
iRet = (lLenFirst < lLenSecond) ? -1 : 1;
iRet = ( lLenFirst < lLenSecond ) ? -1 : 1;
else
iRet = (lLenSecond == 0) ? 0 : -1;
iRet = ( lLenSecond == 0 ) ? 0 : -1;
}
else
iRet = 0; /* Both empty => Equal ! */
}
return(iRet);
return iRet;
}

View File

@@ -67,30 +67,30 @@
#include "extend.h"
#define CHR_HARD1 ((char)13)
#define CHR_HARD2 ((char)10)
#define CHR_HARD1 ( ( char ) 13 )
#define CHR_HARD2 ( ( char ) 10 )
#define CHR_SOFT1 ((char)141)
#define CHR_SOFT2 ((char)10)
#define CHR_SOFT1 ( ( char ) 141 )
#define CHR_SOFT2 ( ( char ) 10 )
/* NOTE: pszResult must have an allocated buffer of at least */
/* ulStringLen */
char * hb_strMemotran( char *pszResult, ULONG *ulResultLen, char *pszString, ULONG ulStringLen, char cHardcr, char cSoftcr )
char * hb_strMemotran( char * pszResult, ULONG * ulResultLen, char * pszString, ULONG ulStringLen, char cHardcr, char cSoftcr )
{
ULONG ulStringPos = 0;
ULONG ulResultPos = 0;
while ( ulStringPos < ulStringLen )
while( ulStringPos < ulStringLen )
{
if ( pszString[ ulStringPos ] == CHR_HARD1 &&
pszString[ ulStringPos + 1 ] == CHR_HARD2 )
if( pszString[ ulStringPos ] == CHR_HARD1 &&
pszString[ ulStringPos + 1 ] == CHR_HARD2 )
{
pszResult[ ulResultPos++ ] = cHardcr;
ulStringPos += 2;
}
else if ( pszString[ ulStringPos ] == CHR_SOFT1 &&
pszString[ ulStringPos + 1 ] == CHR_SOFT2 )
else if( pszString[ ulStringPos ] == CHR_SOFT1 &&
pszString[ ulStringPos + 1 ] == CHR_SOFT2 )
{
pszResult[ ulResultPos++ ] = cSoftcr;
ulStringPos += 2;
@@ -112,7 +112,7 @@ HARBOUR HB_MEMOTRAN( void )
{
if( ISCHAR( 1 ) )
{
char *pszResult = (char *) hb_xgrab ( hb_parclen( 1 ) + 1 );
char * pszResult = ( char * ) hb_xgrab ( hb_parclen( 1 ) + 1 );
char cHardcr = ISCHAR( 2 ) ? *hb_parc( 2 ) : ';';
char cSoftcr = ISCHAR( 3 ) ? *hb_parc( 3 ) : ' ';
ULONG ulResultLen;

View File

@@ -222,15 +222,10 @@ HARBOUR HB_LTRIM( void )
hb_retclen( szText, lLen );
}
else
{
hb_errRT_BASE( EG_ARG, 1101, NULL, "LTRIM" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "LTRIM" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "LTRIM" ); /* NOTE: Clipper catches this at compile time! */
}
/* returns szText and the new length in lLen */
@@ -250,67 +245,64 @@ ULONG hb_strRTrimLen( char *szText, ULONG lLen, BOOL bAnySpace )
return lLen;
}
/* NOTE: The second parameter is a Harbour extension */
/* trims trailing spaces from a string */
/* TEST: QOUT( "rtrim( ' hello world ' ) = '" + rtrim( ' hello world ' ) + "'" ) */
HARBOUR HB_RTRIM( void )
{
if( hb_pcount() > 0 )
if( hb_pcount() >= 1 && hb_pcount() <= 2 )
{
PHB_ITEM pText = hb_param( 1, IT_STRING );
if( pText )
{
BOOL bAnySpace = ( hb_pcount() > 1 ? hb_parl( 2 ) : FALSE );
BOOL bAnySpace = ( ISLOG( 2 ) ? hb_parl( 2 ) : FALSE );
hb_retclen( pText->item.asString.value, hb_strRTrimLen( pText->item.asString.value, pText->item.asString.length, bAnySpace ) );
}
else
{
#ifdef HARBOUR_STRICT_CLIPPER_COMPATIBILITY
/* Clipper doesn't error, but only in RTRIM. TRIM() throws an error, though */
hb_retc( "" );
#else
hb_errRT_BASE( EG_ARG, 1100, NULL, "RTRIM" );
#endif
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "RTRIM" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "RTRIM" ); /* NOTE: Clipper catches this at compile time! */
}
/* NOTE: The second parameter is a Harbour extension */
/* synonymn for RTRIM */
HARBOUR HB_TRIM( void )
{
if( hb_pcount() > 0 )
if( hb_pcount() >= 1 && hb_pcount() <= 2 )
{
PHB_ITEM pText = hb_param( 1, IT_STRING );
if( pText )
{
BOOL bAnySpace = ( hb_pcount() > 1 ? hb_parl( 2 ) : FALSE );
BOOL bAnySpace = ( ISLOG( 2 ) ? hb_parl( 2 ) : FALSE );
hb_retclen( pText->item.asString.value, hb_strRTrimLen( pText->item.asString.value, pText->item.asString.length, bAnySpace ) );
}
else
{
hb_errRT_BASE( EG_ARG, 1100, NULL, "TRIM" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "TRIM" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "TRIM" ); /* NOTE: Clipper catches this at compile time! */
}
/* NOTE: The second parameter is a Harbour extension */
/* trims leading and trailing spaces from a string */
/* TEST: QOUT( "alltrim( ' hello world ' ) = '" + alltrim( ' hello world ' ) + "'" ) */
HARBOUR HB_ALLTRIM( void )
{
if( hb_pcount() > 0 )
if( ISCHAR( 1 ) )
{
char *szText = hb_parc( 1 );
BOOL bAnySpace = ( hb_pcount() > 1 ? hb_parl( 2 ) : FALSE );
BOOL bAnySpace = ( ISLOG( 2 ) ? hb_parl( 2 ) : FALSE );
ULONG lLen;
lLen = hb_strRTrimLen( szText, hb_parclen( 1 ), bAnySpace );
@@ -379,7 +371,7 @@ HARBOUR HB_PADR( void )
char buffer[ 128 ];
char *szText = hb_itemPadConv( hb_param( 1, IT_ANY ), buffer, &ulSize );
if( szText && hb_pcount() > 1 )
if( szText && ISNUM( 2 ) )
{
LONG lLen = hb_parnl( 2 );
@@ -391,7 +383,7 @@ HARBOUR HB_PADR( void )
memcpy( szResult, szText, ( LONG ) ulSize );
cPad = ( hb_pcount() > 2 ? *( hb_parc( 3 ) ) : ' ' );
cPad = ( ISCHAR( 3 ) ? *( hb_parc( 3 ) ) : ' ' );
for( lPos = ( LONG ) ulSize; lPos < lLen; lPos++ )
szResult[ lPos ] = cPad;
@@ -425,7 +417,7 @@ HARBOUR HB_PADL( void )
char buffer[ 128 ];
char * szText = hb_itemPadConv( hb_param( 1, IT_ANY ), buffer, &ulSize );
if( szText && hb_pcount() > 1 )
if( szText && ISNUM( 2 ) )
{
LONG lLen = hb_parnl( 2 );
@@ -437,7 +429,7 @@ HARBOUR HB_PADL( void )
memcpy( szResult + lPos, szText, ( LONG ) ulSize );
cPad = ( hb_pcount() > 2 ? *( hb_parc( 3 ) ) : ' ');
cPad = ( ISCHAR( 3 ) ? *( hb_parc( 3 ) ) : ' ');
for(; lPos > 0; lPos--)
{
@@ -467,7 +459,7 @@ HARBOUR HB_PADC( void )
char buffer[ 128 ];
char *szText = hb_itemPadConv( hb_param( 1, IT_ANY ), buffer, &ulSize );
if( szText && hb_pcount() > 1 )
if( szText && ISNUM( 2 ) )
{
LONG lLen = hb_parnl( 2 );
@@ -479,7 +471,7 @@ HARBOUR HB_PADC( void )
memcpy( szResult + lPos, szText, ( LONG ) ulSize + 1 );
cPad = ( hb_pcount() > 2 ? *hb_parc( 3 ) : ' ' );
cPad = ( ISCHAR( 3 ) ? *hb_parc( 3 ) : ' ' );
for( w = 0; w < lPos; w++ )
szResult[ w ] = cPad;
@@ -537,25 +529,20 @@ ULONG hb_strAt( char *szSub, ULONG ulSubLen, char *szText, ULONG ulLen )
/* TEST: QOUT( "at( 'cde', 'abcdefgfedcba' ) = '" + at( 'cde', 'abcsefgfedcba' ) + "'" ) */
HARBOUR HB_AT( void )
{
PHB_ITEM pSub = hb_param( 1, IT_ANY );
PHB_ITEM pText = hb_param( 2, IT_ANY );
if( pText && pSub )
if( hb_pcount() == 2 )
{
PHB_ITEM pSub = hb_param( 1, IT_STRING );
PHB_ITEM pText = hb_param( 2, IT_STRING );
if( IS_STRING( pText ) && IS_STRING( pSub ) )
{
hb_retnl( hb_strAt( pSub->item.asString.value, pSub->item.asString.length, pText->item.asString.value, pText->item.asString.length ) );
}
else
{
hb_errRT_BASE( EG_ARG, 1108, NULL, "AT" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "AT" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "AT" ); /* NOTE: Clipper catches this at compile time! */
}
/* locates a substring in a string starting at the end */
@@ -567,9 +554,8 @@ HARBOUR HB_RAT( void )
if( ulSubLen )
{
long lPos = hb_parclen( 2 ) - ulSubLen;
if( lPos < 0 )
hb_retni( 0 );
else
if( lPos >= 0 )
{
char *szSub = hb_parc( 1 );
char *szText = hb_parc( 2 );
@@ -581,8 +567,11 @@ HARBOUR HB_RAT( void )
bFound = ( memcmp( szSub, szText + lPos, ulSubLen ) == 0 );
lPos--;
}
hb_retnl( bFound ? lPos + 2 : 0 );
}
else
hb_retni( 0 );
}
else
/* This function never seems to raise an error */
@@ -604,15 +593,10 @@ HARBOUR HB_CHR( void )
hb_retclen( chr, 1 );
}
else
{
hb_errRT_BASE( EG_ARG, 1104, NULL, "CHR" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "CHR" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "CHR" ); /* NOTE: Clipper catches this at compile time! */
}
/* converts a character value to an ASCII code */
@@ -630,15 +614,10 @@ HARBOUR HB_ASC( void )
hb_retni( 0 );
}
else
{
hb_errRT_BASE( EG_ARG, 1107, NULL, "ASC" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "ASC" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "ASC" ); /* NOTE: Clipper catches this at compile time! */
}
/* returns the left-most n characters in string */
@@ -648,73 +627,44 @@ HARBOUR HB_LEFT( void )
{
PHB_ITEM pText = hb_param( 1, IT_STRING );
if( pText )
if( pText && ISNUM( 2 ) )
{
if( ISNUM( 2 ) )
{
LONG lLen = hb_parnl( 2 );
LONG lLen = hb_parnl( 2 );
if( lLen > ( LONG ) pText->item.asString.length )
lLen = ( LONG ) pText->item.asString.length;
if( lLen > ( LONG ) pText->item.asString.length )
lLen = ( LONG ) pText->item.asString.length;
else if( lLen < 0 )
lLen = 0;
else if( lLen < 0 )
lLen = 0;
hb_retclen( pText->item.asString.value, lLen );
}
else
{
hb_errRT_BASE( EG_ARG, 3009, NULL, "LEFT" );
}
hb_retclen( pText->item.asString.value, lLen );
}
else
{
hb_errRT_BASE( EG_ARG, 1124, NULL, "LEFT" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "LEFT" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "LEFT" ); /* NOTE: Clipper catches this at compile time! */
}
/* returns the right-most n characters in string */
HARBOUR HB_RIGHT( void )
{
if( hb_pcount() == 2 )
PHB_ITEM pText = hb_param( 1, IT_STRING );
if( pText && ISNUM( 2 ) )
{
PHB_ITEM pText = hb_param( 1, IT_STRING );
LONG lLen = hb_parnl( 2 );
if( pText )
{
if( ISNUM( 2 ) )
{
LONG lLen = hb_parnl( 2 );
if( lLen > ( LONG ) pText->item.asString.length )
lLen = ( LONG ) pText->item.asString.length;
if( lLen > ( LONG ) pText->item.asString.length )
lLen = ( LONG ) pText->item.asString.length;
else if( lLen < 0 )
lLen = 0;
else if( lLen < 0 )
lLen = 0;
hb_retclen( pText->item.asString.value + pText->item.asString.length - lLen, lLen );
}
else
{
/* Clipper doesn't error */
hb_retc( "" );
}
}
else
{
/* Clipper doesn't error */
hb_retc( "" );
}
hb_retclen( pText->item.asString.value + pText->item.asString.length - lLen, lLen );
}
else
{
/* NOTE: Clipper catches this at compile time! */
/* Clipper doesn't error */
hb_retc( "" );
}
@@ -723,7 +673,7 @@ HARBOUR HB_RIGHT( void )
/* returns l characters from n characters into string */
HARBOUR HB_SUBSTR( void )
{
if( hb_pcount() > 1 && hb_pcount() < 4 )
if( hb_pcount() >= 2 && hb_pcount() <= 3 )
{
PHB_ITEM pText = hb_param( 1, IT_STRING );
@@ -765,15 +715,10 @@ HARBOUR HB_SUBSTR( void )
hb_retc( "" );
}
else
{
hb_errRT_BASE( EG_ARG, 1110, NULL, "SUBSTR" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "SUBSTR" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "SUBSTR" ); /* NOTE: Clipper catches this at compile time! */
}
/* converts szText to lower case. Does not create a new string! */
@@ -801,15 +746,10 @@ HARBOUR HB_LOWER( void )
hb_retclen( hb_strLower( pText->item.asString.value, ulLen ), ulLen );
}
else
{
hb_errRT_BASE( EG_ARG, 1103, NULL, "LOWER" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "LOWER" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "LOWER" ); /* NOTE: Clipper catches this at compile time! */
}
void hb_strupr( char * szText )
@@ -845,15 +785,10 @@ HARBOUR HB_UPPER( void )
hb_retclen( hb_strUpper( pText->item.asString.value, ulLen ), ulLen );
}
else
{
hb_errRT_BASE( EG_ARG, 1102, NULL, "UPPER" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "UPPER" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "UPPER" ); /* NOTE: Clipper catches this at compile time! */
}
/* returns n copies of given string */
@@ -893,15 +828,10 @@ HARBOUR HB_REPLICATE( void )
hb_retc( "" );
}
else
{
hb_errRT_BASE( EG_ARG, 1106, NULL, "REPLICATE" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "REPLICATE" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "REPLICATE" ); /* NOTE: Clipper catches this at compile time! */
}
/* returns n copies of a single space */
@@ -931,15 +861,10 @@ HARBOUR HB_SPACE( void )
hb_retc( "" );
}
else
{
hb_errRT_BASE( EG_ARG, 1105, NULL, "SPACE" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "SPACE" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "SPACE" ); /* NOTE: Clipper catches this at compile time! */
}
/* replaces characters in a string */
@@ -1112,7 +1037,7 @@ HARBOUR HB_STRTRAN( void )
hb_retclen( szText, pText->item.asString.length );
}
else
hb_errRT_BASE( EG_ARG, 3010, NULL, "STRTRAN" );
hb_errRT_BASE( EG_ARG, 1126, NULL, "STRTRAN" );
}
else
hb_errRT_BASE( EG_ARG, 1126, NULL, "STRTRAN" );
@@ -1149,15 +1074,10 @@ HARBOUR HB_VAL( void )
stack.Return.item.asDouble.decimal = nDec;
}
else
{
hb_errRT_BASE( EG_ARG, 1098, NULL, "VAL" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "VAL" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "VAL" ); /* NOTE: Clipper catches this at compile time! */
}
/* converts a numeric to a string with optional width & precision.
@@ -1357,7 +1277,7 @@ char * hb_itemStr( PHB_ITEM pNumber, PHB_ITEM pWidth, PHB_ITEM pDec )
HARBOUR HB_STR( void )
{
if( hb_pcount() > 0 && hb_pcount() < 4 )
if( hb_pcount() >= 1 && hb_pcount() <= 3 )
{
BOOL bValid = TRUE;
PHB_ITEM pNumber = hb_param( 1, IT_NUMERIC );
@@ -1394,15 +1314,10 @@ HARBOUR HB_STR( void )
hb_retc( "" );
}
else
{
hb_errRT_BASE( EG_ARG, 1099, NULL, "STR" );
}
}
else
{
/* NOTE: Clipper catches this at compile time! */
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "STR" );
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "STR" ); /* NOTE: Clipper catches this at compile time! */
}
/* ------------------------------------------------- */
@@ -1479,7 +1394,7 @@ HARBOUR HB_STR( void )
HARBOUR HB_STRZERO( void )
{
if( hb_pcount() > 0 && hb_pcount() < 4 )
if( hb_pcount() >= 1 && hb_pcount() <= 3 )
{
BOOL bValid = TRUE;
PHB_ITEM pNumber = hb_param( 1, IT_NUMERIC );
@@ -1549,9 +1464,7 @@ HARBOUR HB_STRZERO( void )
hb_retc( "" );
}
else
{
hb_errRT_BASE( EG_ARG, 9999, NULL, "STRZERO" );
}
}
}

View File

@@ -374,245 +374,249 @@ static char *DatePicture( char * szDate, WORD wPicFlags, char * szResult )
HARBOUR HB_TRANSFORM( void )
{
PHB_ITEM pExp = hb_param( 1, IT_ANY ); /* Input parameter */
if( ISCHAR( 2 ) && hb_parclen( 2 ) > 0 )
if( hb_pcount() == 2 )
{
PHB_ITEM pPic = hb_param( 2, IT_STRING ); /* Picture string */
PHB_ITEM pExp = hb_param( 1, IT_ANY ); /* Input parameter */
char *szPic = pPic->item.asString.value;
char *szTemp;
char *szResult;
char *szExp;
ULONG ulPic = pPic->item.asString.length;
ULONG ulPicStart = 0; /* Start of template */
ULONG ulExpPos = 0;
ULONG ulResultPos = 0;
ULONG n;
WORD wPicFlags = 0; /* Function flags */
if( *szPic == '@' ) /* Function marker found */
if( ISCHAR( 2 ) && hb_parclen( 2 ) > 0 )
{
wPicFlags = PictFunc( &szPic, &ulPic ); /* Get length of function */
ulPicStart = pPic->item.asString.length - ulPic;
/* Get start of template */
}
PHB_ITEM pPic = hb_param( 2, IT_STRING ); /* Picture string */
switch( pExp->type & ~IT_BYREF )
{
case IT_STRING:
char *szPic = pPic->item.asString.value;
char *szTemp;
char *szResult;
char *szExp;
ULONG ulPic = pPic->item.asString.length;
ULONG ulPicStart = 0; /* Start of template */
ULONG ulExpPos = 0;
ULONG ulResultPos = 0;
ULONG n;
WORD wPicFlags = 0; /* Function flags */
if( *szPic == '@' ) /* Function marker found */
{
szExp = pExp->item.asString.value;
szResult = (char *)hb_xgrab( ( (ulPic-ulPicStart) >
pExp->item.asString.length) ?
(ulPic-ulPicStart) + 64 : pExp->item.asString.length + 64 );
/* Grab enough */
szPic += ulPicStart; /* Skip functions */
wPicFlags = PictFunc( &szPic, &ulPic ); /* Get length of function */
ulPicStart = pPic->item.asString.length - ulPic;
/* Get start of template */
}
if( wPicFlags & PF_UPPER ) /* Function : @! */
switch( pExp->type & ~IT_BYREF )
{
case IT_STRING:
{
szTemp = szExp; /* Convert to upper */
for( n = pExp->item.asString.length; n ; n--)
szExp = pExp->item.asString.value;
szResult = (char *)hb_xgrab( ( (ulPic-ulPicStart) >
pExp->item.asString.length) ?
(ulPic-ulPicStart) + 64 : pExp->item.asString.length + 64 );
/* Grab enough */
szPic += ulPicStart; /* Skip functions */
if( wPicFlags & PF_UPPER ) /* Function : @! */
{
*szTemp = toupper( *szTemp );
szTemp++;
szTemp = szExp; /* Convert to upper */
for( n = pExp->item.asString.length; n ; n--)
{
*szTemp = toupper( *szTemp );
szTemp++;
}
}
if( ulPic ) /* Template string */
{
while( ulPic && ulExpPos < pExp->item.asString.length )
{ /* Analyze picture mask */
switch( *szPic )
{
case '!': /* Upper */
{
szResult[ulResultPos++] = toupper(szExp[ulExpPos++]);
break;
}
case 'L': /* Ignored */
case 'Y':
case '*':
case '$':
case '.':
case ',':
break;
case '#': /* Out the character */
case '9':
case 'A':
case 'N':
case 'X':
case ' ':
{
szResult[ulResultPos++] = szExp[ulExpPos++];
break;
}
default: /* Other choices */
{
szResult[ulResultPos++] = *szPic;
ulExpPos++;
}
}
szPic++;
ulPic--;
}
}
else if( wPicFlags & (PF_UPPER + PF_REMAIN) )
{ /* Without template */
for( n = pExp->item.asString.length; n; n--)
szResult[ulResultPos++] = *szExp++;
}
if( ( wPicFlags & PF_REMAIN ) && ulPic )
{ /* Any chars left */
for( n = ulPic; n; n--)
szResult[ulResultPos++] = *szPic;
/* Export remainder */
}
hb_retclen(szResult, ulResultPos);
hb_xfree(szResult);
break;
}
if( ulPic ) /* Template string */
case IT_LOGICAL:
{
while( ulPic && ulExpPos < pExp->item.asString.length )
{ /* Analyze picture mask */
BOOL bDone = FALSE;
szResult = (char *) hb_xgrab( ulPic + 1 );
/* That's all folks */
szPic += ulPicStart; /* Skip functions */
ulResultPos = 1;
if( ulPic ) /* Template string */
{
switch( *szPic )
{
case '!': /* Upper */
case 'Y': /* Yes/No */
{
szResult[ulResultPos++] = toupper(szExp[ulExpPos++]);
break;
}
case 'L': /* Ignored */
case 'Y':
case '*':
case '$':
case '.':
case ',':
break;
case '#': /* Out the character */
case '9':
case 'A':
case 'N':
case 'X':
case ' ':
{
szResult[ulResultPos++] = szExp[ulExpPos++];
*szResult = pExp->item.asLogical.value ? 'Y' : 'N';
szPic++;
ulPic--;
bDone = TRUE; /* Logical written */
break;
}
default: /* Other choices */
case '#':
case 'L': /* True/False */
{
szResult[ulResultPos++] = *szPic;
ulExpPos++;
*szResult = pExp->item.asLogical.value ? 'T' : 'F';
szPic++;
ulPic--;
bDone = TRUE;
break;
}
default:
{
*szResult = *szPic++;
ulPic--;
}
}
szPic++;
ulPic--;
}
if( ( wPicFlags & PF_REMAIN ) && ulPic )
{ /* Any chars left */
for( n = ulPic; n; n--) /* Copy remainder */
szResult[ulResultPos++] = *szPic++;
if( !bDone ) /* Logical written ? */
szResult[ulResultPos++] = pExp->item.asLogical.value ? 'T' : 'F';
}
hb_retclen( szResult, ulResultPos );
hb_xfree( szResult );
break;
}
else if( wPicFlags & (PF_UPPER + PF_REMAIN) )
{ /* Without template */
for( n = pExp->item.asString.length; n; n--)
szResult[ulResultPos++] = *szExp++;
}
if( ( wPicFlags & PF_REMAIN ) && ulPic )
{ /* Any chars left */
for( n = ulPic; n; n--)
szResult[ulResultPos++] = *szPic;
/* Export remainder */
}
hb_retclen(szResult, ulResultPos);
hb_xfree(szResult);
break;
}
case IT_LOGICAL:
{
BOOL bDone = FALSE;
szResult = (char *) hb_xgrab( ulPic + 1 );
/* That's all folks */
szPic += ulPicStart; /* Skip functions */
ulResultPos = 1;
if( ulPic ) /* Template string */
case IT_INTEGER:
{
switch( *szPic )
{
case 'Y': /* Yes/No */
{
*szResult = pExp->item.asLogical.value ? 'Y' : 'N';
szPic++;
ulPic--;
bDone = TRUE; /* Logical written */
break;
}
case '#':
case 'L': /* True/False */
{
*szResult = pExp->item.asLogical.value ? 'T' : 'F';
szPic++;
ulPic--;
bDone = TRUE;
break;
}
default:
{
*szResult = *szPic++;
ulPic--;
}
}
szResult = NumPicture( szPic + ulPicStart, ulPic, wPicFlags,
(double) pExp->item.asInteger.value, &ulResultPos,
pExp->item.asInteger.length, 0 );
hb_retclen( szResult, ulResultPos );
hb_xfree( szResult );
break;
}
if( ( wPicFlags & PF_REMAIN ) && ulPic )
{ /* Any chars left */
for( n = ulPic; n; n--) /* Copy remainder */
szResult[ulResultPos++] = *szPic++;
if( !bDone ) /* Logical written ? */
szResult[ulResultPos++] = pExp->item.asLogical.value ? 'T' : 'F';
case IT_LONG:
{
szResult = NumPicture( szPic + ulPicStart, ulPic, wPicFlags,
(double) pExp->item.asLong.value, &ulResultPos,
pExp->item.asLong.length, 0 );
hb_retclen( szResult, ulResultPos );
hb_xfree( szResult );
break;
}
case IT_DOUBLE:
{
szResult = NumPicture( szPic + ulPicStart, ulPic, wPicFlags,
(double) pExp->item.asDouble.value, &ulResultPos,
pExp->item.asDouble.length, pExp->item.asDouble.decimal );
hb_retclen( szResult, ulResultPos);
hb_xfree( szResult );
break;
}
case IT_DATE:
{
char szResult[ 11 ];
DatePicture( hb_pards( 1 ), wPicFlags, szResult );
hb_retc( szResult );
break;
}
default:
{
hb_errRT_BASE(EG_ARG, 1122, NULL, "TRANSFORM");
}
hb_retclen( szResult, ulResultPos );
hb_xfree( szResult );
break;
}
case IT_INTEGER:
{
szResult = NumPicture( szPic + ulPicStart, ulPic, wPicFlags,
(double) pExp->item.asInteger.value, &ulResultPos,
pExp->item.asInteger.length, 0 );
hb_retclen( szResult, ulResultPos );
hb_xfree( szResult );
break;
}
case IT_LONG:
{
szResult = NumPicture( szPic + ulPicStart, ulPic, wPicFlags,
(double) pExp->item.asLong.value, &ulResultPos,
pExp->item.asLong.length, 0 );
hb_retclen( szResult, ulResultPos );
hb_xfree( szResult );
break;
}
case IT_DOUBLE:
{
szResult = NumPicture( szPic + ulPicStart, ulPic, wPicFlags,
(double) pExp->item.asDouble.value, &ulResultPos,
pExp->item.asDouble.length, pExp->item.asDouble.decimal );
hb_retclen( szResult, ulResultPos);
hb_xfree( szResult );
break;
}
case IT_DATE:
{
char szResult[ 11 ];
DatePicture( hb_pards( 1 ), wPicFlags, szResult );
hb_retc( szResult );
break;
}
default:
{
hb_errRT_BASE(EG_ARG, 1122, NULL, "TRANSFORM");
}
}
}
else if ( ISCHAR( 2 ) || ISNIL( 2 ) ) /* No picture supplied */
{
switch( pExp->type & ~IT_BYREF ) /* Default behaviour */
else if ( ISCHAR( 2 ) || ISNIL( 2 ) ) /* No picture supplied */
{
case IT_STRING:
switch( pExp->type & ~IT_BYREF ) /* Default behaviour */
{
hb_retclen( pExp->item.asString.value, pExp->item.asString.length);
break;
}
case IT_LOGICAL:
{
hb_retc( pExp->item.asLogical.value ? "T" : "F" );
break;
}
case IT_INTEGER:
case IT_LONG:
case IT_DOUBLE:
{
char * szStr = hb_itemStr(pExp, 0, 0);
if (szStr)
case IT_STRING:
{
hb_retc( szStr );
hb_xfree( szStr );
hb_retclen( pExp->item.asString.value, pExp->item.asString.length);
break;
}
else
hb_retc("");
case IT_LOGICAL:
{
hb_retc( pExp->item.asLogical.value ? "T" : "F" );
break;
}
case IT_INTEGER:
case IT_LONG:
case IT_DOUBLE:
{
char * szStr = hb_itemStr(pExp, 0, 0);
break;
}
case IT_DATE:
{
char szResult[ 11 ];
DatePicture( hb_pards( 1 ), 0, szResult );
hb_retc( szResult );
break;
}
default:
{
hb_errRT_BASE(EG_ARG, 1122, NULL, "TRANSFORM");
if (szStr)
{
hb_retc( szStr );
hb_xfree( szStr );
}
else
hb_retc("");
break;
}
case IT_DATE:
{
char szResult[ 11 ];
DatePicture( hb_pards( 1 ), 0, szResult );
hb_retc( szResult );
break;
}
default:
{
hb_errRT_BASE(EG_ARG, 1122, NULL, "TRANSFORM");
}
}
}
else
hb_errRT_BASE(EG_ARG, 1122, NULL, "TRANSFORM");
}
else
{
hb_errRT_BASE(EG_ARG, 1122, NULL, "TRANSFORM");
}
hb_errRT_BASE( EG_ARGCOUNT, 3000, NULL, "TRANSFORM" ); /* NOTE: Clipper catches this at compile time! */
}

View File

@@ -33,11 +33,16 @@
their web site at http://www.gnu.org/).
*/
//
// Files from: vm
//
//
//symbols from file: vm/hvm.c
//symbols from file: vm\dynsym.c
//
EXTERNAL __DYNSCOUNT
EXTERNAL __DYNSGETNAME
EXTERNAL __DYNSGETINDEX
//
//symbols from file: vm\hvm.c
//
EXTERNAL ERRORSYS
EXTERNAL ERRORNEW
@@ -52,50 +57,30 @@ EXTERNAL __QUIT
EXTERNAL ERRORLEVEL
EXTERNAL PCOUNT
EXTERNAL PVALUE
EXTERNAL BREAK
//
//symbols from file: vm/dynsym.c
//
EXTERNAL __DYNSCOUNT
EXTERNAL __DYNSGETNAME
EXTERNAL __DYNSGETINDEX
//
//symbols from file: vm/initsymb.c
//symbols from file: vm\initsymb.c
//
//------------------------------------------------------------
// Files from: rtl
//
//
//symbols from file: rtl/arrays.c
//symbols from file: rtl\arrays.c
//
EXTERNAL AADD
EXTERNAL ACLONE
EXTERNAL ACOPY
EXTERNAL ADEL
EXTERNAL AEVAL
EXTERNAL AFILL
EXTERNAL AINS
EXTERNAL ARRAY
EXTERNAL ASCAN
EXTERNAL AADD
EXTERNAL ASIZE
EXTERNAL ASORT
EXTERNAL ATAIL
EXTERNAL AINS
EXTERNAL ADEL
EXTERNAL AFILL
EXTERNAL ASCAN
EXTERNAL AEVAL
EXTERNAL ACOPY
EXTERNAL ACLONE
//
//symbols from file: rtl/classes.c
//symbols from file: rtl\classes.c
//
EXTERNAL __CLSNEW
EXTERNAL __CLSINST
EXTERNAL __CLSINSTSUPER
EXTERNAL __CLSADDMSG
EXTERNAL __CLSDELMSG
EXTERNAL __CLSMODMSG
EXTERNAL __CLS_CNTCLSDATA
EXTERNAL __CLS_CNTDATA
EXTERNAL __CLS_DECDATA
EXTERNAL __CLS_INCDATA
EXTERNAL __OBJGETCLSNAME
EXTERNAL __OBJCLONE
EXTERNAL __OBJHASMSG
EXTERNAL __OBJSENDMSG
EXTERNAL __OBJGETMSGLIST
EXTERNAL __OBJGETMETHODLIST
EXTERNAL __OBJGETVALUELIST
@@ -110,139 +95,152 @@ EXTERNAL __OBJDELINLINE
EXTERNAL __OBJDELMETHOD
EXTERNAL __OBJMODINLINE
EXTERNAL __OBJMODMETHOD
EXTERNAL __CLSADDMSG
EXTERNAL __CLSNEW
EXTERNAL __CLSDELMSG
EXTERNAL __CLSINST
EXTERNAL __CLSMODMSG
EXTERNAL __OBJGETCLSNAME
EXTERNAL __OBJHASMSG
EXTERNAL __OBJCLONE
EXTERNAL __OBJSENDMSG
EXTERNAL __CLSINSTSUPER
EXTERNAL __CLS_CNTCLSDATA
EXTERNAL __CLS_CNTDATA
EXTERNAL __CLS_DECDATA
EXTERNAL __CLS_INCDATA
//
//symbols from file: rtl/codebloc.c
//symbols from file: rtl\codebloc.c
//
//
//symbols from file: rtl/console.c
//symbols from file: rtl\console.c
//
EXTERNAL __ACCEPT
EXTERNAL __EJECT
EXTERNAL COL
EXTERNAL ROW
EXTERNAL DBGSHADOW
EXTERNAL DEVOUT
EXTERNAL DEVOUTPICT
EXTERNAL DEVPOS
EXTERNAL DISPBEGIN
EXTERNAL DISPBOX
EXTERNAL DISPCOUNT
EXTERNAL DISPEND
EXTERNAL DISPOUT
EXTERNAL ISCOLOR
EXTERNAL MAXCOL
EXTERNAL MAXROW
EXTERNAL NOSNOW
EXTERNAL OUTSTD
EXTERNAL OUTERR
EXTERNAL PCOL
EXTERNAL QQOUT
EXTERNAL QOUT
EXTERNAL SETPOS
EXTERNAL DEVPOS
EXTERNAL DEVOUT
EXTERNAL DISPOUT
EXTERNAL __EJECT
EXTERNAL PROW
EXTERNAL RESTSCREEN
EXTERNAL PCOL
EXTERNAL SETPRC
EXTERNAL SCROLL
EXTERNAL MAXROW
EXTERNAL MAXCOL
EXTERNAL ROW
EXTERNAL COL
EXTERNAL DISPBOX
EXTERNAL DISPBEGIN
EXTERNAL DISPEND
EXTERNAL DISPCOUNT
EXTERNAL ISCOLOR
EXTERNAL NOSNOW
EXTERNAL __SHADOW
EXTERNAL DBGSHADOW
EXTERNAL SAVESCREEN
EXTERNAL RESTSCREEN
EXTERNAL SETCURSOR
EXTERNAL SETBLINK
EXTERNAL SETPOS
EXTERNAL SETPRC
EXTERNAL SHADOW
EXTERNAL QOUT
EXTERNAL QQOUT
EXTERNAL __ACCEPT
EXTERNAL __COLORINDEX
//
//symbols from file: rtl/copyfile.c
//symbols from file: rtl\copyfile.c
//
EXTERNAL __COPYFILE
//
//symbols from file: rtl/dates.c
//symbols from file: rtl\dates.c
//
EXTERNAL CDOW
EXTERNAL CMONTH
EXTERNAL CTOD
EXTERNAL DATE
EXTERNAL DAY
EXTERNAL DOW
EXTERNAL DTOC
EXTERNAL DTOS
EXTERNAL MONTH
EXTERNAL SECONDS
EXTERNAL STOD
EXTERNAL TIME
EXTERNAL DAY
EXTERNAL MONTH
EXTERNAL YEAR
EXTERNAL TIME
EXTERNAL DATE
EXTERNAL DOW
EXTERNAL CMONTH
EXTERNAL CDOW
EXTERNAL SECONDS
//
//symbols from file: rtl/descend.c
//symbols from file: rtl\descend.c
//
EXTERNAL DESCEND
//
//symbols from file: rtl/dir.c
//symbols from file: rtl\dir.c
//
EXTERNAL DIRECTORY
//
//symbols from file: rtl/do.c
//symbols from file: rtl\do.c
//
EXTERNAL DO
//
//symbols from file: rtl/environ.c
//symbols from file: rtl\environ.c
//
EXTERNAL __RUN
EXTERNAL GETENV
EXTERNAL OS
EXTERNAL VERSION
EXTERNAL GETENV
EXTERNAL __RUN
//
//symbols from file: rtl/errorapi.c
//symbols from file: rtl\errorapi.c
//
EXTERNAL __ERRRT_BASE
//
//symbols from file: rtl/extend.c
//symbols from file: rtl\extend.c
//
//
//symbols from file: rtl/filesys.c
//symbols from file: rtl\filesys.c
//
EXTERNAL FOPEN
EXTERNAL FCREATE
EXTERNAL FREAD
EXTERNAL FWRITE
EXTERNAL FERROR
EXTERNAL FCLOSE
EXTERNAL FERASE
EXTERNAL FRENAME
EXTERNAL FSEEK
EXTERNAL FILE
EXTERNAL FREADSTR
EXTERNAL CURDIR
EXTERNAL BIN2I
EXTERNAL BIN2L
EXTERNAL BIN2W
EXTERNAL FCLOSE
EXTERNAL FCREATE
EXTERNAL FERASE
EXTERNAL FERROR
EXTERNAL FILE
EXTERNAL FOPEN
EXTERNAL FREAD
EXTERNAL FREADSTR
EXTERNAL FRENAME
EXTERNAL FSEEK
EXTERNAL FWRITE
EXTERNAL CURDIR
EXTERNAL I2BIN
EXTERNAL L2BIN
EXTERNAL W2BIN
//
//symbols from file: rtl/fm.c
//symbols from file: rtl\fm.c
//
//
//symbols from file: rtl/gtapi.c
//symbols from file: rtl\gtapi.c
//
//
//symbols from file: rtl/gtxxx.c
//symbols from file: rtl\gtxxx.c
//
//
//symbols from file: rtl/hardcr.c
//symbols from file: rtl\hardcr.c
//
EXTERNAL HARDCR
//
//symbols from file: rtl/inkey.c
//symbols from file: rtl\inkey.c
//
EXTERNAL __KEYBOARD
EXTERNAL INKEY
EXTERNAL LASTKEY
EXTERNAL __KEYBOARD
EXTERNAL NEXTKEY
EXTERNAL LASTKEY
//
//symbols from file: rtl/itemapi.c
//symbols from file: rtl\itemapi.c
//
//
//symbols from file: rtl/langapi.c
//symbols from file: rtl\langapi.c
//
//
//symbols from file: rtl/math.c
//symbols from file: rtl\math.c
//
EXTERNAL ABS
EXTERNAL EXP
@@ -254,7 +252,7 @@ EXTERNAL MOD
EXTERNAL ROUND
EXTERNAL SQRT
//
//symbols from file: rtl/memvars.c
//symbols from file: rtl\memvars.c
//
EXTERNAL __MVPUBLIC
EXTERNAL __MVPRIVATE
@@ -263,192 +261,295 @@ EXTERNAL __MVRELEASE
EXTERNAL __MVSCOPE
EXTERNAL __MVCLEAR
//
//symbols from file: rtl/msgxxx.c
//symbols from file: rtl\msgxxx.c
//
//
//symbols from file: rtl/mtran.c
//symbols from file: rtl\mtran.c
//
EXTERNAL MEMOTRAN
//
//symbols from file: rtl/set.c
//symbols from file: rtl\set.c
//
EXTERNAL SET
EXTERNAL __SETCENTURY
EXTERNAL SET
//
//symbols from file: rtl/setcolor.c
//symbols from file: rtl\setcolor.c
//
EXTERNAL SETCOLOR
EXTERNAL COLORSELECT
//
//symbols from file: rtl/strings.c
//symbols from file: rtl\strings.c
//
EXTERNAL ALLTRIM
EXTERNAL ASC
EXTERNAL AT
EXTERNAL CHR
EXTERNAL ISALPHA
EXTERNAL ISDIGIT
EXTERNAL ISUPPER
EXTERNAL ISLOWER
EXTERNAL LEFT
EXTERNAL LOWER
EXTERNAL LTRIM
EXTERNAL PAD
EXTERNAL PADC
EXTERNAL PADL
EXTERNAL PADR
EXTERNAL RAT
EXTERNAL REPLICATE
EXTERNAL RIGHT
EXTERNAL RTRIM
EXTERNAL SPACE
EXTERNAL STR
EXTERNAL STRTRAN
EXTERNAL STUFF
EXTERNAL SUBSTR
EXTERNAL TRIM
EXTERNAL ALLTRIM
EXTERNAL PADR
EXTERNAL PAD
EXTERNAL PADL
EXTERNAL PADC
EXTERNAL AT
EXTERNAL RAT
EXTERNAL CHR
EXTERNAL ASC
EXTERNAL LEFT
EXTERNAL RIGHT
EXTERNAL SUBSTR
EXTERNAL LOWER
EXTERNAL UPPER
EXTERNAL REPLICATE
EXTERNAL SPACE
EXTERNAL STUFF
EXTERNAL STRTRAN
EXTERNAL VAL
EXTERNAL STR
EXTERNAL STRZERO
//
//symbols from file: rtl/transfrm.c
//
EXTERNAL TRANSFORM
//
//symbols from file: rtl/tone.c
//symbols from file: rtl\tone.c
//
EXTERNAL TONE
//
//symbols from file: rtl/achoice.prg
//symbols from file: rtl\transfrm.c
//
EXTERNAL TRANSFORM
//
//symbols from file: rtl\achoice.prg
//
EXTERNAL ACHOICE
//
//symbols from file: rtl/adir.prg
//symbols from file: rtl\adir.prg
//
EXTERNAL ADIR
//
//symbols from file: rtl/alert.prg
//symbols from file: rtl\alert.prg
//
EXTERNAL ALERT
//
//symbols from file: rtl/asort.prg
//symbols from file: rtl\asort.prg
//
EXTERNAL ASORT
//
//symbols from file: rtl\browdb.prg
//
EXTERNAL TBROWSEDB
//
//symbols from file: rtl\devoutp.prg
//
EXTERNAL DEVOUTPICT
//
//symbols from file: rtl\errorsys.prg
//
//
//symbols from file: rtl/devoutp.prg
//
//
//symbols from file: rtl/terror.prg
//
//
//symbols from file: rtl/errorsys.prg
//
//
//symbols from file: rtl/menuto.prg
//symbols from file: rtl\menuto.prg
//
EXTERNAL __ATPROMPT
EXTERNAL __MENUTO
//
//symbols from file: rtl/objfunc.prg
//symbols from file: rtl\objfunc.prg
//
//
//symbols from file: rtl/readvar.prg
//symbols from file: rtl\readvar.prg
//
EXTERNAL READVAR
//
//symbols from file: rtl/setkey.prg
//symbols from file: rtl\setkey.prg
//
EXTERNAL SETKEY
EXTERNAL SETKEYGET
EXTERNAL SETKEYSAVE
EXTERNAL SETKEYCHECK
//
//symbols from file: rtl/tclass.prg
//symbols from file: rtl\tbcolumn.prg
//
EXTERNAL TBCOLUMNNEW
//
//symbols from file: rtl\tbrowse.prg
//
EXTERNAL TBROWSENEW
//
//symbols from file: rtl\tclass.prg
//
EXTERNAL TCLASS
//
//symbols from file: rtl/tget.prg
//symbols from file: rtl\terror.prg
//
//
//symbols from file: rtl\tget.prg
//
EXTERNAL GETNEW
EXTERNAL _GET_
//
//symbols from file: rtl/tgetlist.prg
//symbols from file: rtl\tgetlist.prg
//
EXTERNAL READMODAL
//
//symbols from file: rtl/tbcolumn.prg
//
EXTERNAL TBCOLUMNNEW
//
//symbols from file: rtl/tbrowse.prg
//
EXTERNAL TBROWSENEW
//
//symbols from file: rtl/xsavescr.prg
//symbols from file: rtl\xsavescr.prg
//
EXTERNAL __XSAVESCREEN
EXTERNAL __XRESTSCREEN
//------------------------------------------------------------
// Files from: rdd
//
//symbols from file: rtl/browdb.prg
//
EXTERNAL TBROWSEDB
//symbols from file: rdd\dbcmd.c
//
EXTERNAL DBF
EXTERNAL SDF
EXTERNAL DELIM
EXTERNAL RDDSYS
EXTERNAL AFIELDS
EXTERNAL ALIAS
EXTERNAL BOF
EXTERNAL DBCLOSEALL
EXTERNAL DBCLOSEAREA
EXTERNAL DBCOMMIT
EXTERNAL DBCREATE
EXTERNAL DBDELETE
EXTERNAL DBGOBOTTOM
EXTERNAL DBGOTO
EXTERNAL DBGOTOP
EXTERNAL DBRECALL
EXTERNAL DBRLOCK
EXTERNAL DBRLOCKLIST
EXTERNAL DBRUNLOCK
EXTERNAL DBSELECTAREA
EXTERNAL DBSETDRIVER
EXTERNAL DBSKIP
EXTERNAL DBSTRUCT
EXTERNAL DBTABLEEXT
EXTERNAL DBUNLOCK
EXTERNAL DBUNLOCKALL
EXTERNAL DBUSEAREA
EXTERNAL DELETED
EXTERNAL EOF
EXTERNAL FCOUNT
EXTERNAL FIELDGET
EXTERNAL FIELDNAME
EXTERNAL FIELDPOS
EXTERNAL FIELDPUT
EXTERNAL FLOCK
EXTERNAL FOUND
EXTERNAL HEADER
EXTERNAL LASTREC
EXTERNAL LUPDATE
EXTERNAL NETERR
EXTERNAL RDDLIST
EXTERNAL RDDNAME
EXTERNAL RDDREGISTER
EXTERNAL RDDSETDEFAULT
EXTERNAL RDDSHUTDOWN
EXTERNAL RECCOUNT
EXTERNAL RECNO
EXTERNAL RECSIZE
EXTERNAL RLOCK
EXTERNAL SELECT
EXTERNAL USED
//
//symbols from file: rdd\dbf1.c
//
EXTERNAL _DBF
EXTERNAL DBF_GETFUNCTABLE
//
//symbols from file: rdd\delim1.c
//
EXTERNAL _DELIM
EXTERNAL DELIM_GETFUNCTABLE
//
//symbols from file: rdd\sdf1.c
//
EXTERNAL _SDF
EXTERNAL SDF_GETFUNCTABLE
//
//symbols from file: rdd\dbf0.prg
//
//
//symbols from file: rdd\delim0.prg
//
//
//symbols from file: rdd\rddsys.prg
//
//
//symbols from file: rdd\sdf0.prg
//
//------------------------------------------------------------
// Files from: hbpp
//
//
//symbols from file: hbpp\hbpp.c
//
//
//symbols from file: hbpp\hbppint.c
//
//
//symbols from file: hbpp\hbpplib.c
//
EXTERNAL __PREPROCESS
//
//symbols from file: hbpp\table.c
//
//------------------------------------------------------------
// Files from: tools
//
//
//symbols from file: tools/asciisum.c
//symbols from file: tools\asciisum.c
//
EXTERNAL GT_ASCIISUM
//
//symbols from file: tools/ascpos.c
//symbols from file: tools\ascpos.c
//
EXTERNAL GT_ASCPOS
//
//symbols from file: tools/atdiff.c
//symbols from file: tools\atdiff.c
//
EXTERNAL GT_ATDIFF
//
//symbols from file: tools/chareven.c
//symbols from file: tools\chareven.c
//
EXTERNAL GT_CHAREVEN
//
//symbols from file: tools/charmix.c
//symbols from file: tools\charmix.c
//
EXTERNAL GT_CHARMIX
//
//symbols from file: tools/charodd.c
//symbols from file: tools\charodd.c
//
EXTERNAL GT_CHARODD
//
//symbols from file: tools/chrcount.c
//symbols from file: tools\chrcount.c
//
EXTERNAL GT_CHRCOUNT
//
//symbols from file: tools/chrfirst.c
//symbols from file: tools\chrfirst.c
//
EXTERNAL GT_CHRFIRST
//
//symbols from file: tools/chrtotal.c
//symbols from file: tools\chrtotal.c
//
EXTERNAL GT_CHRTOTAL
//
//symbols from file: tools/dates2.c
//symbols from file: tools\dates2.c
//
EXTERNAL ADAYS
EXTERNAL AMONTHS
EXTERNAL BOM
EXTERNAL BOY
EXTERNAL DAYSINMONTH
EXTERNAL DOY
EXTERNAL EOM
EXTERNAL EOY
EXTERNAL ADAYS
EXTERNAL ISLEAPYEAR
EXTERNAL DAYSINMONTH
EXTERNAL EOM
EXTERNAL BOM
EXTERNAL WOM
EXTERNAL DOY
EXTERNAL WOY
EXTERNAL EOY
EXTERNAL BOY
//
//symbols from file: tools/datesx.c
//symbols from file: tools\datesx.c
//
EXTERNAL DATETIME
//
//symbols from file: tools/debug.c
//symbols from file: tools\debug.c
//
EXTERNAL __ASTATIC
EXTERNAL __STATIC
@@ -458,7 +559,7 @@ EXTERNAL __STACKLEN
EXTERNAL __ASTACK
EXTERNAL __APARAM
//
//symbols from file: tools/hb_f.c
//symbols from file: tools\hb_f.c
//
EXTERNAL HB_FUSE
EXTERNAL HB_FRECNO
@@ -471,11 +572,17 @@ EXTERNAL HB_FGOTOP
EXTERNAL HB_FLASTREC
EXTERNAL HB_FSELECT
//
//symbols from file: tools/io.c
//symbols from file: tools\io.c
//
// removed manually
EXTERNAL RENFILE
EXTERNAL CD
EXTERNAL MD
EXTERNAL RD
EXTERNAL DISKUSED
EXTERNAL DISKFREE
EXTERNAL DISKFULL
//
//symbols from file: tools/mathx.c
//symbols from file: tools\mathx.c
//
EXTERNAL ACOS
EXTERNAL ASIN
@@ -489,60 +596,60 @@ EXTERNAL TAN
EXTERNAL TANH
EXTERNAL PI
//
//symbols from file: tools/strasint.c
//symbols from file: tools\strasint.c
//
//
//symbols from file: tools/strcount.c
//symbols from file: tools\strcount.c
//
EXTERNAL GT_STRCOUNT
//
//symbols from file: tools/strcspn.c
//symbols from file: tools\strcspn.c
//
EXTERNAL GT_STRCSPN
//
//symbols from file: tools/strdiff.c
//symbols from file: tools\strdiff.c
//
EXTERNAL GT_STRDIFF
//
//symbols from file: tools/strexpan.c
//symbols from file: tools\strexpan.c
//
EXTERNAL GT_STREXPAND
//
//symbols from file: tools/strfmt.c
//symbols from file: tools\strfmt.c
//
EXTERNAL STRFORMAT
//
//symbols from file: tools/stringsx.c
//symbols from file: tools\stringsx.c
//
EXTERNAL STRTOKEN
EXTERNAL STRDUMP
EXTERNAL ROT13
//
//symbols from file: tools/strleft.c
//symbols from file: tools\strleft.c
//
EXTERNAL GT_STRLEFT
//
//symbols from file: tools/strpbrk.c
//symbols from file: tools\strpbrk.c
//
EXTERNAL GT_STRPBRK
//
//symbols from file: tools/strright.c
//symbols from file: tools\strright.c
//
EXTERNAL GT_STRRIGHT
//
//symbols from file: tools/fileread.prg
//symbols from file: tools\fileread.prg
//
EXTERNAL TFILEREAD
//
//symbols from file: tools/numtxten.prg
//symbols from file: tools\numtxten.prg
//
EXTERNAL NUMTOTXTEN
//
//symbols from file: tools/numtxthu.prg
//symbols from file: tools\numtxthu.prg
//
EXTERNAL NUMTOTXTHU
//
//symbols from file: tools/stringp.prg
//symbols from file: tools\stringp.prg
//
EXTERNAL DEFAULT
EXTERNAL TOCHAR

View File

@@ -2,23 +2,18 @@
* $Id$
*/
#include "extend.h"
#include <ctype.h>
#include "extend.h"
#ifdef __DOS__
#include <dos.h>
#include <dir.h>
#include <bios.h>
#include <dir.h>
#include <bios.h>
#endif
#define TRUE 1
#define FALSE 0
#ifdef __DOS__
HARBOUR HB_RENFILE(void)
{
#ifdef __DOS__
int ok;
PHB_ITEM arg1 = hb_param(1,IT_STRING);
PHB_ITEM arg2 = hb_param(2,IT_STRING);
@@ -30,6 +25,7 @@ HARBOUR HB_RENFILE(void)
else
_retl(FALSE);
}
#endif
}
/* $DOC$
@@ -129,88 +125,43 @@ HARBOUR HB_RENFILE(void)
HARBOUR HB_CD(void)
{
#ifdef __DOS__
PHB_ITEM MEUDIR = hb_param(1,IT_STRING);
if(MEUDIR)
{
hb_retni(chdir(hb_parc(1)));
}
#endif
}
HARBOUR HB_MD(void)
{
#ifdef __DOS__
PHB_ITEM MEUDIR = hb_param(1,IT_STRING);
if(MEUDIR)
{
hb_retni(mkdir(hb_parc(1)));
}
#endif
}
HARBOUR HB_RD(void)
{
#ifdef __DOS__
PHB_ITEM MEUDIR = hb_param(1,IT_STRING);
if(MEUDIR)
{
hb_retni(chdir(hb_parc(1)));
}
#endif
}
/* $DOC$
* $FUNCNAME$
* FILE()
* $CATEGORY$
* DOS
* $ONELINER$
*
* $SYNTAX$
* RD(<NDIR>)
* $ARGUMENTS$
* <NDIR> FILE TO BE CHECKED
* $RETURNS$
* .T. IF SUCEFUL
* .F. IF NOT
*
* $DESCRIPTION$
* VERIFY IF A FILE EXISTS
* $EXAMPLES$
* IF FILE("OLA.PRG")
* RETURN(.T.)
* ELSE
* RETURN(.F.)
* ENDIF
*
* $SEEALSO$
*
* $INCLUDE$
* extend.h dos.h dir.h bios.h internal.h
* $END$
*/
HARBOUR HB_FILE(void)
{
PHB_ITEM arg1 = hb_param(1,IT_STRING);
char *arquivos;
int achou;
struct ffblk arquivo;
if (arg1) {
arquivos=hb_parc(1);
achou=findfirst(arquivos,&arquivo,FA_ARCH);
if (achou)
{
_retl(TRUE);
}
else
{
_retl(FALSE);
}
}
}
HARBOUR HB_DISKUSED(void)
{
#ifdef __DOS__
long bytsfree,bytsfull;
struct diskfree_t disk;
_dos_getdiskfree(0,&disk);
@@ -221,10 +172,12 @@ HARBOUR HB_DISKUSED(void)
(long) disk.sectors_per_cluster *
(long ) disk.bytes_per_sector);
hb_retnl(bytsfull-bytsfree);
#endif
}
HARBOUR HB_DISKFREE(void)
{
#ifdef __DOS__
long bytsfree;
struct diskfree_t disk;
_dos_getdiskfree(0,&disk);
@@ -233,10 +186,12 @@ HARBOUR HB_DISKFREE(void)
(long ) disk.bytes_per_sector);
hb_retnl(bytsfree);
#endif
}
HARBOUR HB_DISKFULL(void)
{
#ifdef __DOS__
long bytsfull;
struct diskfree_t disk;
_dos_getdiskfree(0,&disk);
@@ -245,6 +200,5 @@ HARBOUR HB_DISKFULL(void)
(long) disk.sectors_per_cluster *
(long ) disk.bytes_per_sector);
hb_retnl(bytsfull);
}
#endif
}