ChangeLog 19990820-15:05 GMT+2

This commit is contained in:
Ryszard Glab
1999-08-20 13:13:51 +00:00
parent c00b47a67d
commit e6e5845670
9 changed files with 1610 additions and 4 deletions

View File

@@ -1,3 +1,37 @@
19990820-15:05 GMT+2 Ryszard Glab <rglab@imid.med.pl>
*source/rtl/strings.c
* corrected a NULL assigment to '\x0'
*source/rdd/dbcmd.c
* corrected SELF_DELETE to SELF_DELETED in HB_DELETED function
*source/runner/runner.c
* corrected NULL to 0L (we are returning LONG in ReadLong())
*include/external.ch
+ new file with EXTERNAL declaration for all harbour
functions/procedures
*source/rtl/dir.c
* corrected a parameter passed to 'opendir' function when
Watcom C/C++ is used
*source/runner/Makefile
*source/runner/external.prg
*source/runner/runhrb.c
*source/runner/runmain.prg
* new files to create the runner executable.
+ external.prg is here temporary because the preprocessor doesn't
process EXTERNAL statement yet
+ runhrb.c is copied from runner.c however without all code used
to handle the symbol table
+ runmain.prg calls HB_RUN from runhrb.c
NOTE: I have left runner.c unchanged because I was unable to
replace it with new files in all these build*.bat - these
build*.bat doesn't allow to create an executable from more then
one source file :(
19990820-14:40 GMT+1 Victor Szel <info@szelvesz.hu>
* include/hbsetup.h
+ HARBOUR_USE_GTAPI is automatically #defined if any type of the GTAPIs

547
harbour/include/external.ch Normal file
View File

@@ -0,0 +1,547 @@
// $Id$
/*
Harbour Project source code
The declarations for all harbour defined functions/procedures.
Copyright 1999 Ryszard Glab
www - http://www.harbour-project.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version, with one exception:
The exception is that if you link the Harbour Runtime Library (HRL)
and/or the Harbour Virtual Machine (HVM) with other files to produce
an executable, this does not by itself cause the resulting executable
to be covered by the GNU General Public License. Your use of that
executable is in no way restricted on account of linking the HRL
and/or HVM code into it.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
their web site at http://www.gnu.org/).
*/
//
// Files from: vm
//
//
//symbols from file: vm/hvm.c
//
EXTERNAL ERRORSYS
EXTERNAL ERRORNEW
EXTERNAL EVAL
EXTERNAL LEN
EXTERNAL EMPTY
EXTERNAL VALTYPE
EXTERNAL ERRORBLOCK
EXTERNAL PROCNAME
EXTERNAL PROCLINE
EXTERNAL __QUIT
EXTERNAL ERRORLEVEL
EXTERNAL PCOUNT
EXTERNAL PVALUE
//
//symbols from file: vm/dynsym.c
//
EXTERNAL __DYNSCOUNT
EXTERNAL __DYNSGETNAME
EXTERNAL __DYNSGETINDEX
//
//symbols from file: vm/initsymb.c
//
//------------------------------------------------------------
// Files from: rtl
//
//
//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 ASIZE
EXTERNAL ASORT
EXTERNAL ATAIL
//
//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
EXTERNAL __OBJSETVALUELIST
EXTERNAL __OBJHASDATA
EXTERNAL __OBJHASMETHOD
EXTERNAL __OBJADDDATA
EXTERNAL __OBJADDINLINE
EXTERNAL __OBJADDMETHOD
EXTERNAL __OBJDELDATA
EXTERNAL __OBJDELINLINE
EXTERNAL __OBJDELMETHOD
EXTERNAL __OBJMODINLINE
EXTERNAL __OBJMODMETHOD
//
//symbols from file: rtl/codebloc.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 PROW
EXTERNAL RESTSCREEN
EXTERNAL SCROLL
EXTERNAL SAVESCREEN
EXTERNAL SETCURSOR
EXTERNAL SETBLINK
EXTERNAL SETPOS
EXTERNAL SETPRC
EXTERNAL SHADOW
EXTERNAL QOUT
EXTERNAL QQOUT
EXTERNAL __COLORINDEX
//
//symbols from file: rtl/copyfile.c
//
EXTERNAL __COPYFILE
//
//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 YEAR
//
//symbols from file: rtl/descend.c
//
EXTERNAL DESCEND
//
//symbols from file: rtl/dir.c
//
EXTERNAL DIRECTORY
//
//symbols from file: rtl/do.c
//
EXTERNAL DO
//
//symbols from file: rtl/environ.c
//
EXTERNAL __RUN
EXTERNAL GETENV
EXTERNAL OS
EXTERNAL VERSION
//
//symbols from file: rtl/errorapi.c
//
EXTERNAL __ERRRT_BASE
//
//symbols from file: rtl/extend.c
//
//
//symbols from file: rtl/filesys.c
//
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/gtapi.c
//
//
//symbols from file: rtl/gtxxx.c
//
//
//symbols from file: rtl/hardcr.c
//
EXTERNAL HARDCR
//
//symbols from file: rtl/inkey.c
//
EXTERNAL __KEYBOARD
EXTERNAL INKEY
EXTERNAL LASTKEY
EXTERNAL NEXTKEY
//
//symbols from file: rtl/itemapi.c
//
//
//symbols from file: rtl/langapi.c
//
//
//symbols from file: rtl/math.c
//
EXTERNAL ABS
EXTERNAL EXP
EXTERNAL INT
EXTERNAL LOG
EXTERNAL MAX
EXTERNAL MIN
EXTERNAL MOD
EXTERNAL ROUND
EXTERNAL SQRT
//
//symbols from file: rtl/memvars.c
//
EXTERNAL __MVPUBLIC
EXTERNAL __MVPRIVATE
EXTERNAL __MVXRELEASE
EXTERNAL __MVRELEASE
EXTERNAL __MVSCOPE
EXTERNAL __MVCLEAR
//
//symbols from file: rtl/msgxxx.c
//
//
//symbols from file: rtl/mtran.c
//
EXTERNAL MEMOTRAN
//
//symbols from file: rtl/set.c
//
EXTERNAL SET
EXTERNAL __SETCENTURY
//
//symbols from file: rtl/setcolor.c
//
EXTERNAL SETCOLOR
EXTERNAL COLORSELECT
//
//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 UPPER
EXTERNAL VAL
//
//symbols from file: rtl/transfrm.c
//
EXTERNAL TRANSFORM
//
//symbols from file: rtl/tone.c
//
EXTERNAL TONE
//
//symbols from file: rtl/achoice.prg
//
EXTERNAL ACHOICE
//
//symbols from file: rtl/adir.prg
//
EXTERNAL ADIR
//
//symbols from file: rtl/alert.prg
//
EXTERNAL ALERT
//
//symbols from file: rtl/asort.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
//
EXTERNAL __ATPROMPT
EXTERNAL __MENUTO
//
//symbols from file: rtl/objfunc.prg
//
//
//symbols from file: rtl/readvar.prg
//
EXTERNAL READVAR
//
//symbols from file: rtl/setkey.prg
//
EXTERNAL SETKEY
EXTERNAL SETKEYGET
EXTERNAL SETKEYSAVE
EXTERNAL SETKEYCHECK
//
//symbols from file: rtl/tclass.prg
//
EXTERNAL TCLASS
//
//symbols from file: rtl/tget.prg
//
EXTERNAL GETNEW
EXTERNAL _GET_
//
//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
//
EXTERNAL __XSAVESCREEN
EXTERNAL __XRESTSCREEN
//
//symbols from file: rtl/browdb.prg
//
EXTERNAL TBROWSEDB
//------------------------------------------------------------
// Files from: tools
//
//
//symbols from file: tools/asciisum.c
//
EXTERNAL GT_ASCIISUM
//
//symbols from file: tools/ascpos.c
//
EXTERNAL GT_ASCPOS
//
//symbols from file: tools/atdiff.c
//
EXTERNAL GT_ATDIFF
//
//symbols from file: tools/chareven.c
//
EXTERNAL GT_CHAREVEN
//
//symbols from file: tools/charmix.c
//
EXTERNAL GT_CHARMIX
//
//symbols from file: tools/charodd.c
//
EXTERNAL GT_CHARODD
//
//symbols from file: tools/chrcount.c
//
EXTERNAL GT_CHRCOUNT
//
//symbols from file: tools/chrfirst.c
//
EXTERNAL GT_CHRFIRST
//
//symbols from file: tools/chrtotal.c
//
EXTERNAL GT_CHRTOTAL
//
//symbols from file: tools/dates2.c
//
EXTERNAL ADAYS
EXTERNAL AMONTHS
EXTERNAL BOM
EXTERNAL BOY
EXTERNAL DAYSINMONTH
EXTERNAL DOY
EXTERNAL EOM
EXTERNAL EOY
EXTERNAL ISLEAPYEAR
EXTERNAL WOM
EXTERNAL WOY
//
//symbols from file: tools/datesx.c
//
EXTERNAL DATETIME
//
//symbols from file: tools/debug.c
//
EXTERNAL __ASTATIC
EXTERNAL __STATIC
EXTERNAL __GLOBALSTACKLEN
EXTERNAL __AGLOBALSTACK
EXTERNAL __STACKLEN
EXTERNAL __ASTACK
EXTERNAL __APARAM
//
//symbols from file: tools/hb_f.c
//
EXTERNAL HB_FUSE
EXTERNAL HB_FRECNO
EXTERNAL HB_FSKIP
EXTERNAL HB_FREADLN
EXTERNAL HB_FEOF
EXTERNAL HB_FGOTO
EXTERNAL HB_FGOBOTTOM
EXTERNAL HB_FGOTOP
EXTERNAL HB_FLASTREC
EXTERNAL HB_FSELECT
//
//symbols from file: tools/io.c
//
//removed manually
//
//symbols from file: tools/mathx.c
//
EXTERNAL ACOS
EXTERNAL ASIN
EXTERNAL ATAN
EXTERNAL COS
EXTERNAL COSH
EXTERNAL LOG10
EXTERNAL SIN
EXTERNAL SINH
EXTERNAL TAN
EXTERNAL TANH
EXTERNAL PI
//
//symbols from file: tools/strasint.c
//
//
//symbols from file: tools/strcount.c
//
EXTERNAL GT_STRCOUNT
//
//symbols from file: tools/strcspn.c
//
EXTERNAL GT_STRCSPN
//
//symbols from file: tools/strdiff.c
//
EXTERNAL GT_STRDIFF
//
//symbols from file: tools/strexpan.c
//
EXTERNAL GT_STREXPAND
//
//symbols from file: tools/strfmt.c
//
EXTERNAL STRFORMAT
//
//symbols from file: tools/stringsx.c
//
EXTERNAL STRTOKEN
EXTERNAL STRDUMP
EXTERNAL ROT13
//
//symbols from file: tools/strleft.c
//
EXTERNAL GT_STRLEFT
//
//symbols from file: tools/strpbrk.c
//
EXTERNAL GT_STRPBRK
//
//symbols from file: tools/strright.c
//
EXTERNAL GT_STRRIGHT
//
//symbols from file: tools/fileread.prg
//
EXTERNAL TFILEREAD
//
//symbols from file: tools/numtxten.prg
//
EXTERNAL NUMTOTXTEN
//
//symbols from file: tools/numtxthu.prg
//
//EXTERNAL NUMTOTXTHU
//
//symbols from file: tools/stringp.prg
//
EXTERNAL DEFAULT
EXTERNAL TOCHAR
EXTERNAL DEBUG
//------------------------------------------------------------

View File

@@ -179,6 +179,7 @@ HARBOUR HB_DIRECTORY( void )
long fsize;
time_t ftime;
char * pos;
int iDirnamelen;
PHB_ITEM pdir;
PHB_ITEM psubarray;
@@ -210,10 +211,12 @@ HARBOUR HB_DIRECTORY( void )
}
if (strlen(pattern) < 1)
strcpy(pattern,"*.*");
if (strlen(dirname) < 1)
iDirnameLen =strlen(dirname);
if( iDirnameLen < 1 )
{
strcpy(dirname,".X");
dirname[1] = OS_PATH_DELIMITER;
iDirnamelen =2;
}
if (strlen(pattern) > 0)
@@ -270,7 +273,15 @@ HARBOUR HB_DIRECTORY( void )
{
strcpy(string,entry.achName);
#else
#if defined( __WATCOMC__ )
/* opendir in Watcom doesn't like the path delimiter at the end of a string */
dirname[ iDirnameLen ] ='.';
dirname[ iDirnameLen+1 ] ='\x0';
#endif
dir = opendir( dirname );
#if defined( __WATCOMC__ )
dirname[ iDirnameLen ] ='\x0';
#endif
if (NULL == dir)
{
/* TODO: proper error handling */

View File

@@ -1322,7 +1322,7 @@ char * hb_itemStr( PHB_ITEM pNumber, PHB_ITEM pWidth, PHB_ITEM pDec )
default:
iBytes = 0;
*szResult = NULL;
szResult[ 0 ] = '\0'; /* null string */
break;
}
/* Set to asterisks in case of overflow */

View File

@@ -5,8 +5,12 @@
ROOT = ../../
C_SOURCES=\
runhrb.c
C_MAIN=runner.c
PRG_SOURCES=\
external.prg
PRG_MAIN=runmain.prg
LIBS=\
tools \

View File

@@ -0,0 +1,547 @@
// $Id$
/*
Harbour Project source code
The declarations for all harbour defined functions/procedures.
Copyright 1999 Ryszard Glab
www - http://www.harbour-project.org
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version, with one exception:
The exception is that if you link the Harbour Runtime Library (HRL)
and/or the Harbour Virtual Machine (HVM) with other files to produce
an executable, this does not by itself cause the resulting executable
to be covered by the GNU General Public License. Your use of that
executable is in no way restricted on account of linking the HRL
and/or HVM code into it.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
their web site at http://www.gnu.org/).
*/
//
// Files from: vm
//
//
//symbols from file: vm/hvm.c
//
EXTERNAL ERRORSYS
EXTERNAL ERRORNEW
EXTERNAL EVAL
EXTERNAL LEN
EXTERNAL EMPTY
EXTERNAL VALTYPE
EXTERNAL ERRORBLOCK
EXTERNAL PROCNAME
EXTERNAL PROCLINE
EXTERNAL __QUIT
EXTERNAL ERRORLEVEL
EXTERNAL PCOUNT
EXTERNAL PVALUE
//
//symbols from file: vm/dynsym.c
//
EXTERNAL __DYNSCOUNT
EXTERNAL __DYNSGETNAME
EXTERNAL __DYNSGETINDEX
//
//symbols from file: vm/initsymb.c
//
//------------------------------------------------------------
// Files from: rtl
//
//
//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 ASIZE
EXTERNAL ASORT
EXTERNAL ATAIL
//
//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
EXTERNAL __OBJSETVALUELIST
EXTERNAL __OBJHASDATA
EXTERNAL __OBJHASMETHOD
EXTERNAL __OBJADDDATA
EXTERNAL __OBJADDINLINE
EXTERNAL __OBJADDMETHOD
EXTERNAL __OBJDELDATA
EXTERNAL __OBJDELINLINE
EXTERNAL __OBJDELMETHOD
EXTERNAL __OBJMODINLINE
EXTERNAL __OBJMODMETHOD
//
//symbols from file: rtl/codebloc.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 PROW
EXTERNAL RESTSCREEN
EXTERNAL SCROLL
EXTERNAL SAVESCREEN
EXTERNAL SETCURSOR
EXTERNAL SETBLINK
EXTERNAL SETPOS
EXTERNAL SETPRC
EXTERNAL SHADOW
EXTERNAL QOUT
EXTERNAL QQOUT
EXTERNAL __COLORINDEX
//
//symbols from file: rtl/copyfile.c
//
EXTERNAL __COPYFILE
//
//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 YEAR
//
//symbols from file: rtl/descend.c
//
EXTERNAL DESCEND
//
//symbols from file: rtl/dir.c
//
EXTERNAL DIRECTORY
//
//symbols from file: rtl/do.c
//
EXTERNAL DO
//
//symbols from file: rtl/environ.c
//
EXTERNAL __RUN
EXTERNAL GETENV
EXTERNAL OS
EXTERNAL VERSION
//
//symbols from file: rtl/errorapi.c
//
EXTERNAL __ERRRT_BASE
//
//symbols from file: rtl/extend.c
//
//
//symbols from file: rtl/filesys.c
//
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/gtapi.c
//
//
//symbols from file: rtl/gtxxx.c
//
//
//symbols from file: rtl/hardcr.c
//
EXTERNAL HARDCR
//
//symbols from file: rtl/inkey.c
//
EXTERNAL __KEYBOARD
EXTERNAL INKEY
EXTERNAL LASTKEY
EXTERNAL NEXTKEY
//
//symbols from file: rtl/itemapi.c
//
//
//symbols from file: rtl/langapi.c
//
//
//symbols from file: rtl/math.c
//
EXTERNAL ABS
EXTERNAL EXP
EXTERNAL INT
EXTERNAL LOG
EXTERNAL MAX
EXTERNAL MIN
EXTERNAL MOD
EXTERNAL ROUND
EXTERNAL SQRT
//
//symbols from file: rtl/memvars.c
//
EXTERNAL __MVPUBLIC
EXTERNAL __MVPRIVATE
EXTERNAL __MVXRELEASE
EXTERNAL __MVRELEASE
EXTERNAL __MVSCOPE
EXTERNAL __MVCLEAR
//
//symbols from file: rtl/msgxxx.c
//
//
//symbols from file: rtl/mtran.c
//
EXTERNAL MEMOTRAN
//
//symbols from file: rtl/set.c
//
EXTERNAL SET
EXTERNAL __SETCENTURY
//
//symbols from file: rtl/setcolor.c
//
EXTERNAL SETCOLOR
EXTERNAL COLORSELECT
//
//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 UPPER
EXTERNAL VAL
//
//symbols from file: rtl/transfrm.c
//
EXTERNAL TRANSFORM
//
//symbols from file: rtl/tone.c
//
EXTERNAL TONE
//
//symbols from file: rtl/achoice.prg
//
EXTERNAL ACHOICE
//
//symbols from file: rtl/adir.prg
//
EXTERNAL ADIR
//
//symbols from file: rtl/alert.prg
//
EXTERNAL ALERT
//
//symbols from file: rtl/asort.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
//
EXTERNAL __ATPROMPT
EXTERNAL __MENUTO
//
//symbols from file: rtl/objfunc.prg
//
//
//symbols from file: rtl/readvar.prg
//
EXTERNAL READVAR
//
//symbols from file: rtl/setkey.prg
//
EXTERNAL SETKEY
EXTERNAL SETKEYGET
EXTERNAL SETKEYSAVE
EXTERNAL SETKEYCHECK
//
//symbols from file: rtl/tclass.prg
//
EXTERNAL TCLASS
//
//symbols from file: rtl/tget.prg
//
EXTERNAL GETNEW
EXTERNAL _GET_
//
//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
//
EXTERNAL __XSAVESCREEN
EXTERNAL __XRESTSCREEN
//
//symbols from file: rtl/browdb.prg
//
EXTERNAL TBROWSEDB
//------------------------------------------------------------
// Files from: tools
//
//
//symbols from file: tools/asciisum.c
//
EXTERNAL GT_ASCIISUM
//
//symbols from file: tools/ascpos.c
//
EXTERNAL GT_ASCPOS
//
//symbols from file: tools/atdiff.c
//
EXTERNAL GT_ATDIFF
//
//symbols from file: tools/chareven.c
//
EXTERNAL GT_CHAREVEN
//
//symbols from file: tools/charmix.c
//
EXTERNAL GT_CHARMIX
//
//symbols from file: tools/charodd.c
//
EXTERNAL GT_CHARODD
//
//symbols from file: tools/chrcount.c
//
EXTERNAL GT_CHRCOUNT
//
//symbols from file: tools/chrfirst.c
//
EXTERNAL GT_CHRFIRST
//
//symbols from file: tools/chrtotal.c
//
EXTERNAL GT_CHRTOTAL
//
//symbols from file: tools/dates2.c
//
EXTERNAL ADAYS
EXTERNAL AMONTHS
EXTERNAL BOM
EXTERNAL BOY
EXTERNAL DAYSINMONTH
EXTERNAL DOY
EXTERNAL EOM
EXTERNAL EOY
EXTERNAL ISLEAPYEAR
EXTERNAL WOM
EXTERNAL WOY
//
//symbols from file: tools/datesx.c
//
EXTERNAL DATETIME
//
//symbols from file: tools/debug.c
//
EXTERNAL __ASTATIC
EXTERNAL __STATIC
EXTERNAL __GLOBALSTACKLEN
EXTERNAL __AGLOBALSTACK
EXTERNAL __STACKLEN
EXTERNAL __ASTACK
EXTERNAL __APARAM
//
//symbols from file: tools/hb_f.c
//
EXTERNAL HB_FUSE
EXTERNAL HB_FRECNO
EXTERNAL HB_FSKIP
EXTERNAL HB_FREADLN
EXTERNAL HB_FEOF
EXTERNAL HB_FGOTO
EXTERNAL HB_FGOBOTTOM
EXTERNAL HB_FGOTOP
EXTERNAL HB_FLASTREC
EXTERNAL HB_FSELECT
//
//symbols from file: tools/io.c
//
// removed manually
//
//symbols from file: tools/mathx.c
//
EXTERNAL ACOS
EXTERNAL ASIN
EXTERNAL ATAN
EXTERNAL COS
EXTERNAL COSH
EXTERNAL LOG10
EXTERNAL SIN
EXTERNAL SINH
EXTERNAL TAN
EXTERNAL TANH
EXTERNAL PI
//
//symbols from file: tools/strasint.c
//
//
//symbols from file: tools/strcount.c
//
EXTERNAL GT_STRCOUNT
//
//symbols from file: tools/strcspn.c
//
EXTERNAL GT_STRCSPN
//
//symbols from file: tools/strdiff.c
//
EXTERNAL GT_STRDIFF
//
//symbols from file: tools/strexpan.c
//
EXTERNAL GT_STREXPAND
//
//symbols from file: tools/strfmt.c
//
EXTERNAL STRFORMAT
//
//symbols from file: tools/stringsx.c
//
EXTERNAL STRTOKEN
EXTERNAL STRDUMP
EXTERNAL ROT13
//
//symbols from file: tools/strleft.c
//
EXTERNAL GT_STRLEFT
//
//symbols from file: tools/strpbrk.c
//
EXTERNAL GT_STRPBRK
//
//symbols from file: tools/strright.c
//
EXTERNAL GT_STRRIGHT
//
//symbols from file: tools/fileread.prg
//
EXTERNAL TFILEREAD
//
//symbols from file: tools/numtxten.prg
//
EXTERNAL NUMTOTXTEN
//
//symbols from file: tools/numtxthu.prg
//
//EXTERNAL NUMTOTXTHU //it uses undefined symbol STRZERO
//
//symbols from file: tools/stringp.prg
//
EXTERNAL DEFAULT
EXTERNAL TOCHAR
EXTERNAL DEBUG
//------------------------------------------------------------

View File

@@ -0,0 +1,447 @@
/*
* $Id$
*/
/*
* Runner.c contains the .HRB object system
*
* Copyright(C) 1999 by Eddie Runia <eddie@runia.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to:
*
* The Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "extend.h"
#include "pcode.h"
#include "errorapi.h"
#include "ctoharb.h"
#include "init.h"
#include "initsymd.h"
/* #if INTEL32 */
static BYTE prgFunction[] = { 0x68, 0x00, 0x00, 0x00, 0x00,
0x68, 0x00, 0x00, 0x00, 0x00,
0xE8, 0x00, 0x00, 0x00, 0x00,
0x83, 0xC4, 0x08,
0xC3 };
/* push offset pcode
push offset symbols
call near relative hb_vmExecute
add esp, 8
ret near */
/* This is the assembler output from : hb_vmExecute(pcode,symbols). */
/* #elseif INTEL16 */
/* #elseif MOTOROLA */
/* #elseif ... */
/* #endif */
typedef union
{
BYTE * pAsmData; /* The assembler bytes */
PHB_FUNC pFunPtr; /* The (dynamic) harbour
function */
} ASM_CALL, *PASM_CALL;
typedef struct
{
char *szName; /* Name of the function */
PASM_CALL pAsmCall; /* Assembler call */
BYTE * pCode; /* P-code */
} DYNFUNC, *PDYNFUNC;
#define SYM_NOLINK 0 /* Symbol does not have to
be linked */
#define SYM_FUNC 1 /* Defined function */
#define SYM_EXTERN 2 /* Prev. defined function */
#define SYM_NOT_FOUND 0xFFFFFFFF /* Symbol not found.
FindSymbol */
HARBOUR HB_HB_RUN();
static PASM_CALL CreateFun( PHB_SYMB, BYTE * ); /* Create a dynamic function*/
static ULONG FindSymbol( char *, PDYNFUNC, ULONG );
static void HRB_FileClose( FILE * );
static void HRB_FileRead ( char *, int, int, FILE * );
static FILE *HRB_FileOpen ( char * );
BYTE ReadByte( FILE * );
char *ReadId ( FILE * );
long ReadLong( FILE * );
ULONG ulSymEntry = 0; /* Link enhancement */
/*
HB_Run( <cFile> )
This program will get the data from the .HRB file and run the p-code
contained in it.
In due time it should also be able to collect the data from the
binary/executable itself
*/
HARBOUR HB_HB_RUN( void )
{
char *szFileName;
FILE *file;
ULONG ulSymbols; /* Number of symbols */
ULONG ulFuncs; /* Number of functions */
ULONG ulSize; /* Size of function */
ULONG ul, ulPos;
int i;
PHB_SYMB pSymRead; /* Symbols read */
PDYNFUNC pDynFunc; /* Functions read */
PHB_DYNS pDynSym;
if( hb_pcount() == 0 )
printf( "\nPlease give HRB file name\n" );
else
{
szFileName = hb_parc( 1 );
file = HRB_FileOpen( szFileName ); /* Open as binary */
if( file )
{
ulSymbols = ReadLong( file );
pSymRead = ( PHB_SYMB )hb_xgrab( ulSymbols * sizeof( HB_SYMB ) );
for( ul=0; ul < ulSymbols; ul++) /* Read symbols in .HRB */
{
pSymRead[ ul ].szName = ReadId( file );
pSymRead[ ul ].cScope = ReadByte( file );
pSymRead[ ul ].pFunPtr = ( PHB_FUNC ) (ULONG) ReadByte( file );
pSymRead[ ul ].pDynSym = NULL;
}
ulFuncs = ReadLong( file ); /* Read number of functions */
pDynFunc = ( PDYNFUNC ) hb_xgrab( ulFuncs * sizeof( DYNFUNC ) );
for( ul=0; ul < ulFuncs; ul++) /* Read symbols in .HRB */
{
pDynFunc[ ul ].szName = ReadId( file );
ulSize = ReadLong( file ); /* Read size of function */
pDynFunc[ ul ].pCode = ( BYTE * )hb_xgrab( ulSize );
HRB_FileRead( pDynFunc[ ul ].pCode, 1, ulSize, file );
/* Read the block */
pDynFunc[ ul ].pAsmCall = CreateFun( pSymRead,
pDynFunc[ ul ].pCode );
/* Create matching dynamic */
/* function */
}
ulSymEntry = 0;
for( ul = 0; ul < ulSymbols; ul++ ) /* Linker */
{
if( ( (ULONG) pSymRead[ ul ].pFunPtr ) == SYM_FUNC )
{
ulPos = FindSymbol( pSymRead[ ul ].szName, pDynFunc, ulFuncs );
if( ulPos != SYM_NOT_FOUND )
{
/* if( hb_dynsymFind( pSymRead[ ul ].szName ) &&
!( pSymRead[ ul ].cScope & FS_STATIC ) )
{ */ /* Exists and NOT static ? */
/* printf( "\nDuplicate identifier '%s' %i.",
pSymRead[ ul ].szName, pSymRead[ul].cScope );
exit( 1 );
} */
pSymRead[ ul ].pFunPtr = pDynFunc[ ulPos ].pAsmCall->pFunPtr;
}
else
pSymRead[ ul ].pFunPtr = ( PHB_FUNC ) SYM_EXTERN;
}
if( ( (ULONG) pSymRead[ ul ].pFunPtr ) == SYM_EXTERN )
{ /* External function */
pDynSym = hb_dynsymFind( pSymRead[ ul ].szName );
if( !pDynSym )
{
printf( "\nUnknown or unregistered function '%s'.",
pSymRead[ ul ].szName );
exit( 1 );
}
pSymRead[ ul ].pFunPtr = pDynSym->pFunPtr;
}
}
hb_vmProcessSymbols( pSymRead, ulSymbols );
/* Initialize static variables first
*/
for( ul = 0; ul < ulSymbols; ul++ ) /* Check INIT functions */
{
if( (pSymRead[ ul ].cScope & FS_INITEXIT) == FS_INITEXIT )
{
/* call (_INITSTATICS) function. This function assigns
* literal values to static variables only. There is no need
* to pass any parameters to this function because they
* cannot be used to initialize static variable.
*/
pSymRead[ ul ].pFunPtr();
}
}
for( ul = 0; ul < ulSymbols; ul++ ) /* Check INIT functions */
{
if( (pSymRead[ ul ].cScope & FS_INITEXIT) == FS_INIT )
{
hb_vmPushSymbol( pSymRead + ul );
hb_vmPushNil();
for( i = 0; i < (hb_pcount() - 1); i++ )
hb_vmPush( hb_param( i + 2, IT_ANY ) );
/* Push other cmdline params*/
hb_vmDo( hb_pcount() - 1 ); /* Run init function */
}
}
hb_vmPushSymbol( pSymRead );
hb_vmPushNil();
for( i = 0; i < (hb_pcount() - 1); i++ )
hb_vmPush( hb_param( i + 2, IT_ANY ) ); /* Push other cmdline params*/
hb_vmDo( hb_pcount() - 1 ); /* Run the thing !!! */
for( ul = 0; ul < ulSymbols; ul++ ) /* Check EXIT functions */
{
if( ( pSymRead[ ul ].cScope & FS_INITEXIT ) == FS_EXIT )
{
hb_vmPushSymbol( pSymRead + ul );
hb_vmPushNil();
hb_vmDo( 0 ); /* Run exit function */
pSymRead[ ul ].cScope = pSymRead[ ul ].cScope & (~FS_EXIT);
/* Exit function cannot be
handled by main in hvm.c */
}
}
for( ul = 0; ul < ulFuncs; ul++ )
{
hb_xfree( pDynFunc[ ul ].pAsmCall->pAsmData );
hb_xfree( pDynFunc[ ul ].pAsmCall );
hb_xfree( pDynFunc[ ul ].pCode );
hb_xfree( pDynFunc[ ul ].szName );
}
for( ul = 0; ul < ulSymbols; ul++ )
{
hb_xfree( pSymRead[ ul ].szName );
}
hb_xfree( pDynFunc );
hb_xfree( pSymRead );
HRB_FileClose( file );
}
else
{
printf( "\nCannot open %s\n", szFileName );
}
}
}
static ULONG FindSymbol( char *szName, PDYNFUNC pDynFunc, ULONG ulLoaded )
{
ULONG ulRet;
BYTE bFound;
if( ( ulSymEntry < ulLoaded ) && /* Is it a normal list ? */
!strcmp( szName, pDynFunc[ ulSymEntry ].szName ) )
ulRet = ulSymEntry++;
else
{
bFound = FALSE;
ulRet = 0;
while( !bFound && ulRet < ulLoaded )
{
if( !strcmp( szName, pDynFunc[ ulRet ].szName ) )
bFound = TRUE;
else
ulRet++;
}
if( !bFound )
ulRet = SYM_NOT_FOUND;
}
return( ulRet );
}
/* ReadId
Read the next (zero terminated) identifier */
char *ReadId( FILE *file )
{
char *szTemp; /* Temporary buffer */
char *szIdx;
char *szRet;
BYTE bCont = TRUE;
szTemp = ( char * )hb_xgrab( 256 );
szIdx = szTemp;
do
{
HRB_FileRead( szIdx, 1, 1, file );
if( *szIdx )
szIdx++;
else
bCont = FALSE;
} while( bCont );
szRet = (char *) hb_xgrab( szIdx - szTemp + 1 );
strcpy( szRet, szTemp );
hb_xfree( szTemp );
return( szRet );
}
BYTE ReadByte( FILE *file )
{
BYTE bRet;
HRB_FileRead( &bRet, 1, 1, file );
return( bRet );
}
long ReadLong( FILE *file )
{
char cLong[4]; /* Temporary long */
HRB_FileRead( cLong, 4, 1, file );
if( cLong[3] ) /* Convert to long if ok */
{
PHB_ITEM pError = hb_errNew();
hb_errPutDescription(pError, "Error reading .HRB file");
hb_errLaunch(pError);
hb_errRelease(pError);
return( 0L );
}
else
return( ( (BYTE) cLong[0] ) +
( (BYTE) cLong[1] ) * 0x100 +
( (BYTE) cLong[2] ) * 0x10000 +
( (BYTE) cLong[3] ) * 0x1000000 );
}
/* HRB_FileRead
Controlled read from file. If errornous -> Break */
static void HRB_FileRead( char *cBuffer, int iSize, int iCount, FILE *fStream )
{
if( iCount != (int) fread( cBuffer, iSize, iCount, fStream ) )
{ /* Read error */
PHB_ITEM pError = hb_errNew();
hb_errPutDescription(pError, "Error reading .HRB file");
hb_errLaunch(pError);
hb_errRelease(pError);
exit(1);
}
}
/* HRB_FileOpen
Open an .HRB file */
static FILE *HRB_FileOpen( char *szFileName )
{
return( fopen( szFileName, "rb" ) );
}
/* HRB_FileClose
Close an .HRB file */
static void HRB_FileClose( FILE *file )
{
fclose( file );
}
/* Patch an address of the dynamic function */
static void Patch( BYTE * pCode, ULONG ulOffset, void *Address )
{
/* #if 32 bits and low byte first */
pCode[ ulOffset ] = ( (ULONG) Address ) & 0xFF;
pCode[ ulOffset + 1 ] = ( (ULONG) Address >> 8 ) & 0xFF;
pCode[ ulOffset + 2 ] = ( (ULONG) Address >> 16 ) & 0xFF;
pCode[ ulOffset + 3 ] = ( (ULONG) Address >> 24 ) & 0xFF;
/* #elseif 16 bits and low byte first */
/* #elseif 32 bits and high byte first */
/* #elseif ... */
/* #endif */
}
/* Intel specific ?? Patch an address relative to the next instruction */
static void PatchRelative( BYTE * pCode, ULONG ulOffset,
void *Address, ULONG ulNext )
{
/* #if 32 bits and low byte first */
ULONG ulBase = (ULONG) pCode + ulNext;
/* Relative to next instruction */
ULONG ulRelative = (ULONG) Address - ulBase;
pCode[ ulOffset ] = ( ulRelative ) & 0xFF;
pCode[ ulOffset + 1 ] = ( ulRelative >> 8 ) & 0xFF;
pCode[ ulOffset + 2 ] = ( ulRelative >> 16 ) & 0xFF;
pCode[ ulOffset + 3 ] = ( ulRelative >> 24 ) & 0xFF;
/* #elseif 16 bits and low byte first */
/* #elseif 32 bits and high byte first */
/* #elseif ... */
/* #endif */
}
/*
Create dynamic function.
This function is needed, since it will allow the existing strategy of
function pointers to work properly.
For each Harbour function a little program calling the virtual machine
should be present (see : *.c)
Since these programs no longer exists when using this system, they should
be create dynamically at run-time.
If a .PRG contains 10 functions, 10 dynamic functions are created which
are all the same :-) except for 2 pointers.
*/
static PASM_CALL CreateFun( PHB_SYMB pSymbols, BYTE * pCode )
{
PASM_CALL asmRet = (PASM_CALL) hb_xgrab( sizeof( ASM_CALL ) );
asmRet->pAsmData = (BYTE * ) hb_xgrab( sizeof( prgFunction ) );
memcpy( asmRet->pAsmData, prgFunction, sizeof( prgFunction ) );
/* Copy new assembler code in */
/* #if INTEL32 */
Patch( asmRet->pAsmData, 1, pSymbols ); /* Insert pointer to testsym */
Patch( asmRet->pAsmData, 6, pCode); /* Insert pointer to testcode */
PatchRelative( asmRet->pAsmData, 11, &hb_vmExecute, 15 );
/* Insert pointer to hb_vmExecute() */
/* #elseif INTEL16 */
/* #elseif MOTOROLA */
/* #elseif ... */
/* #endif */
return( asmRet );
}

View File

@@ -0,0 +1,16 @@
// $Id$
//
#include "external.ch"
PROCEDURE MAIN( cHRBFile )
IF( ! EMPTY(cHRBFile) )
HB_RUN( cHRBFile )
ELSE
?
? "Usage:"
? "./runmain hrbfile"
?
ENDIF
RETURN

View File

@@ -356,7 +356,7 @@ long ReadLong( FILE *file )
hb_errPutDescription(pError, "Error reading .HRB file");
hb_errLaunch(pError);
hb_errRelease(pError);
return( NULL );
return( 0L );
}
else
return( ( (BYTE) cLong[0] ) +