ChangeLog 19990820-15:05 GMT+2
This commit is contained in:
@@ -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
547
harbour/include/external.ch
Normal 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
|
||||
//------------------------------------------------------------
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -5,8 +5,12 @@
|
||||
ROOT = ../../
|
||||
|
||||
C_SOURCES=\
|
||||
runhrb.c
|
||||
|
||||
C_MAIN=runner.c
|
||||
PRG_SOURCES=\
|
||||
external.prg
|
||||
|
||||
PRG_MAIN=runmain.prg
|
||||
|
||||
LIBS=\
|
||||
tools \
|
||||
|
||||
547
harbour/source/runner/external.prg
Normal file
547
harbour/source/runner/external.prg
Normal 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
|
||||
//------------------------------------------------------------
|
||||
447
harbour/source/runner/runhrb.c
Normal file
447
harbour/source/runner/runhrb.c
Normal 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 );
|
||||
}
|
||||
|
||||
16
harbour/source/runner/runmain.prg
Normal file
16
harbour/source/runner/runmain.prg
Normal file
@@ -0,0 +1,16 @@
|
||||
// $Id$
|
||||
//
|
||||
#include "external.ch"
|
||||
|
||||
PROCEDURE MAIN( cHRBFile )
|
||||
|
||||
IF( ! EMPTY(cHRBFile) )
|
||||
HB_RUN( cHRBFile )
|
||||
ELSE
|
||||
?
|
||||
? "Usage:"
|
||||
? "./runmain hrbfile"
|
||||
?
|
||||
ENDIF
|
||||
|
||||
RETURN
|
||||
@@ -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] ) +
|
||||
|
||||
Reference in New Issue
Block a user