2000-06-16 13:37 UTC+0100 Victor Szakats <info@szelvesz.hu>

This commit is contained in:
Viktor Szakats
2000-06-16 11:43:12 +00:00
parent cc8488348d
commit a1374c507f
27 changed files with 802 additions and 676 deletions

View File

@@ -1,3 +1,62 @@
2000-06-16 13:37 UTC+0100 Victor Szakats <info@szelvesz.hu>
* include/hbapigt.h
* source/rtl/gtapi.c
* source/rtl/gt*/*
* Renamed hb_gt_Suspend()/hb_gt_Resume() to hb_gt_Pre/PosExt()
% Some cleanup on the recent additions to the GT module.
! Small fix for gt_tpl/gt_tpl.c
! Ambiguous nested if()s fixed.
* source/rtl/transfrm.c
! Fixed handling of "S" picture function, now it works for every
data type, and doesn't need to be the first function to work.
* "0" picture function renamed to "L", some steps made towards the
optional filling char support. In the meantime the filling char is
always "0".
% Some optimizations made (two static function calls eliminated, since
parameter passing was getting messy). Comments added instead.
* source/rtl/teditorl.c
% Some optimizations made, many casts removed.
! Non-portable ULONG casts on pointers removed.
* makefile.bc
% Removed some more redundant -I$(INCLUDE_DIR)s
* include/hbclass.ch
! Minor cleanups (#includes moved after the self-guards, nil->NIL,
oClass -> s_oClass, indentation, extern->REQUEST)
* include/hbpp.h
! Minor formatting
* source/pp/ppcore.c
* include/hberrors.h
! HB_COMP_ERR_BAD_RULES_FILE_NAME -> HB_PP_ERR_BAD_RULES_FILE_NAME
* source/rtl/Makefile
* source/rdd/Makefile
! Fixed tabs for recently added files (TOBJECT, DBLIST).
PLEASE pay attention to the tabs when adding new files to the GNU-make
files.
* source/rtl/tclass.prg
* source/rtl/tobject.prg
* Some minor cleanups, fixes, optimizations.
+ source/rdd/dbupdat.prg
* source/rdd/dblist.prg
* source/rdd/Makefile
* makefile.vc
* makefile.bc
* Formatted sources. __DBUPDATE() moved to a separate file.
+ Comments added. Variables renamed.
% Some minor optimizations.
* makefile.vc
! Updated for TOBJECT and DBLIST
2000-06-16 01:42 UTC-0800 Ron Pinkas <Ron@Profit-Master.com>
* makefile.bc
- Removed redundant -I from echo into make.tmp (Harbour.exe)
@@ -56,11 +115,11 @@
* source/pp/ppcore.c
! Fixed getExpReal() to terminate on unbalanced ')'
2000-06-14-13:00 GMT +1 Ignacio Ortiz de Zuniga <ignacio@fivetech.com>
2000-06-14 13:00 GMT+1 Ignacio Ortiz de Zuniga <ignacio@fivetech.com>
* memoline.c
* fixed reported bug
2000-06-13-21:20 GMT -3 Luiz Rafael Culik <culik@sl.conex.net>
2000-06-13 21:20 GMT-3 Luiz Rafael Culik <culik@sl.conex.net>
*makefile.bc
source/rdd/makefile
+Added dblist to dependencie list
@@ -121,7 +180,6 @@
* Correct bug with default initialiser for Logical and Numeric
* Now a logical is .F. by default and a numeric is 0 !
2000-06-12 17:20 UTC+0200 JfL&RaC <jfl@mafact.com> <rac@mafact.com>
*source\rtl\tobject.prg
*source\rtl\tclass.prg
@@ -227,7 +285,6 @@
! Added several missing type casts on hb_xgrab() calls.
* Converted source code from double spaced to single spaced.
2000-06-09 12:00 UTC-0800 Ron Pinkas <Ron@Profit-Master.com>
* include/hbpp.h
* source/compiler/harbour.c

View File

@@ -114,7 +114,8 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\
if not "%HB_COMPILER%" == "bcc16" goto A_DOS_BCC16_NOT
echo -O2 -d -mh %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% > build.tmp
echo -e%1.exe %1.c >> build.tmp
echo -e%1.exe >> build.tmp
echo %1.c >> build.tmp
echo debug.lib >> build.tmp
echo vm.lib >> build.tmp
echo rtl.lib >> build.tmp
@@ -134,7 +135,8 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\
if not "%HB_COMPILER%" == "djgpp" goto A_DOS_DJGPP_NOT
echo %1.c -o%1.exe %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% > build.tmp
echo %1.c > build.tmp
echo -o%1.exe %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% >> build.tmp
echo -ldebug >> build.tmp
echo -lvm >> build.tmp
echo -lrtl >> build.tmp

View File

@@ -114,7 +114,8 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\
if not "%HB_COMPILER%" == "bcc16" goto A_DOS_BCC16_NOT
echo -O2 -d -mh %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% > build.tmp
echo -e%1.exe %1.c >> build.tmp
echo -e%1.exe >> build.tmp
echo %1.c >> build.tmp
echo debug.lib >> build.tmp
echo vm.lib >> build.tmp
echo rtl.lib >> build.tmp
@@ -134,7 +135,8 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\
if not "%HB_COMPILER%" == "djgpp" goto A_DOS_DJGPP_NOT
echo %1.c -o%1.exe %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% > build.tmp
echo %1.c > build.tmp
echo -o%1.exe %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% >> build.tmp
echo -ldebug >> build.tmp
echo -lvm >> build.tmp
echo -lrtl >> build.tmp

View File

@@ -169,6 +169,8 @@ extern USHORT hb_gt_GetScreenWidth( void );
extern void hb_gt_GetText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbyDst );
extern USHORT hb_gt_HorizLine( USHORT uiRow, USHORT uiLeft, USHORT uiRight, BYTE byChar, BYTE byAttr );
extern BOOL hb_gt_IsColor( void );
extern BOOL hb_gt_PreExt( void );
extern BOOL hb_gt_PostExt( void );
extern void hb_gt_Puts( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE * pbyStr, ULONG ulLen );
extern void hb_gt_PutText( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, BYTE * pbySrc );
extern int hb_gt_ReadKey( HB_inkey_enum eventmask );
@@ -184,8 +186,6 @@ extern void hb_gt_SetPos( SHORT iRow, SHORT iCol );
extern void hb_gt_Tone( double dFrequency, double dDuration );
extern char * hb_gt_Version( void );
extern USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar, BYTE byAttr );
extern BOOL hb_gt_Suspend();
extern BOOL hb_gt_Resume();
/* Keyboard related declarations */

View File

