2000-07-12 08:46 UTC+0100 Victor Szakats <info@szelvesz.hu>
This commit is contained in:
@@ -1,3 +1,44 @@
|
||||
2000-07-12 08:46 UTC+0100 Victor Szakats <info@szelvesz.hu>
|
||||
|
||||
* doc/whatsnew.txt
|
||||
+ Added some new items.
|
||||
|
||||
* source/pp/pptable.c
|
||||
! .FMT -> .fmt (to be multiplatform friendly)
|
||||
|
||||
* makefile.bc
|
||||
! Fixed PP dependency for HARBOUR.EXE
|
||||
|
||||
* source/pp/ppcore.c
|
||||
* source/rdd/dbfntx/dbfntx1.c
|
||||
- Removed // comments
|
||||
|
||||
* source/rdd/dbfntx/dbfntx1.c
|
||||
! Fixed some BCC warnings.
|
||||
|
||||
* source/rdd/dbcmd.c
|
||||
* source/rtl/disksphb.c
|
||||
* source/rtl/errorapi.c
|
||||
* source/rtl/tget.prg
|
||||
* Formatting
|
||||
|
||||
* utils/hbdoc/Makefile
|
||||
! Fixed TAB
|
||||
|
||||
* utils/hbextern/hbextern.prg
|
||||
* utils/hbtest/rt_misc.prg
|
||||
* = assigments -> :=
|
||||
|
||||
* include/hbcomp.h
|
||||
* source/compiler/harbour.c
|
||||
* source/compiler/harbour.l
|
||||
* source/compiler/harbour.y
|
||||
- Removed HB_NESTED_COMPILE.
|
||||
|
||||
- include/hbstruc.ch
|
||||
- source/rtl/hbstruc.prg
|
||||
- Removed.
|
||||
|
||||
2000-07-11 09:30 UTC+0800 Ron Pinkas <ron@profit-master.com>
|
||||
* hb_slex.bc
|
||||
* Updated to match makefile.bc
|
||||
@@ -315,7 +356,6 @@
|
||||
*the garbage collector is now aware of all items stored internally
|
||||
in class related structures
|
||||
|
||||
|
||||
2000-06-27-22:45 Luiz Rafael Culik <culik@sl.conex.net>
|
||||
*Changelog
|
||||
*Renamed to ChangeLog.008 and Started a new one
|
||||
|
||||
@@ -4,6 +4,23 @@
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
- Added HB_IDLE*() idle state handling functions.
|
||||
- Watcom C++ fixes.
|
||||
- SET RELATION support for RDDADS
|
||||
- New language modules: IT, DE
|
||||
- Slang support enhanced
|
||||
- MemoEdit()/TEditor enhancements
|
||||
- .NTX support started (creation now works)
|
||||
- HBDOC .CHM output
|
||||
- Garbage collector added
|
||||
- Compiler -u, -m support, support for automatically compiled files for
|
||||
DO, SET FORMAT TO, etc., memory usage optimizations
|
||||
- Added HB_DISKSPACE(), __DBLIST(), __DBAPPEND()
|
||||
- Fixes: Line numbering, PP, macro compiler, RTL (Extend API, Item API,
|
||||
TRANSFORM(), DISKSPACE(), CURDIR(), __GET()), HBDOC,
|
||||
HBTEST (for Xbase++ and Linux), Documentation, Class engine
|
||||
- HBZLIB enhancements
|
||||
|
||||
Version 0.34 Build 34 (2000-06-02)
|
||||
|
||||
- OO engine enhanced (multiple inheritance, scoping, forwarding and delegating)
|
||||
|
||||
@@ -195,51 +195,11 @@ typedef struct _AUTOOPEN
|
||||
struct _AUTOOPEN * pNext;
|
||||
} AUTOOPEN, * PAUTOOPEN; /* support structure for extern symbols */
|
||||
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
typedef struct _HARBVARS
|
||||
{
|
||||
FILES Files ;
|
||||
FUNCTIONS Functions ;
|
||||
FUNCTIONS Funcalls ;
|
||||
SYMBOLS Symbols ;
|
||||
PFUNCTION pInitFunc ;
|
||||
PEXTERN pExterns ;
|
||||
BOOL bExternal ;
|
||||
char * szAnnounce ;
|
||||
BOOL bAnyWarning ;
|
||||
int iLine ;
|
||||
int iFunctionCnt ;
|
||||
int iErrorCount ;
|
||||
char cVarType ;
|
||||
ULONG ulLastLinePos ;
|
||||
int iStaticCnt ;
|
||||
int iVarScope ;
|
||||
BOOL EOL ;
|
||||
PHB_FNAME pFileName ;
|
||||
char * buffer ;
|
||||
FILE * yyin ;
|
||||
FILE * yyout ;
|
||||
char * yytext ;
|
||||
int yyleng ;
|
||||
void * yy_buffer ;
|
||||
int yy_init ;
|
||||
int yy_start ;
|
||||
int yychar ;
|
||||
void * yylval ;
|
||||
#ifdef YYLSP_NEEDED
|
||||
void * yylloc ;
|
||||
#endif
|
||||
int yynerrs ;
|
||||
void * pLoops ;
|
||||
void * rtvars ;
|
||||
} HARBVARS, * PHARBVARS;
|
||||
#endif
|
||||
|
||||
/* definitions for hb_compPCodeEval() support */
|
||||
typedef void *HB_VOID_PTR;
|
||||
typedef void * HB_VOID_PTR;
|
||||
#define HB_PCODE_FUNC( func, type ) USHORT func( PFUNCTION pFunc, ULONG lPCodePos, type cargo )
|
||||
typedef HB_PCODE_FUNC( HB_PCODE_FUNC_, HB_VOID_PTR );
|
||||
typedef HB_PCODE_FUNC_ *HB_PCODE_FUNC_PTR;
|
||||
typedef HB_PCODE_FUNC_ * HB_PCODE_FUNC_PTR;
|
||||
|
||||
void hb_compPCodeEval( PFUNCTION, HB_PCODE_FUNC_PTR *, void * );
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#ifndef HB_STRUCTURE
|
||||
|
||||
#define HB_STRUCTURE
|
||||
|
||||
#COMMAND STRUCTURE <StruName> <Var1> <x1:AS CLASS,AS STRUCTURE,AS STRU,AS ARRAY OF,AS> <Type1> [, <VarN> <xN:AS CLASS,AS STRUCTURE,AS STRU,AS ARRAY OF,AS> <TypeN> ] => ;
|
||||
STATIC __<StruName> := {|| IF( __<StruName> == NIL, , ) , HB_Structure( <"StruName">, { <"Var1"> [, <"VarN">] } )} ;;
|
||||
DECLARE <StruName> <Var1> <x1> <Type1> [ <VarN> <xN> <TypeN> ] ;;
|
||||
#TRANSLATE AS NEW <StruName> => AS STRUCTURE <StruName> := ( Eval( __<StruName> ), HB_Structure( <"StruName"> ) )
|
||||
|
||||
#endif
|
||||
@@ -520,8 +520,7 @@ HARBOUR_EXE_OBJS = \
|
||||
$(OBJ_DIR)\exproptb.obj \
|
||||
$(OBJ_DIR)\exproptc.obj \
|
||||
$(OBJ_DIR)\hbfunchk.obj \
|
||||
$(OBJ_DIR)\ppcore.obj \
|
||||
$(OBJ_DIR)\ppcomp.obj
|
||||
$(PP_LIB)
|
||||
|
||||
#
|
||||
# HBRUN.EXE rules
|
||||
|
||||
@@ -144,26 +144,6 @@ static int hb_compAutoOpen( char * szPrg, BOOL * bSkipGen );
|
||||
|
||||
/* -m Support */
|
||||
static BOOL hb_compAutoOpenFind( char * szName );
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
static void hb_compSaveVars( PHARBVARS, int );
|
||||
static void hb_compRestoreVars( PHARBVARS, int );
|
||||
|
||||
/* In Harbour.l */
|
||||
extern void * hb_compGet_YY_CURRENT_BUFFER( void );
|
||||
extern void hb_compSet_YY_CURRENT_BUFFER( void * );
|
||||
extern int hb_compGet_yy_init( void );
|
||||
extern void hb_compSet_yy_init( int i );
|
||||
extern int hb_compGet_yy_start( void );
|
||||
extern void hb_compSet_yy_start( int i );
|
||||
extern int hb_compGet_yy_did_buffer_switch_on_eof( void );
|
||||
extern void hb_compSet_yy_did_buffer_switch_on_eof( int );
|
||||
|
||||
/* In Harbour.y */
|
||||
extern void * hb_compGet_pLoops( void );
|
||||
extern void hb_compSet_pLoops( void * pLoops );
|
||||
extern void * hb_compGet_rtvars( void );
|
||||
extern void hb_compSet_rtvars( void * rtvars );
|
||||
#endif
|
||||
|
||||
extern int yyparse( void ); /* main yacc parsing function */
|
||||
|
||||
@@ -3359,23 +3339,6 @@ int hb_compCompile( char * szPrg, int argc, char * argv[] )
|
||||
int iStatus = EXIT_SUCCESS;
|
||||
PHB_FNAME pFileName;
|
||||
|
||||
/* Code to support nested compile excluded - other support code is #if defed out later in this file as well as in Harbour.l and Harbour.y */
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
BOOL bNested = ( argc == 0 );
|
||||
HARBVARS HarbourVars ;
|
||||
#else
|
||||
/* Note: the nested compile is almost completle, known issue when resuming compilation of main file, the immediate next line is skipped. */
|
||||
#define hb_compSaveVars( p, i)
|
||||
#define hb_compRestoreVars( p, i )
|
||||
#endif
|
||||
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
if( bNested )
|
||||
{
|
||||
pFileName = hb_comp_pFileName;
|
||||
}
|
||||
#endif
|
||||
|
||||
hb_comp_pFileName = hb_fsFNameSplit( szPrg );
|
||||
|
||||
if( hb_comp_pFileName->szName )
|
||||
@@ -3402,51 +3365,15 @@ int hb_compCompile( char * szPrg, int argc, char * argv[] )
|
||||
|
||||
if( iStatus == EXIT_SUCCESS )
|
||||
{
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
if( bNested )
|
||||
{
|
||||
/* Minimal Save. */
|
||||
hb_compSaveVars( &HarbourVars, 1 );
|
||||
/* Add /D command line or envvar defines */
|
||||
hb_compChkDefines( argc, argv );
|
||||
|
||||
/* Minimal Init for hb_compInclude() */
|
||||
hb_comp_files.pLast = NULL ;
|
||||
hb_comp_files.iFiles = 0 ;
|
||||
hb_comp_iLine = 1 ;
|
||||
hb_comp_iLine = 1 ;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/* Add /D command line or envvar defines */
|
||||
hb_compChkDefines( argc, argv );
|
||||
|
||||
/* Initialize support variables */
|
||||
hb_compInitVars();
|
||||
}
|
||||
/* Initialize support variables */
|
||||
hb_compInitVars();
|
||||
|
||||
if( hb_compInclude( szFileName, NULL ) )
|
||||
{
|
||||
BOOL bSkipGen = FALSE ;
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
if( bNested )
|
||||
{
|
||||
FILES tmpFiles ;
|
||||
|
||||
/* Complementary Save */
|
||||
hb_compSaveVars( &HarbourVars, 2 );
|
||||
|
||||
tmpFiles = hb_comp_files ;
|
||||
|
||||
/* Full init. */
|
||||
hb_compInitVars();
|
||||
|
||||
/* Must restore the recently opened file*/
|
||||
hb_comp_files = tmpFiles ;
|
||||
|
||||
hb_comp_pExterns = NULL;
|
||||
hb_comp_bExternal = FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
hb_comp_szFile = szFileName;
|
||||
|
||||
@@ -3458,13 +3385,6 @@ int hb_compCompile( char * szPrg, int argc, char * argv[] )
|
||||
printf( "Compiling '%s'...\n", szFileName );
|
||||
}
|
||||
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
if( bNested )
|
||||
{
|
||||
yyrestart( yyin );
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Generate the starting procedure frame */
|
||||
if( hb_comp_bStartProc )
|
||||
hb_compFunctionAdd( hb_strupr( hb_strdup( hb_comp_pFileName->szName ) ), HB_FS_PUBLIC, FUN_PROCEDURE );
|
||||
@@ -3605,22 +3525,7 @@ int hb_compCompile( char * szPrg, int argc, char * argv[] )
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
if( bNested )
|
||||
{
|
||||
printf( "Cannot open %s, assumed external\n", szFileName );
|
||||
|
||||
/* Minimal Restore. */
|
||||
hb_compRestoreVars( &HarbourVars, 1 );
|
||||
|
||||
/* To avoid full restore down below. */
|
||||
HarbourVars.yyin = NULL;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
printf( "Cannot open input file: %s\n", szFileName );
|
||||
}
|
||||
printf( "Cannot open input file: %s\n", szFileName );
|
||||
|
||||
/* printf( "No code generated\n" ); */
|
||||
iStatus = EXIT_FAILURE;
|
||||
@@ -3656,26 +3561,6 @@ int hb_compCompile( char * szPrg, int argc, char * argv[] )
|
||||
iStatus = EXIT_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
if( bNested )
|
||||
{
|
||||
/* Only if needed. */
|
||||
if( HarbourVars.yyin )
|
||||
{
|
||||
yyrestart( HarbourVars.yyin );
|
||||
|
||||
/* Full Restore */
|
||||
hb_compRestoreVars( &HarbourVars, 3 );
|
||||
}
|
||||
|
||||
if( pFileName )
|
||||
{
|
||||
hb_xfree( ( void * ) hb_comp_pFileName );
|
||||
hb_comp_pFileName = pFileName;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return iStatus;
|
||||
}
|
||||
|
||||
@@ -3820,105 +3705,3 @@ int hb_compAutoOpen( char * szPrg, BOOL * pbSkipGen )
|
||||
return iStatus;
|
||||
}
|
||||
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
void hb_compSaveVars( PHARBVARS pHarbourVars, int iScope )
|
||||
{
|
||||
if( iScope == 1 || iScope == 3 )
|
||||
{
|
||||
pHarbourVars->Files = hb_comp_files ;
|
||||
pHarbourVars->iLine = hb_comp_iLine ;
|
||||
pHarbourVars->yyin = yyin ;
|
||||
}
|
||||
|
||||
if( iScope == 2 || iScope == 3 )
|
||||
{
|
||||
pHarbourVars->Functions = hb_comp_functions ;
|
||||
pHarbourVars->Funcalls = hb_comp_funcalls ;
|
||||
pHarbourVars->Symbols = hb_comp_symbols ;
|
||||
pHarbourVars->pInitFunc = hb_comp_pInitFunc ;
|
||||
pHarbourVars->pExterns = hb_comp_pExterns ;
|
||||
|
||||
pHarbourVars->bExternal = hb_comp_bExternal ;
|
||||
pHarbourVars->szAnnounce = hb_comp_szAnnounce ;
|
||||
pHarbourVars->bAnyWarning = hb_comp_bAnyWarning ;
|
||||
|
||||
pHarbourVars->iFunctionCnt = hb_comp_iFunctionCnt ;
|
||||
pHarbourVars->iErrorCount = hb_comp_iErrorCount ;
|
||||
pHarbourVars->cVarType = hb_comp_cVarType ;
|
||||
pHarbourVars->ulLastLinePos = hb_comp_ulLastLinePos ;
|
||||
pHarbourVars->iStaticCnt = hb_comp_iStaticCnt ;
|
||||
pHarbourVars->iVarScope = hb_comp_iVarScope ;
|
||||
pHarbourVars->EOL = hb_comp_EOL ;
|
||||
pHarbourVars->pFileName = hb_comp_pFileName ;
|
||||
pHarbourVars->buffer = hb_comp_buffer ;
|
||||
|
||||
pHarbourVars->yyout = yyout ;
|
||||
pHarbourVars->yytext = yytext ;
|
||||
pHarbourVars->yyleng = yyleng ;
|
||||
|
||||
pHarbourVars->yychar = yychar ;
|
||||
pHarbourVars->yylval = yylval ;
|
||||
#ifdef YYLSP_NEEDED
|
||||
pHarbourVars->yylloc = yylloc ;
|
||||
#endif
|
||||
pHarbourVars->yynerrs = yynerrs ;
|
||||
|
||||
pHarbourVars->yy_buffer = hb_compGet_YY_CURRENT_BUFFER();
|
||||
pHarbourVars->yy_start = hb_compGet_yy_start() ;
|
||||
pHarbourVars->yy_init = hb_compGet_yy_init() ;
|
||||
|
||||
pHarbourVars->pLoops = hb_compGet_pLoops() ;
|
||||
pHarbourVars->rtvars = hb_compGet_rtvars() ;
|
||||
}
|
||||
}
|
||||
|
||||
void hb_compRestoreVars( PHARBVARS pHarbourVars, int iScope )
|
||||
{
|
||||
if( iScope == 1 || iScope == 3 )
|
||||
{
|
||||
hb_comp_files = pHarbourVars->Files ;
|
||||
hb_comp_iLine = pHarbourVars->iLine ;
|
||||
yyin = pHarbourVars->yyin ;
|
||||
}
|
||||
|
||||
if( iScope == 2 || iScope == 3 )
|
||||
{
|
||||
hb_comp_functions = pHarbourVars->Functions ;
|
||||
hb_comp_funcalls = pHarbourVars->Funcalls ;
|
||||
hb_comp_symbols = pHarbourVars->Symbols ;
|
||||
hb_comp_pExterns = pHarbourVars->pExterns ;
|
||||
hb_comp_pInitFunc = pHarbourVars->pInitFunc ;
|
||||
hb_comp_bExternal = pHarbourVars->bExternal ;
|
||||
|
||||
hb_comp_szAnnounce = pHarbourVars->szAnnounce ;
|
||||
hb_comp_bAnyWarning = pHarbourVars->bAnyWarning ;
|
||||
hb_comp_iFunctionCnt = pHarbourVars->iFunctionCnt ;
|
||||
hb_comp_iErrorCount = pHarbourVars->iErrorCount ;
|
||||
hb_comp_cVarType = pHarbourVars->cVarType ;
|
||||
hb_comp_ulLastLinePos = pHarbourVars->ulLastLinePos ;
|
||||
hb_comp_iStaticCnt = pHarbourVars->iStaticCnt ;
|
||||
hb_comp_iVarScope = pHarbourVars->iVarScope ;
|
||||
hb_comp_EOL = pHarbourVars->EOL ;
|
||||
hb_comp_pFileName = pHarbourVars->pFileName ;
|
||||
hb_comp_buffer = pHarbourVars->buffer ;
|
||||
|
||||
yyout = pHarbourVars->yyout ;
|
||||
yytext = pHarbourVars->yytext ;
|
||||
yyleng = pHarbourVars->yyleng ;
|
||||
|
||||
yychar = pHarbourVars->yychar ;
|
||||
yylval = pHarbourVars->yylval ;
|
||||
#ifdef YYLSP_NEEDED
|
||||
yylloc = pHarbourVars->yylloc ;
|
||||
#endif
|
||||
yynerrs = pHarbourVars->yynerrs ;
|
||||
|
||||
hb_compSet_YY_CURRENT_BUFFER( pHarbourVars->yy_buffer ) ;
|
||||
hb_compSet_yy_start( pHarbourVars->yy_start ) ;
|
||||
hb_compSet_yy_init( pHarbourVars->yy_init ) ;
|
||||
|
||||
hb_compSet_pLoops( pHarbourVars->pLoops ) ;
|
||||
hb_compSet_rtvars( pHarbourVars->rtvars ) ;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1895,45 +1895,3 @@ static int yy_ConvertNumber( char * szBuffer )
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
void * hb_compGet_YY_CURRENT_BUFFER()
|
||||
{
|
||||
return YY_CURRENT_BUFFER;
|
||||
}
|
||||
|
||||
void hb_compSet_YY_CURRENT_BUFFER( void * pBuffer )
|
||||
{
|
||||
YY_CURRENT_BUFFER = ( YY_BUFFER_STATE )pBuffer;
|
||||
yy_load_buffer_state();
|
||||
}
|
||||
|
||||
int hb_compGet_yy_init( void )
|
||||
{
|
||||
return yy_init;
|
||||
}
|
||||
|
||||
void hb_compSet_yy_init( int i )
|
||||
{
|
||||
yy_init = i;
|
||||
}
|
||||
|
||||
int hb_compGet_yy_start( void )
|
||||
{
|
||||
return yy_start;
|
||||
}
|
||||
|
||||
void hb_compSet_yy_start( int i )
|
||||
{
|
||||
yy_start = i;
|
||||
}
|
||||
|
||||
int hb_compGet_yy_did_buffer_switch_on_eof( void )
|
||||
{
|
||||
return yy_did_buffer_switch_on_eof;
|
||||
}
|
||||
|
||||
void hb_compSet_yy_did_buffer_switch_on_eof( int i )
|
||||
{
|
||||
yy_did_buffer_switch_on_eof = i;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2042,24 +2042,3 @@ static void hb_compVariableDim( char * szName, HB_EXPR_PTR pInitValue )
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HB_NESTED_COMPILE
|
||||
void * hb_compGet_pLoops( void )
|
||||
{
|
||||
return (void *) hb_comp_pLoops;
|
||||
}
|
||||
|
||||
void hb_compSet_pLoops( void * pLoops )
|
||||
{
|
||||
hb_comp_pLoops = (PTR_LOOPEXIT) pLoops;
|
||||
}
|
||||
|
||||
void * hb_compGet_rtvars( void )
|
||||
{
|
||||
return (void *) hb_comp_rtvars;
|
||||
}
|
||||
|
||||
void hb_compSet_rtvars( void * rtvars )
|
||||
{
|
||||
hb_comp_rtvars = (HB_RTVAR_PTR) rtvars;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1396,14 +1396,10 @@ static int CommandStuff( char * ptrmp, char * inputLine, char * ptro, int * lenr
|
||||
while( *ptrmp != '\0' );
|
||||
}
|
||||
|
||||
//printf( "Line: >%s<\nOut: >%s<\nLen: %i Last: %c\n", inputLine, ptro, *lenres, ptro[(*lenres)-1] );
|
||||
|
||||
SearnRep( "\1","",0,ptro,lenres);
|
||||
*(ptro + *lenres) = '\0';
|
||||
*lenres = RemoveSlash( ptro ); /* Removing '\' from result string */
|
||||
|
||||
//printf( "*Line: >%s<\n*Out: >%s<\n*Len: %i Last: %c\n", inputLine, ptro, *lenres, ptro[(*lenres)-1] );
|
||||
|
||||
if( com_or_tra ) return 1; else return (ptri-inputLine);
|
||||
}
|
||||
|
||||
|
||||
@@ -204,7 +204,7 @@ void hb_pp_Table( void )
|
||||
static COMMANDS sC___92 = {0,"SET","DELIMITERS TO \1A00","Set( _SET_DELIMCHARS, \1A00 )",&sC___91 };
|
||||
static COMMANDS sC___93 = {0,"SET","DELIMITERS TO DEFAULT","Set( _SET_DELIMCHARS, '::' )",&sC___92 };
|
||||
static COMMANDS sC___94 = {0,"SET","DELIMITERS TO","Set( _SET_DELIMCHARS, '::' )",&sC___93 };
|
||||
static COMMANDS sC___95 = {0,"SET","FORMAT TO \1A00","_ProcReq_( \1A30 + '.FMT' ) ; __SetFormat( {|| \1A00()} )",&sC___94 };
|
||||
static COMMANDS sC___95 = {0,"SET","FORMAT TO \1A00","_ProcReq_( \1A30 + '.fmt' ) ; __SetFormat( {|| \1A00()} )",&sC___94 };
|
||||
static COMMANDS sC___96 = {0,"SET","FORMAT TO \1A00.\1B00",
|
||||
"_ProcReq_( \1A30 + '.' + \1B30 ) ; __SetFormat( {|| \1A00()} )",&sC___95 };
|
||||
static COMMANDS sC___97 = {0,"SET","FORMAT TO \1A20&>",
|
||||
|
||||
@@ -362,7 +362,7 @@ static ERRCODE defEvalBlock( AREAP pArea, PHB_ITEM pBlock )
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("defEvalBlock(%p, %p)", pArea, pBlock));
|
||||
|
||||
if( !pBlock || !HB_IS_BLOCK( pBlock ) )
|
||||
if( ! pBlock || ! HB_IS_BLOCK( pBlock ) )
|
||||
{
|
||||
PHB_ITEM pError;
|
||||
|
||||
@@ -375,7 +375,7 @@ static ERRCODE defEvalBlock( AREAP pArea, PHB_ITEM pBlock )
|
||||
}
|
||||
|
||||
pResult = hb_vmEvalBlock( pBlock );
|
||||
if( !pArea->valResult )
|
||||
if( ! pArea->valResult )
|
||||
pArea->valResult = hb_itemNew( NULL );
|
||||
hb_itemCopy( pArea->valResult, pResult );
|
||||
|
||||
@@ -384,8 +384,8 @@ static ERRCODE defEvalBlock( AREAP pArea, PHB_ITEM pBlock )
|
||||
|
||||
static ERRCODE defclearRel( AREAP pArea )
|
||||
{
|
||||
LPDBRELINFO lpdbRelations = pArea->lpdbRelations;
|
||||
LPDBRELINFO lpdbRelPrev;
|
||||
LPDBRELINFO lpdbRelations = pArea->lpdbRelations;
|
||||
LPDBRELINFO lpdbRelPrev;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("defclearRel(%p)", pArea ));
|
||||
|
||||
@@ -393,7 +393,7 @@ static ERRCODE defclearRel( AREAP pArea )
|
||||
{
|
||||
do
|
||||
{
|
||||
( ( AREAP ) lpdbRelations->lpaChild )->uiParents --;
|
||||
( ( AREAP ) lpdbRelations->lpaChild )->uiParents--;
|
||||
lpdbRelPrev = lpdbRelations;
|
||||
lpdbRelations = lpdbRelations->lpdbriNext;
|
||||
hb_xfree( lpdbRelPrev );
|
||||
@@ -403,33 +403,38 @@ static ERRCODE defclearRel( AREAP pArea )
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static ERRCODE defsetRel( AREAP pArea, LPDBRELINFO lpdbRelInf )
|
||||
static ERRCODE defsetRel( AREAP pArea, LPDBRELINFO lpdbRelInf )
|
||||
{
|
||||
LPDBRELINFO lpdbRelations;
|
||||
LPDBRELINFO lpdbRelations;
|
||||
|
||||
( (AREAP) lpdbRelInf->lpaChild )->uiParents ++;
|
||||
( ( AREAP ) lpdbRelInf->lpaChild )->uiParents++;
|
||||
lpdbRelations = pArea->lpdbRelations;
|
||||
if( ! lpdbRelations )
|
||||
{
|
||||
pArea->lpdbRelations = ( LPDBRELINFO ) hb_xgrab( sizeof( DBRELINFO ) );
|
||||
lpdbRelations = pArea->lpdbRelations;
|
||||
if( !lpdbRelations )
|
||||
{
|
||||
pArea->lpdbRelations = ( LPDBRELINFO ) hb_xgrab( sizeof( DBRELINFO ) );
|
||||
lpdbRelations = pArea->lpdbRelations;
|
||||
}
|
||||
else
|
||||
{
|
||||
while( !lpdbRelations->lpdbriNext )
|
||||
lpdbRelations = lpdbRelations->lpdbriNext;
|
||||
lpdbRelations->lpdbriNext = ( LPDBRELINFO ) hb_xgrab( sizeof( DBRELINFO ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
while( ! lpdbRelations->lpdbriNext )
|
||||
lpdbRelations = lpdbRelations->lpdbriNext;
|
||||
}
|
||||
lpdbRelations->lpaChild = lpdbRelInf->lpaChild;
|
||||
lpdbRelations->itmCobExpr = lpdbRelInf->itmCobExpr;
|
||||
lpdbRelations->abKey = lpdbRelInf->abKey;
|
||||
lpdbRelations->lpdbriNext = lpdbRelInf->lpdbriNext;
|
||||
return SUCCESS;
|
||||
lpdbRelations->lpdbriNext = ( LPDBRELINFO ) hb_xgrab( sizeof( DBRELINFO ) );
|
||||
lpdbRelations = lpdbRelations->lpdbriNext;
|
||||
}
|
||||
lpdbRelations->lpaChild = lpdbRelInf->lpaChild;
|
||||
lpdbRelations->itmCobExpr = lpdbRelInf->itmCobExpr;
|
||||
lpdbRelations->abKey = lpdbRelInf->abKey;
|
||||
lpdbRelations->lpdbriNext = lpdbRelInf->lpdbriNext;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static ERRCODE defrelText( AREAP pArea, USHORT relNum, char* cExpr )
|
||||
static ERRCODE defrelText( AREAP pArea, USHORT relNum, char * cExpr )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pArea );
|
||||
HB_SYMBOL_UNUSED( relNum );
|
||||
HB_SYMBOL_UNUSED( cExpr );
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@@ -437,7 +442,8 @@ static ERRCODE defFieldCount( AREAP pArea, USHORT * uiFields )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("defFieldCount(%p, %p)", pArea, uiFields));
|
||||
|
||||
* uiFields = pArea->uiFieldCount;
|
||||
*uiFields = pArea->uiFieldCount;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@@ -232,7 +232,6 @@ static int hb_ntxItemCompare( PHB_ITEM pKey1, PHB_ITEM pKey2 )
|
||||
|
||||
if( iResult == 0 )
|
||||
{
|
||||
EndPos += 1;
|
||||
iResult = pKey1->item.asString.length -
|
||||
pKey2->item.asString.length;
|
||||
}
|
||||
@@ -283,8 +282,6 @@ static ERRCODE hb_ntxPageAddPageKeyAdd( LPPAGEINFO pPage, PHB_ITEM pKey, int lev
|
||||
pPage->pKeys[nEnd].Tag = pNewPage->Page;
|
||||
memmove( pPage->pKeys + nBegin , pPage->pKeys + nEnd,
|
||||
( pPage->uiKeys - nEnd ) * sizeof( KEYINFO ) + sizeof( pPage->pKeys->Tag ) );
|
||||
//memset( pPage->pKeys + nBegin + nCount, 0 ,
|
||||
//( pPage->uiKeys - nEnd ) * sizeof( KEYINFO ) + sizeof( pPage->pKeys->Tag ) );
|
||||
pPage->uiKeys -= nCount;
|
||||
pNewPage->uiKeys = nCount + 1;
|
||||
pPage->Changed = TRUE;
|
||||
@@ -335,7 +332,7 @@ static ERRCODE hb_ntxPageKeyAdd( LPPAGEINFO pPage, PHB_ITEM pKey, int level)
|
||||
pLoadedPage = hb_ntxPageLoad( pPage, pPage->pKeys[i].Tag );
|
||||
if( pLoadedPage == NULL )
|
||||
{
|
||||
// TODO : Error recovery ???
|
||||
/* TODO : Error recovery ??? */
|
||||
return FAILURE;
|
||||
}
|
||||
hb_ntxPageKeyAdd( pLoadedPage, pKey, level+1 );
|
||||
@@ -357,7 +354,7 @@ static ERRCODE hb_ntxPageKeyAdd( LPPAGEINFO pPage, PHB_ITEM pKey, int level)
|
||||
pLoadedPage = hb_ntxPageLoad( pPage, pPage->pKeys[i].Tag );
|
||||
if( pLoadedPage == NULL )
|
||||
{
|
||||
// TODO : Error recovery ???
|
||||
/* TODO : Error recovery ??? */
|
||||
return FAILURE;
|
||||
}
|
||||
hb_ntxPageKeyAdd( pLoadedPage, pKey, level+1 );
|
||||
@@ -755,9 +752,9 @@ static ERRCODE hb_ntxHeaderLoad( LPINDEXINFO pIndex , char *ITN)
|
||||
pTag->KeyExpr = (char *) hb_xgrab( NTX_MAX_KEY );
|
||||
strcpy( pTag->KeyExpr, Header.key_expr );
|
||||
pTag->pKeyItem = pExpr;
|
||||
pTag->AscendKey = 1;//fAscendKey;
|
||||
pTag->AscendKey = 1; /* fAscendKey; */
|
||||
pTag->UniqueKey = Header.unique;
|
||||
pTag->KeyType = 'C';//bKeyType;
|
||||
pTag->KeyType = 'C'; /* bKeyType; */
|
||||
pTag->KeyLength = Header.key_size;
|
||||
pTag->Owner = pIndex;
|
||||
pTag->MaxKeys = Header.max_item;
|
||||
@@ -798,9 +795,9 @@ static ERRCODE ntxOrderCreate( AREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
PHB_ITEM pExpr, pResult, pError;
|
||||
PHB_ITEM pKeyExp, pForExp;
|
||||
HB_MACRO_PTR pExpMacro, pForMacro;
|
||||
USHORT uiType, uiLen = 0;
|
||||
USHORT uiType, uiLen;
|
||||
char * szFileName, * szTagName;
|
||||
LPINDEXINFO pIndex, pOldIndex;
|
||||
LPINDEXINFO pIndex;
|
||||
LPTAGINFO pTag;
|
||||
PHB_FNAME pFileName;
|
||||
DBORDERINFO pExtInfo;
|
||||
@@ -982,7 +979,6 @@ static ERRCODE ntxOrderCreate( AREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
|
||||
pIndex = hb_ntxIndexNew( pArea );
|
||||
pIndex->IndexName = szFileName;
|
||||
pOldIndex = pArea->lpIndexInfo;
|
||||
pArea->lpIndexInfo = pIndex;
|
||||
pTag = hb_ntxTagNew( pIndex, szTagName, pOrderInfo->abExpr->item.asString.value,
|
||||
pKeyExp, bType, uiLen, (char *) ( pArea->lpdbOrdCondInfo ? pArea->lpdbOrdCondInfo->abFor : NULL ),
|
||||
@@ -1053,7 +1049,7 @@ static ERRCODE ntxOrderInfo( AREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo )
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
//TODO: Raise recoverable error
|
||||
/* TODO: Raise recoverable error */
|
||||
break;
|
||||
case DBOI_BAGNAME:
|
||||
if( pArea->lpIndexInfo )
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include "hbapifs.h"
|
||||
|
||||
#if defined( HB_OS_UNIX )
|
||||
#include <sys/vfs.h>
|
||||
#include <sys/vfs.h>
|
||||
#endif
|
||||
|
||||
#ifdef HB_EXTENSION
|
||||
|
||||
@@ -60,9 +60,6 @@ FUNCTION dbRecordInfo() ; RETURN NIL
|
||||
FUNCTION dbFieldInfo() ; RETURN NIL
|
||||
#endif
|
||||
|
||||
FUNCTION dbSetRelation() ; RETURN NIL
|
||||
FUNCTION dbClearRelation() ; RETURN NIL
|
||||
|
||||
FUNCTION MLCToPos() ; RETURN 0
|
||||
FUNCTION MPosToLC() ; RETURN 0
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ void hb_errInit( void )
|
||||
* NOTE: hb_itemClear() cannot be used to initialize an item because
|
||||
* memory occupied by the item can contain garbage bits
|
||||
*/
|
||||
hb_itemInit( &s_errorBlock );
|
||||
hb_itemInit( &s_errorBlock );
|
||||
}
|
||||
|
||||
void hb_errExit( void )
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
* Base Class for internal handling of class creation
|
||||
*
|
||||
* Copyright 2000 Ron Pinkas <Ron@Profit-Master.com>
|
||||
* 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/).
|
||||
*
|
||||
*/
|
||||
|
||||
#include "hbstruc.ch"
|
||||
|
||||
//----------------------------------------------------------------------------//
|
||||
|
||||
Function HB_Structure( cStructureName AS Char, aMembers AS Array OF Char )
|
||||
|
||||
STRUCTURE HB_Structure cName AS Char, hId As Num
|
||||
|
||||
DECLARE __ClsNew( ClassName AS Char, N As Num ) AS Num
|
||||
DECLARE __ClsAddMsg( H AS Num, Data AS Char, ID As Num, Type As Num ) AS Num
|
||||
DECLARE __ClsInst( H AS Num ) AS Structure HB_Structure
|
||||
|
||||
LOCAL hStructure AS Num, nCounter AS Num, nMembers AS Num
|
||||
|
||||
STATIC asStructures AS Array OF Structure HB_Structure := {}
|
||||
|
||||
STATIC sStructure AS Stru HB_Structure
|
||||
|
||||
LOCAL hSelf As Num
|
||||
|
||||
cStructureName := Upper( cStructureName )
|
||||
|
||||
hStructure := aScan( asStructures, { |aStructure| aStructure:cName == cStructureName } )
|
||||
|
||||
IF aMembers == NIL
|
||||
IF hStructure == 0
|
||||
//hb_Structure( cStructureName, {} )
|
||||
RETURN NIL //hb_Structure( cStructureName )
|
||||
ELSE
|
||||
RETURN __ClsInst( asStructures[ hStructure ]:hId )
|
||||
ENDIF
|
||||
ELSE
|
||||
IF hStructure > 0
|
||||
// Duplicate declaration
|
||||
RETURN NIL
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
nMembers := Len( aMembers )
|
||||
|
||||
hStructure := __ClsNew( cStructureName, nMembers )
|
||||
|
||||
FOR nCounter := 1 TO nMembers
|
||||
__clsAddMsg( hStructure, aMembers[nCounter], nCounter, 1 )
|
||||
__clsAddMsg( hStructure, '_' + aMembers[nCounter], nCounter, 1 )
|
||||
NEXT
|
||||
|
||||
IF sStructure == NIL
|
||||
hSelf := __ClsNew( "HB_Structure", 2 )
|
||||
|
||||
__clsAddMsg( hSelf, "cName", 1, 1 )
|
||||
__clsAddMsg( hSelf, "_cName", 1, 1 )
|
||||
__clsAddMsg( hSelf, "hID", 2, 1 )
|
||||
__clsAddMsg( hSelf, "_hID", 2, 1 )
|
||||
|
||||
sStructure := __ClsInst( hSelf )
|
||||
ENDIF
|
||||
|
||||
sStructure:cName := cStructureName
|
||||
sStructure:hId := hStructure
|
||||
|
||||
aAdd( asStructures, sStructure )
|
||||
|
||||
RETURN NIL //__clsInst( hStructure )
|
||||
|
||||
@@ -367,7 +367,7 @@ METHOD SetFocus() CLASS TGet
|
||||
::lEdit := .f.
|
||||
|
||||
if ::type == "N"
|
||||
::decpos := At( iif( ::lDecRev .or. "E"$::cPicFunc, ",", "." ), ::buffer )
|
||||
::decpos := At( iif( ::lDecRev .or. "E" $ ::cPicFunc, ",", "." ), ::buffer )
|
||||
::minus := ( "-" $ ::buffer .or. "(" $ ::buffer )
|
||||
else
|
||||
::decpos := NIL
|
||||
|
||||
@@ -14,7 +14,7 @@ PRG_SOURCES=\
|
||||
gentrf.prg \
|
||||
genng.prg \
|
||||
genhtm.prg \
|
||||
genchm.prg \
|
||||
genchm.prg \
|
||||
genrtf.prg \
|
||||
genhpc.prg \
|
||||
genasc.prg \
|
||||
|
||||
@@ -66,9 +66,9 @@ PROCEDURE MAIN()
|
||||
FWRITE( nOutput, hb_OSNewLine() )
|
||||
FWRITE( nOutput, "//" )
|
||||
FWRITE( nOutput, hb_OSNewLine() )
|
||||
aFiles =DIRECTORY( aDirs[i] +PATH_SEPARATOR +"*.c" )
|
||||
aFiles := DIRECTORY( aDirs[i] +PATH_SEPARATOR +"*.c" )
|
||||
ProcessDir( nOutput, aFiles, aDirs[ i ] )
|
||||
aFiles =DIRECTORY( aDirs[i] +PATH_SEPARATOR +"*.prg" )
|
||||
aFiles := DIRECTORY( aDirs[i] +PATH_SEPARATOR +"*.prg" )
|
||||
ProcessDir( nOutput, aFiles, aDirs[ i ] )
|
||||
FWRITE( nOutput, "//" )
|
||||
FWRITE( nOutput, REPLICATE( "-", 60) )
|
||||
@@ -84,8 +84,8 @@ PROCEDURE ProcessDir( nOutput, aFiles, cDir )
|
||||
LOCAL i, nLen
|
||||
|
||||
? "Files from ", cDir
|
||||
nLen =LEN( aFiles )
|
||||
FOR i:=1 TO nLen
|
||||
nLen := LEN( aFiles )
|
||||
FOR i := 1 TO nLen
|
||||
FWRITE( nOutput, "//" )
|
||||
FWRITE( nOutput, hb_OSNewLine() )
|
||||
FWRITE( nOutput, "//symbols from file: " +Lower(cDir+ PATH_SEPARATOR +aFiles[i][ 1 ] ))
|
||||
@@ -102,7 +102,7 @@ PROCEDURE ProcessFile( nOut, cFile )
|
||||
|
||||
? cFile
|
||||
IF( AT( "INITSYMB.C", UPPER(cFile) ) == 0 )
|
||||
nH =FOPEN( cFile )
|
||||
nH := FOPEN( cFile )
|
||||
IF( nH > 0 )
|
||||
FILEEVAL( nH, 255, hb_OSNewLine(), {|c| Processline(nOut, c)} )
|
||||
FCLOSE( nH )
|
||||
@@ -114,22 +114,22 @@ PROCEDURE ProcessFile( nOut, cFile )
|
||||
PROCEDURE ProcessLine( nOut, cLine )
|
||||
LOCAL nPos
|
||||
|
||||
nPos =AT( "//", cLine )
|
||||
nPos := AT( "//", cLine )
|
||||
IF nPos > 0 .AND. nPos < 7
|
||||
RETURN
|
||||
ELSE
|
||||
nPos =AT( "*", cLine )
|
||||
nPos := AT( "*", cLine )
|
||||
IF nPos > 0 .AND. nPos < 7
|
||||
RETURN
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
nPos =AT( "HB_FUNC(", cLine )
|
||||
nPos := AT( "HB_FUNC(", cLine )
|
||||
IF nPos > 0
|
||||
cLine = LTRIM( SUBSTR( cLine, nPos + Len("HB_FUNC(") ) )
|
||||
nPos =AT( ")", cLine )
|
||||
cLine := LTRIM( SUBSTR( cLine, nPos + Len("HB_FUNC(") ) )
|
||||
nPos := AT( ")", cLine )
|
||||
IF nPos > 0
|
||||
cLine :=ALLTRIM( Left( cLine, nPos - 1 ) )
|
||||
cLine := ALLTRIM( Left( cLine, nPos - 1 ) )
|
||||
? cLine
|
||||
IF (ISALPHA(cLine) .OR. cLine="_") .AND. ASCAN( aNames, {|c|c==cLine} ) == 0
|
||||
AADD( aNames, cLine )
|
||||
@@ -137,14 +137,14 @@ PROCEDURE ProcessLine( nOut, cLine )
|
||||
ENDIF
|
||||
ENDIF
|
||||
ELSE
|
||||
cLine =UPPER( cLine )
|
||||
nPos =AT( "FUNCTION", cLine )
|
||||
cLine := UPPER( cLine )
|
||||
nPos := AT( "FUNCTION", cLine )
|
||||
IF nPos > 0
|
||||
IF( AT( "STATIC", cLine ) == 0 )
|
||||
cLine = LTRIM( SUBSTR( cLine, nPos+8 ) )
|
||||
nPos =AT( "(", cLine )
|
||||
cLine := LTRIM( SUBSTR( cLine, nPos+8 ) )
|
||||
nPos := AT( "(", cLine )
|
||||
IF nPos > 0
|
||||
cLine :=ALLTRIM( LEFT( cLine, nPos-1 ) )
|
||||
cLine := ALLTRIM( LEFT( cLine, nPos-1 ) )
|
||||
? cLine
|
||||
IF (ISALPHA(cLine) .OR. cLine="_") .AND. !(" " $ cLine) .AND. ASCAN( aNames, {|c|c==cLine} ) == 0
|
||||
AADD( aNames, cLine )
|
||||
@@ -153,11 +153,11 @@ PROCEDURE ProcessLine( nOut, cLine )
|
||||
ENDIF
|
||||
ENDIF
|
||||
ELSE
|
||||
nPos =AT( "PROCEDURE", cLine )
|
||||
nPos := AT( "PROCEDURE", cLine )
|
||||
IF nPos > 0
|
||||
IF AT( "STATIC", cLine ) == 0
|
||||
cLine = LTRIM( SUBSTR( cLine, nPos+9 ) )
|
||||
nPos =AT( "(", cLine )
|
||||
cLine := LTRIM( SUBSTR( cLine, nPos+9 ) )
|
||||
nPos := AT( "(", cLine )
|
||||
IF nPos > 0
|
||||
cLine :=ALLTRIM( LEFT( cLine, nPos-1 ) )
|
||||
? cLine
|
||||
|
||||
@@ -45,7 +45,7 @@ FUNCTION Main_MISC()
|
||||
|
||||
oError := ErrorNew()
|
||||
TEST_LINE( oError:ClassName() , "ERROR" )
|
||||
oError:Description = "Its description"
|
||||
oError:Description := "Its description"
|
||||
TEST_LINE( oError:Description , "Its description" )
|
||||
#ifdef __CLIPPER__
|
||||
TEST_LINE( Len( oError ) , 7 )
|
||||
|
||||
Reference in New Issue
Block a user