19990907-02:30 GMT+1
This commit is contained in:
@@ -1,3 +1,60 @@
|
||||
19990907-02:30 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
* include/external.ch
|
||||
source/runner/stdalone/external.prg
|
||||
+ Updated to reflect the recent changes.
|
||||
* source/rtl/itemapi.c
|
||||
! hb_itemGetCPtr() will now return an empty string ("") on error and not
|
||||
a NULL pointer.
|
||||
! Leak fixed in hb_evalLaunch() when the function to evaluate was passed
|
||||
as a string. (hb_itemGetC() changed to hb_itemGetCPtr())
|
||||
* source/rtl/arrays.c
|
||||
source/rtl/extend.c
|
||||
source/rdd/dbcmd.c
|
||||
include/extend.h
|
||||
* Some array functions renamed to be consistent with the similar Item API
|
||||
function names.
|
||||
hb_arrayGetString -> hb_arrayGetCPtr
|
||||
hb_arrayGetStringLen -> hb_arrayGetCLen
|
||||
hb_arrayGetBool -> hb_arrayGetL
|
||||
hb_arrayGetDouble -> hb_arrayGetND
|
||||
hb_arrayGetDate -> hb_arrayGetDS
|
||||
* hb_arrayGetCPtr() now calls hb_itemGetCPtr() instead of using redundant
|
||||
code.
|
||||
+ hb_arrayGetC() added keep it in sync with the Item API.
|
||||
% Further simplified the hb_arrayGet*()/hb_arraySet()/+some more functions.
|
||||
* source/rdd/dbcmd.c
|
||||
funclist.txt
|
||||
+ DBF() function added. (not tested yet)
|
||||
* source/rdd/dbf1.c
|
||||
source/rdd/delim1.c
|
||||
source/rdd/sdf1.c
|
||||
source/rdd/dbf0.prg
|
||||
source/rdd/delim0.prg
|
||||
source/rdd/sdf0.prg
|
||||
* The forcelink function names changed. The C functions got a "C" appended
|
||||
at the end, the Harbour ones got an underscore at the beginning, this
|
||||
way it's more Clipper like, but it was also inevitable, since previously
|
||||
the forcelink function HB_DBF() was colliding with the standard Clipper
|
||||
function named DBF() (HB_DBF() from C).
|
||||
* source/rdd/dbcmd.c
|
||||
source/rdd/rddsys.prg
|
||||
source/vm/hvm.c
|
||||
include/rddapi.h
|
||||
* Instead of calling rddShutDown() from a Harbour EXIT function, now
|
||||
the same functions C version is called by the Virtual Machine on exit.
|
||||
This way it's more Clipper compatible, since in CA-Cl*pper the RDDSYS
|
||||
doesn't need to clean-up on exit. RDDSYS.PRG is now exchangeable with
|
||||
the Clipper one.
|
||||
! hb_rddShutDown() fixed a possible GPF if there was no rddSetDefault()
|
||||
calls at all (when RDDSYS was overridden by a dummy one).
|
||||
* source/rtl/setkey.prg
|
||||
* Not CA-Clipper compatible functions (extensions) renamed to avoid
|
||||
possible collision with existing code:
|
||||
SETKEYGET() -> HB_SETKEYGET()
|
||||
SETKEYSAVE() -> HB_SETKEYSAVE()
|
||||
SETKEYCHECK() -> HB_SETKEYCHECK()
|
||||
The function names are valid even if compiled with /10 switch.
|
||||
|
||||
19990907-01:00 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
* source/rtl/arrays.c
|
||||
! hb_arrayScan() fixed, so that it can also search for a NIL value. Like
|
||||
@@ -23,7 +80,7 @@
|
||||
* tests/working/rtl_test.prg
|
||||
+ Some PAD?() tests added with new types, byref. Some new MIN()/MAX() tests
|
||||
added. ASCAN() tests added.
|
||||
+ /SKIP: switch added, to make it possible to temporarly skip specific
|
||||
+ /SKIP: switch added, to make it possible to temporarly skip specific
|
||||
tests. (RTL_TEST /SKIP:100,102)
|
||||
+ EVAL(), :EVAL() tests added. Some are commented out, due to bugs.
|
||||
* source/rtl/itemapi.c
|
||||
@@ -261,33 +318,33 @@
|
||||
19990903-14:35 GMT+2 Ryszard Glab <rglab@imid.med.pl>
|
||||
|
||||
*source/rtl/codebloc.c
|
||||
* corrected bug if nested codeblocks without local variables
|
||||
references were created
|
||||
|
||||
* corrected bug if nested codeblocks without local variables
|
||||
references were created
|
||||
|
||||
19990903-14:00 GMT+2 Ryszard Glab <rglab@imid.med.pl>
|
||||
|
||||
*include/hb_vmpub.h
|
||||
* added a second parameter for HB_DYNS_FUNC
|
||||
* added a second parameter for HB_DYNS_FUNC
|
||||
|
||||
*source/vm/dynsym.c
|
||||
*include/extend.h
|
||||
* added a second parameter for hb_dynsymEval() function
|
||||
|
||||
*source/rtl/memvars.c
|
||||
* new function __mvDBGINFO() for memvars debugging
|
||||
(documentation included in memvars.c)
|
||||
* new function __mvDBGINFO() for memvars debugging
|
||||
(documentation included in memvars.c)
|
||||
|
||||
*include/memvars.ch
|
||||
* new MV_PRIVATE definition
|
||||
* new MV_PRIVATE definition
|
||||
|
||||
*source/rtl/mouseapi.c
|
||||
* added (char*) type cast to make C++ compilers happy
|
||||
|
||||
* added (char*) type cast to make C++ compilers happy
|
||||
|
||||
19990903-08:00 GMT+1 Victor Szel <info@szelvesz.hu>
|
||||
* include/hbdefs.h
|
||||
include/extend.h
|
||||
! IT_OBJECT() checked for IT_ARRAY type, correct to IT_OBJECT, which
|
||||
is equal to IT_ARRAY, so there was no bug, but it's not a good practice
|
||||
is equal to IT_ARRAY, so there was no bug, but it's not a good practice
|
||||
to take shortcuts like this.
|
||||
* Type checking macros moved to extend.h from hbdefs.h
|
||||
* source/vm/hvm.c
|
||||
@@ -322,7 +379,7 @@
|
||||
formatting errors corrected.
|
||||
+ Error value substitution support added to:
|
||||
hb_vmNot(), hb_vmNegate(), hb_vmInString(), hb_vmInc(), hb_vmDec().
|
||||
! hb_vmEqual(), hb_vmNotEqual() fixed for those where it returned
|
||||
! hb_vmEqual(), hb_vmNotEqual() fixed for those where it returned
|
||||
a constant FALSE, blocks, arrays, etc. It confused the stack.
|
||||
! Fixed all hb_vmOperatorCall() calls since they were not popping the
|
||||
values from the stack. ( did not test this )
|
||||
@@ -399,7 +456,7 @@
|
||||
! hb_err*() caller now expect E_BREAK, too.
|
||||
! hb_setRelease() called close_binary() instead of close_text() for
|
||||
hb_set_extrahan. Fixed.
|
||||
- Removed a bunch of (now) unneeded include files and OS branched.
|
||||
- Removed a bunch of (now) unneeded include files and OS branched.
|
||||
Source looks kind of clean now.
|
||||
* config/rules.cf
|
||||
make_tpl.*
|
||||
@@ -463,9 +520,9 @@
|
||||
* hb_fsExtOpen
|
||||
+ some HB_SYMBOL_UNUSED added.
|
||||
|
||||
NOTE [vszel]:
|
||||
1.) I've #ifdef-ed out the new stuff for __CYGWIN__ since
|
||||
setdisk()/getdisk() were neither declared nor present in any
|
||||
NOTE [vszel]:
|
||||
1.) I've #ifdef-ed out the new stuff for __CYGWIN__ since
|
||||
setdisk()/getdisk() were neither declared nor present in any
|
||||
libraries.
|
||||
2.) I've added some new header files to FILESYS.C. Please check them
|
||||
on your system, whether they are correct.
|
||||
@@ -513,7 +570,7 @@
|
||||
Like CLIPPER.EXE.
|
||||
* Indentation more or less fixed.
|
||||
* Zeros changed to NULL and '\0'.
|
||||
% Inc()/Dec() logic cleaned-up. Note that there are many more places where
|
||||
% Inc()/Dec() logic cleaned-up. Note that there are many more places where
|
||||
such logic cleaning and variable scoping optim. could be done.
|
||||
I'm also not sure if the debug_msg() calls should only be made when
|
||||
warnings are turned on, IMHO they should always appear when DEBUG is on.
|
||||
@@ -554,8 +611,8 @@
|
||||
* corrected generation of line number opcodes
|
||||
* corrected the support for local variables when nested
|
||||
codeblocks are used
|
||||
* the step value is popped correctly at the end of FOR/NEXT loop
|
||||
(the nested loops are working correctly now)
|
||||
* the step value is popped correctly at the end of FOR/NEXT loop
|
||||
(the nested loops are working correctly now)
|
||||
|
||||
*source/rtl/codebloc.c
|
||||
* corrected the support for local variables when nested
|
||||
|
||||
@@ -62,7 +62,7 @@ DBCREATEIND ;S;
|
||||
DBDELETE ;R;
|
||||
DBEDIT ;N;
|
||||
DBEVAL ;S;
|
||||
DBF ;N;
|
||||
DBF ;R;
|
||||
DBFILTER ;S;
|
||||
DBGOBOTTOM ;R;
|
||||
DBGOTO ;R;
|
||||
|
||||
@@ -288,13 +288,15 @@ extern BOOL hb_arrayLast( PHB_ITEM pArray, PHB_ITEM pResult );
|
||||
extern BOOL hb_arrayRelease( PHB_ITEM pArray ); /* releases an array - don't call it - use ItemRelease() !!! */
|
||||
extern BOOL hb_arraySet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ); /* sets an array element */
|
||||
extern BOOL hb_arrayGet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem ); /* retrieves an item */
|
||||
extern char * hb_arrayGetString( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string contained on an array element */
|
||||
extern ULONG hb_arrayGetStringLen( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string length contained on an array element */
|
||||
extern BOOL hb_arrayGetBool( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the logical value contained on an array element */
|
||||
extern ULONG hb_arrayCopyC( PHB_ITEM pArray, ULONG ulIndex, char * szBuffer, ULONG ulLen );
|
||||
extern char * hb_arrayGetC( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string contained on an array element */
|
||||
extern char * hb_arrayGetCPtr( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string pointer on an array element */
|
||||
extern ULONG hb_arrayGetCLen( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the string length contained on an array element */
|
||||
extern BOOL hb_arrayGetL( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the logical value contained on an array element */
|
||||
extern int hb_arrayGetNI( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the int value contained on an array element */
|
||||
extern long hb_arrayGetNL( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the long numeric value contained on an array element */
|
||||
extern double hb_arrayGetDouble( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the double value contained on an array element */
|
||||
extern char * hb_arrayGetDate( PHB_ITEM pArray, ULONG ulIndex, char * szDate ); /* retrieves the date value contained on an array element */
|
||||
extern double hb_arrayGetND( PHB_ITEM pArray, ULONG ulIndex ); /* retrieves the double value contained on an array element */
|
||||
extern char * hb_arrayGetDS( PHB_ITEM pArray, ULONG ulIndex, char * szDate ); /* retrieves the date value contained on an array element */
|
||||
extern WORD hb_arrayGetType( PHB_ITEM pArray, ULONG ulIndex );
|
||||
extern BOOL hb_arrayFill( PHB_ITEM pArray, PHB_ITEM pValue, ULONG ulStart, ULONG ulCount );
|
||||
extern ULONG hb_arrayScan( PHB_ITEM pArray, PHB_ITEM pValue, ULONG ulStart, ULONG ulCount );
|
||||
|
||||
@@ -46,11 +46,10 @@ EXTERNAL __DYNSGETINDEX
|
||||
//
|
||||
EXTERNAL ERRORSYS
|
||||
EXTERNAL ERRORNEW
|
||||
EXTERNAL EVAL
|
||||
EXTERNAL LEN
|
||||
EXTERNAL EMPTY
|
||||
EXTERNAL VALTYPE
|
||||
EXTERNAL ERRORBLOCK
|
||||
EXTERNAL WORD
|
||||
EXTERNAL PROCNAME
|
||||
EXTERNAL PROCLINE
|
||||
EXTERNAL __QUIT
|
||||
@@ -81,20 +80,6 @@ EXTERNAL ACLONE
|
||||
//
|
||||
//symbols from file: rtl\classes.c
|
||||
//
|
||||
EXTERNAL __OBJGETMSGLIST
|
||||
EXTERNAL __OBJGETMETHODLIST
|
||||
EXTERNAL __OBJGETVALUELIST
|
||||
EXTERNAL __OBJSETVALUELIST
|
||||
EXTERNAL __OBJHASDATA
|
||||
EXTERNAL __OBJHASMETHOD
|
||||
EXTERNAL __OBJADDDATA
|
||||
EXTERNAL __OBJADDINLINE
|
||||
EXTERNAL __OBJADDMETHOD
|
||||
EXTERNAL __OBJDELDATA
|
||||
EXTERNAL __OBJDELINLINE
|
||||
EXTERNAL __OBJDELMETHOD
|
||||
EXTERNAL __OBJMODINLINE
|
||||
EXTERNAL __OBJMODMETHOD
|
||||
EXTERNAL __CLSADDMSG
|
||||
EXTERNAL __CLSNEW
|
||||
EXTERNAL __CLSDELMSG
|
||||
@@ -120,6 +105,7 @@ EXTERNAL OUTERR
|
||||
EXTERNAL QQOUT
|
||||
EXTERNAL QOUT
|
||||
EXTERNAL SETPOS
|
||||
EXTERNAL SETPOSBS
|
||||
EXTERNAL DEVPOS
|
||||
EXTERNAL DEVOUT
|
||||
EXTERNAL DISPOUT
|
||||
@@ -178,6 +164,7 @@ EXTERNAL DIRECTORY
|
||||
//symbols from file: rtl\do.c
|
||||
//
|
||||
EXTERNAL DO
|
||||
EXTERNAL EVAL
|
||||
//
|
||||
//symbols from file: rtl\environ.c
|
||||
//
|
||||
@@ -188,6 +175,8 @@ EXTERNAL __RUN
|
||||
//
|
||||
//symbols from file: rtl\errorapi.c
|
||||
//
|
||||
EXTERNAL ERRORBLOCK
|
||||
EXTERNAL DOSERROR
|
||||
EXTERNAL __ERRRT_BASE
|
||||
//
|
||||
//symbols from file: rtl\extend.c
|
||||
@@ -207,6 +196,12 @@ EXTERNAL FSEEK
|
||||
EXTERNAL FILE
|
||||
EXTERNAL FREADSTR
|
||||
EXTERNAL CURDIR
|
||||
EXTERNAL DIRCHANGE
|
||||
EXTERNAL MAKEDIR
|
||||
EXTERNAL DIRREMOVE
|
||||
EXTERNAL DISKSPACE
|
||||
EXTERNAL DISKCHANGE
|
||||
EXTERNAL DISKNAME
|
||||
EXTERNAL BIN2I
|
||||
EXTERNAL BIN2L
|
||||
EXTERNAL BIN2W
|
||||
@@ -231,6 +226,7 @@ EXTERNAL HARDCR
|
||||
//
|
||||
EXTERNAL INKEY
|
||||
EXTERNAL __KEYBOARD
|
||||
EXTERNAL __KEYPUT
|
||||
EXTERNAL NEXTKEY
|
||||
EXTERNAL LASTKEY
|
||||
//
|
||||
@@ -260,6 +256,13 @@ EXTERNAL __MVXRELEASE
|
||||
EXTERNAL __MVRELEASE
|
||||
EXTERNAL __MVSCOPE
|
||||
EXTERNAL __MVCLEAR
|
||||
EXTERNAL __MVDBGINFO
|
||||
//
|
||||
//symbols from file: rtl\mouseapi.c
|
||||
//
|
||||
//
|
||||
//symbols from file: rtl\mousexxx.c
|
||||
//
|
||||
//
|
||||
//symbols from file: rtl\msgxxx.c
|
||||
//
|
||||
@@ -270,6 +273,7 @@ EXTERNAL MEMOTRAN
|
||||
//
|
||||
//symbols from file: rtl\set.c
|
||||
//
|
||||
EXTERNAL SETCANCEL
|
||||
EXTERNAL __SETCENTURY
|
||||
EXTERNAL SET
|
||||
//
|
||||
@@ -351,6 +355,20 @@ EXTERNAL __MENUTO
|
||||
//
|
||||
//symbols from file: rtl\objfunc.prg
|
||||
//
|
||||
EXTERNAL __OBJHASDATA
|
||||
EXTERNAL __OBJHASMETHOD
|
||||
EXTERNAL __OBJGETMSGLIST
|
||||
EXTERNAL __OBJGETMETHODLIST
|
||||
EXTERNAL __OBJGETVALUELIST
|
||||
EXTERNAL __OBJSETVALUELIST
|
||||
EXTERNAL __OBJADDMETHOD
|
||||
EXTERNAL __OBJADDINLINE
|
||||
EXTERNAL __OBJADDDATA
|
||||
EXTERNAL __OBJMODMETHOD
|
||||
EXTERNAL __OBJMODINLINE
|
||||
EXTERNAL __OBJDELMETHOD
|
||||
EXTERNAL __OBJDELINLINE
|
||||
EXTERNAL __OBJDELDATA
|
||||
//
|
||||
//symbols from file: rtl\readvar.prg
|
||||
//
|
||||
@@ -359,9 +377,9 @@ EXTERNAL READVAR
|
||||
//symbols from file: rtl\setkey.prg
|
||||
//
|
||||
EXTERNAL SETKEY
|
||||
EXTERNAL SETKEYGET
|
||||
EXTERNAL SETKEYSAVE
|
||||
EXTERNAL SETKEYCHECK
|
||||
EXTERNAL HB_SETKEYGET
|
||||
EXTERNAL HB_SETKEYSAVE
|
||||
EXTERNAL HB_SETKEYCHECK
|
||||
//
|
||||
//symbols from file: rtl\tbcolumn.prg
|
||||
//
|
||||
@@ -397,18 +415,21 @@ EXTERNAL __XRESTSCREEN
|
||||
//
|
||||
//symbols from file: rdd\dbcmd.c
|
||||
//
|
||||
EXTERNAL DBF
|
||||
EXTERNAL SDF
|
||||
EXTERNAL DELIM
|
||||
EXTERNAL _DBF
|
||||
EXTERNAL _SDF
|
||||
EXTERNAL _DELIM
|
||||
EXTERNAL RDDSYS
|
||||
EXTERNAL AFIELDS
|
||||
EXTERNAL ALIAS
|
||||
EXTERNAL BOF
|
||||
EXTERNAL DBAPPEND
|
||||
EXTERNAL DBCLOSEALL
|
||||
EXTERNAL DBCLOSEAREA
|
||||
EXTERNAL DBCOMMIT
|
||||
EXTERNAL DBCOMMITALL
|
||||
EXTERNAL DBCREATE
|
||||
EXTERNAL DBDELETE
|
||||
EXTERNAL DBF
|
||||
EXTERNAL DBGOBOTTOM
|
||||
EXTERNAL DBGOTO
|
||||
EXTERNAL DBGOTOP
|
||||
@@ -435,13 +456,13 @@ EXTERNAL FLOCK
|
||||
EXTERNAL FOUND
|
||||
EXTERNAL HEADER
|
||||
EXTERNAL LASTREC
|
||||
EXTERNAL LOCK
|
||||
EXTERNAL LUPDATE
|
||||
EXTERNAL NETERR
|
||||
EXTERNAL RDDLIST
|
||||
EXTERNAL RDDNAME
|
||||
EXTERNAL RDDREGISTER
|
||||
EXTERNAL RDDSETDEFAULT
|
||||
EXTERNAL RDDSHUTDOWN
|
||||
EXTERNAL RECCOUNT
|
||||
EXTERNAL RECNO
|
||||
EXTERNAL RECSIZE
|
||||
@@ -451,17 +472,17 @@ EXTERNAL USED
|
||||
//
|
||||
//symbols from file: rdd\dbf1.c
|
||||
//
|
||||
EXTERNAL _DBF
|
||||
EXTERNAL _DBFC
|
||||
EXTERNAL DBF_GETFUNCTABLE
|
||||
//
|
||||
//symbols from file: rdd\delim1.c
|
||||
//
|
||||
EXTERNAL _DELIM
|
||||
EXTERNAL _DELIMC
|
||||
EXTERNAL DELIM_GETFUNCTABLE
|
||||
//
|
||||
//symbols from file: rdd\sdf1.c
|
||||
//
|
||||
EXTERNAL _SDF
|
||||
EXTERNAL _SDFC
|
||||
EXTERNAL SDF_GETFUNCTABLE
|
||||
//
|
||||
//symbols from file: rdd\dbf0.prg
|
||||
@@ -640,6 +661,19 @@ EXTERNAL GT_STRRIGHT
|
||||
//
|
||||
EXTERNAL TFILEREAD
|
||||
//
|
||||
//symbols from file: tools\nconvert.prg
|
||||
//
|
||||
EXTERNAL ISBIN
|
||||
EXTERNAL ISOCTAL
|
||||
EXTERNAL ISDEC
|
||||
EXTERNAL ISHEXA
|
||||
EXTERNAL DECTOBIN
|
||||
EXTERNAL DECTOOCTAL
|
||||
EXTERNAL DECTOHEXA
|
||||
EXTERNAL BINTODEC
|
||||
EXTERNAL OCTALTODEC
|
||||
EXTERNAL HEXATODEC
|
||||
//
|
||||
//symbols from file: tools\numtxten.prg
|
||||
//
|
||||
EXTERNAL NUMTOTXTEN
|
||||
|
||||
@@ -16,6 +16,7 @@ extern void hb_rddSelectWorkAreaNumber( int iArea );
|
||||
extern void hb_rddSelectWorkAreaSymbol( PHB_SYMB pSymAlias );
|
||||
extern void hb_rddGetFieldValue( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol );
|
||||
extern void hb_rddPutFieldValue( HB_ITEM_PTR pItem, PHB_SYMB pFieldSymbol );
|
||||
extern void hb_rddShutDown( void );
|
||||
|
||||
|
||||
/* RDD method return codes */
|
||||
|
||||
@@ -57,9 +57,9 @@ typedef struct _AREANODE
|
||||
|
||||
typedef AREANODE * LPAREANODE;
|
||||
|
||||
extern HARBOUR HB_DBF( void );
|
||||
extern HARBOUR HB_SDF( void );
|
||||
extern HARBOUR HB_DELIM( void );
|
||||
extern HARBOUR HB__DBF( void );
|
||||
extern HARBOUR HB__SDF( void );
|
||||
extern HARBOUR HB__DELIM( void );
|
||||
extern HARBOUR HB_RDDSYS( void );
|
||||
|
||||
HARBOUR HB_AFIELDS( void );
|
||||
@@ -72,6 +72,7 @@ HARBOUR HB_DBCOMMIT( void );
|
||||
HARBOUR HB_DBCOMMITALL( void );
|
||||
HARBOUR HB_DBCREATE( void );
|
||||
HARBOUR HB_DBDELETE( void );
|
||||
HARBOUR HB_DBF( void );
|
||||
HARBOUR HB_DBGOBOTTOM( void );
|
||||
HARBOUR HB_DBGOTO( void );
|
||||
HARBOUR HB_DBGOTOP( void );
|
||||
@@ -105,7 +106,6 @@ HARBOUR HB_RDDLIST( void );
|
||||
HARBOUR HB_RDDNAME( void );
|
||||
HARBOUR HB_RDDREGISTER( void );
|
||||
HARBOUR HB_RDDSETDEFAULT( void );
|
||||
HARBOUR HB_RDDSHUTDOWN( void );
|
||||
HARBOUR HB_RECCOUNT( void );
|
||||
HARBOUR HB_RECNO( void );
|
||||
HARBOUR HB_RECSIZE( void );
|
||||
@@ -175,10 +175,10 @@ static ERRCODE CreateFields( AREAP pArea, PHB_ITEM pStruct )
|
||||
for( uiCount = 0; uiCount < pStruct->item.asArray.value->ulLen; uiCount++ )
|
||||
{
|
||||
pFieldDesc = pStruct->item.asArray.value->pItems + uiCount;
|
||||
pFieldInfo.uiType = toupper( hb_arrayGetString( pFieldDesc, 2 )[ 0 ] );
|
||||
pFieldInfo.atomName = ( BYTE * ) hb_arrayGetString( pFieldDesc, 1 );
|
||||
pFieldInfo.uiLen = ( USHORT ) hb_arrayGetDouble( pFieldDesc, 3 );
|
||||
pFieldInfo.uiDec = ( USHORT ) hb_arrayGetDouble( pFieldDesc, 4 );
|
||||
pFieldInfo.uiType = toupper( hb_arrayGetCPtr( pFieldDesc, 2 )[ 0 ] );
|
||||
pFieldInfo.atomName = ( BYTE * ) hb_arrayGetCPtr( pFieldDesc, 1 );
|
||||
pFieldInfo.uiLen = ( USHORT ) hb_arrayGetND( pFieldDesc, 3 );
|
||||
pFieldInfo.uiDec = ( USHORT ) hb_arrayGetND( pFieldDesc, 4 );
|
||||
|
||||
SELF_ADDFIELD( pArea, &pFieldInfo );
|
||||
}
|
||||
@@ -325,7 +325,7 @@ static ERRCODE Open( AREAP pArea, LPDBOPENINFO pOpenInfo )
|
||||
( ( PHB_DYNS ) pArea->atomAlias )->hArea = pOpenInfo->uiArea;
|
||||
pArea->lpExtendInfo->fExclusive = !pOpenInfo->fShared;
|
||||
pArea->lpExtendInfo->fReadOnly = pOpenInfo->fReadonly;
|
||||
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@@ -465,9 +465,9 @@ static void hb_rddCheck( void )
|
||||
szDefDriver[ 0 ] = '\0';
|
||||
|
||||
/* Force link the built-in RDD's */
|
||||
HB_DBF();
|
||||
HB_SDF();
|
||||
HB_DELIM();
|
||||
HB__DBF();
|
||||
HB__SDF();
|
||||
HB__DELIM();
|
||||
HB_RDDSYS();
|
||||
}
|
||||
}
|
||||
@@ -565,7 +565,7 @@ static int hb_rddRegister( char * szDriver, USHORT uiType )
|
||||
static USHORT hb_rddSelect( char * szAlias )
|
||||
{
|
||||
PHB_DYNS pSymAlias;
|
||||
|
||||
|
||||
pSymAlias = hb_dynsymFind( szAlias );
|
||||
if( pSymAlias && pSymAlias->hArea )
|
||||
return pSymAlias->hArea;
|
||||
@@ -671,7 +671,7 @@ void hb_rddSelectWorkAreaAlias( char * szName )
|
||||
PHB_DYNS pSymArea;
|
||||
char * szAlias;
|
||||
WORD wLen;
|
||||
|
||||
|
||||
wLen = strlen( szName );
|
||||
szAlias = ( char * ) hb_xgrab( wLen + 1 );
|
||||
strcpy( szAlias, szName );
|
||||
@@ -812,7 +812,7 @@ HARBOUR HB_ALIAS( void )
|
||||
USHORT uiArea;
|
||||
LPAREANODE pAreaNode;
|
||||
char * szAlias;
|
||||
|
||||
|
||||
uiArea = hb_parni( 1 );
|
||||
uiArea = uiArea ? uiArea : uiCurrArea;
|
||||
pAreaNode = pWorkAreas;
|
||||
@@ -836,6 +836,30 @@ HARBOUR HB_ALIAS( void )
|
||||
hb_retc( "" );
|
||||
}
|
||||
|
||||
HARBOUR HB_DBF( void )
|
||||
{
|
||||
LPAREANODE pAreaNode = pWorkAreas;
|
||||
|
||||
while( pAreaNode )
|
||||
{
|
||||
if( ( ( AREAP ) pAreaNode->pArea )->uiArea == uiCurrArea )
|
||||
{
|
||||
if( ( ( AREAP ) pAreaNode->pArea )->atomAlias &&
|
||||
( ( PHB_DYNS ) ( ( AREAP ) pAreaNode->pArea )->atomAlias )->hArea )
|
||||
{
|
||||
char * szAlias = ( char * ) hb_xgrab( HARBOUR_MAX_RDD_ALIAS_LENGTH + 1 );
|
||||
SELF_ALIAS( ( AREAP ) pAreaNode->pArea, ( BYTE * ) szAlias );
|
||||
hb_retc( szAlias );
|
||||
hb_xfree( szAlias );
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
pAreaNode = pAreaNode->pNext;
|
||||
}
|
||||
hb_retc( "" );
|
||||
}
|
||||
|
||||
HARBOUR HB_BOF( void )
|
||||
{
|
||||
BOOL bBof = TRUE;
|
||||
@@ -938,7 +962,7 @@ HARBOUR HB_DBCREATE( void )
|
||||
return;
|
||||
}
|
||||
|
||||
if( strlen( hb_arrayGetString( pFieldDesc, 1 ) ) == 0 )
|
||||
if( strlen( hb_arrayGetCPtr( pFieldDesc, 1 ) ) == 0 )
|
||||
{
|
||||
hb_errRT_DBCMD( EG_ARG, 1014, 0, "DBCREATE" );
|
||||
return;
|
||||
@@ -1003,7 +1027,7 @@ HARBOUR HB_DBCREATE( void )
|
||||
SELF_CREATEMEMFILE( ( AREAP ) pTempArea, &pInfo );
|
||||
hb_itemRelease( pFileExt );
|
||||
}
|
||||
|
||||
|
||||
SELF_RELEASE( ( AREAP ) pTempArea );
|
||||
hb_xfree( szFileName );
|
||||
hb_xfree( pFileName );
|
||||
@@ -1029,7 +1053,7 @@ HARBOUR HB_DBGOBOTTOM( void )
|
||||
HARBOUR HB_DBGOTO( void )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
|
||||
|
||||
if( !pCurrArea )
|
||||
{
|
||||
hb_errRT_DBCMD( EG_NOTABLE, 2001, 0, "DBGOTOP" );
|
||||
@@ -1108,7 +1132,7 @@ HARBOUR HB_DBSELECTAREA( void )
|
||||
{
|
||||
szAlias = hb_parc( 1 );
|
||||
hb_strUpper( szAlias, strlen( szAlias ) );
|
||||
|
||||
|
||||
if( ( uiNewArea = hb_rddSelect( szAlias ) ) == 0 )
|
||||
{
|
||||
hb_errRT_BASE( EG_NOALIAS, 1002, 0, szAlias );
|
||||
@@ -1365,7 +1389,7 @@ HARBOUR HB_DBUSEAREA( void )
|
||||
pInfo.atomAlias = ( BYTE * ) szAlias;
|
||||
pInfo.fShared = ISLOG( 5 ) ? hb_parl( 5 ) : !hb_set.HB_SET_EXCLUSIVE;
|
||||
pInfo.fReadonly = ISLOG( 6 ) ? hb_parl( 6 ) : FALSE;
|
||||
|
||||
|
||||
if( SELF_OPEN( ( AREAP ) pCurrArea->pArea, &pInfo ) == FAILURE )
|
||||
{
|
||||
SELF_RELEASE( ( AREAP ) pCurrArea->pArea );
|
||||
@@ -1434,7 +1458,7 @@ HARBOUR HB_DBUSEAREA( void )
|
||||
HARBOUR HB_DELETED( void )
|
||||
{
|
||||
BOOL bDeleted = FALSE;
|
||||
|
||||
|
||||
if( pCurrArea )
|
||||
SELF_DELETED( ( AREAP ) pCurrArea->pArea, &bDeleted );
|
||||
hb_retl( bDeleted );
|
||||
@@ -1452,7 +1476,7 @@ HARBOUR HB_EOF( void )
|
||||
HARBOUR HB_FCOUNT( void )
|
||||
{
|
||||
USHORT uiFields = 0;
|
||||
|
||||
|
||||
if( pCurrArea )
|
||||
SELF_FIELDCOUNT( ( AREAP ) pCurrArea->pArea, &uiFields );
|
||||
hb_retni( uiFields );
|
||||
@@ -1462,7 +1486,7 @@ HARBOUR HB_FIELDGET( void )
|
||||
{
|
||||
PHB_ITEM pItem;
|
||||
USHORT uiField;
|
||||
|
||||
|
||||
pItem = hb_itemNew( 0 );
|
||||
uiField = hb_parni( 1 );
|
||||
|
||||
@@ -1477,7 +1501,7 @@ HARBOUR HB_FIELDNAME( void )
|
||||
{
|
||||
USHORT uiFields, uiIndex;
|
||||
char * szName;
|
||||
|
||||
|
||||
if( pCurrArea )
|
||||
{
|
||||
uiIndex = hb_parni( 1 );
|
||||
@@ -1502,7 +1526,7 @@ HARBOUR HB_FIELDPOS( void )
|
||||
USHORT uiCount;
|
||||
char * szName;
|
||||
LPFIELD pField;
|
||||
|
||||
|
||||
if( pCurrArea )
|
||||
{
|
||||
szName = hb_parc( 1 );
|
||||
@@ -1527,7 +1551,7 @@ HARBOUR HB_FIELDPUT( void )
|
||||
{
|
||||
USHORT uiIndex;
|
||||
PHB_ITEM pItem;
|
||||
|
||||
|
||||
uiIndex = hb_parni( 1 );
|
||||
if( pCurrArea && uiIndex )
|
||||
{
|
||||
@@ -1698,12 +1722,13 @@ HARBOUR HB_RDDSETDEFAULT( void )
|
||||
}
|
||||
}
|
||||
|
||||
HARBOUR HB_RDDSHUTDOWN( void )
|
||||
void hb_rddShutDown( void )
|
||||
{
|
||||
LPRDDNODE pRddNode;
|
||||
|
||||
hb_rddCloseAll();
|
||||
hb_xfree( szDefDriver );
|
||||
if( szDefDriver )
|
||||
hb_xfree( szDefDriver );
|
||||
while( pRddList )
|
||||
{
|
||||
pRddNode = pRddList;
|
||||
@@ -1724,7 +1749,7 @@ HARBOUR HB_RECCOUNT( void )
|
||||
HARBOUR HB_RECNO( void )
|
||||
{
|
||||
PHB_ITEM pRecNo;
|
||||
|
||||
|
||||
pRecNo = hb_itemPutNL( NULL, 0 );
|
||||
if( pCurrArea )
|
||||
SELF_RECNO( ( AREAP ) pCurrArea->pArea, pRecNo );
|
||||
@@ -1771,7 +1796,7 @@ HARBOUR HB_RLOCK( void )
|
||||
HARBOUR HB_SELECT( void )
|
||||
{
|
||||
char * szAlias;
|
||||
|
||||
|
||||
szAlias = hb_parc( 1 );
|
||||
if( strlen( szAlias ) > 0 )
|
||||
hb_retni( hb_rddSelect( szAlias ) );
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
|
||||
#include "rddsys.ch"
|
||||
|
||||
ANNOUNCE DBF
|
||||
ANNOUNCE _DBF
|
||||
|
||||
init procedure DBFInit
|
||||
|
||||
REQUEST _DBF
|
||||
REQUEST _DBFC
|
||||
|
||||
rddRegister( "DBF", RDT_FULL )
|
||||
|
||||
|
||||
@@ -84,11 +84,11 @@ typedef struct _DBFMEMO
|
||||
typedef DBFMEMO * LPDBFMEMO;
|
||||
|
||||
|
||||
HARBOUR HB__DBF( void );
|
||||
HARBOUR HB__DBFC( void );
|
||||
HARBOUR HB_DBF_GETFUNCTABLE( void );
|
||||
|
||||
HB_INIT_SYMBOLS_BEGIN( dbf1__InitSymbols )
|
||||
{ "_DBF", FS_PUBLIC, HB__DBF, 0 },
|
||||
{ "_DBFC", FS_PUBLIC, HB__DBFC, 0 },
|
||||
{ "DBF_GETFUNCTABLE", FS_PUBLIC, HB_DBF_GETFUNCTABLE, 0 }
|
||||
HB_INIT_SYMBOLS_END( dbf1__InitSymbols )
|
||||
#if ! defined(__GNUC__)
|
||||
@@ -1591,7 +1591,7 @@ static RDDFUNCS dbfTable = { 0, /* Super Bof */
|
||||
0 /* Super WhoCares */
|
||||
};
|
||||
|
||||
HARBOUR HB__DBF( void )
|
||||
HARBOUR HB__DBFC( void )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
|
||||
#include "rddsys.ch"
|
||||
|
||||
ANNOUNCE DELIM
|
||||
ANNOUNCE _DELIM
|
||||
|
||||
init procedure DELIMInit
|
||||
|
||||
REQUEST _DELIM
|
||||
REQUEST _DELIMC
|
||||
|
||||
rddRegister( "DELIM", RDT_TRANSFER )
|
||||
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
#include "rddapi.h"
|
||||
#include "rddsys.ch"
|
||||
|
||||
HARBOUR HB__DELIM( void );
|
||||
HARBOUR HB__DELIMC( void );
|
||||
HARBOUR HB_DELIM_GETFUNCTABLE( void );
|
||||
|
||||
HB_INIT_SYMBOLS_BEGIN( delim1__InitSymbols )
|
||||
{ "_DELIM", FS_PUBLIC, HB__DELIM, 0 },
|
||||
{ "_DELIMC", FS_PUBLIC, HB__DELIMC, 0 },
|
||||
{ "DELIM_GETFUNCTABLE", FS_PUBLIC, HB_DELIM_GETFUNCTABLE, 0 }
|
||||
HB_INIT_SYMBOLS_END( delim1__InitSymbols )
|
||||
#if ! defined(__GNUC__)
|
||||
@@ -48,7 +48,7 @@ static RDDFUNCS delimSuper = { 0 };
|
||||
|
||||
static RDDFUNCS delimTable = { 0 };
|
||||
|
||||
HARBOUR HB__DELIM( void )
|
||||
HARBOUR HB__DELIMC( void )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -34,9 +34,3 @@ init procedure RddInit
|
||||
|
||||
return
|
||||
|
||||
exit procedure RddExit
|
||||
|
||||
rddShutdown()
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
|
||||
#include "rddsys.ch"
|
||||
|
||||
ANNOUNCE SDF
|
||||
ANNOUNCE _SDF
|
||||
|
||||
init procedure SDFInit
|
||||
|
||||
REQUEST _SDF
|
||||
REQUEST _SDFC
|
||||
|
||||
rddRegister( "SDF", RDT_TRANSFER )
|
||||
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
#include "rddapi.h"
|
||||
#include "rddsys.ch"
|
||||
|
||||
HARBOUR HB__SDF( void );
|
||||
HARBOUR HB__SDFC( void );
|
||||
HARBOUR HB_SDF_GETFUNCTABLE( void );
|
||||
|
||||
HB_INIT_SYMBOLS_BEGIN( sdf1__InitSymbols )
|
||||
{ "_SDF", FS_PUBLIC, HB__SDF, 0 },
|
||||
{ "_SDFC", FS_PUBLIC, HB__SDFC, 0 },
|
||||
{ "SDF_GETFUNCTABLE", FS_PUBLIC, HB_SDF_GETFUNCTABLE, 0 }
|
||||
HB_INIT_SYMBOLS_END( sdf1__InitSymbols )
|
||||
#if ! defined(__GNUC__)
|
||||
@@ -48,7 +48,7 @@ static RDDFUNCS sdfSuper = { 0 };
|
||||
|
||||
static RDDFUNCS sdfTable = { 0 };
|
||||
|
||||
HARBOUR HB__SDF( void )
|
||||
HARBOUR HB__SDFC( void )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -222,40 +222,34 @@ BOOL hb_arrayError( PHB_ITEM pArray, ULONG ulIndex, BOOL bAssign )
|
||||
|
||||
BOOL hb_arraySet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
{
|
||||
hb_itemCopy( pArray->item.asArray.value->pItems + ( ulIndex - 1 ), pItem );
|
||||
return TRUE;
|
||||
}
|
||||
hb_itemCopy( pArray->item.asArray.value->pItems + ( ulIndex - 1 ), pItem );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL hb_arrayGet( PHB_ITEM pArray, ULONG ulIndex, PHB_ITEM pItem )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
{
|
||||
hb_itemCopy( pItem, pArray->item.asArray.value->pItems + ( ulIndex - 1 ) );
|
||||
return TRUE;
|
||||
}
|
||||
hb_itemCopy( pItem, pArray->item.asArray.value->pItems + ( ulIndex - 1 ) );
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
hb_itemClear( pItem );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
hb_itemClear( pItem );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
char * hb_arrayGetDate( PHB_ITEM pArray, ULONG ulIndex, char * szDate )
|
||||
char * hb_arrayGetDS( PHB_ITEM pArray, ULONG ulIndex, char * szDate )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
hb_itemGetDS( pArray->item.asArray.value->pItems + ulIndex - 1, szDate );
|
||||
hb_itemGetDS( pArray->item.asArray.value->pItems + ulIndex - 1, szDate );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -266,86 +260,76 @@ char * hb_arrayGetDate( PHB_ITEM pArray, ULONG ulIndex, char * szDate )
|
||||
return szDate;
|
||||
}
|
||||
|
||||
BOOL hb_arrayGetBool( PHB_ITEM pArray, ULONG ulIndex )
|
||||
BOOL hb_arrayGetL( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetL( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetL( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int hb_arrayGetNI( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetNI( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
}
|
||||
|
||||
return 0;
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetNI( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
long hb_arrayGetNL( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetNL( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
}
|
||||
|
||||
return 0;
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetNL( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
double hb_arrayGetDouble( PHB_ITEM pArray, ULONG ulIndex )
|
||||
double hb_arrayGetND( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetND( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
}
|
||||
|
||||
return 0;
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetND( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
char * hb_arrayGetString( PHB_ITEM pArray, ULONG ulIndex )
|
||||
ULONG hb_arrayCopyC( PHB_ITEM pArray, ULONG ulIndex, char * szBuffer, ULONG ulLen )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
{
|
||||
PHB_ITEM pItem = pArray->item.asArray.value->pItems + ulIndex - 1;
|
||||
|
||||
if( IS_STRING( pItem ) )
|
||||
return pItem->item.asString.value;
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemCopyC( pArray->item.asArray.value->pItems + ulIndex - 1, szBuffer, ulLen );
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
ULONG hb_arrayGetStringLen( PHB_ITEM pArray, ULONG ulIndex )
|
||||
char * hb_arrayGetC( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetCLen( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
}
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetC( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
char * hb_arrayGetCPtr( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetCPtr( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
ULONG hb_arrayGetCLen( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemGetCLen( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
WORD hb_arrayGetType( PHB_ITEM pArray, ULONG ulIndex )
|
||||
{
|
||||
if( IS_ARRAY( pArray ) )
|
||||
{
|
||||
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemType( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
}
|
||||
|
||||
return 0;
|
||||
if( IS_ARRAY( pArray ) && ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
|
||||
return hb_itemType( pArray->item.asArray.value->pItems + ulIndex - 1 );
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL hb_arrayLast( PHB_ITEM pArray, PHB_ITEM pResult )
|
||||
|
||||
@@ -97,7 +97,7 @@ char * hb_parc( int iParam, ... )
|
||||
ulArrayIndex = va_arg( va, ULONG );
|
||||
va_end( va );
|
||||
|
||||
return hb_arrayGetString( pItem, ulArrayIndex );
|
||||
return hb_arrayGetCPtr( pItem, ulArrayIndex );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ ULONG hb_parclen( int iParam, ... )
|
||||
ulArrayIndex = va_arg( va, ULONG );
|
||||
va_end( va );
|
||||
|
||||
return hb_arrayGetStringLen( pItem, ulArrayIndex );
|
||||
return hb_arrayGetCLen( pItem, ulArrayIndex );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ ULONG hb_parcsiz( int iParam, ... )
|
||||
ulArrayIndex = va_arg( va, ULONG );
|
||||
va_end( va );
|
||||
|
||||
return hb_arrayGetStringLen( pItem, ulArrayIndex ) + 1;
|
||||
return hb_arrayGetCLen( pItem, ulArrayIndex ) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ char * hb_pards( int iParam, ... )
|
||||
ulArrayIndex = va_arg( va, ULONG );
|
||||
va_end( va );
|
||||
|
||||
hb_arrayGetDate( pItem, ulArrayIndex, stack.szDate );
|
||||
hb_arrayGetDS( pItem, ulArrayIndex, stack.szDate );
|
||||
|
||||
return stack.szDate; /* this guaranties good behavior when multithreading */
|
||||
}
|
||||
@@ -250,7 +250,7 @@ int hb_parl( int iParam, ... )
|
||||
ulArrayIndex = va_arg( va, ULONG );
|
||||
va_end( va );
|
||||
|
||||
return hb_arrayGetBool( pItem, ulArrayIndex ) ? 1 : 0;
|
||||
return hb_arrayGetL( pItem, ulArrayIndex ) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,7 +289,7 @@ double hb_parnd( int iParam, ... )
|
||||
ulArrayIndex = va_arg( va, ULONG );
|
||||
va_end( va );
|
||||
|
||||
return hb_arrayGetDouble( pItem, ulArrayIndex );
|
||||
return hb_arrayGetND( pItem, ulArrayIndex );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ PHB_ITEM hb_evalLaunch( PEVALINFO pEvalInfo )
|
||||
|
||||
if( IS_STRING( pEvalInfo->pItems[ 0 ] ) )
|
||||
{
|
||||
hb_vmPushSymbol( hb_dynsymGet( hb_itemGetC( pEvalInfo->pItems[ 0 ] ) )->pSymbol );
|
||||
hb_vmPushSymbol( hb_dynsymGet( hb_itemGetCPtr( pEvalInfo->pItems[ 0 ] ) )->pSymbol );
|
||||
hb_vmPushNil();
|
||||
while( w <= pEvalInfo->paramCount )
|
||||
hb_vmPush( pEvalInfo->pItems[ w++ ] );
|
||||
@@ -367,7 +367,7 @@ char * hb_itemGetCPtr( PHB_ITEM pItem )
|
||||
if( pItem && IS_STRING( pItem ) )
|
||||
return pItem->item.asString.value;
|
||||
else
|
||||
return NULL;
|
||||
return "";
|
||||
}
|
||||
|
||||
ULONG hb_itemGetCLen( PHB_ITEM pItem )
|
||||
|
||||
@@ -128,24 +128,25 @@ return bReturn
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* SetKeyGet
|
||||
* HB_SetKeyGet
|
||||
* $CATEGORY$
|
||||
* ?
|
||||
* $ONELINER$
|
||||
* Determine a set-key code block & condition-block
|
||||
* $SYNTAX$
|
||||
* SETKEYGET( <nKey> [, <bConditionByRef> ] )
|
||||
* HB_SETKEYGET( <nKey> [, <bConditionByRef> ] )
|
||||
* $ARGUMENTS$
|
||||
* <anKey> is an numeric key value
|
||||
* <bConditionByRef> is an optional return-parameter
|
||||
* $RETURNS$
|
||||
* Current assigned action-block
|
||||
* $DESCRIPTION$
|
||||
* The SetKeyGet() function returns the current code-block assigned to a
|
||||
* key, and optionally assignes the condition-block to the return-parameter
|
||||
* The HB_SetKeyGet() function returns the current code-block assigned to
|
||||
* a key, and optionally assignes the condition-block to the
|
||||
* return-parameter
|
||||
* $EXAMPLES$
|
||||
* local bOldF10, bOldF10Cond
|
||||
* bOldF10 := SetKeyGet( K_F10, @bOldF10Cond )
|
||||
* bOldF10 := HB_SetKeyGet( K_F10, @bOldF10Cond )
|
||||
* ... // some other processing
|
||||
* SetKey( K_F10, bOldF10, bOldF10Cond )
|
||||
* $TESTS$
|
||||
@@ -153,12 +154,12 @@ return bReturn
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* SETKEYGET() is a new function and hence not CA-Clipper compliant.
|
||||
* HB_SETKEYGET() is a new function and hence not CA-Clipper compliant.
|
||||
* $SEEALSO$
|
||||
* SETKEY(), SETKEYSAVE(), SETKEYCHECK()
|
||||
* SETKEY(), HB_SETKEYSAVE(), HB_SETKEYCHECK()
|
||||
* $END$
|
||||
*/
|
||||
Function SetKeyGet( nKey, bCondition )
|
||||
Function HB_SetKeyGet( nKey, bCondition )
|
||||
local nFound
|
||||
|
||||
if valType( nKey ) = "N" .and. nKey <> 0
|
||||
@@ -178,40 +179,40 @@ return NIL //bReturn
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* SetKeySave
|
||||
* HB_SetKeySave
|
||||
* $CATEGORY$
|
||||
* ?
|
||||
* $ONELINER$
|
||||
* Returns a copy of internal set-key list, optionally overwriting
|
||||
* $SYNTAX$
|
||||
* SETKEYSAVE( [ <OldKeys> ] )
|
||||
* HB_SETKEYSAVE( [ <OldKeys> ] )
|
||||
* $ARGUMENTS$
|
||||
* <OldKeys> is an optional set-key list from a previous call to
|
||||
* SetKeySave(), or NIL to clear current set-key list
|
||||
* HB_SetKeySave(), or NIL to clear current set-key list
|
||||
* $RETURNS$
|
||||
* Current set-key list
|
||||
* $DESCRIPTION$
|
||||
* SetKeySave() is designed to act like the set() function which returns
|
||||
* the current state of an environment setting, and optionally assigning
|
||||
* a new value. In this case, the "environment setting" is the internal
|
||||
* set-key list, and the optional new value is either a value returned
|
||||
* from a previous call to SetKeySave() - to restore that list, or the
|
||||
* value of NIL to clear the current list.
|
||||
* HB_SetKeySave() is designed to act like the set() function which
|
||||
* returns the current state of an environment setting, and optionally
|
||||
* assigning a new value. In this case, the "environment setting" is the
|
||||
* internal set-key list, and the optional new value is either a value
|
||||
* returned from a previous call to SetKeySave() - to restore that list,
|
||||
* or the value of NIL to clear the current list.
|
||||
* $EXAMPLES$
|
||||
* local aKeys := SetKeySave( NIL ) // removes all current set=keys
|
||||
* local aKeys := HB_SetKeySave( NIL ) // removes all current set=keys
|
||||
* ... // some other processing
|
||||
* SetKeySave( aKeys )
|
||||
* HB_SetKeySave( aKeys )
|
||||
* $TESTS$
|
||||
* None definable
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* SETKEYSAVE() is new.
|
||||
* HB_SETKEYSAVE() is new.
|
||||
* $SEEALSO$
|
||||
* SETKEY()
|
||||
* $END$
|
||||
*/
|
||||
Function SetKeySave( OldKeys )
|
||||
Function HB_SetKeySave( OldKeys )
|
||||
local aReturn := aClone( aSetKeys )
|
||||
|
||||
if pcount() != 0 .or. valtype( OldKeys ) = "A"
|
||||
@@ -230,13 +231,13 @@ return aReturn
|
||||
|
||||
/* $DOC$
|
||||
* $FUNCNAME$
|
||||
* SetKeyCheck
|
||||
* HB_SetKeyCheck
|
||||
* $CATEGORY$
|
||||
* ?
|
||||
* $ONELINER$
|
||||
* Impliments common hot-key activation code
|
||||
* $SYNTAX$
|
||||
* SetKeyCheck( <nKey> [, <p1> ][, <p2> ][, <p3> ] )
|
||||
* HB_SetKeyCheck( <nKey> [, <p1> ][, <p2> ][, <p3> ] )
|
||||
* $ARGUMENTS$
|
||||
* <nKey> is a numeric key value to be tested
|
||||
* code-block, if executed
|
||||
@@ -247,20 +248,20 @@ return aReturn
|
||||
* If there is a hot-key association (before checking any condition):
|
||||
* - if there is a condition-block, it is passed one parameter - <nKey>
|
||||
* - when the hot-key code-block is called, it is passed 1 to 4 parameters,
|
||||
* depending on the parameters passed to SetKeyCheck(). Any parameters
|
||||
* so passed are directly passed to the code-block, with an additional
|
||||
* parameter being <nKey>
|
||||
* depending on the parameters passed to HB_SetKeyCheck(). Any
|
||||
* parameters so passed are directly passed to the code-block, with an
|
||||
* additional parameter being <nKey>
|
||||
* $DESCRIPTION$
|
||||
* SetKeyCheck() is intended as a common interface to the SetKey()
|
||||
* HB_SetKeyCheck() is intended as a common interface to the SetKey()
|
||||
* functionality for such functions as ACHOICE(), DBEDIT(), MEMOEDIT(),
|
||||
* ACCEPT, INPUT, READ, and WAIT
|
||||
* $EXAMPLES$
|
||||
* // within ReadModal()
|
||||
* if SetKeyCheck( K_ALT_X, GetActive() )
|
||||
* if HB_SetKeyCheck( K_ALT_X, GetActive() )
|
||||
* ... // some other processing
|
||||
* endif
|
||||
* // within TBrowse handler
|
||||
* case SetKeyCheck( nInkey, oTBrowse )
|
||||
* case HB_SetKeyCheck( nInkey, oTBrowse )
|
||||
* return
|
||||
* case nInKey == K_ESC
|
||||
* ... // some other processing
|
||||
@@ -269,12 +270,12 @@ return aReturn
|
||||
* $STATUS$
|
||||
* C
|
||||
* $COMPLIANCE$
|
||||
* SetKeyCheck() is new.
|
||||
* HB_SetKeyCheck() is new.
|
||||
* $SEEALSO$
|
||||
* SETKEY(), SETKEYSAVE()
|
||||
* SETKEY(), HB_SETKEYSAVE()
|
||||
* $END$
|
||||
*/
|
||||
Function SetKeyCheck( nKey, p1, p2, p3 )
|
||||
Function HB_SetKeyCheck( nKey, p1, p2, p3 )
|
||||
local nFound, aKey, bBlock
|
||||
|
||||
if ( nFound := aScan( aSetKeys, {|x| x[ KEY ] = nKey } ) ) > 0
|
||||
@@ -299,4 +300,4 @@ Function SetKeyCheck( nKey, p1, p2, p3 )
|
||||
|
||||
endif
|
||||
|
||||
return .f.
|
||||
return .f.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -46,11 +46,10 @@ EXTERNAL __DYNSGETINDEX
|
||||
//
|
||||
EXTERNAL ERRORSYS
|
||||
EXTERNAL ERRORNEW
|
||||
EXTERNAL EVAL
|
||||
EXTERNAL LEN
|
||||
EXTERNAL EMPTY
|
||||
EXTERNAL VALTYPE
|
||||
EXTERNAL ERRORBLOCK
|
||||
EXTERNAL WORD
|
||||
EXTERNAL PROCNAME
|
||||
EXTERNAL PROCLINE
|
||||
EXTERNAL __QUIT
|
||||
@@ -81,20 +80,6 @@ EXTERNAL ACLONE
|
||||
//
|
||||
//symbols from file: rtl\classes.c
|
||||
//
|
||||
EXTERNAL __OBJGETMSGLIST
|
||||
EXTERNAL __OBJGETMETHODLIST
|
||||
EXTERNAL __OBJGETVALUELIST
|
||||
EXTERNAL __OBJSETVALUELIST
|
||||
EXTERNAL __OBJHASDATA
|
||||
EXTERNAL __OBJHASMETHOD
|
||||
EXTERNAL __OBJADDDATA
|
||||
EXTERNAL __OBJADDINLINE
|
||||
EXTERNAL __OBJADDMETHOD
|
||||
EXTERNAL __OBJDELDATA
|
||||
EXTERNAL __OBJDELINLINE
|
||||
EXTERNAL __OBJDELMETHOD
|
||||
EXTERNAL __OBJMODINLINE
|
||||
EXTERNAL __OBJMODMETHOD
|
||||
EXTERNAL __CLSADDMSG
|
||||
EXTERNAL __CLSNEW
|
||||
EXTERNAL __CLSDELMSG
|
||||
@@ -120,6 +105,7 @@ EXTERNAL OUTERR
|
||||
EXTERNAL QQOUT
|
||||
EXTERNAL QOUT
|
||||
EXTERNAL SETPOS
|
||||
EXTERNAL SETPOSBS
|
||||
EXTERNAL DEVPOS
|
||||
EXTERNAL DEVOUT
|
||||
EXTERNAL DISPOUT
|
||||
@@ -178,6 +164,7 @@ EXTERNAL DIRECTORY
|
||||
//symbols from file: rtl\do.c
|
||||
//
|
||||
EXTERNAL DO
|
||||
EXTERNAL EVAL
|
||||
//
|
||||
//symbols from file: rtl\environ.c
|
||||
//
|
||||
@@ -188,6 +175,8 @@ EXTERNAL __RUN
|
||||
//
|
||||
//symbols from file: rtl\errorapi.c
|
||||
//
|
||||
EXTERNAL ERRORBLOCK
|
||||
EXTERNAL DOSERROR
|
||||
EXTERNAL __ERRRT_BASE
|
||||
//
|
||||
//symbols from file: rtl\extend.c
|
||||
@@ -207,6 +196,12 @@ EXTERNAL FSEEK
|
||||
EXTERNAL FILE
|
||||
EXTERNAL FREADSTR
|
||||
EXTERNAL CURDIR
|
||||
EXTERNAL DIRCHANGE
|
||||
EXTERNAL MAKEDIR
|
||||
EXTERNAL DIRREMOVE
|
||||
EXTERNAL DISKSPACE
|
||||
EXTERNAL DISKCHANGE
|
||||
EXTERNAL DISKNAME
|
||||
EXTERNAL BIN2I
|
||||
EXTERNAL BIN2L
|
||||
EXTERNAL BIN2W
|
||||
@@ -231,6 +226,7 @@ EXTERNAL HARDCR
|
||||
//
|
||||
EXTERNAL INKEY
|
||||
EXTERNAL __KEYBOARD
|
||||
EXTERNAL __KEYPUT
|
||||
EXTERNAL NEXTKEY
|
||||
EXTERNAL LASTKEY
|
||||
//
|
||||
@@ -260,6 +256,13 @@ EXTERNAL __MVXRELEASE
|
||||
EXTERNAL __MVRELEASE
|
||||
EXTERNAL __MVSCOPE
|
||||
EXTERNAL __MVCLEAR
|
||||
EXTERNAL __MVDBGINFO
|
||||
//
|
||||
//symbols from file: rtl\mouseapi.c
|
||||
//
|
||||
//
|
||||
//symbols from file: rtl\mousexxx.c
|
||||
//
|
||||
//
|
||||
//symbols from file: rtl\msgxxx.c
|
||||
//
|
||||
@@ -270,6 +273,7 @@ EXTERNAL MEMOTRAN
|
||||
//
|
||||
//symbols from file: rtl\set.c
|
||||
//
|
||||
EXTERNAL SETCANCEL
|
||||
EXTERNAL __SETCENTURY
|
||||
EXTERNAL SET
|
||||
//
|
||||
@@ -351,6 +355,20 @@ EXTERNAL __MENUTO
|
||||
//
|
||||
//symbols from file: rtl\objfunc.prg
|
||||
//
|
||||
EXTERNAL __OBJHASDATA
|
||||
EXTERNAL __OBJHASMETHOD
|
||||
EXTERNAL __OBJGETMSGLIST
|
||||
EXTERNAL __OBJGETMETHODLIST
|
||||
EXTERNAL __OBJGETVALUELIST
|
||||
EXTERNAL __OBJSETVALUELIST
|
||||
EXTERNAL __OBJADDMETHOD
|
||||
EXTERNAL __OBJADDINLINE
|
||||
EXTERNAL __OBJADDDATA
|
||||
EXTERNAL __OBJMODMETHOD
|
||||
EXTERNAL __OBJMODINLINE
|
||||
EXTERNAL __OBJDELMETHOD
|
||||
EXTERNAL __OBJDELINLINE
|
||||
EXTERNAL __OBJDELDATA
|
||||
//
|
||||
//symbols from file: rtl\readvar.prg
|
||||
//
|
||||
@@ -359,9 +377,9 @@ EXTERNAL READVAR
|
||||
//symbols from file: rtl\setkey.prg
|
||||
//
|
||||
EXTERNAL SETKEY
|
||||
EXTERNAL SETKEYGET
|
||||
EXTERNAL SETKEYSAVE
|
||||
EXTERNAL SETKEYCHECK
|
||||
EXTERNAL HB_SETKEYGET
|
||||
EXTERNAL HB_SETKEYSAVE
|
||||
EXTERNAL HB_SETKEYCHECK
|
||||
//
|
||||
//symbols from file: rtl\tbcolumn.prg
|
||||
//
|
||||
@@ -397,18 +415,21 @@ EXTERNAL __XRESTSCREEN
|
||||
//
|
||||
//symbols from file: rdd\dbcmd.c
|
||||
//
|
||||
EXTERNAL DBF
|
||||
EXTERNAL SDF
|
||||
EXTERNAL DELIM
|
||||
EXTERNAL _DBF
|
||||
EXTERNAL _SDF
|
||||
EXTERNAL _DELIM
|
||||
EXTERNAL RDDSYS
|
||||
EXTERNAL AFIELDS
|
||||
EXTERNAL ALIAS
|
||||
EXTERNAL BOF
|
||||
EXTERNAL DBAPPEND
|
||||
EXTERNAL DBCLOSEALL
|
||||
EXTERNAL DBCLOSEAREA
|
||||
EXTERNAL DBCOMMIT
|
||||
EXTERNAL DBCOMMITALL
|
||||
EXTERNAL DBCREATE
|
||||
EXTERNAL DBDELETE
|
||||
EXTERNAL DBF
|
||||
EXTERNAL DBGOBOTTOM
|
||||
EXTERNAL DBGOTO
|
||||
EXTERNAL DBGOTOP
|
||||
@@ -435,13 +456,13 @@ EXTERNAL FLOCK
|
||||
EXTERNAL FOUND
|
||||
EXTERNAL HEADER
|
||||
EXTERNAL LASTREC
|
||||
EXTERNAL LOCK
|
||||
EXTERNAL LUPDATE
|
||||
EXTERNAL NETERR
|
||||
EXTERNAL RDDLIST
|
||||
EXTERNAL RDDNAME
|
||||
EXTERNAL RDDREGISTER
|
||||
EXTERNAL RDDSETDEFAULT
|
||||
EXTERNAL RDDSHUTDOWN
|
||||
EXTERNAL RECCOUNT
|
||||
EXTERNAL RECNO
|
||||
EXTERNAL RECSIZE
|
||||
@@ -451,17 +472,17 @@ EXTERNAL USED
|
||||
//
|
||||
//symbols from file: rdd\dbf1.c
|
||||
//
|
||||
EXTERNAL _DBF
|
||||
EXTERNAL _DBFC
|
||||
EXTERNAL DBF_GETFUNCTABLE
|
||||
//
|
||||
//symbols from file: rdd\delim1.c
|
||||
//
|
||||
EXTERNAL _DELIM
|
||||
EXTERNAL _DELIMC
|
||||
EXTERNAL DELIM_GETFUNCTABLE
|
||||
//
|
||||
//symbols from file: rdd\sdf1.c
|
||||
//
|
||||
EXTERNAL _SDF
|
||||
EXTERNAL _SDFC
|
||||
EXTERNAL SDF_GETFUNCTABLE
|
||||
//
|
||||
//symbols from file: rdd\dbf0.prg
|
||||
@@ -640,6 +661,19 @@ EXTERNAL GT_STRRIGHT
|
||||
//
|
||||
EXTERNAL TFILEREAD
|
||||
//
|
||||
//symbols from file: tools\nconvert.prg
|
||||
//
|
||||
EXTERNAL ISBIN
|
||||
EXTERNAL ISOCTAL
|
||||
EXTERNAL ISDEC
|
||||
EXTERNAL ISHEXA
|
||||
EXTERNAL DECTOBIN
|
||||
EXTERNAL DECTOOCTAL
|
||||
EXTERNAL DECTOHEXA
|
||||
EXTERNAL BINTODEC
|
||||
EXTERNAL OCTALTODEC
|
||||
EXTERNAL HEXATODEC
|
||||
//
|
||||
//symbols from file: tools\numtxten.prg
|
||||
//
|
||||
EXTERNAL NUMTOTXTEN
|
||||
|
||||
@@ -185,6 +185,7 @@ void hb_vmQuit( void )
|
||||
|
||||
hb_itemClear( &stack.Return );
|
||||
hb_arrayRelease( &aStatics );
|
||||
hb_rddShutDown();
|
||||
hb_errExit();
|
||||
hb_clsReleaseAll();
|
||||
hb_vmReleaseLocalSymbols(); /* releases the local modules linked list */
|
||||
|
||||
Reference in New Issue
Block a user