@@ -44,8 +44,6 @@
* Delegating, DATA Shared
* Support of 10 Chars limits
*
* 2000/06/07 One minor bug in one command
*
* Copyright 2000 Brian Hays <bhays@abacuslaw.com>
* Documentation for the commands
*
@@ -53,12 +51,12 @@
*
*/
#include "hbsetup.ch"
#include "hboo.ch"
#ifndef HB_CLASS_CH_
#define HB_CLASS_CH_
#include "hbsetup.ch"
#include "hboo.ch"
#xtranslate HBCLSCHOICE( <export>, <protect>, <hidde> ) => iif( <export>, HB_OO_CLSTP_EXPORTED , iif( <protect>, HB_OO_CLSTP_PROTECTED, iif( <hidde>, HB_OO_CLSTP_HIDDEN, nScope) ) )
#xtranslate CREATE CLASS => CLASS
@@ -67,10 +65,10 @@
#xcommand CLASS <ClassName> [ <frm: FROM, INHERIT> <SuperClass1> [,<SuperClassN>] ] [<static: STATIC>] => ;
<static> function <ClassName>() ;;
static oClass ;;
static s_oClass ;;
local nScope := HB_OO_CLSTP_EXPORTED ;;
if oClass == nil ;;
oClass := TClass():New( <(ClassName)>, __CLS_PARAM([ <(SuperClass1)> ] [ ,<(SuperClassN)> ] ) ) ;;
if s_oClass == NIL ;;
s_oClass := TClass():New( <(ClassName)>, __CLS_PARAM([ <(SuperClass1)> ] [ ,<(SuperClassN)> ] ) ) ;;
#undef _CLASS_NAME_ ;;
#define _CLASS_NAME_ <ClassName> ;;
#translate CLSMETH <ClassName> <MethodName>() => @<ClassName>_<MethodName>() ;
@@ -78,16 +76,16 @@
[ ; #translate Super( <SuperClass1> ) : => ::<SuperClass1>: ] ;
[ ; #translate Super() : => ::<SuperClass1>: ] ;
[ ; #translate Super : => ::<SuperClass1>: ] ;
[ ; extern <SuperClass1> ] [ ,<SuperClassN> ]
[ ; REQUEST <SuperClass1> ] [ ,<SuperClassN> ]
#else
#xcommand CLASS <ClassName> [ <frm: FROM, INHERIT> <SuperClass1> [,<SuperClassN>] ] [<static: STATIC>] => ;
<static> function <ClassName>() ;;
static oClass ;;
static s_oClass ;;
local nScope := HB_OO_CLSTP_EXPORTED ;;
if oClass == nil ;;
oClass := TClass():New( <(ClassName)>, __CLS_PARAM([ <(SuperClass1)> ] [ ,<(SuperClassN)> ] ) ) ;;
if s_oClass == NIL ;;
s_oClass := TClass():New( <(ClassName)>, __CLS_PARAM([ <(SuperClass1)> ] [ ,<(SuperClassN)> ] ) ) ;;
#undef _CLASS_NAME_ ;;
#define _CLASS_NAME_ <ClassName> ;;
#translate CLSMETH <ClassName> <MethodName>() => @<MethodName>() ;
@@ -95,7 +93,7 @@
[ ; #translate Super( <SuperClass1> ) : => ::<SuperClass1>: ] ;
[ ; #translate Super() : => ::<SuperClass1>: ] ;
[ ; #translate Super : => ::<SuperClass1>: ] ;
[ ; extern <SuperClass1> ] [ ,<SuperClassN> ]
[ ; REQUEST <SuperClass1> ] [ ,<SuperClassN> ]
#endif /* HB_SHORTNAMES */
@@ -113,69 +111,69 @@
#xtranslate PROTECTED: => nScope := HB_OO_CLSTP_PROTECTED
#xcommand DATA <DataNames,...> [ AS <type> ] [ INIT <uValue> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand VAR <DataNames,...> [ TYPE <type> ] [ ASSIGN <uValue> ] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand VAR <DataNames,...> [ AS <type> ] [ INIT <uValue> ] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand VAR <DataName> IN <SuperClass> => ;
oClass:AddInline( <(DataName)>, {|Self| Self:<SuperClass>:<DataName> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
oClass:AddInline( "_" + <(DataName)>, {|Self, param| Self:<SuperClass>:<DataName> := param }, HB_OO_CLSTP_EXPORTED )
s_oClass:AddInline( <(DataName)>, {|Self| Self:<SuperClass>:<DataName> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
s_oClass:AddInline( "_" + <(DataName)>, {|Self, param| Self:<SuperClass>:<DataName> := param }, HB_OO_CLSTP_EXPORTED )
#xcommand VAR <DataName> IS <SprDataName> IN <SuperClass> => ;
oClass:AddInline( <(DataName)>, {|Self| Self:<SuperClass>:<SprDataName> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
oClass:AddInline( "_" + <(DataName)>, {|Self, param| Self:<SuperClass>:<SprDataName> := param }, HB_OO_CLSTP_EXPORTED )
s_oClass:AddInline( <(DataName)>, {|Self| Self:<SuperClass>:<SprDataName> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
s_oClass:AddInline( "_" + <(DataName)>, {|Self, param| Self:<SuperClass>:<SprDataName> := param }, HB_OO_CLSTP_EXPORTED )
#xcommand VAR <DataName1> IS <DataName2> => ;
oClass:AddInline( <(DataName1)>, {|Self| Self:<DataName2> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
oClass:AddInline( "_" + <(DataName1)>, {|Self, param| Self:<DataName2> := param }, HB_OO_CLSTP_EXPORTED )
s_oClass:AddInline( <(DataName1)>, {|Self| Self:<DataName2> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
s_oClass:AddInline( "_" + <(DataName1)>, {|Self, param| Self:<DataName2> := param }, HB_OO_CLSTP_EXPORTED )
#xcommand VAR <DataName1> IS <DataName2> TO <oObject> => ;
oClass:AddInline( <(DataName1)>, {|Self| Self:<oObject>:<DataName2> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
oClass:AddInline( "_" + <(DataName1)>, {|Self, param| Self:<oObject>:<DataName2> := param }, HB_OO_CLSTP_EXPORTED )
s_oClass:AddInline( <(DataName1)>, {|Self| Self:<oObject>:<DataName2> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
s_oClass:AddInline( "_" + <(DataName1)>, {|Self, param| Self:<oObject>:<DataName2> := param }, HB_OO_CLSTP_EXPORTED )
#xcommand EXPORT <DataNames,...> [ AS <type> ] [ INIT <uValue> ] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_EXPORTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_EXPORTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand EXPORT <DataNames,...> [ TYPE <type> ] [ ASSIGN <uValue> ] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_EXPORTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_EXPORTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand PROTECT <DataNames,...> [ AS <type> ] [ INIT <uValue> ] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_PROTECTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_PROTECTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand PROTECT <DataNames,...> [ TYPE <type> ] [ ASSIGN <uValue> ] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_PROTECTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_PROTECTED + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand HIDDE <DataNames,...> [ AS <type> ] [ INIT <uValue> ] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_HIDDEN + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_HIDDEN + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand HIDDE <DataNames,...> [ TYPE <type> ] [ ASSIGN <uValue> ] [<ro: READONLY, RO>] => ;
oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_HIDDEN + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiData( <(type)>, <uValue>, HB_OO_CLSTP_HIDDEN + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ), \{<(DataNames)>\} ) ;
#xcommand CLASSDATA <DataNames,...> [ AS <type> ] [ INIT <uValue> ] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<ro: READONLY, RO>] [<share: SHARED>] => ;
oClass:AddMultiClsData(<(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiClsData(<(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ), \{<(DataNames)>\} ) ;
#xtranslate CLASS VAR => CLASSVAR
#xcommand CLASSVAR <DataNames,...> [ TYPE <type> ] [ ASSIGN <uValue> ] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<ro: READONLY, RO>] [<share: SHARED>] => ;
oClass:AddMultiClsData(<(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiClsData(<(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ), \{<(DataNames)>\} ) ;
#xcommand CLASSVAR <DataNames,...> [ AS <type> ] [ INIT <uValue> ] [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<ro: READONLY, RO>] [<share: SHARED>] => ;
oClass:AddMultiClsData(<(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ), \{<(DataNames)>\} ) ;
s_oClass:AddMultiClsData(<(type)>, <uValue>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ro.>, HB_OO_CLSTP_READONLY, 0 ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ), \{<(DataNames)>\} ) ;
#xtranslate CLASS METHOD => CLASSMETHOD
#xcommand CLASSMETHOD <MethodName> [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<share: SHARED>] => ;
oClass:AddClsMthds( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) )
s_oClass:AddClsMthds( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) )
#xcommand CLASSMETHOD <MethodName>() [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<share: SHARED>] => ;
oClass:AddClsMthds( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) )
s_oClass:AddClsMthds( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) )
#xcommand CLASSMETHOD <MethodName>( [<params,...>] ) [<export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] [<share: SHARED>] => ;
oClass:AddClsMthds( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) )
s_oClass:AddClsMthds( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.share.>, HB_OO_CLSTP_SHARED, 0 ) )
#xcommand CONSTRUCTOR <Name>( [<params,...>] ) => METHOD <Name>( [<params,...>] ) CONSTRUCTOR
@@ -183,25 +181,25 @@
//#xcommand CONSTRUCTOR New( [<params,...>] ) => METHOD New( [<params,...>] ) CONSTRUCTOR
#xcommand METHOD <MethodName> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand METHOD <MethodName>( [<params,...>] ) [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand METHOD <MethodName> BLOCK <CodeBlock> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddInline( <(MethodName)>, <CodeBlock>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddInline( <(MethodName)>, <CodeBlock>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand METHOD <MethodName>( [<params,...>] ) BLOCK <CodeBlock> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddInline( <(MethodName)>, <CodeBlock>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddInline( <(MethodName)>, <CodeBlock>, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand METHOD <MethodName>( [<params,...>] ) EXTERN <FuncName>( [<params,...>] ) [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MethodName)>, @<FuncName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MethodName)>, @<FuncName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand METHOD <MethodName> INLINE <Code,...> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddInline( <(MethodName)>, {|Self | <Code> }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddInline( <(MethodName)>, {|Self | <Code> }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand METHOD <MethodName>( [<params,...>] ) INLINE <Code,...> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddInline( <(MethodName)>, {|Self [,<params>] | <Code> }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddInline( <(MethodName)>, {|Self [,<params>] | <Code> }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand METHOD <MethodName> INLINE [Local <v>,] <Code,...> [<other>] => ;
METHOD <MethodName> BLOCK {|Self [,<v>] | <Code> } [<other>]
@@ -210,103 +208,103 @@
METHOD <MethodName> BLOCK {|Self [,<params>] [,<v>] | <Code> } [<other>]
#xcommand METHOD <MethodName> DEFERRED => ;
oClass:AddVirtual( <(MethodName)> )
s_oClass:AddVirtual( <(MethodName)> )
#xcommand METHOD <MethodName>( [<params,...>] ) DEFERRED => ;
oClass:AddVirtual( <(MethodName)> )
s_oClass:AddVirtual( <(MethodName)> )
#xcommand METHOD <MethodName>( [<params,...>] ) VIRTUAL => ;
oClass:AddVirtual( <(MethodName)> )
s_oClass:AddVirtual( <(MethodName)> )
#xcommand METHOD <MethodName>( [<params>] ) OPERATOR <op> [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) ) ;;
oClass:AddInline( <(op)>, {|Self [,<params>] | Self:<MethodName>( [<params>] ) }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) )
s_oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) ) ;;
s_oClass:AddInline( <(op)>, {|Self [,<params>] | Self:<MethodName>( [<params>] ) }, HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) )
#xcommand MESSAGE <MessageName> METHOD <MethodName> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName> METHOD <MethodName>( [<params,...>] ) [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>]=> ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName>( [<params,...>] ) METHOD <MethodName> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName>( [<params,...>] ) METHOD <MethodName>( [<dummy,...>] ) [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName> IN <SuperClass> => ;
oClass:AddInline( <(MessageName)>, {|Self| Self:<SuperClass>:<MessageName>() } )
s_oClass:AddInline( <(MessageName)>, {|Self| Self:<SuperClass>:<MessageName>() } )
#xcommand MESSAGE <MessageName>( [<params,...>] ) IN <SuperClass> => ;
oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<MessageName>( [<params>] ) } )
s_oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<MessageName>( [<params>] ) } )
#xcommand MESSAGE <MessageName> IS <SprMethodName> IN <SuperClass> => ;
oClass:AddInline( <(MessageName)>, {|Self| Self:<SuperClass>:<SprMethodName>() } )
s_oClass:AddInline( <(MessageName)>, {|Self| Self:<SuperClass>:<SprMethodName>() } )
#xcommand MESSAGE <MessageName> IS <SprMethodName>( [<params,...>] ) IN <SuperClass> => ;
oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<SprMethodName>( [<params>] ) } )
s_oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<SprMethodName>( [<params>] ) } )
#xcommand MESSAGE <MessageName>( [<params,...>] ) IS <SprMethodName> IN <SuperClass> => ;
oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<SprMethodName>( [<params>] ) } )
s_oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<SprMethodName>( [<params>] ) } )
#xcommand MESSAGE <MessageName>( [<params,...>] ) IS <SprMethodName>( [<dummy,...>] ) IN <SuperClass> => ;
oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<SprMethodName>( [<params>] ) } )
s_oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<SuperClass>:<SprMethodName>( [<params>] ) } )
#xcommand MESSAGE <MessageName> IS <MethodName> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName> IS <MethodName>( [<params,...>] ) [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>]=> ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName>( [<params,...>] ) IS <MethodName> [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName>( [<params,...>] ) IS <MethodName>( [<dummy,...>] ) [ <ctor: CONSTRUCTOR> ] [ <export: EXPORTED, VISIBLE>] [<protect: PROTECTED>] [<hidde: HIDDEN>] => ;
oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
s_oClass:AddMethod( <(MessageName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HBCLSCHOICE( <.export.>, <.protect.>, <.hidde.> ) + iif( <.ctor.>, HB_OO_CLSTP_CTOR, 0 ) )
#xcommand MESSAGE <MessageName> TO <oObject> =>;
oClass:AddInline( <(MessageName)>, {|Self| Self:<oObject>:<MessageName> } )
s_oClass:AddInline( <(MessageName)>, {|Self| Self:<oObject>:<MessageName> } )
#xcommand MESSAGE <MessageName>( [<params,...>] ) TO <oObject> =>;
oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<oObject>:<MessageName>( [<params>] ) } )
s_oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<oObject>:<MessageName>( [<params>] ) } )
#xcommand DELEGATE <MessageName> TO <oObject> =>;
oClass:AddInline( <(MessageName)>, {|Self| Self:<oObject>:<MessageName> } )
s_oClass:AddInline( <(MessageName)>, {|Self| Self:<oObject>:<MessageName> } )
#xcommand DELEGATE <MessageName>( [<params,...>] ) TO <oObject> =>;
oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<oObject>:<MessageName>( [<params>] ) } )
s_oClass:AddInline( <(MessageName)>, {|Self [,<params>]| Self:<oObject>:<MessageName>( [<params>] ) } )
#xcommand METHOD <MethodName>( [<params,...>] ) SETGET => ;
oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
oClass:AddMethod( "_" + <(MethodName)>, CLSMETH _CLASS_NAME_ _<MethodName>() )
s_oClass:AddMethod( <(MethodName)>, CLSMETH _CLASS_NAME_ <MethodName>(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ;;
s_oClass:AddMethod( "_" + <(MethodName)>, CLSMETH _CLASS_NAME_ _<MethodName>() )
#xcommand ACCESS <AccessName> => ;
oClass:AddMethod( <(AccessName)>, CLSMETH _CLASS_NAME_ <AccessName>(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY )
s_oClass:AddMethod( <(AccessName)>, CLSMETH _CLASS_NAME_ <AccessName>(), HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY )
#xcommand ACCESS <AccessName> INLINE [Local <v>,] <code,...> => ;
oClass:AddInline( <(AccessName)>, {|Self [,<v>] | <code> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY )
s_oClass:AddInline( <(AccessName)>, {|Self [,<v>] | <code> }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY )
#xcommand ACCESS <AccessName> DEFERRED => ;
oClass:AddVirtual( <(AccessName)> )
s_oClass:AddVirtual( <(AccessName)> )
#xcommand ASSIGN <AssignName>( [<params,...>] ) => ;
oClass:AddMethod( "_" + <(AssignName)>, CLSMETH _CLASS_NAME_ _<AssignName>(), HB_OO_CLSTP_EXPORTED )
s_oClass:AddMethod( "_" + <(AssignName)>, CLSMETH _CLASS_NAME_ _<AssignName>(), HB_OO_CLSTP_EXPORTED )
#xcommand ASSIGN <AssignName>( [<params,...>] ) INLINE [Local <v>,] <Code,...> => ;
oClass:AddInline( "_" + <(AssignName)>, {|Self [,<params>] [,<v>] | <Code> }, HB_OO_CLSTP_EXPORTED )
s_oClass:AddInline( "_" + <(AssignName)>, {|Self [,<params>] [,<v>] | <Code> }, HB_OO_CLSTP_EXPORTED )
#xcommand ERROR HANDLER <MethodName>( [<params,...>] ) => ;
oClass:SetOnError( CLSMETH _CLASS_NAME_ <MethodName>() )
s_oClass:SetOnError( CLSMETH _CLASS_NAME_ <MethodName>() )
#xcommand ON ERROR <MethodName>( [<params,...>] ) => ;
oClass:SetOnError( CLSMETH _CLASS_NAME_ <MethodName>() )
s_oClass:SetOnError( CLSMETH _CLASS_NAME_ <MethodName>() )
#xtranslate END CLASS => ENDCLASS
#xcommand ENDCLASS => ;; //Here we will add a inline message to ::Class. RaC&JfL
oClass:Create() ;;
#xcommand ENDCLASS => ;; // Here we will add a inline message to ::Class. RaC&JfL
s_oClass:Create() ;;
endif ;;
return oClass:Instance()
return s_oClass:Instance()
#xtranslate :Super( <SuperClass> ) : => :<SuperClass>:
#xtranslate :Super() : => :Super:

View File

@@ -137,7 +137,7 @@ extern "C" {
#define HB_PP_ERR_MEMFREE 13
#define HB_PP_ERR_PRAGMA_BAD_VALUE 14
#define HB_PP_ERR_CANNOT_OPEN_RULES 15
#define HB_COMP_ERR_BAD_RULES_FILE_NAME 16
#define HB_PP_ERR_BAD_RULES_FILE_NAME 16
#define HB_PP_WARN_DEFINE_REDEF 1
#define HB_PP_WARN_NO_DIRECTIVES 2

View File

@@ -79,7 +79,7 @@ typedef struct _COMMANDS
/* HBPP.C exported functions */
extern void hb_pp_SetRules( BOOL (*hb_compInclude)(char *, PATHNAMES * ), BOOL hb_comp_bQuiet );
extern void hb_pp_SetRules( BOOL ( *hb_compInclude )( char *, PATHNAMES * ), BOOL hb_comp_bQuiet );
extern void hb_pp_Init( void );
extern int hb_pp_ParseDirective( char * ); /* Parsing preprocessor directives ( #... ) */
extern int hb_pp_ParseExpression( char *, char * ); /* Parsing a line ( without preprocessor directive ) */

View File

@@ -294,7 +294,6 @@ RTL_LIB_OBJS = \
$(OBJ_DIR)\tbcolumn.obj \
$(OBJ_DIR)\tbrowse.obj \
$(OBJ_DIR)\tclass.obj \
$(OBJ_DIR)\tobject.obj \
$(OBJ_DIR)\teditor.obj \
$(OBJ_DIR)\terror.obj \
$(OBJ_DIR)\text.obj \
@@ -302,6 +301,7 @@ RTL_LIB_OBJS = \
$(OBJ_DIR)\tgetlist.obj \
$(OBJ_DIR)\tlabel.obj \
$(OBJ_DIR)\tmenuitm.obj \
$(OBJ_DIR)\tobject.obj \
$(OBJ_DIR)\tpopup.obj \
$(OBJ_DIR)\treport.obj \
$(OBJ_DIR)\ttextlin.obj \
@@ -360,8 +360,9 @@ RDD_LIB_OBJS = \
$(OBJ_DIR)\sdf1.obj \
\
$(OBJ_DIR)\dbf0.obj \
$(OBJ_DIR)\dbstrux.obj \
$(OBJ_DIR)\dblist.obj \
$(OBJ_DIR)\dbstrux.obj \
$(OBJ_DIR)\dbupdat.obj \
$(OBJ_DIR)\delim0.obj \
$(OBJ_DIR)\rddord.obj \
$(OBJ_DIR)\rddsys.obj \
@@ -662,8 +663,8 @@ $(OBJ_DIR)\pptable.obj : $(PP_DIR)\pptable.c
#
$(HARBOUR_EXE) : $(HARBOUR_EXE_OBJS)
echo. -e$(HARBOUR_EXE) > make.tmp
echo. $(CFLAGS) >> make.tmp
echo. $(CFLAGS) > make.tmp
echo. -e$(HARBOUR_EXE) >> make.tmp
echo. $(OBJ_DIR)\harbour.obj >> make.tmp
echo. $(OBJ_DIR)\harboury.obj >> make.tmp
echo. $(OBJ_DIR)\harbourl.obj >> make.tmp
@@ -759,6 +760,13 @@ $(OBJ_DIR)\dbf1.obj : $(RDD_DIR)\dbf1.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RDD_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\dblist.c : $(RDD_DIR)\dblist.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\dblist.obj : $(OBJ_DIR)\dblist.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RDD_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\dbnubs.obj : $(RDD_DIR)\dbnubs.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RDD_LIB) $(ARFLAGS) -+$@,,
@@ -770,10 +778,10 @@ $(OBJ_DIR)\dbstrux.obj : $(OBJ_DIR)\dbstrux.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RDD_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\dblist.c : $(RDD_DIR)\dblist.prg
$(OBJ_DIR)\dbupdat.c : $(RDD_DIR)\dbupdat.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\dblist.obj : $(OBJ_DIR)\dblist.c
$(OBJ_DIR)\dbupdat.obj : $(OBJ_DIR)\dbupdat.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RDD_LIB) $(ARFLAGS) -+$@,,
@@ -1490,13 +1498,6 @@ $(OBJ_DIR)\tclass.obj : $(OBJ_DIR)\tclass.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\tobject.c : $(RTL_DIR)\tobject.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\tobject.obj : $(OBJ_DIR)\tobject.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\teditor.c : $(RTL_DIR)\teditor.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
@@ -1550,6 +1551,13 @@ $(OBJ_DIR)\tmenuitm.obj : $(OBJ_DIR)\tmenuitm.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\tobject.c : $(RTL_DIR)\tobject.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\tobject.obj : $(OBJ_DIR)\tobject.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\tone.obj : $(RTL_DIR)\tone.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
@@ -1645,91 +1653,91 @@ $(OBJ_DIR)\xsavescr.obj : $(RTL_DIR)\xsavescr.c
#
$(OBJ_DIR)\msgca.obj : $(LANG_DIR)\msgca.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgcs852.obj : $(LANG_DIR)\msgcs852.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgcsiso.obj : $(LANG_DIR)\msgcsiso.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgcskam.obj : $(LANG_DIR)\msgcskam.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgcswin.obj : $(LANG_DIR)\msgcswin.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgen.obj : $(LANG_DIR)\msgen.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msges.obj : $(LANG_DIR)\msges.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgeu.obj : $(LANG_DIR)\msgeu.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgfr.obj : $(LANG_DIR)\msgfr.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msggl.obj : $(LANG_DIR)\msggl.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msghe862.obj : $(LANG_DIR)\msghe862.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msghewin.obj : $(LANG_DIR)\msghewin.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msghr852.obj : $(LANG_DIR)\msghr852.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msghriso.obj : $(LANG_DIR)\msghriso.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msghu852.obj : $(LANG_DIR)\msghu852.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msghucwi.obj : $(LANG_DIR)\msghucwi.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msghuwin.obj : $(LANG_DIR)\msghuwin.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgis850.obj : $(LANG_DIR)\msgis850.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgpt.obj : $(LANG_DIR)\msgpt.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgro.obj : $(LANG_DIR)\msgro.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgsr852.obj : $(LANG_DIR)\msgsr852.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\msgsriso.obj : $(LANG_DIR)\msgsriso.c
$(CC) $(CLIBFLAGS) -I$(LANG_DIR) -o$@ $**
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(LANG_LIB) $(ARFLAGS) -+$@,,
#
@@ -1910,7 +1918,6 @@ $(HBPP_EXE) : \
$(CC) $(CLIBFLAGS) -o$(OBJ_DIR)\hbpp.obj $(HBPP_DIR)\hbpp.c
echo. $(CFLAGS) > make.tmp
echo. -e$(HBPP_EXE) >> make.tmp
echo. -I$(INCLUDE_DIR) >> make.tmp
echo. $(OBJ_DIR)\hbpp.obj >> make.tmp
echo. $(COMMON_LIB) $(PP_LIB) >> make.tmp
$(CC) @make.tmp
@@ -1923,7 +1930,6 @@ $(HBRUN_EXE) : $(HBRUN_EXE_OBJS)
echo. $(CFLAGS) > make.tmp
echo. -e$(HBRUN_EXE) >> make.tmp
echo. -I$(INCLUDE_DIR) >> make.tmp
echo. $(OBJ_DIR)\hbrun.obj >> make.tmp
echo. $(OBJ_DIR)\external.obj >> make.tmp
echo. $(PP_LIB) >> make.tmp
@@ -1958,7 +1964,6 @@ $(HBTEST_EXE) : $(HBTEST_EXE_OBJS)
echo. $(CFLAGS) > make.tmp
echo. -e$(HBTEST_EXE) >> make.tmp
echo. -I$(INCLUDE_DIR) >> make.tmp
echo. $(OBJ_DIR)\hbtest.obj >> make.tmp
echo. $(OBJ_DIR)\rt_hvm.obj >> make.tmp
echo. $(OBJ_DIR)\rt_hvma.obj >> make.tmp
@@ -2056,7 +2061,6 @@ $(HBDOC_EXE) : $(HBDOC_EXE_OBJS)
echo. $(CFLAGS) > make.tmp
echo. -e$(HBDOC_EXE) >> make.tmp
echo. -I$(INCLUDE_DIR) >> make.tmp
echo. $(OBJ_DIR)\hbdoc.obj >> make.tmp
echo. $(OBJ_DIR)\genasc.obj >> make.tmp
echo. $(OBJ_DIR)\genhpc.obj >> make.tmp

View File

@@ -326,6 +326,7 @@ RTL_LIB_OBJS = \
$(OBJ_DIR)\tgetlist.obj \
$(OBJ_DIR)\tlabel.obj \
$(OBJ_DIR)\tmenuitm.obj \
$(OBJ_DIR)\tobject.obj \
$(OBJ_DIR)\tpopup.obj \
$(OBJ_DIR)\treport.obj \
$(OBJ_DIR)\ttextlin.obj \
@@ -397,7 +398,9 @@ RDD_LIB_OBJS = \
$(OBJ_DIR)\sdf1.obj \
\
$(OBJ_DIR)\dbf0.obj \
$(OBJ_DIR)\dblist.obj \
$(OBJ_DIR)\dbstrux.obj \
$(OBJ_DIR)\dbupdat.obj \
$(OBJ_DIR)\delim0.obj \
$(OBJ_DIR)\rddord.obj \
$(OBJ_DIR)\rddsys.obj \

View File

@@ -285,13 +285,13 @@ void hb_pp_SetRules( BOOL (*hb_compInclude)(char *, PATHNAMES * ), BOOL hb_comp_
}
else
{
hb_compGenError( hb_pp_szErrors, 'F', HB_COMP_ERR_BAD_RULES_FILE_NAME, hb_pp_STD_CH, NULL );
hb_compGenError( hb_pp_szErrors, 'F', HB_PP_ERR_BAD_RULES_FILE_NAME, hb_pp_STD_CH, NULL );
}
}
else
{
if( ! hb_comp_bQuiet )
printf( "Standard command definitions excluded!\n" );
printf( "Standard command definitions excluded.\n" );
hb_pp_Init();
}

View File

@@ -13,8 +13,9 @@ C_SOURCES=\
PRG_SOURCES=\
dbf0.prg \
dblist.prg \
dblist.prg \
dbstrux.prg \
dbupdat.prg \
sdf0.prg \
delim0.prg \
rddord.prg \

View File

@@ -4,7 +4,7 @@
/*
* Harbour Project source code:
* __DBLIST(), __DBUPDATE() functions
* __DBLIST() function
*
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
* www - http://www.harbour-project.org
@@ -33,86 +33,74 @@
*
*/
#include "common.ch"
#include "set.ch"
/* NOTE: lAll is basically a dummy parameter, nothing really depends on it.
[vszakats] */
FUNCTION __dbList(lOff,aList,lAll,bFor,bWhile,nNext,nRec,lRest,lPrint,cFile)
Local bBlock,lPrinter,lExtra,cExtraFile,oError
FUNCTION __dbList( lOff, abEval, lAll, bFor, bWhile, nNext, nRecord, lRest, lToPrint, cToFileName )
LOCAL lOldPrinter
LOCAL lOldExtra
LOCAL cOldExtraFile
IF lOff
bBlock:={|| (Qout(if(Deleted(), "*", " ")), aEval(aList, ;
{|cItem| qqout(eval(cItem),"")}))}
ELSE
bBlock:={|| (Qout(STR(Recno(),7), if(Deleted(), "*", " ")), aEval(aList, ;
{|cItem| qqout(eval(cItem),"")}))}
ENDIF
LOCAL oError
IF (!EMPTY(lPrint))
lPrinter := SET(_SET_PRINTER,.T.)
ENDIF
LOCAL bOutBlock
IF (!EMPTY(cFile))
IF EMPTY(AT(".",cFile))
cFile += ".txt"
ENDIF
lExtra := SET(_SET_EXTRA, .T.)
cExtraFile := SET(_SET_EXTRAFILE,cFile)
ENDIF
BEGIN SEQUENCE
IF (EMPTY(lAll) .and. EMPTY(bFor) .and. EMPTY(bWhile) .and. EMPTY(nNext) .and. ;
EMPTY(nRec) .and. EMPTY(lRest))
EVAL(bBlock)
ELSE
DBEVAL(bBlock,bFor,bWhile,nNext,nRec,lRest)
ENDIF
RECOVER Using oError
END SEQUENCE
IF (!EMPTY(lPrint))
set printer to (lPrinter)
ENDIF
/* Choose the output style */
IF (!EMPTY(cFile))
SET(_SET_EXTRA,lExtra)
SET(_SET_EXTRAFILE,cExtraFile)
ENDIF
IF oError != NIL
Break(oError)
Endif
IF lOff
bOutBlock := {|| QOut( iif( Deleted(), "*", " " ) ),;
aEval( abEval, {| bEval | QQOut( Eval( bEval ), "" ) } ) }
ELSE
bOutBlock := {|| QOut( Str( RecNo(), 7 ), iif( Deleted(), "*", " " ) ),;
aEval( abEval, {| bEval | QQOut( Eval( bEval ), "" ) } ) }
ENDIF
RETURN NIL
/* Save SETs */
FUNCTION __dbUpdate(cAlias,bKey,lRand,bFields)
IF !Empty( lToPrint )
lOldPrinter := Set(_SET_PRINTER, .T. )
ENDIF
IF !Empty( cToFileName )
IF At( ".", cToFileName ) == 0
cToFileName := cToFileName + ".txt"
ENDIF
lOldExtra := Set( _SET_EXTRA, .T. )
cOldExtraFile := Set( _SET_EXTRAFILE, cToFileName )
ENDIF
Local CurArea,oError,bBlock
Default lRand to .F.
DBGOTOP()
CurArea:=Select()
BEGIN SEQUENCE
DBSELECTAREA(cAlias)
DBGOTOP()
While !EOF()
bBlock:=EVAL(bKey)
DBSELECTAREA(CurArea)
IF lRand
dbSeek(bBlock, if(.F. ,.T.,NIL))
IF Found()
Eval(bFields)
Endif
ELSE
DO WHILE(Eval(bKey) < bBlock .AND. !EOF())
dbSkip()
ENDDO
IF (Eval(bKey) == bBlock .AND. !EOF())
Eval(bFields)
ENDIF
ENDIF
dbSelectArea(cAlias)
dbSkip()
ENDDO
RECOVER USING oError
END SEQUENCE
dbSelectArea(CurArea)
IF oError != NIL
Break(oError)
ENDIF
Return .T.
/* Do the job */
BEGIN SEQUENCE
IF Empty( lAll ) .AND. ;
Empty( bFor ) .AND. ;
Empty( bWhile ) .AND. ;
Empty( nNext ) .AND. ;
Empty( nRecord ) .AND. ;
Empty( lRest )
Eval( bOutBlock )
ELSE
dbEval( bOutBlock, bFor, bWhile, nNext, nRecord, lRest )
ENDIF
RECOVER USING oError
END SEQUENCE
/* Restor SETs */
IF !Empty( lToPrint )
Set( _SET_PRINTER, lOldPrinter )
ENDIF
IF !Empty( cToFileName )
Set( _SET_EXTRAFILE, cOldExtraFile )
Set( _SET_EXTRA, lOldExtra )
ENDIF
/* On error signal the error for the higher level error handler or quit */
IF oError != NIL
Break( oError )
ENDIF
RETURN NIL

View File

@@ -0,0 +1,85 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* __DBUPDATE() function
*
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
* 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 "common.ch"
FUNCTION __dbUpdate( cAlias, bKey, lRandom, bAssign )
LOCAL nOldArea := Select()
LOCAL xKey
LOCAL xPrevKey
LOCAL oError
DEFAULT lRandom TO .F.
dbGoTop()
BEGIN SEQUENCE
dbSelectArea( cAlias )
dbGoTop()
DO WHILE !Eof()
xKey := Eval( bKey )
dbSelectArea( nOldArea )
IF lRandom
IF dbSeek( xKey )
Eval( bAssign )
ENDIF
ELSE
DO WHILE Eval( bKey ) < xKey .AND. !Eof()
dbSkip()
ENDDO
IF Eval( bKey ) == xKey .AND. !Eof()
Eval( bAssign )
ENDIF
ENDIF
dbSelectArea( cAlias )
dbSkip()
ENDDO
RECOVER USING oError
END SEQUENCE
dbSelectArea( nOldArea )
IF oError != NIL
Break( oError )
ENDIF
RETURN .T.

View File

@@ -142,7 +142,7 @@ PRG_SOURCES=\
tgetlist.prg \
tlabel.prg \
tmenuitm.prg \
tobject.prg \
tobject.prg \
tpopup.prg \
treport.prg \
ttextlin.prg \

View File

@@ -46,6 +46,8 @@ void hb_gt_Init( int iFilenoStdin, int iFilenoStdout, int iFilenoStderr )
HB_TRACE(HB_TR_DEBUG, ("hb_gt_Init()"));
/* TODO: Is anything required to initialize the video subsystem? */
s_uiDispCount = 0;
}
void hb_gt_Exit( void )
@@ -112,7 +114,9 @@ BOOL hb_gt_AdjustPos( BYTE * pStr, ULONG ulLen )
}
}
}
hb_gt_SetPos( row, col );
return TRUE;
}
@@ -342,6 +346,7 @@ BOOL hb_gt_GetBlink()
from intensity to 'blinking'
does this work under your platform?
*/
return FALSE;
}
@@ -374,7 +379,6 @@ USHORT hb_gt_DispCount()
return s_uiDispCount;
}
void hb_gt_Replicate( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE byChar, ULONG nLength )
{
HB_TRACE(HB_TR_DEBUG, ("hb_gt_Replicate(%hu, %hu, %i, %i, %lu)", uiRow, uiCol, byAttr, byChar, nLength));
@@ -386,15 +390,15 @@ void hb_gt_Replicate( USHORT uiRow, USHORT uiCol, BYTE byAttr, BYTE byChar, ULON
}
USHORT hb_gt_Box( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight,
BYTE *szBox, BYTE byAttr )
BYTE * szBox, BYTE byAttr )
{
HB_SYMBOL_UNUSED( uiTop );
HB_SYMBOL_UNUSED( uiLeft );
HB_SYMBOL_UNUSED( uiBottom );
HB_SYMBOL_UNUSED( uiRight );
HB_SYMBOL_UNUSED( szBox );
HB_SYMBOL_UNUSED( byAttr );
return 0;
}
@@ -414,6 +418,7 @@ USHORT hb_gt_HorizLine( USHORT uiRow, USHORT uiLeft, USHORT uiRight, BYTE byChar
hb_gt_Replicate( uiRow, uiLeft, byAttr, byChar, uiRight - uiLeft + 1 );
else
hb_gt_Replicate( uiRow, uiRight, byAttr, byChar, uiLeft - uiRight + 1 );
return 0;
}
@@ -428,7 +433,19 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
uRow = uiBottom;
uiBottom = uiTop;
}
while( uRow <= uiBottom )
hb_gt_xPutch( uRow++, uiCol, byAttr, byChar );
return 0;
}
BOOL hb_gt_PreExt()
{
return TRUE;
}
BOOL hb_gt_PostExt()
{
return TRUE;
}

View File

@@ -163,13 +163,13 @@ USHORT hb_gtBox( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, B
uiMaxCol = hb_gt_GetScreenWidth();
/* TODO: Would be better to support these cases, Clipper implementation was
quite messy, which can be considered as a bug there. [vszakats] */
quite messy, which can be considered as a bug. [vszakats] */
if( uiTop < uiMaxRow && uiBottom < uiMaxRow &&
uiLeft < uiMaxCol && uiRight < uiMaxCol )
{
/* NOTE: For full compatibility, pad box string with last char if too
short [vszakats] */
/* NOTE: For full compatibility, pad box string with last char if too
short [vszakats] */
USHORT tmp;
BYTE cPadChar;
BYTE szBox[ 10 ];
@@ -317,10 +317,11 @@ USHORT hb_gtPreExt( void )
while( uidc-- )
hb_gt_DispEnd();
/* call platform depend layer to flush all pending outputs and
* to prepare screen for direct updating
*/
hb_gt_Suspend();
hb_gt_PreExt();
}
s_uiPreCNest = 1;
@@ -338,7 +339,7 @@ USHORT hb_gtPostExt( void )
if( s_uiPreCNest == 1 )
{
/* call platform depend layer to restore all settings */
hb_gt_Resume();
hb_gt_PostExt();
while( s_uiPreCount-- )
hb_gt_DispBegin();

View File

@@ -752,20 +752,20 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
return 0;
}
BOOL hb_gt_Suspend()
BOOL hb_gt_PreExt()
{
hb_gt_Exit_Terminal();
hb_gt_Exit_Mouse();
hb_gt_Exit_Keyboard();
return 1;
return TRUE;
}
BOOL hb_gt_Resume()
BOOL hb_gt_PostExt()
{
hb_gt_Initialize_Terminal();
hb_gt_Initialize_Mouse();
hb_gt_Initialize_Keyboard();
return 1;
return TRUE;
}

View File

@@ -1395,12 +1395,12 @@ BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
return bSuccess;
}
BOOL hb_gt_Suspend()
BOOL hb_gt_PreExt()
{
return 1;
return TRUE;
}
BOOL hb_gt_Resume()
BOOL hb_gt_PostExt()
{
return 1;
return TRUE;
}

View File

@@ -948,12 +948,12 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
return 0;
}
BOOL hb_gt_Suspend()
BOOL hb_gt_PreExt()
{
return 1;
return TRUE;
}
BOOL hb_gt_Resume()
BOOL hb_gt_PostExt()
{
return 1;
return TRUE;
}

View File

@@ -564,12 +564,12 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
return 0;
}
BOOL hb_gt_Suspend()
BOOL hb_gt_PreExt()
{
return 1;
return TRUE;
}
BOOL hb_gt_Resume()
BOOL hb_gt_PostExt()
{
return 1;
return TRUE;
}

View File

@@ -56,7 +56,7 @@ int SLtt_Has_Alt_Charset = 1;
char *SLtt_Graphics_Char_Pairs = "";
#endif
extern int hb_gt_Init_Terminal(int phase);
extern int hb_gt_Init_Terminal( int phase );
static void hb_gt_build_conv_tabs();
static USHORT uiDispCount;
@@ -65,7 +65,7 @@ static int cursorVisible = 1;
static int linuxConsole = 0;
static int underXTerm = 0;
/* indicate if we are currently running a command from system */
static int uiSuspended = 0;
static BOOL s_bSuspended = FALSE;
/* to convert high characters (mostly graphics and control chars) */
static unsigned char convHighChars[ 256 ];
@@ -791,26 +791,30 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
finish its work. They should be called from run.c.
They are not re-enrant ???.
*/
BOOL hb_gt_Suspend()
BOOL hb_gt_PreExt()
{
if ( !uiSuspended )
if ( SLsmg_suspend_smg() != (-1) )
if( ! s_bSuspended )
{
if( SLsmg_suspend_smg() != -1 )
{
SLang_reset_tty();
uiSuspended = 1;
s_bSuspended = TRUE;
}
return uiSuspended;
}
return s_bSuspended;
}
BOOL hb_gt_Resume()
BOOL hb_gt_PostExt()
{
if ( uiSuspended )
if ( SLsmg_resume_smg() != (-1) )
/* reinitialize a terminal */
if ( hb_gt_Init_Terminal( 1 ) != (-1) )
uiSuspended = 0;
if( s_bSuspended &&
SLsmg_resume_smg() != -1 &&
hb_gt_Init_Terminal( 1 ) != -1 ) /* reinitialize a terminal */
{
s_bSuspended = FALSE;
}
return uiSuspended;
return s_bSuspended;
}
/* ------------------------------------------------------ */

View File

@@ -531,12 +531,12 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
return 0;
}
BOOL hb_gt_Suspend()
BOOL hb_gt_PreExt()
{
return 1;
return TRUE;
}
BOOL hb_gt_Resume()
BOOL hb_gt_PostExt()
{
return 1;
return TRUE;
}

View File

@@ -1249,9 +1249,8 @@ USHORT hb_gt_DispCount()
return s_uiDispCount;
}
USHORT hb_gt_Box( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight,
BYTE *szBox, BYTE byAttr )
BYTE * szBox, BYTE byAttr )
{
USHORT uiRow;
USHORT uiCol;
@@ -1345,6 +1344,7 @@ USHORT hb_gt_HorizLine( USHORT uiRow, USHORT uiLeft, USHORT uiRight, BYTE byChar
hb_gt_Replicate( uiRow, uiLeft, byAttr, byChar, uiRight - uiLeft + 1 );
else
hb_gt_Replicate( uiRow, uiRight, byAttr, byChar, uiLeft - uiRight + 1 );
return 0;
}
@@ -1359,17 +1359,19 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
uRow = uiBottom;
uiBottom = uiTop;
}
while( uRow <= uiBottom )
hb_gt_xPutch( uRow++, uiCol, byAttr, byChar );
return 0;
}
BOOL hb_gt_Suspend()
BOOL hb_gt_PreExt()
{
return 1;
return TRUE;
}
BOOL hb_gt_Resume()
BOOL hb_gt_PostExt()
{
return 1;
return TRUE;
}

View File

@@ -59,12 +59,11 @@
#include "common.ch"
#include "hboo.ch"
REQUEST TOBJECT
//----------------------------------------------------------------------------//
REQUEST TObject
FUNCTION TClass()
STATIC s_hClass := NIL
STATIC s_hClass /* NOTE: Automatically default to NIL */
IF s_hClass == NIL
s_hClass := __clsNew( "TCLASS", 9 )

View File

@@ -34,61 +34,56 @@
*
*/
/* NOTE: we need this to prevent base types redefinition */
#define _CLIPDEFS_H
#include "hbapi.h"
#include "extend.api"
#include "item.api"
static char * hb_strToken( char * szText, long lText,
long lIndex,
static char * hb_strToken( char * szText, ULONG ulText,
ULONG ulIndex,
char cDelimiter,
long * plLen )
ULONG * pulLen )
{
long lStart;
long lEnd = 0;
long lCounter = 0;
ULONG ulStart;
ULONG ulEnd = 0;
ULONG ulCounter = 0;
HB_TRACE(HB_TR_DEBUG, ("hb_strToken(%s, %ld, %ld, %d, %p)", szText, lText, lIndex, (int) cDelimiter, plLen));
HB_TRACE(HB_TR_DEBUG, ("hb_strToken(%s, %lu, %lu, %d, %p)", szText, ulText, ulIndex, (int) cDelimiter, pulLen));
do
{
lStart = lEnd;
ulStart = ulEnd;
if( cDelimiter != ' ' )
{
if( szText[ lStart ] == cDelimiter )
lStart++;
if( szText[ ulStart ] == cDelimiter )
ulStart++;
}
else
{
while( lStart < lText && szText[ lStart ] == cDelimiter )
lStart++;
while( ulStart < ulText && szText[ ulStart ] == cDelimiter )
ulStart++;
}
if( lStart < lText && szText[ lStart ] != cDelimiter )
if( ulStart < ulText && szText[ ulStart ] != cDelimiter )
{
lEnd = lStart + 1;
ulEnd = ulStart + 1;
while( lEnd < lText && szText[lEnd] != cDelimiter )
lEnd++;
while( ulEnd < ulText && szText[ ulEnd ] != cDelimiter )
ulEnd++;
}
else
lEnd = lStart;
ulEnd = ulStart;
}
while( lCounter++ < lIndex - 1 && lEnd < lText );
while( ulCounter++ < ulIndex - 1 && ulEnd < ulText );
if( lCounter < lIndex )
if( ulCounter < ulIndex )
{
*plLen = 0;
*pulLen = 0;
return "";
}
else
{
*plLen = lEnd - lStart;
return szText + lStart;
*pulLen = ulEnd - ulStart;
return szText + ulStart;
}
}
@@ -96,38 +91,44 @@ static char * hb_strToken( char * szText, long lText,
HB_FUNC( __STRTOKEN )
{
char * pszText;
long lLen;
ULONG ulLen;
pszText = hb_strToken( hb_parc( 1 ), hb_parclen( 1 ),
hb_parnl( 2 ),
ISCHAR( 3 ) ? *hb_parc( 3 ) : ' ',
&lLen );
&ulLen );
hb_retclen( pszText, lLen );
hb_retclen( pszText, ulLen );
}
/* like __STRTOKEN but returns next token starting from passed position (0 based) inside string
StrTkPtr(cString, @nTokPos, Chr(9))
/* like __STRTOKEN() but returns next token starting from passed position
(0 based) inside string.
__StrTkPtr( cString, @nTokPos, Chr( 9 ) )
*/
HB_FUNC(__STRTKPTR)
HB_FUNC( __STRTKPTR )
{
char * pszString = hb_parc(1);
long lLen, lStrLen = hb_parclen(1);
long lPos = hb_parnl(2);
char * pszString = hb_parc( 1 );
ULONG ulStrLen = hb_parclen( 1 );
ULONG ulLen;
ULONG ulPos = hb_parnl( 2 );
char * pszText;
/* move start of string past last returned token */
pszString = (char *) ((ULONG) pszString + (ULONG) lPos);
pszString += ulPos;
/* decrease length of string consequently */
lStrLen -= lPos + 1;
ulStrLen -= ulPos + 1;
pszText = hb_strToken(pszString, lStrLen, 1, ISCHAR(3) ? *hb_parc(3) : ' ', &lLen);
pszText = hb_strToken( pszString, ulStrLen,
1,
ISCHAR( 3 ) ? *hb_parc( 3 ) : ' ',
&ulLen );
/* return position to start next search from */
_stornl((ULONG) lPos + ((ULONG) pszText - (ULONG) pszString + lLen + 1), 2);
hb_stornl( pszText - pszString + ulPos + ulLen + 1, 2 );
/* return token */
hb_retclen(pszText, lLen);
hb_retclen( pszText, ulLen );
}

View File

@@ -6,7 +6,7 @@
* Harbour Project source code:
* Base Object from wich all object finally inherit
*
* Copyright 2000 JfL&RaC <jfl@mafact.com>, <rac@mafact.com>
* Copyright 2000 JfL&RaC <jfl@mafact.com>, <rac@mafact.com>
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
@@ -33,70 +33,59 @@
*
*/
/*
* The following parts are Copyright of the individual authors.
* www - http://www.harbour-project.org
*
* This is work in progress ... To be continued
*
* See doc/license.txt for licensing terms.
*
*/
/* Harbour Class TObject ! Warning ... can not use the preprocessor */
/* WARNING: Can not use the preprocessor */
#include "common.ch"
#include "hboo.ch"
function TObject()
static oClass
local nScope := 1
FUNCTION TObject()
STATIC s_oClass
LOCAL nScope := 1
IF s_oClass == NIL
s_oClass := TClass():New( "TObject", {} )
s_oClass:AddInline( "CLASSNAME" , {| Self | __OBJGETCLSNAME( Self ) }, nScope )
s_oClass:AddInline( "CLASSH" , {| Self | __CLASSH( Self ) }, nScope )
s_oClass:AddInline( "CLASSSEL" , {| Self | __CLASSSEL( Self:CLASSH() ) }, nScope )
/*s_oClass:AddInline( "EVAL" , {| Self | __EVAL( Self ) }, nScope ) */
/*s_oClass:AddInline( "ISDERIVEDFROM" , {| Self, xPar1 | __ObjDerivedFrom( Self, xPar1 ) }, nScope ) */
/* Those one exist within Class(y), so we will probably try to implement it */
/*s_oClass:AddInline( "INIT" , {| Self | Self }, nScope ) */
/*s_oClass:AddInline( "MSGNOTFOUND" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "ISKINDOF" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "asString" , {| Self | ::class:name + " object" }, nScope ) */
/*s_oClass:AddInline( "asExpStr" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "basicSize" , {| Self | Len( Self ) }, nScope ) */
/*s_oClass:AddInline( "become" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "isEqual" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "isScalar" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "copy" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "deepCopy" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "deferred" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "exec" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "error , {| Self | }, nScope ) */
/*s_oClass:AddInline( "hash" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "null" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "size" , {| Self | Len( Self ) }, nScope ) */
/*s_oClass:AddInline( "protectErr" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "hiddenErr" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "msgNotFound" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "readOnlyErr" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "wrongClass" , {| Self | }, nScope ) */
/*s_oClass:AddInline( "badMethod" , {| Self | }, nScope ) */
if oClass == nil
oClass := TClass():New("TObject", {} )
/* this one exit within VO and is Auto Called when object ran out of scope */
/*s_oClass:AddInline( "Axit" , {| Self | }, nScope ) */
s_oClass:Create()
oClass:AddInline("CLASSNAME" , {|Self | __OBJGETCLSNAME( SELF ) }, nScope )
oClass:AddInline("CLASSH" , {|Self | __CLASSH( SELF ) }, nScope )
oClass:AddInline("CLASSSEL" , {|Self | __CLASSSEL( SELF:CLASSH() ) }, nScope )
/*oClass:AddInline("EVAL" ,{|Self | __EVAL( SELF ) }, nScope ) */
/*oClass:AddInline("ISDERIVEDFROM" ,{|Self, xPar1 | ObjDerivedFrom( SELF,xPar1 ) }, nScope ) */
/* Those one exist within class(y), so we will probably try to implement it */
/*oClass:AddInline("INIT" ,{|Self | Self }, nScope ) */
/*oClass:AddInline("MSGNOTFOUND" ,{|Self | }, nScope ) */
/*oClass:AddInline("ISKINDOF" ,{|Self | }, nScope ) */
/*oClass:AddInline("asString" ,{|Self | ::class:name + " object" }, nScope ) */
/*oClass:AddInline("asExpStr" ,{|Self | }, nScope ) */
/*oClass:AddInline("basicSize" ,{|Self | LEN( self ) }, nScope ) */
/*oClass:AddInline("become" ,{|Self | }, nScope ) */
/*oClass:AddInline("isEqual" ,{|Self | }, nScope ) */
/*oClass:AddInline("isScalar" ,{|Self | }, nScope ) */
/*oClass:AddInline("copy" ,{|Self | }, nScope ) */
/*oClass:AddInline("deepCopy" ,{|Self | }, nScope ) */
/*oClass:AddInline("deferred" ,{|Self | }, nScope ) */
/*oClass:AddInline("exec" ,{|Self | }, nScope ) */
/*oClass:AddInline("error ,{|Self | }, nScope ) */
/*oClass:AddInline("hash" ,{|Self | }, nScope ) */
/*oClass:AddInline("null" ,{|Self | }, nScope ) */
/*oClass:AddInline("size" ,{|Self | LEN( self ) }, nScope ) */
/*oClass:AddInline("protectErr" ,{|Self | }, nScope ) */
/*oClass:AddInline("hiddenErr" ,{|Self | }, nScope ) */
/*oClass:AddInline("msgNotFound" ,{|Self | }, nScope ) */
/*oClass:AddInline("readOnlyErr" ,{|Self | }, nScope ) */
/*oClass:AddInline("wrongClass" ,{|Self | }, nScope ) */
/*oClass:AddInline("badMethod" ,{|Self | }, nScope ) */
/* this one exit within VO and is Auto Called when object ran out of scope */
/*oClass:AddInline("Axit" ,{|Self | }, nScope ) */
oClass:Create()
endif
return oClass:Instance()
ENDIF
RETURN s_oClass:Instance()

View File

@@ -56,7 +56,7 @@
#define PF_LEFT 0x0001 /* @B */
#define PF_CREDIT 0x0002 /* @C */
#define PF_DEBIT 0x0004 /* @X */
#define PF_ZERO 0x0008 /* @0 */ /* NOTE: This is a Harbour extension [vszakats] */
#define PF_PADL 0x0008 /* @L */ /* NOTE: This is a FoxPro/XPP extension [vszakats] */
#define PF_PARNEG 0x0010 /* @( */
#define PF_REMAIN 0x0020 /* @R */
#define PF_UPPER 0x0040 /* @! */
@@ -65,276 +65,11 @@
#define PF_EXCHANG 0x0100 /* @E. Also means exchange . and , */
#define PF_EMPTY 0x0200 /* @Z */
#define PF_NUMDATE 0x0400 /* Internal flag. Ignore decimal dot */
#define PF_STRING 0x0800 /* @S */
/*
PictFunc -> Analyze function flags and return binary flags bits
pszPic : Pointer to the picture
pulPicLen : Pointer to the length. Changed during execution.
pulPicStart : Pointer to the starting position of the picture template.
*/
static USHORT PictFunc( char ** pszPic, ULONG * pulPicLen, ULONG * pulPicStart )
{
BOOL bDone = FALSE;
USHORT uiPicFlags = 0;
ULONG ulPicLen = *pulPicLen;
HB_TRACE(HB_TR_DEBUG, ("PictFunc(%p, %p)", pszPic, pulPicLen));
/* If an "@" char is at the first pos, we have picture function */
if( **pszPic == '@' )
{
/* Skip the "@" char */
( *pszPic )++;
( *pulPicLen )--;
/* Go through all function chars, until the end of the picture string
or any whitespace found. */
while( *pulPicLen && ! bDone )
{
switch( toupper( **pszPic ) )
{
case HB_CHAR_HT:
case ' ':
bDone = TRUE; /* End of function string */
break;
case '!':
uiPicFlags |= PF_UPPER;
break;
case '(':
uiPicFlags |= PF_PARNEG;
break;
case '0':
uiPicFlags |= PF_ZERO;
break;
case 'B':
uiPicFlags |= PF_LEFT;
break;
case 'C':
uiPicFlags |= PF_CREDIT;
break;
case 'D':
uiPicFlags |= PF_DATE;
break;
case 'E':
uiPicFlags |= PF_BRITISH;
break;
case 'R':
uiPicFlags |= PF_REMAIN;
break;
case 'S':
uiPicFlags |= PF_STRING;
break;
case 'X':
uiPicFlags |= PF_DEBIT;
break;
case 'Z':
uiPicFlags |= PF_EMPTY;
break;
}
( *pszPic )++;
( *pulPicLen )--;
}
}
/* Get start pos of template */
*pulPicStart = ulPicLen - *pulPicLen;
return uiPicFlags;
}
/*
NumPicture -> Handle a numeric picture.
szPic : Picture
ulPicLen : Length of picture
puiPicFlags : Function flags. NUM_DATE tells whether its a number or date
dValue : Number to picture
pulResultLen : The size of the returned string is passed here !
iOrigWidth : Original width
iOrigDec : Original decimals
*/
static char * NumPicture( char * szPic, ULONG ulPicLen, USHORT * puiPicFlags, double dValue,
ULONG * pulResultLen, int iOrigWidth, int iOrigDec )
{
int iWidth; /* Width of string */
int iDec; /* Number of decimals */
ULONG i;
int iCount = 0;
char * szResult;
char * szStr;
char cPic;
PHB_ITEM pNumber;
PHB_ITEM pWidth;
PHB_ITEM pDec;
BOOL bFound = FALSE;
USHORT uiPicFlags = *puiPicFlags;
double dPush;
HB_TRACE(HB_TR_DEBUG, ("NumPicture(%s, %lu, %p, %lf)", szPic, ulPicLen, puiPicFlags, dValue));
szResult = ( char * ) hb_xgrab( ulPicLen + 4 ); /* Grab enough */
*szResult = '\0';
for( i = 0; i < ulPicLen && !bFound; i++ ) /* Count number in front */
{
if( szPic[ i ] == '.' )
bFound = !( uiPicFlags & PF_NUMDATE ); /* Exit when numeric */
else if( szPic[ i ] == '9' || szPic[ i ] == '#' ||
szPic[ i ] == '$' || szPic[ i ] == '*' )
iCount++;
}
iWidth = iCount;
if( bFound ) /* Did we find a dot */
{
iDec = 0;
iWidth++; /* Also adjust iWidth */
for( ; i < ulPicLen; i++ )
{
if( szPic[ i ] == '9' ||
szPic[ i ] == '#' ||
szPic[ i ] == '$' ||
szPic[ i ] == '*' )
{
iWidth++;
iDec++;
}
}
}
else
iDec = 0;
if( ( uiPicFlags & ( PF_DEBIT + PF_PARNEG ) ) && ( dValue < 0 ) )
dPush = -dValue; /* Always push absolute val */
else
dPush = dValue;
/* Don't empty the result if the number is not zero */
if( dPush != 0 && ( uiPicFlags & PF_EMPTY ) )
*puiPicFlags &= ~uiPicFlags;
if( !iWidth ) /* Width calculated ?? */
{
iWidth = iOrigWidth; /* Push original width */
iDec = iOrigDec; /* Push original decimals */
}
pNumber = hb_itemPutNDLen( NULL, dPush, -1, iDec );
pWidth = hb_itemPutNI( NULL, iWidth );
pDec = hb_itemPutNI( NULL, iDec );
szStr = hb_itemStr( pNumber, pWidth, pDec );
hb_itemRelease( pNumber );
hb_itemRelease( pWidth );
hb_itemRelease( pDec );
if( szStr )
{
iCount = 0;
/* Pad with Zero's */
if( uiPicFlags & PF_ZERO )
{
for( i = 0; szStr[ i ] == ' ' && i < ( ULONG ) iWidth; i++ )
szStr[ i ] = '0';
}
for( i = 0; i < ulPicLen; i++ )
{
cPic = szPic[ i ];
if( cPic == '9' || cPic == '#' )
szResult[ i ] = szStr[ iCount++ ]; /* Just copy */
else if( cPic == '.' )
{
if( uiPicFlags & PF_NUMDATE ) /* Dot in date */
szResult[ i ] = cPic;
else /* Dot in number */
{
if( uiPicFlags & PF_EXCHANG ) /* Exchange . and , */
{
szResult[ i ] = ',';
iCount++;
}
else
szResult[ i ] = szStr[ iCount++ ];
}
}
else if( cPic == '$' || cPic == '*' )
{
if( szStr[ iCount ] == ' ' )
{
szResult[ i ] = cPic;
iCount++;
}
else
szResult[ i ] = szStr[ iCount++ ];
}
else if( cPic == ',' ) /* Comma */
{
if( iCount && isdigit( ( int ) szStr[ iCount - 1 ] ) )
{ /* May we place it */
if( uiPicFlags & PF_EXCHANG )
szResult[ i ] = '.';
else
szResult[ i ] = ',';
}
else
szResult[ i ] = ' ';
}
else
szResult[ i ] = cPic;
}
if( ( uiPicFlags & PF_PARNEG ) && ( dValue < 0 ) )
{
if( isdigit( ( int ) *szResult ) ) /* Overflow */
{
for( iCount = 1; ( ULONG ) iCount < i; iCount++ )
{
if( isdigit( ( int ) szResult[ iCount ] ) )
szResult[ iCount ] = '*';
}
}
*szResult = '(';
szResult[ i++ ] = ')';
}
if( ( uiPicFlags & PF_CREDIT ) && ( dValue >= 0 ) )
{
szResult[ i++ ] = ' ';
szResult[ i++ ] = 'C';
szResult[ i++ ] = 'R';
}
if( ( uiPicFlags & PF_DEBIT ) && ( dValue < 0 ) )
{
szResult[ i++ ] = ' ';
szResult[ i++ ] = 'D';
szResult[ i++ ] = 'B';
}
*pulResultLen = i;
szResult[ i ] = '\0';
hb_xfree( szStr );
}
return szResult;
}
#define PF_WIDTH 0x0800 /* @S */
HB_FUNC( TRANSFORM )
{
PHB_ITEM pExp = hb_param( 1, HB_IT_ANY ); /* Input parameter */
PHB_ITEM pValue = hb_param( 1, HB_IT_ANY ); /* Input parameter */
PHB_ITEM pPic = hb_param( 2, HB_IT_STRING ); /* Picture string */
BOOL bError = FALSE;
@@ -343,18 +78,101 @@ HB_FUNC( TRANSFORM )
{
char * szPic = hb_itemGetCPtr( pPic );
ULONG ulPicLen = hb_itemGetCLen( pPic );
ULONG ulPicStart; /* Start of template */
USHORT uiPicFlags; /* Function flags */
USHORT uiPicFlags; /* Function flags */
ULONG ulParamS;
BYTE byParamL;
char * szResult;
ULONG ulResultPos;
uiPicFlags = PictFunc( &szPic, &ulPicLen, &ulPicStart ); /* Evaluate picture string */
/* ======================================================= */
/* Analyze picture functions */
/* ======================================================= */
uiPicFlags = 0;
if( HB_IS_STRING( pExp ) )
/* If an "@" char is at the first pos, we have picture function */
if( *szPic == '@' )
{
char * szExp = hb_itemGetCPtr( pExp );
ULONG ulExpLen = hb_itemGetCLen( pExp );
BOOL bDone = FALSE;
/* Skip the "@" char */
szPic++;
ulPicLen--;
/* Go through all function chars, until the end of the picture string
or any whitespace found. */
while( ulPicLen && ! bDone )
{
switch( toupper( *szPic ) )
{
case HB_CHAR_HT:
case ' ':
bDone = TRUE; /* End of function string */
break;
case '!':
uiPicFlags |= PF_UPPER;
break;
case '(':
uiPicFlags |= PF_PARNEG;
break;
case 'L':
uiPicFlags |= PF_PADL;
byParamL = '0';
break;
case 'B':
uiPicFlags |= PF_LEFT;
break;
case 'C':
uiPicFlags |= PF_CREDIT;
break;
case 'D':
uiPicFlags |= PF_DATE;
break;
case 'E':
uiPicFlags |= PF_BRITISH;
break;
case 'R':
uiPicFlags |= PF_REMAIN;
break;
case 'S':
uiPicFlags |= PF_WIDTH;
ulParamS = 0;
while( ulPicLen > 1 && *( szPic + 1 ) >= '0' && *( szPic + 1 ) <= '9' )
{
szPic++;
ulPicLen--;
ulParamS = ( ulParamS * 10 ) + ( ( ULONG ) ( *szPic - '0' ) );
}
break;
case 'X':
uiPicFlags |= PF_DEBIT;
break;
case 'Z':
uiPicFlags |= PF_EMPTY;
break;
}
szPic++;
ulPicLen--;
}
}
/* ======================================================= */
/* Handle STRING values */
/* ======================================================= */
if( HB_IS_STRING( pValue ) )
{
char * szExp = hb_itemGetCPtr( pValue );
ULONG ulExpLen = hb_itemGetCLen( pValue );
ULONG ulExpPos = 0;
char szPicDate[ 11 ];
@@ -364,23 +182,6 @@ HB_FUNC( TRANSFORM )
szResult = ( char * ) hb_xgrab( ulExpLen + ulPicLen );
ulResultPos = 0;
/* [jlalin] */
if( uiPicFlags & PF_STRING )
{
char * szPic2 = hb_itemGetCPtr( pPic );
ULONG ulLen = ( ULONG ) atol( szPic2 + 2 );
if( ulLen & ( ulLen <= ulExpLen ) )
{
memcpy( szResult, szExp, ulLen );
szResult[ ulLen ] = '\0';
ulExpPos = ulLen - 1;
}
if( uiPicFlags & PF_UPPER )
hb_strupr( szResult );
}
/* Support date function for strings */
if( uiPicFlags & PF_DATE )
{
@@ -391,7 +192,6 @@ HB_FUNC( TRANSFORM )
szPic = szPicDate;
ulPicLen = strlen( szPicDate );
ulPicStart = 0;
}
/* Template string */
@@ -474,24 +274,193 @@ HB_FUNC( TRANSFORM )
}
}
else if( HB_IS_NUMERIC( pExp ) )
/* ======================================================= */
/* Handle NUMERIC values */
/* ======================================================= */
else if( HB_IS_NUMERIC( pValue ) )
{
int iOrigWidth;
int iOrigDec;
double dValue = hb_itemGetND( pValue );
double dPush;
hb_itemGetNLen( pExp, &iOrigWidth, &iOrigDec );
int iOrigWidth;
int iOrigDec;
int iWidth; /* Width of string */
int iDec; /* Number of decimals */
ULONG i;
int iCount = 0;
char * szStr;
char cPic;
PHB_ITEM pNumber;
PHB_ITEM pWidth;
PHB_ITEM pDec;
BOOL bFound = FALSE;
szResult = NumPicture( szPic, ulPicLen, &uiPicFlags,
hb_itemGetND( pExp ), &ulResultPos, iOrigWidth, iOrigDec );
hb_itemGetNLen( pValue, &iOrigWidth, &iOrigDec );
szResult = ( char * ) hb_xgrab( ulPicLen + 4 ); /* Grab enough */
*szResult = '\0';
for( i = 0; i < ulPicLen && !bFound; i++ ) /* Count number in front */
{
if( szPic[ i ] == '.' )
bFound = !( uiPicFlags & PF_NUMDATE ); /* Exit when numeric */
else if( szPic[ i ] == '9' || szPic[ i ] == '#' ||
szPic[ i ] == '$' || szPic[ i ] == '*' )
iCount++;
}
iWidth = iCount;
if( bFound ) /* Did we find a dot */
{
iDec = 0;
iWidth++; /* Also adjust iWidth */
for( ; i < ulPicLen; i++ )
{
if( szPic[ i ] == '9' ||
szPic[ i ] == '#' ||
szPic[ i ] == '$' ||
szPic[ i ] == '*' )
{
iWidth++;
iDec++;
}
}
}
else
iDec = 0;
if( ( uiPicFlags & ( PF_DEBIT + PF_PARNEG ) ) && dValue < 0 )
dPush = -dValue; /* Always push absolute val */
else
dPush = dValue;
/* Don't empty the result if the number is not zero */
if( dPush != 0 && ( uiPicFlags & PF_EMPTY ) )
uiPicFlags &= ~uiPicFlags;
if( iWidth == 0 ) /* Width calculated ?? */
{
iWidth = iOrigWidth; /* Push original width */
iDec = iOrigDec; /* Push original decimals */
}
pNumber = hb_itemPutNDLen( NULL, dPush, -1, iDec );
pWidth = hb_itemPutNI( NULL, iWidth );
pDec = hb_itemPutNI( NULL, iDec );
szStr = hb_itemStr( pNumber, pWidth, pDec );
hb_itemRelease( pNumber );
hb_itemRelease( pWidth );
hb_itemRelease( pDec );
if( szStr )
{
iCount = 0;
/* Pad with Zero's */
if( uiPicFlags & PF_PADL )
{
for( i = 0; szStr[ i ] == ' ' && i < ( ULONG ) iWidth; i++ )
szStr[ i ] = byParamL;
}
for( i = 0; i < ulPicLen; i++ )
{
cPic = szPic[ i ];
if( cPic == '9' || cPic == '#' )
szResult[ i ] = szStr[ iCount++ ]; /* Just copy */
else if( cPic == '.' )
{
if( uiPicFlags & PF_NUMDATE ) /* Dot in date */
szResult[ i ] = cPic;
else /* Dot in number */
{
if( uiPicFlags & PF_EXCHANG ) /* Exchange . and , */
{
szResult[ i ] = ',';
iCount++;
}
else
szResult[ i ] = szStr[ iCount++ ];
}
}
else if( cPic == '$' || cPic == '*' )
{
if( szStr[ iCount ] == ' ' )
{
szResult[ i ] = cPic;
iCount++;
}
else
szResult[ i ] = szStr[ iCount++ ];
}
else if( cPic == ',' ) /* Comma */
{
if( iCount && isdigit( ( int ) szStr[ iCount - 1 ] ) )
{ /* May we place it */
if( uiPicFlags & PF_EXCHANG )
szResult[ i ] = '.';
else
szResult[ i ] = ',';
}
else
szResult[ i ] = ' ';
}
else
szResult[ i ] = cPic;
}
if( ( uiPicFlags & PF_PARNEG ) && dValue < 0 )
{
if( isdigit( ( int ) *szResult ) ) /* Overflow */
{
for( iCount = 1; ( ULONG ) iCount < i; iCount++ )
{
if( isdigit( ( int ) szResult[ iCount ] ) )
szResult[ iCount ] = '*';
}
}
*szResult = '(';
szResult[ i++ ] = ')';
}
if( ( uiPicFlags & PF_CREDIT ) && dValue >= 0 )
{
szResult[ i++ ] = ' ';
szResult[ i++ ] = 'C';
szResult[ i++ ] = 'R';
}
if( ( uiPicFlags & PF_DEBIT ) && dValue < 0 )
{
szResult[ i++ ] = ' ';
szResult[ i++ ] = 'D';
szResult[ i++ ] = 'B';
}
ulResultPos = i;
szResult[ i ] = '\0';
hb_xfree( szStr );
}
}
else if( HB_IS_DATE( pExp ) )
/* ======================================================= */
/* Handle DATE values */
/* ======================================================= */
else if( HB_IS_DATE( pValue ) )
{
char szDate[ 9 ];
szResult = ( char * ) hb_xgrab( 11 );
hb_dateFormat( hb_itemGetDS( pExp, szDate ), szResult,
hb_dateFormat( hb_itemGetDS( pValue, szDate ), szResult,
( uiPicFlags & PF_BRITISH ) ?
( hb_set.hb_set_century ? "DD/MM/YYYY" : "DD/MM/YY" ) :
hb_set.HB_SET_DATEFORMAT );
@@ -499,7 +468,11 @@ HB_FUNC( TRANSFORM )
ulResultPos = strlen( szResult );
}
else if( HB_IS_LOGICAL( pExp ) )
/* ======================================================= */
/* Handle LOGICAL values */
/* ======================================================= */
else if( HB_IS_LOGICAL( pValue ) )
{
BOOL bDone = FALSE;
@@ -513,7 +486,7 @@ HB_FUNC( TRANSFORM )
case 'y': /* Yes/No */
case 'Y': /* Yes/No */
{
*szResult = hb_itemGetL( pExp ) ? 'Y' : 'N';
*szResult = hb_itemGetL( pValue ) ? 'Y' : 'N';
szPic++;
ulPicLen--;
bDone = TRUE; /* Logical written */
@@ -524,7 +497,7 @@ HB_FUNC( TRANSFORM )
case 'l': /* True/False */
case 'L': /* True/False */
{
*szResult = hb_itemGetL( pExp ) ? 'T' : 'F';
*szResult = hb_itemGetL( pValue ) ? 'T' : 'F';
szPic++;
ulPicLen--;
bDone = TRUE;
@@ -539,7 +512,7 @@ HB_FUNC( TRANSFORM )
}
}
else
*szResult = hb_itemGetL( pExp ) ? 'T' : 'F';
*szResult = hb_itemGetL( pValue ) ? 'T' : 'F';
/* Any chars left */
if( ( uiPicFlags & PF_REMAIN ) && ulPicLen )
@@ -550,7 +523,7 @@ HB_FUNC( TRANSFORM )
/* Logical written ? */
if( ! bDone )
szResult[ ulResultPos++ ] = hb_itemGetL( pExp ) ? 'T' : 'F';
szResult[ ulResultPos++ ] = hb_itemGetL( pValue ) ? 'T' : 'F';
}
}
else
@@ -579,19 +552,19 @@ HB_FUNC( TRANSFORM )
if( uiPicFlags & PF_EMPTY )
memset( szResult, ' ', ulResultPos );
hb_retclen( szResult, ulResultPos );
hb_retclen( szResult, ( uiPicFlags & PF_WIDTH && ulResultPos > ulParamS ) ? ulParamS : ulResultPos );
hb_xfree( szResult );
}
}
else if( pPic || ISNIL( 2 ) ) /* Picture is an empty string or NIL */
{
if( HB_IS_STRING( pExp ) )
if( HB_IS_STRING( pValue ) )
{
hb_itemReturn( pExp );
hb_itemReturn( pValue );
}
else if( HB_IS_NUMERIC( pExp ) )
else if( HB_IS_NUMERIC( pValue ) )
{
char * szStr = hb_itemStr( pExp, NULL, NULL );
char * szStr = hb_itemStr( pValue, NULL, NULL );
if( szStr )
{
@@ -601,16 +574,16 @@ HB_FUNC( TRANSFORM )
else
hb_retc( "" );
}
else if( HB_IS_DATE( pExp ) )
else if( HB_IS_DATE( pValue ) )
{
char szDate[ 9 ];
char szResult[ 11 ];
hb_retc( hb_dateFormat( hb_itemGetDS( pExp, szDate ), szResult, hb_set.HB_SET_DATEFORMAT ) );
hb_retc( hb_dateFormat( hb_itemGetDS( pValue, szDate ), szResult, hb_set.HB_SET_DATEFORMAT ) );
}
else if( HB_IS_LOGICAL( pExp ) )
else if( HB_IS_LOGICAL( pValue ) )
{
hb_retc( hb_itemGetL( pExp ) ? "T" : "F" );
hb_retc( hb_itemGetL( pValue ) ? "T" : "F" );
}
else
bError = TRUE;