19990806-05:31 GMT+1

This commit is contained in:
Viktor Szakats
1999-08-06 03:51:33 +00:00
parent b1695b2ddc
commit 2f1ea75a14
26 changed files with 609 additions and 382 deletions

View File

@@ -1,3 +1,34 @@
19990806-05:31 GMT+1 Victor Szel <info@szelvesz.hu>
* source/rtl/menuto.prg
! MENU TO made highly Clipper compatible (100%), with the addition of
the nesting capability.
(only BEGIN/END SEQUENCE and Break() support is missing)
* make_tpl.bat
make_tpl.cmd (added)
make_tpl.sh
* Updated and extended make file starter files.
* source/rtl/readvar.prg
source/rtl/Makefile
funclist.txt
+ Added: READVAR() (used in MENU TO)
(Please update other makefiles accordingly)
* include/Makefile
! hb_vmpub.h added
* source/rtl/achoice.prg
! Fixed handling of Ctrl+PgUp/PgDn/Home/End when a user func was passed.
* source/rdd/dbcmd.c
source/rtl/classes.c
source/rtl/do.c
source/rtl/memvars.c
source/runner/runner.c
source/vm/dynsym.c
source/vm/hvm.c
include/extend.h
include/hb_vmpub.h
* DYNSYM -> HB_DYNS
PDYNSYM -> PHB_DYNS
* include/*.* - More small cleanups
19990805-17:10 GMT+1 Victor Szel <info@szelvesz.hu>
* source/rtl/setcolor.c
! #includes "extend.h" instead of "pcode.h"
@@ -22,6 +53,7 @@
"~" hotkey char support removed, since there's no such in Clipper.
+ Test includes recursive capability
! Test added to Makefile
(Please update other makefiles accordingly)
* source/rtl/achoice.prg
+ Added SETKEY() handling.
* source/rtl/alert.prg
@@ -37,9 +69,9 @@
include/rddapi.h
include/rddapi.h
source/rdd/dbf1.c
source/rdd/dbfntx\dbfntx1.c
source/rdd/dbfntx/dbfntx1.c
source/rdd/dbcmd.c
source/rtl/gt\gtos2.c
source/rtl/gt/gtos2.c
source/rtl/copyfile.c
source/rtl/environ.c
source/rtl/filesys.c

View File

@@ -188,7 +188,7 @@ READEXIT ;N;
READINSERT ;N;
READKEY ;N;
READMODAL ;N;
READVAR ;N;
READVAR ;R;
RECCOUNT ;N;
RECNO ;N;
RECSIZE ;N;

View File

@@ -19,6 +19,7 @@ C_HEADERS=\
hbpp.h \
hbsetup.h \
hbver.h \
hb_vmpub.h \
init.h \
initsymc.h \
initsymd.h \

View File

@@ -68,7 +68,7 @@ typedef ERRCODE IHELP;
typedef ERRCODE ICODE;
/* default func ptr -- USHORT return, USHORT param */
typedef USHORT (far * FUNCP)(USHORT param, ...);
typedef USHORT ( * FUNCP )( USHORT param, ...);
typedef FUNCP* FUNCPP;
#define HIDE static

View File

@@ -40,7 +40,7 @@
#include "fm.api"
#endif
struct _DYNSYM; /* forward declaration */
struct _HB_DYNS; /* forward declaration */
/* symbol support structure */
typedef struct
@@ -48,40 +48,40 @@ typedef struct
char* szName; /* the name of the symbol */
SYMBOLSCOPE cScope; /* the scope of the symbol */
PHB_FUNC pFunPtr; /* function address for function symbol table entries */
struct _DYNSYM * pDynSym; /* pointer to its dynamic symbol if defined */
struct _HB_DYNS * pDynSym; /* pointer to its dynamic symbol if defined */
} HB_SYMB, * PHB_SYMB, * HB_SYMB_PTR;
/* Harbour Functions scope */
#define FS_PUBLIC 0
#define FS_STATIC 2
#define FS_INIT 8
#define FS_EXIT 16
#define FS_INITEXIT ( FS_INIT | FS_EXIT )
#define FS_MESSAGE 32
#define FS_MEMVAR 128
/* Harbour Functions scope (SYMBOLSCOPE) */
#define FS_PUBLIC 0x00
#define FS_STATIC 0x02
#define FS_INIT 0x08
#define FS_EXIT 0x10
#define FS_INITEXIT ( FS_INIT | FS_EXIT )
#define FS_MESSAGE 0x20
#define FS_MEMVAR 0x80
extern void VirtualMachine( BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */
extern void ProcessSymbols( PHB_SYMB pSymbols, WORD wSymbols ); /* statics symbols initialization */
/* items types */
#define IT_NIL 0x0000
#define IT_INTEGER 0x0002
#define IT_LONG 0x0008
#define IT_DOUBLE 0x0010
#define IT_DATE 0x0020
#define IT_LOGICAL 0x0080
#define IT_SYMBOL 0x0100
#define IT_ALIAS 0x0200
#define IT_STRING 0x0400
#define IT_MEMOFLAG 0x0800
#define IT_MEMO ( IT_MEMOFLAG & IT_STRING )
#define IT_BLOCK 0x1000
#define IT_BYREF 0x2000
#define IT_MEMVAR 0x4000
#define IT_ARRAY 0x8000
#define IT_OBJECT IT_ARRAY
#define IT_NUMERIC ( IT_INTEGER | IT_LONG | IT_DOUBLE )
#define IT_ANY 0xFFFF
#define IT_NIL 0x0000
#define IT_INTEGER 0x0002
#define IT_LONG 0x0008
#define IT_DOUBLE 0x0010
#define IT_DATE 0x0020
#define IT_LOGICAL 0x0080
#define IT_SYMBOL 0x0100
#define IT_ALIAS 0x0200
#define IT_STRING 0x0400
#define IT_MEMOFLAG 0x0800
#define IT_MEMO ( IT_MEMOFLAG & IT_STRING )
#define IT_BLOCK 0x1000
#define IT_BYREF 0x2000
#define IT_MEMVAR 0x4000
#define IT_ARRAY 0x8000
#define IT_OBJECT IT_ARRAY
#define IT_NUMERIC ( IT_INTEGER | IT_LONG | IT_DOUBLE )
#define IT_ANY 0xFFFF
/* forward declarations */
struct _HB_CODEBLOCK;
@@ -214,18 +214,13 @@ typedef struct
} STACK;
/* dynamic symbol structure */
typedef struct _DYNSYM
typedef struct _HB_DYNS
{
HB_HANDLE hArea; /* Workarea number */
HB_HANDLE hMemvar; /* Index number into memvars ( publics & privates ) array */
PHB_SYMB pSymbol; /* pointer to its relative local symbol */
PHB_FUNC pFunPtr; /* Pointer to the function address */
} DYNSYM, * PDYNSYM, * DYNSYM_PTR;
typedef struct
{
PDYNSYM pDynSym; /* Pointer to dynamic symbol */
} DYNHB_ITEM, * PDYNHB_ITEM, * DYNHB_ITEM_PTR;
} HB_DYNS, * PHB_DYNS, * HB_DYNS_PTR;
/* internal structure for codeblocks */
typedef struct _HB_CODEBLOCK
@@ -321,9 +316,9 @@ extern char * hb_GetClassName( PHB_ITEM pObject ); /* retrieves an object clas
extern ULONG hb_isMessage( PHB_ITEM, char * );
/* dynamic symbol table management */
extern PDYNSYM hb_GetDynSym( char * szName ); /* finds and creates a dynamic symbol if not found */
extern PDYNSYM hb_NewDynSym( PHB_SYMB pSymbol ); /* creates a new dynamic symbol based on a local one */
extern PDYNSYM hb_FindDynSym( char * szName ); /* finds a dynamic symbol */
extern PHB_DYNS hb_GetDynSym( char * szName ); /* finds and creates a dynamic symbol if not found */
extern PHB_DYNS hb_NewDynSym( PHB_SYMB pSymbol ); /* creates a new dynamic symbol based on a local one */
extern PHB_DYNS hb_FindDynSym( char * szName ); /* finds a dynamic symbol */
extern void hb_LogDynSym( void ); /* displays all dynamic symbols */
extern void hb_ReleaseDynSym( void ); /* releases the memory of the dynamic symbol table */
extern PHB_SYMB hb_NewSymbol( char * szName );

View File

@@ -20,6 +20,6 @@
/* Nant*cket Clipper Summer 87 compatible */
#define _exmgrab hb_xgrab
#define _exmback(p, s) hb_xfree(p)
#define _exmback(p, s) hb_xfree( p )
#endif /* HB_FM_API_ */

View File

@@ -47,60 +47,60 @@
/* Public interface. These should never change, only be added to. */
extern void hb_gtInit(void);
extern void hb_gtExit(void);
extern int hb_gtBox(USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * fpBoxString);
extern int hb_gtBoxD(USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight);
extern int hb_gtBoxS(USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight);
extern int hb_gtColorSelect(USHORT uiColorIndex);
extern int hb_gtDispBegin(void);
extern USHORT hb_gtDispCount(void);
extern int hb_gtDispEnd(void);
extern int hb_gtGetBlink(BOOL * bBlink);
extern int hb_gtGetColorStr(char * fpColorString);
extern int hb_gtGetCursor(USHORT * uipCursorShape);
extern int hb_gtGetPos(USHORT * uipRow, USHORT * uipCol);
extern BOOL hb_gtIsColor(void);
extern USHORT hb_gtMaxCol(void);
extern USHORT hb_gtMaxRow(void);
extern int hb_gtPostExt(void);
extern int hb_gtPreExt(void);
extern int hb_gtRectSize(USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, USHORT * uipBuffSize);
extern int hb_gtRepChar(USHORT uiRow, USHORT uiCol, USHORT uiChar, USHORT uiCount);
extern int hb_gtRest(USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff);
extern int hb_gtSave(USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff);
extern int hb_gtScrDim(USHORT * uipHeight, USHORT * uipWidth);
extern int hb_gtScroll(USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, SHORT iRows, SHORT iCols);
extern int hb_gtSetBlink(BOOL bBlink);
extern int hb_gtSetColorStr(char * fpColorString);
extern int hb_gtSetCursor(USHORT uiCursorShape);
extern int hb_gtSetMode(USHORT uiRows, USHORT uiCols);
extern int hb_gtSetPos(USHORT uiRow, USHORT uiCol);
extern int hb_gtSetSnowFlag(BOOL bNoSnow);
extern int hb_gtWrite(char * fpStr, ULONG length);
extern int hb_gtWriteAt(USHORT uiRow, USHORT uiCol, char * fpStr, ULONG length);
extern int hb_gtWriteCon(char * fpStr, ULONG length);
extern void hb_gtInit( void );
extern void hb_gtExit( void );
extern int hb_gtBox( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * fpBoxString );
extern int hb_gtBoxD( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight );
extern int hb_gtBoxS( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight );
extern int hb_gtColorSelect( USHORT uiColorIndex );
extern int hb_gtDispBegin( void );
extern USHORT hb_gtDispCount( void );
extern int hb_gtDispEnd( void );
extern int hb_gtGetBlink( BOOL * bBlink );
extern int hb_gtGetColorStr( char * fpColorString );
extern int hb_gtGetCursor( USHORT * uipCursorShape );
extern int hb_gtGetPos( USHORT * uipRow, USHORT * uipCol );
extern BOOL hb_gtIsColor( void );
extern USHORT hb_gtMaxCol( void );
extern USHORT hb_gtMaxRow( void );
extern int hb_gtPostExt( void );
extern int hb_gtPreExt( void );
extern int hb_gtRectSize( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, USHORT * uipBuffSize );
extern int hb_gtRepChar( USHORT uiRow, USHORT uiCol, USHORT uiChar, USHORT uiCount );
extern int hb_gtRest( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff );
extern int hb_gtSave( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, char * vlpScrBuff );
extern int hb_gtScrDim( USHORT * uipHeight, USHORT * uipWidth );
extern int hb_gtScroll( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight, SHORT iRows, SHORT iCols );
extern int hb_gtSetBlink( BOOL bBlink );
extern int hb_gtSetColorStr( char * fpColorString );
extern int hb_gtSetCursor( USHORT uiCursorShape );
extern int hb_gtSetMode( USHORT uiRows, USHORT uiCols );
extern int hb_gtSetPos( USHORT uiRow, USHORT uiCol );
extern int hb_gtSetSnowFlag( BOOL bNoSnow );
extern int hb_gtWrite( char * fpStr, ULONG length );
extern int hb_gtWriteAt( USHORT uiRow, USHORT uiCol, char * fpStr, ULONG length );
extern int hb_gtWriteCon( char * fpStr, ULONG length );
/* private interface listed below. these are common to all platforms */
extern void hb_gt_Init(void);
extern int hb_gt_IsColor(void);
extern void hb_gt_Done(void);
extern char hb_gt_GetScreenWidth(void);
extern char hb_gt_GetScreenHeight(void);
extern void hb_gt_SetPos(char cRow, char cCol);
extern char hb_gt_Col(void);
extern char hb_gt_Row(void);
extern void hb_gt_Scroll(char cTop, char cLeft, char cBottom, char cRight, char attribute, char vert, char horiz);
extern void hb_gt_SetCursorStyle(int style);
extern int hb_gt_GetCursorStyle(void);
extern void hb_gt_Puts(char cRow, char cCol, char attr, char *str, int len);
extern void hb_gt_GetText(char cTop, char cLeft, char cBottom, char cRight, char *dest);
extern void hb_gt_PutText(char cTop, char cLeft, char cBottom, char cRight, char *srce);
extern void hb_gt_Init( void );
extern int hb_gt_IsColor( void );
extern void hb_gt_Done( void );
extern char hb_gt_GetScreenWidth( void );
extern char hb_gt_GetScreenHeight( void );
extern void hb_gt_SetPos( char cRow, char cCol );
extern char hb_gt_Col( void );
extern char hb_gt_Row( void );
extern void hb_gt_Scroll( char cTop, char cLeft, char cBottom, char cRight, char attribute, char vert, char horiz );
extern void hb_gt_SetCursorStyle( int style );
extern int hb_gt_GetCursorStyle( void );
extern void hb_gt_Puts( char cRow, char cCol, char attr, char *str, int len );
extern void hb_gt_GetText( char cTop, char cLeft, char cBottom, char cRight, char *dest );
extern void hb_gt_PutText( char cTop, char cLeft, char cBottom, char cRight, char *srce );
extern void hb_gt_SetAttribute( char cTop, char cLeft, char cBottom, char cRight, char attribute );
extern void hb_gt_DrawShadow( char cTop, char cLeft, char cBottom, char cRight, char attribute );
extern void hb_gt_DispBegin(void);
extern void hb_gt_DispEnd(void);
extern void hb_gt_DispBegin( void );
extern void hb_gt_DispEnd( void );
extern ULONG hb_gt_ScreenBuffer( ULONG buffer );
extern void hb_gt_SetMode( USHORT uiRows, USHORT uiCols );

View File

@@ -2,30 +2,37 @@
* $Id$
*/
/* This is the header file which is included to every */
/* Harbour generated C source file */
/*
Copyright(C) 1999 by Antonio Linares.
Harbour Project source code
This file provides the bare minimum of declarations
which is required to compile a Harbour generated .C file.
Copyright (C) 1999 Victor Szel <info@szelvesz.hu>
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.
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:
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.
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.
You should have received a copy of the GNU General Public
License along with this program; if not, write to:
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.
The Free Software Foundation, Inc.,
675 Mass Ave, Cambridge, MA 02139, USA.
You can contact me at: alinares@fivetech.com
*/
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/).
*/
#ifndef HB_VMPUB_H_
#define HB_VMPUB_H_
@@ -34,7 +41,7 @@
/* Dummy definitions */
typedef void * PDYNSYM;
typedef void * PHB_DYNS;
/* Parts copied from hbdefs.h */
@@ -48,11 +55,11 @@ typedef unsigned short int WORD;
#ifdef _MSC_VER
#define HARBOUR void
#else
#ifdef __IBMCPP__
#define HARBOUR void
#else
#define HARBOUR void pascal
#endif
#ifdef __IBMCPP__
#define HARBOUR void
#else
#define HARBOUR void pascal
#endif
#endif
typedef void * PHB_FUNC;
@@ -66,19 +73,19 @@ typedef struct
char * szName; /* the name of the symbol */
SYMBOLSCOPE cScope; /* the scope of the symbol */
PHB_FUNC pFunPtr; /* function address for function symbol table entries */
PDYNSYM pDynSym; /* pointer to its dynamic symbol if defined */
PHB_DYNS pDynSym; /* pointer to its dynamic symbol if defined */
} HB_SYMB, * PHB_SYMB;
extern void VirtualMachine( BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */
/* Harbour Functions scope */
#define FS_PUBLIC 0
#define FS_STATIC 2
#define FS_INIT 8
#define FS_EXIT 16
#define FS_INITEXIT ( FS_INIT | FS_EXIT )
#define FS_MESSAGE 32
#define FS_MEMVAR 128
/* Harbour Functions scope (SYMBOLSCOPE) */
#define FS_PUBLIC 0x00
#define FS_STATIC 0x02
#define FS_INIT 0x08
#define FS_EXIT 0x10
#define FS_INITEXIT ( FS_INIT | FS_EXIT )
#define FS_MESSAGE 0x20
#define FS_MEMVAR 0x80
/* This should always follow the type declarations */

View File

@@ -61,9 +61,9 @@ typedef int BOOL;
#define FALSE 0
#define TRUE 1
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
#define LOWORD(l) ((WORD)(l))
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
#define LOWORD(l) ((WORD)(l))
#endif /* HB_DONT_DEFINE_BASIC_TYPES */
#endif /* __IBMCPP__ */
@@ -83,14 +83,15 @@ typedef int BOOL;
#define HARBOUR void
#define EXTERNAL_LINKAGE
#else
#ifdef __IBMCPP__
#define HARBOUR void
#define EXTERNAL_LINKAGE _LNK_CONV
#else
#define HARBOUR void pascal
#define EXTERNAL_LINKAGE
#endif
#ifdef __IBMCPP__
#define HARBOUR void
#define EXTERNAL_LINKAGE _LNK_CONV
#else
#define HARBOUR void pascal
#define EXTERNAL_LINKAGE
#endif
#endif
typedef HARBOUR ( * PHB_FUNC )( void );
typedef PHB_FUNC HB_FUNC_PTR;

View File

@@ -45,7 +45,7 @@ typedef struct
#define BUFF_SIZE 2048
#define INITIAL_ACOM_SIZE 200
#define SKIPTABSPACES(sptr) while ( *sptr == ' ' || *sptr == '\t' ) (sptr)++
#define SKIPTABSPACES( sptr ) while ( *sptr == ' ' || *sptr == '\t' ) (sptr)++
#define PATH_DELIMITER "/\\"
#define IS_PATH_SEP( c ) (strchr(PATH_DELIMITER, (c))!=NULL)
@@ -56,10 +56,10 @@ typedef struct
extern int ParseDirective( char* );
extern int ParseExpression( char*, char* );
extern int pp_RdStr(FILE*,char *,int,int,char*,int*,int*);
extern int pp_WrStr(FILE*,char *);
extern int pp_RdStr( FILE*,char *,int,int,char*,int*,int* );
extern int pp_WrStr( FILE*,char * );
extern int strolen ( char* );
extern int strocpy (char*, char* );
extern int strocpy ( char*, char* );
extern char* strodup ( char * );
extern DEFINES *AddDefine( char * szDefine, char * szValue ); /* add a new Lex define from the command line */

View File

@@ -77,64 +77,64 @@ HARBOUR HB___MVPRIVATE();
*/
HB_INIT_SYMBOLS_BEGIN( RUNNER )
{ "HB_RUN", FS_PUBLIC, HB_HB_RUN , 0 },
{ "__AGLOBALSTACK", FS_PUBLIC, HB___AGLOBALSTACK, 0 },
{ "__APARAM", FS_PUBLIC, HB___APARAM , 0 },
{ "__ASTACK", FS_PUBLIC, HB___ASTACK , 0 },
{ "__ASTATIC", FS_PUBLIC, HB___ASTATIC , 0 },
{ "HB_RUN", FS_PUBLIC, HB_HB_RUN , 0 },
{ "__AGLOBALSTACK", FS_PUBLIC, HB___AGLOBALSTACK , 0 },
{ "__APARAM", FS_PUBLIC, HB___APARAM , 0 },
{ "__ASTACK", FS_PUBLIC, HB___ASTACK , 0 },
{ "__ASTATIC", FS_PUBLIC, HB___ASTATIC , 0 },
{ "__GLOBALSTACKLEN", FS_PUBLIC, HB___GLOBALSTACKLEN, 0 },
{ "__STACKLEN", FS_PUBLIC, HB___STACKLEN , 0 },
{ "__STATIC", FS_PUBLIC, HB___STATIC , 0 },
{ "ACOS", FS_PUBLIC, HB_ACOS , 0 },
{ "ASIN", FS_PUBLIC, HB_ASIN , 0 },
{ "ATAN", FS_PUBLIC, HB_ATAN , 0 },
{ "COS", FS_PUBLIC, HB_COS , 0 },
{ "COSH", FS_PUBLIC, HB_COSH , 0 },
{ "DATETIME", FS_PUBLIC, HB_DATETIME , 0 },
{ "DEBUG", FS_PUBLIC, HB_DEBUG , 0 },
{ "DEFAULT", FS_PUBLIC, HB_DEFAULT , 0 },
{ "ERRORSYS", FS_PUBLIC, HB_ERRORSYS , 0 },
{ "ERRORNEW", FS_PUBLIC, HB_ERRORNEW , 0 },
{ "EVAL", FS_PUBLIC, HB_EVAL , 0 },
{ "GT_ASCIISUM", FS_PUBLIC, HB_GT_ASCIISUM , 0 },
{ "GT_ASCPOS", FS_PUBLIC, HB_GT_ASCPOS , 0 },
{ "GT_ATDIFF", FS_PUBLIC, HB_GT_ATDIFF , 0 },
{ "GT_CHAREVEN", FS_PUBLIC, HB_GT_CHAREVEN , 0 },
{ "GT_CHARODD", FS_PUBLIC, HB_GT_CHARODD , 0 },
{ "GT_CHARMIX", FS_PUBLIC, HB_GT_CHARMIX , 0 },
{ "GT_CHRCOUNT", FS_PUBLIC, HB_GT_CHRCOUNT , 0 },
{ "GT_CHRFIRST", FS_PUBLIC, HB_GT_CHRFIRST , 0 },
{ "GT_CHRTOTAL", FS_PUBLIC, HB_GT_CHRTOTAL , 0 },
{ "GT_STRCOUNT", FS_PUBLIC, HB_GT_STRCOUNT , 0 },
{ "GT_STRCSPN", FS_PUBLIC, HB_GT_STRCSPN , 0 },
{ "GT_STRDIFF", FS_PUBLIC, HB_GT_STRDIFF , 0 },
{ "GT_STREXPAND", FS_PUBLIC, HB_GT_STREXPAND , 0 },
{ "GT_STRLEFT", FS_PUBLIC, HB_GT_STRLEFT , 0 },
{ "GT_STRPBRK", FS_PUBLIC, HB_GT_STRPBRK , 0 },
{ "GT_STRRIGHT", FS_PUBLIC, HB_GT_STRRIGHT , 0 },
{ "HB_FEOF", FS_PUBLIC, HB_HB_FEOF , 0 },
{ "HB_FGOBOTTOM", FS_PUBLIC, HB_HB_FGOBOTTOM , 0 },
{ "HB_FGOTO", FS_PUBLIC, HB_HB_FGOTO , 0 },
{ "HB_FGOTOP", FS_PUBLIC, HB_HB_FGOTOP , 0 },
{ "HB_FLASTREC", FS_PUBLIC, HB_HB_FLASTREC , 0 },
{ "HB_FRECNO", FS_PUBLIC, HB_HB_FRECNO , 0 },
{ "HB_FREADLN", FS_PUBLIC, HB_HB_FREADLN , 0 },
{ "HB_FSKIP", FS_PUBLIC, HB_HB_FSKIP , 0 },
{ "HB_FUSE", FS_PUBLIC, HB_HB_FUSE , 0 },
{ "LOG10", FS_PUBLIC, HB_LOG10 , 0 },
{ "PVALUE", FS_PUBLIC, HB_PVALUE , 0 },
{ "ROT13", FS_PUBLIC, HB_ROT13 , 0 },
{ "SIN", FS_PUBLIC, HB_SIN , 0 },
{ "SINH", FS_PUBLIC, HB_SINH , 0 },
{ "STRDUMP", FS_PUBLIC, HB_STRDUMP , 0 },
{ "STRTOKEN", FS_PUBLIC, HB_STRTOKEN , 0 },
{ "TAN", FS_PUBLIC, HB_TAN , 0 },
{ "TANH", FS_PUBLIC, HB_TANH , 0 },
{ "TFILEREAD", FS_PUBLIC, HB_TFILEREAD , 0 },
{ "TOCHAR", FS_PUBLIC, HB_TOCHAR , 0 },
{ "VALTYPE", FS_PUBLIC, HB_VALTYPE , 0 },
{ "__MVPUBLIC", FS_PUBLIC, HB___MVPUBLIC , 0 },
{ "__MVPRIVATE", FS_PUBLIC, HB___MVPRIVATE , 0 }
{ "__STACKLEN", FS_PUBLIC, HB___STACKLEN , 0 },
{ "__STATIC", FS_PUBLIC, HB___STATIC , 0 },
{ "ACOS", FS_PUBLIC, HB_ACOS , 0 },
{ "ASIN", FS_PUBLIC, HB_ASIN , 0 },
{ "ATAN", FS_PUBLIC, HB_ATAN , 0 },
{ "COS", FS_PUBLIC, HB_COS , 0 },
{ "COSH", FS_PUBLIC, HB_COSH , 0 },
{ "DATETIME", FS_PUBLIC, HB_DATETIME , 0 },
{ "DEBUG", FS_PUBLIC, HB_DEBUG , 0 },
{ "DEFAULT", FS_PUBLIC, HB_DEFAULT , 0 },
{ "ERRORSYS", FS_PUBLIC, HB_ERRORSYS , 0 },
{ "ERRORNEW", FS_PUBLIC, HB_ERRORNEW , 0 },
{ "EVAL", FS_PUBLIC, HB_EVAL , 0 },
{ "GT_ASCIISUM", FS_PUBLIC, HB_GT_ASCIISUM , 0 },
{ "GT_ASCPOS", FS_PUBLIC, HB_GT_ASCPOS , 0 },
{ "GT_ATDIFF", FS_PUBLIC, HB_GT_ATDIFF , 0 },
{ "GT_CHAREVEN", FS_PUBLIC, HB_GT_CHAREVEN , 0 },
{ "GT_CHARODD", FS_PUBLIC, HB_GT_CHARODD , 0 },
{ "GT_CHARMIX", FS_PUBLIC, HB_GT_CHARMIX , 0 },
{ "GT_CHRCOUNT", FS_PUBLIC, HB_GT_CHRCOUNT , 0 },
{ "GT_CHRFIRST", FS_PUBLIC, HB_GT_CHRFIRST , 0 },
{ "GT_CHRTOTAL", FS_PUBLIC, HB_GT_CHRTOTAL , 0 },
{ "GT_STRCOUNT", FS_PUBLIC, HB_GT_STRCOUNT , 0 },
{ "GT_STRCSPN", FS_PUBLIC, HB_GT_STRCSPN , 0 },
{ "GT_STRDIFF", FS_PUBLIC, HB_GT_STRDIFF , 0 },
{ "GT_STREXPAND", FS_PUBLIC, HB_GT_STREXPAND , 0 },
{ "GT_STRLEFT", FS_PUBLIC, HB_GT_STRLEFT , 0 },
{ "GT_STRPBRK", FS_PUBLIC, HB_GT_STRPBRK , 0 },
{ "GT_STRRIGHT", FS_PUBLIC, HB_GT_STRRIGHT , 0 },
{ "HB_FEOF", FS_PUBLIC, HB_HB_FEOF , 0 },
{ "HB_FGOBOTTOM", FS_PUBLIC, HB_HB_FGOBOTTOM , 0 },
{ "HB_FGOTO", FS_PUBLIC, HB_HB_FGOTO , 0 },
{ "HB_FGOTOP", FS_PUBLIC, HB_HB_FGOTOP , 0 },
{ "HB_FLASTREC", FS_PUBLIC, HB_HB_FLASTREC , 0 },
{ "HB_FRECNO", FS_PUBLIC, HB_HB_FRECNO , 0 },
{ "HB_FREADLN", FS_PUBLIC, HB_HB_FREADLN , 0 },
{ "HB_FSKIP", FS_PUBLIC, HB_HB_FSKIP , 0 },
{ "HB_FUSE", FS_PUBLIC, HB_HB_FUSE , 0 },
{ "LOG10", FS_PUBLIC, HB_LOG10 , 0 },
{ "PVALUE", FS_PUBLIC, HB_PVALUE , 0 },
{ "ROT13", FS_PUBLIC, HB_ROT13 , 0 },
{ "SIN", FS_PUBLIC, HB_SIN , 0 },
{ "SINH", FS_PUBLIC, HB_SINH , 0 },
{ "STRDUMP", FS_PUBLIC, HB_STRDUMP , 0 },
{ "STRTOKEN", FS_PUBLIC, HB_STRTOKEN , 0 },
{ "TAN", FS_PUBLIC, HB_TAN , 0 },
{ "TANH", FS_PUBLIC, HB_TANH , 0 },
{ "TFILEREAD", FS_PUBLIC, HB_TFILEREAD , 0 },
{ "TOCHAR", FS_PUBLIC, HB_TOCHAR , 0 },
{ "VALTYPE", FS_PUBLIC, HB_VALTYPE , 0 },
{ "__MVPUBLIC", FS_PUBLIC, HB___MVPUBLIC , 0 },
{ "__MVPRIVATE", FS_PUBLIC, HB___MVPRIVATE , 0 }
HB_INIT_SYMBOLS_END( RUNNER );
#if ! defined(__GNUC__)
#pragma startup RUNNER

View File

@@ -14,19 +14,19 @@
typedef void * HANDLE;
/* Standard */
#define _xvalloc(size, flags) hb_xalloc(size)
#define _xvfree(h) hb_xfree(h)
#define _xvrealloc(h, size, flags) hb_xrealloc(h, size)
#define _xvlock(h) (h)
#define _xvunlock(h) /* dummy */
#define _xvalloc( size, flags ) hb_xalloc( size )
#define _xvfree( h ) hb_xfree( h )
#define _xvrealloc( h, size, flags ) hb_xrealloc( h, size )
#define _xvlock( h ) ( h )
#define _xvunlock( h ) /* dummy */
/* Wire */
#define _xvwire(h) (h)
#define _xvunwire(h) /* dummy */
#define _xvwire( h ) ( h )
#define _xvunwire( h ) /* dummy */
/* State */
#define _xvlockcount(h) (0)
#define _xvsize(h) hb_xsize(h)
#define _xvlockcount( h ) (0)
#define _xvsize( h ) hb_xsize( h )
/* -------------------------------------------------------- */
/* Warning: Heap functionality is not supported by Harbour. */
@@ -34,12 +34,12 @@ typedef void * HANDLE;
/* -------------------------------------------------------- */
/* Heap */
#define _xvheapnew(size) (0)
#define _xvheapdestroy(h) /* dummy */
#define _xvheapresize(h, size) /* dummy */
#define _xvheapalloc(h, size) (0)
#define _xvheapfree(h, offset) /* dummy */
#define _xvheaplock(h, offset) (0)
#define _xvheapunlock(h, offset) /* dummy */
#define _xvheapnew( size ) (0)
#define _xvheapdestroy( h ) /* dummy */
#define _xvheapresize( h, size ) /* dummy */
#define _xvheapalloc( h, size ) (0)
#define _xvheapfree( h, offset ) /* dummy */
#define _xvheaplock( h, offset ) (0)
#define _xvheapunlock( h, offset ) /* dummy */
#endif /* HB_VM_API_ */

View File

@@ -1,3 +1,6 @@
@echo off
rem Flavour: DOS/Windows batch file
rem ---------------------------------------------------------------
rem Template to initialize the environment before starting
@@ -16,8 +19,6 @@ rem - clean
rem - install
rem ---------------------------------------------------------------
rem Under OS/2 you may rename this file to have a .CMD extension
rem ---------------------------------------------------------------
rem Configuration for "install" command:

65
harbour/make_tpl.cmd Normal file
View File

@@ -0,0 +1,65 @@
@echo off
rem Flavour: OS/2
rem ---------------------------------------------------------------
rem Template to initialize the environment before starting
rem the GNU make system for Harbour
rem
rem For further information about the GNU make system please
rem check doc/gmake.txt
rem ---------------------------------------------------------------
rem ---------------------------------------------------------------
rem Usage: make_tpl <command>
rem
rem The following commands are currently supported:
rem - all (default)
rem - clean
rem - install
rem ---------------------------------------------------------------
rem ---------------------------------------------------------------
rem Configuration for "install" command:
set HB_BIN_INSTALL=bin\
set HB_LIB_INSTALL=lib\
set HB_INC_INSTALL=include\
rem ---------------------------------------------------------------
rem The following HB_ARCHITECTURE values are currently supported:
rem - dos
rem - win32
rem - linux
rem - os2
set HB_ARCHITECTURE=os2
rem ---------------------------------------------------------------
rem The following HB_COMPILER values are currently supported:
rem - When HB_ARCHITECTURE=dos
rem - bcc31
rem - djgpp
rem - watcom
rem - When HB_ARCHITECTURE=win32
rem - bcc32
rem - gcc
rem - icc
rem - msvc
rem - When HB_ARCHITECTURE=linux
rem - gcc
rem - When HB_ARCHITECTURE=os2
rem - gcc
rem - icc
set HB_COMPILER=gcc
rem ---------------------------------------------------------------
rem Fine tuning of C compiler parameters for "all" command:
set C_USR=
rem ---------------------------------------------------------------
rem Start the GNU make system
make %1 %2 %3 %4 %5 %6 %7 %8 %9

View File

@@ -1,19 +1,66 @@
#!/bin/bash
# Flavour: Bash script
# ---------------------------------------------------------------
# Template to initialize the environment before starting
# the GNU make system for Harbour (Linux version)
# the GNU make system for Harbour
#
# For further information about the GNU make system please
# check doc/gmake.txt
# ---------------------------------------------------------------
# ---------------------------------------------------------------
# Usage: make_tpl.sh <command>
#
# The following commands are currently supported:
# - all (default)
# - clean
# - install
# ---------------------------------------------------------------
# ---------------------------------------------------------------
# Configuration for "install" command:
export HB_BIN_INSTALL=bin/
export HB_LIB_INSTALL=lib/
export HB_INC_INSTALL=include/
# ---------------------------------------------------------------
# The following HB_ARCHITECTURE values are currently supported:
# - dos
# - win32
# - linux
# - os2
export HB_ARCHITECTURE=linux
# ---------------------------------------------------------------
# The following HB_COMPILER values are currently supported:
# - When HB_ARCHITECTURE=dos
# - bcc31
# - djgpp
# - watcom
# - When HB_ARCHITECTURE=win32
# - bcc32
# - gcc
# - icc
# - msvc
# - When HB_ARCHITECTURE=linux
# - gcc
# - When HB_ARCHITECTURE=os2
# - gcc
# - icc
export HB_COMPILER=gcc
# ---------------------------------------------------------------
# Fine tuning of C compiler parameters for "all" command:
export C_USR=
# ---------------------------------------------------------------
# Start the GNU make system
make clean
make
make $*

View File

@@ -168,7 +168,7 @@ static LPRDDNODE hb_FindRddNode( char * szDriver )
static int hb_rddRegister( char * szDriver, USHORT uiType )
{
LPRDDNODE pRddNode, pRddNewNode;
PDYNSYM pGetFuncTable;
PHB_DYNS pGetFuncTable;
char * szGetFuncTable;
if( hb_FindRddNode( szDriver ) ) /* Duplicated RDD */

View File

@@ -45,6 +45,7 @@ PRG_SOURCES=\
errorsys.prg \
menuto.prg \
objfunc.prg \
readvar.prg \
setkey.prg \
tclass.prg \
tget.prg \

View File

@@ -285,7 +285,7 @@ function achoice( nTop, nLft, nBtm, nRyt, acItems, xSelect, xUserFunc, nPos, nHi
endif
case ( ( nKey == K_HOME ) .or. ( nKey == K_CTRL_PGUP ) ) .and. ( !lUserFunc )
case nKey == K_CTRL_PGUP .or. ( nKey == K_HOME .and. !lUserFunc )
IF nPos == nFrstItem
IF nAtTop == max( 1, nPos - nNumRows + 1 )
nMode := AC_HITTOP
@@ -299,7 +299,7 @@ function achoice( nTop, nLft, nBtm, nRyt, acItems, xSelect, xUserFunc, nPos, nHi
DispPage( acCopy, alSelect, nTop, nLft, nNumRows, nPos, nAtTop )
endif
case ( ( nKey == K_END ) .or. ( nKey == K_CTRL_PGDN ) ) .and. ( !lUserFunc )
case nKey == K_CTRL_PGDN .or. ( nKey == K_END .and. !lUserFunc )
IF nPos == nLastItem
IF nAtTop == min( nLastItem, nItems - nNumRows + 1 )
nMode := AC_HITBOTTOM

View File

@@ -80,13 +80,13 @@ typedef struct
#define BUCKET 4
#define HASH_KEY (BASE_METHODS / BUCKET)
PCLASS pClasses = 0;
WORD wClasses = 0;
PMETHOD pMethod = 0;
PDYNSYM msgClassName = 0;
PDYNSYM msgClassH = 0;
PDYNSYM msgEval = 0;
PDYNSYM msgClassSel = 0;
PCLASS pClasses = 0;
WORD wClasses = 0;
PMETHOD pMethod = 0;
PHB_DYNS msgClassName = 0;
PHB_DYNS msgClassH = 0;
PHB_DYNS msgEval = 0;
PHB_DYNS msgClassSel = 0;
/* All functions contained in classes.c */
@@ -190,7 +190,7 @@ HARBOUR HB_CLASSADD(void)
PHB_ITEM pInit = hb_param( 5, IT_ANY );
PCLASS pClass;
PDYNSYM pMessage;
PHB_DYNS pMessage;
PMETHOD pNewMeth;
if( wClass && wClass <= wClasses )
@@ -346,7 +346,7 @@ HARBOUR HB_CLASSDEL(void)
{
PHB_ITEM pString = hb_param( 2, IT_STRING );
PHB_SYMB pMessage = hb_GetDynSym( pString->item.asString.value )->pSymbol;
PDYNSYM pMsg = ( PDYNSYM ) pMessage->pDynSym;
PHB_DYNS pMsg = pMessage->pDynSym;
PCLASS pClass;
WORD wClass = hb_parni( 1 );
@@ -447,7 +447,7 @@ HARBOUR HB_CLASSMOD(void)
{
PHB_ITEM pString = hb_param( 2, IT_STRING );
PHB_SYMB pMessage = hb_GetDynSym( pString->item.asString.value )->pSymbol;
PDYNSYM pMsg = ( PDYNSYM ) pMessage->pDynSym;
PHB_DYNS pMsg = pMessage->pDynSym;
PCLASS pClass;
WORD wClass = hb_parni( 1 );
@@ -549,7 +549,7 @@ static HARBOUR ClassSel(void)
WORD wAt;
WORD wPos = 0;
PCLASS pClass;
PDYNSYM pMessage;
PHB_DYNS pMessage;
PHB_ITEM pReturn = hb_itemNew( NULL );
PHB_ITEM pItem;
PHB_ITEM pItemRef;
@@ -570,7 +570,7 @@ static HARBOUR ClassSel(void)
/* Create a transfer array */
for( wAt = 0; wAt < wLimit ; wAt++ )
{
pMessage = (PDYNSYM) pClass->pMethods[ wAt ].pMessage;
pMessage = pClass->pMethods[ wAt ].pMessage;
if( pMessage ) /* Hash Entry used ? */
{
pItem = hb_itemPutC( NULL, pMessage->pSymbol->szName );
@@ -725,10 +725,10 @@ static HARBOUR GetData( void )
*/
PHB_FUNC hb_GetMethod( PHB_ITEM pObject, PHB_SYMB pMessage )
{
WORD wAt, wLimit, wMask;
WORD wClass;
PCLASS pClass;
PDYNSYM pMsg = ( PDYNSYM ) pMessage->pDynSym;
WORD wAt, wLimit, wMask;
WORD wClass;
PCLASS pClass;
PHB_DYNS pMsg = pMessage->pDynSym;
if( pObject->type == IT_OBJECT )
wClass = pObject->item.asArray.value->wClass;
@@ -985,7 +985,7 @@ static HARBOUR Virtual( void )
HARBOUR HB___INSTSUPER( void )
{
PHB_ITEM pString = hb_param( 1, IT_STRING );
PDYNSYM pDynSym;
PHB_DYNS pDynSym;
BYTE bFound = FALSE;
WORD w;

View File

@@ -43,7 +43,7 @@ HARBOUR HB_DO( void )
pItem =hb_param( 1, IT_ANY );
if( IS_STRING(pItem) )
{
PDYNSYM pDynSym;
PHB_DYNS pDynSym;
pDynSym =hb_GetDynSym( pItem->item.asString.value );
if( pDynSym )

View File

@@ -42,7 +42,7 @@
#define VS_PRIVATE 64
#define VS_PUBLIC 128
static PDYNSYM *_privateStack = NULL;
static PHB_DYNS * _privateStack = NULL;
static ULONG _privateStackSize = 0;
static ULONG _privateStackCnt = 0;
static ULONG _privateStackBase = 0;
@@ -61,8 +61,8 @@ static HB_VALUE_PTR _globalTable = NULL;
*/
static void hb_MemvarCreateFromItem( PHB_ITEM, BYTE, PHB_ITEM );
static void hb_MemvarCreateFromDynSymbol( PDYNSYM, BYTE, PHB_ITEM );
static void hb_MemvarAddPrivate( PDYNSYM );
static void hb_MemvarCreateFromDynSymbol( PHB_DYNS, BYTE, PHB_ITEM );
static void hb_MemvarAddPrivate( PHB_DYNS );
void hb_MemvarsInit( void )
{
@@ -71,7 +71,7 @@ void hb_MemvarsInit( void )
_globalFreeCnt = 0;
_globalFirstFree = _globalLastFree = 1;
_privateStack = (PDYNSYM *) hb_xgrab( sizeof(PDYNSYM) * TABLE_INITHB_VALUE );
_privateStack = (PHB_DYNS *) hb_xgrab( sizeof(PHB_DYNS) * TABLE_INITHB_VALUE );
_privateStackSize = TABLE_INITHB_VALUE;
_privateStackCnt = _privateStackBase = 0;
}
@@ -198,7 +198,7 @@ HB_HANDLE hb_MemvarValueNew( HB_ITEM_PTR pSource, int iTrueMemvar )
* an exit from the function/procedure)
*
*/
static void hb_MemvarAddPrivate( PDYNSYM pDynSym )
static void hb_MemvarAddPrivate( PHB_DYNS pDynSym )
{
/* Allocate the value from the end of table
*/
@@ -207,7 +207,7 @@ static void hb_MemvarAddPrivate( PDYNSYM pDynSym )
/* No more free values in the table - expand the table
*/
_privateStackSize += TABLE_EXPANDHB_VALUE;
_privateStack =(PDYNSYM *) hb_xrealloc( _privateStack, sizeof(PDYNSYM) * _privateStackSize );
_privateStack =(PHB_DYNS *) hb_xrealloc( _privateStack, sizeof(PHB_DYNS) * _privateStackSize );
}
_privateStack[ _privateStackCnt++ ] =pDynSym;
@@ -336,9 +336,9 @@ void hb_MemvarValueDecRef( HB_HANDLE hValue )
*/
void hb_MemvarSetValue( PHB_SYMB pMemvarSymb, HB_ITEM_PTR pItem )
{
PDYNSYM pDyn;
PHB_DYNS pDyn;
pDyn = (PDYNSYM) pMemvarSymb->pDynSym;
pDyn = (PHB_DYNS) pMemvarSymb->pDynSym;
if( pDyn )
{
@@ -367,9 +367,9 @@ void hb_MemvarSetValue( PHB_SYMB pMemvarSymb, HB_ITEM_PTR pItem )
void hb_MemvarGetValue( HB_ITEM_PTR pItem, PHB_SYMB pMemvarSymb )
{
PDYNSYM pDyn;
PHB_DYNS pDyn;
pDyn = (PDYNSYM) pMemvarSymb->pDynSym;
pDyn = (PHB_DYNS) pMemvarSymb->pDynSym;
if( pDyn )
{
@@ -395,9 +395,9 @@ void hb_MemvarGetValue( HB_ITEM_PTR pItem, PHB_SYMB pMemvarSymb )
void hb_MemvarGetRefer( HB_ITEM_PTR pItem, PHB_SYMB pMemvarSymb )
{
PDYNSYM pDyn;
PHB_DYNS pDyn;
pDyn = (PDYNSYM) pMemvarSymb->pDynSym;
pDyn = (PHB_DYNS) pMemvarSymb->pDynSym;
if( pDyn )
{
@@ -435,7 +435,7 @@ void hb_MemvarGetRefer( HB_ITEM_PTR pItem, PHB_SYMB pMemvarSymb )
*/
static void hb_MemvarCreateFromItem( PHB_ITEM pMemvar, BYTE bScope, PHB_ITEM pValue )
{
PDYNSYM pDynVar;
PHB_DYNS pDynVar;
/* find dynamic symbol or creeate one */
if( IS_SYMBOL( pMemvar ) )
@@ -449,7 +449,7 @@ static void hb_MemvarCreateFromItem( PHB_ITEM pMemvar, BYTE bScope, PHB_ITEM pVa
hb_MemvarCreateFromDynSymbol( pDynVar, bScope, pValue );
}
static void hb_MemvarCreateFromDynSymbol( PDYNSYM pDynVar, BYTE bScope, PHB_ITEM pValue )
static void hb_MemvarCreateFromDynSymbol( PHB_DYNS pDynVar, BYTE bScope, PHB_ITEM pValue )
{
if( bScope & VS_PUBLIC )
{
@@ -492,7 +492,7 @@ static void hb_MemvarCreateFromDynSymbol( PDYNSYM pDynVar, BYTE bScope, PHB_ITEM
void hb_MemvarRelease( HB_ITEM_PTR pMemvar )
{
ULONG ulBase = _privateStackCnt;
PDYNSYM pDynVar;
PHB_DYNS pDynVar;
if( IS_STRING(pMemvar) )
{
@@ -529,7 +529,7 @@ void hb_MemvarRelease( HB_ITEM_PTR pMemvar )
void hb_MemvarReleaseWithMask( char *szMask, BOOL bInclude )
{
ULONG ulBase = _privateStackCnt;
PDYNSYM pDynVar;
PHB_DYNS pDynVar;
while( ulBase > _privateStackBase )
{

View File

@@ -10,9 +10,12 @@
Author: Phil Barnett <philb@iag.net>
Released to Public Domain
Changes for higher Clipper compatibility by:
Victor Szel <info@szelvesz.hu>
*/
/* NOTE: Recursive use is acceptable */
/* NOTE: Recursive use is supported */
#include "setcurs.ch"
#include "inkey.ch"
@@ -21,17 +24,7 @@
static aLevel := {}
static nPointer := 1
procedure __AtPrompt( nCol, nRow, cPrompt, cMsg )
local nMsgLen := 0
// gather message data
if valtype( cMsg ) == 'C' .and. !empty( cMsg )
if len( cMsg ) > maxcol() + 1
cMsg := left( cMsg, maxcol() + 1 ) // message too long to display
endif
nMsgLen := max( nMsgLen, len( cMsg ) )
endif
function __AtPrompt( nCol, nRow, cPrompt, cMsg )
if nPointer < 1
nPointer := 1
@@ -43,174 +36,205 @@ procedure __AtPrompt( nCol, nRow, cPrompt, cMsg )
enddo
// add to the static array
aadd( aLevel[ nPointer ], { nCol, nRow, cPrompt, cMsg, len( cPrompt ), nMsgLen } )
aadd( aLevel[ nPointer ], { nCol, nRow, cPrompt, cMsg } )
// put this prompt on the screen right now
setpos( nCol, nRow )
dispout( cPrompt )
return
return .f.
function __MenuTo( bBlock, cVariable )
local nKey
local y
local q
local n := eval( bBlock )
local nArrLen := len( aLevel[ nPointer ] )
local nMsgRow := set( _SET_MESSAGE )
local lSetMCenter := set( _SET_MCENTER )
local nMaxCol := maxcol() + 1
local lDoMessage := nMsgRow > 0
local lGotMessage := .f.
local nMsgCol := int( ( nMaxCol - aLevel[ nPointer ] [ len( aLevel ) ] [ 6 ] ) / 2 )
local nSaveCsr := setcursor( SC_NONE )
local n
local lExit
local nArrLen
local xMsg
local nMsgCol
local nMsgRow
local lMsgCenter
local nSaveCursor
local cSaveReadVar
ColorSelect( CLR_STANDARD )
local bOldError
local lBlockError
nPointer ++
// Detect if a memver was passed
if len( aLevel[ nPointer - 1 ] ) == 0
// TODO: Enable when implemented
//
// bOldError := errorblock( {|| break( NIL ), .F. } )
// lBlockError := .T.
// begin sequence
n := eval( bBlock )
lBlockError := .F.
// TODO: Enable when implemented
//
// end sequence
// errorblock( bOldError )
if lBlockError
__mvPUBLIC( cVariable )
endif
// if no prompts were defined, exit with 0
if nPointer < 1 .or. nPointer > len( aLevel )
n := 0
else
nPointer ++
nArrLen := len( aLevel[ nPointer - 1 ] )
// put choice in a valid range
if !( ValType( n ) == "N" ) .OR. n < 1
n := 1
elseif n > len( aLevel[ nPointer - 1 ] )
n := len( aLevel[ nPointer - 1 ] )
endif
for y := 1 to nArrLen
if valtype( aLevel[ nPointer - 1, y, 4 ] ) $ 'CB'
lGotMessage := .t.
exit
endif
next
if n > nArrLen
n := nArrLen
endif
do while .t.
//
// were there any messages?
if lGotMessage .and. lDoMessage
nSaveCursor := setcursor( iif( Set( _SET_INTENSITY ), SC_NONE, NIL ) )
cSaveReadVar := ReadVar( upper( cVariable ) )
xMsg := ""
nMsgCol := 0
nMsgRow := set( _SET_MESSAGE )
lMsgCenter := set( _SET_MCENTER )
lExit := .F.
if valtype( aLevel[ nPointer - 1, n, 4 ] ) == 'B'
// Code Block messages ( yes, they are documented! )
do while n <> 0
eval( aLevel[ nPointer - 1, n, 4 ] )
elseif valtype( aLevel[ nPointer - 1, n, 4 ] ) == 'C'
// Character messages
// set the display location
if lSetMCenter
// erase the current message row
dispbox( nMsgRow, nMsgCol, ;
nMsgRow, nMsgCol + aLevel[ nPointer - 1, n, 6 ] )
setpos( nMsgRow, ( nMaxcol - len( aLevel[ nPointer - 1, n, 4 ] ) ) / 2 )
else
// erase the current message row
dispbox( nMsgRow, 0, ;
nMsgRow, aLevel[ nPointer - 1, n, 6 ], ' ' )
setpos( nMsgRow, 0 )
endif
if len( aLevel[ nPointer - 1, n, 4 ] ) > 0
// display the message
dispout( aLevel[ nPointer - 1, n, 4 ] )
endif
// should we display messages?
if nMsgRow > 0
if ! Empty( xMsg )
setpos( nMsgRow, nMsgCol )
dispout( space( len( xMsg ) ) )
endif
xMsg := aLevel[ nPointer - 1, n, 4 ]
// Code Block messages ( yes, they are documented! )
if valtype( xMsg ) == 'B'
xMsg := eval( xMsg )
endif
if valtype( xMsg ) <> 'C'
xMsg := ""
endif
if lMsgCenter
nMsgCol := int( ( maxcol() - len( xMsg ) ) / 2 )
endif
setpos( nMsgRow, nMsgCol )
dispout( xMsg )
endif
// save the current row
q := n
ColorSelect( CLR_ENHANCED )
if Set( _SET_INTENSITY )
ColorSelect( CLR_ENHANCED )
endif
// highlight the prompt
setpos( aLevel[ nPointer - 1, n, 1 ], aLevel[ nPointer - 1, n, 2 ] )
dispout( aLevel[ nPointer - 1, n, 3 ] )
ColorSelect( CLR_STANDARD )
if Set( _SET_INTENSITY )
ColorSelect( CLR_STANDARD )
endif
setpos( aLevel[ nPointer - 1, n, 1 ], aLevel[ nPointer - 1, n, 2 ] )
if lExit
exit
endif
// wait for a keystroke
nKey := inkey( 0 )
nKey := 0
do while nKey == 0
// wait for a keystroke
nKey := inkey( 0 )
if ( bAction := setkey( nKey ) ) <> NIL
eval( bBlock, n )
eval( bAction, procname( 1 ), procline( 1 ), upper( cVariable ) )
n := eval( bBlock )
if n < 1
n := 1
elseif n > nArrLen
n := nArrLen
endif
nKey := 0
endif
enddo
// check for keystrokes
do case
case ( bAction := setkey( nKey ) ) <> NIL
eval( bAction, procname( 1 ), procline( 1 ), Upper( cVariable ) )
if empty( nextkey() )
keyboard chr( 255 )
inkey()
nKey := 0
endif
case nKey == K_DOWN .or. nKey == K_RIGHT
n ++
if n > nArrLen
if set( _SET_WRAP )
n := 1
else
n := nArrLen
endif
if ++n > nArrLen
n := iif( Set( _SET_WRAP ), 1, nArrLen )
endif
case nKey == K_UP .or. nKey == K_LEFT
n --
if n < 1
if set( _SET_WRAP )
n := nArrLen
else
n := 1
endif
if --n < 1
n := iif( Set( _SET_WRAP ), nArrLen, 1 )
endif
case nKey == K_ENTER .or. nKey == K_PGUP .or. nKey == K_PGDN
exit
case nKey == K_ESC
n := 0
exit
case nKey == K_HOME
n := 1
case nKey == K_END
n := nArrLen
case nKey == K_ENTER .or. nKey == K_PGUP .or. nKey == K_PGDN
lExit := .T.
case nKey == K_ESC
n := 0
otherwise
// did user hit a hot key?
for y := 1 to nArrLen
if upper( left( ltrim( aLevel[ nPointer - 1, y, 3 ] ), 1 ) ) == upper( chr( nKey ) )
n := y
lExit := .T.
exit
endif
next
endcase
// unhighlight the prompt
setpos( aLevel[ nPointer - 1, q, 1 ], aLevel[ nPointer - 1, q, 2 ] )
dispout( aLevel[ nPointer - 1, q, 3 ] )
if n <> 0
setpos( aLevel[ nPointer - 1, q, 1 ], aLevel[ nPointer - 1, q, 2 ] )
dispout( aLevel[ nPointer - 1, q, 3 ] )
endif
enddo
ReadVar( cSaveReadVar )
SetCursor( nSaveCursor )
nPointer --
asize( aLevel, nPointer - 1 )
endif
nPointer --
asize( aLevel, nPointer - 1 )
setcursor( nSaveCsr )
eval( bBlock, n )
if lBlockError
release ( cVariable )
endif
SetPos( MaxRow() - 1, 0)
return n

View File

@@ -0,0 +1,45 @@
/*
* $Id$
*/
/*
Harbour Project source code
READVAR()
Copyright (C) 1999 Victor Szel <info@szelvesz.hu>
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/).
*/
FUNCTION ReadVar( cVarName )
STATIC scVarName := ""
LOCAL cOldVarName := scVarName
IF ValType( cVarName ) == "C"
scVarName := cVarName
ENDIF
RETURN cOldVarName

View File

@@ -125,7 +125,7 @@ HARBOUR HB_HB_RUN( void )
PHB_SYMB pSymRead; /* Symbols read */
PDYNFUNC pDynFunc; /* Functions read */
PDYNSYM pDynSym;
PHB_DYNS pDynSym;
if( hb_pcount() == 0 )
printf( "\nPlease give HRB file name\n" );

View File

@@ -30,6 +30,11 @@
#define SYM_ALLOCATED (-1)
typedef struct
{
PHB_DYNS pDynSym; /* Pointer to dynamic symbol */
} DYNHB_ITEM, * PDYNHB_ITEM, * DYNHB_ITEM_PTR;
static PDYNHB_ITEM pDynItems = 0; /* Pointer to dynamic items */
static WORD wDynSymbols = 0; /* Number of symbols present */
static WORD wClosestDynSym = 0;
@@ -58,9 +63,9 @@ PHB_SYMB hb_NewSymbol( char * szName ) /* Create a new symbol */
return pSymbol;
}
PDYNSYM hb_NewDynSym( PHB_SYMB pSymbol ) /* creates a new dynamic symbol */
PHB_DYNS hb_NewDynSym( PHB_SYMB pSymbol ) /* creates a new dynamic symbol */
{
PDYNSYM pDynSym = hb_FindDynSym( pSymbol->szName ); /* Find position */
PHB_DYNS pDynSym = hb_FindDynSym( pSymbol->szName ); /* Find position */
WORD w;
if( pDynSym ) /* If name exists */
@@ -87,7 +92,7 @@ PDYNSYM hb_NewDynSym( PHB_SYMB pSymbol ) /* creates a new dynamic symbol */
memcpy( &pDynItems[ wDynSymbols - w ],
&pDynItems[ wDynSymbols - w - 1 ], sizeof( DYNHB_ITEM ) );
} /* Insert element in array */
pDynSym = ( PDYNSYM ) hb_xgrab( sizeof( DYNSYM ) );
pDynSym = ( PHB_DYNS ) hb_xgrab( sizeof( HB_DYNS ) );
pDynItems[ wClosestDynSym ].pDynSym = pDynSym; /* Enter DynSym */
}
@@ -106,9 +111,9 @@ PDYNSYM hb_NewDynSym( PHB_SYMB pSymbol ) /* creates a new dynamic symbol */
return pDynSym;
}
PDYNSYM hb_GetDynSym( char * szName ) /* finds and creates a symbol if not found */
PHB_DYNS hb_GetDynSym( char * szName ) /* finds and creates a symbol if not found */
{
PDYNSYM pDynSym;
PHB_DYNS pDynSym;
char * szUprName = ( char * ) hb_xgrab( strlen( szName ) + 1 );
strcpy( szUprName, szName ); /* make a copy as we may get a const string */
@@ -126,14 +131,14 @@ PDYNSYM hb_GetDynSym( char * szName ) /* finds and creates a symbol if not foun
return pDynSym;
}
PDYNSYM hb_FindDynSym( char * szName )
PHB_DYNS hb_FindDynSym( char * szName )
{
WORD wFirst = 0, wLast = wDynSymbols, wMiddle = wLast / 2;
if( ! pDynItems )
{
pDynItems = ( PDYNHB_ITEM ) hb_xgrab( sizeof( DYNHB_ITEM ) ); /* Grab array */
pDynItems->pDynSym = ( PDYNSYM ) hb_xgrab( sizeof( DYNSYM ) );
pDynItems->pDynSym = ( PHB_DYNS ) hb_xgrab( sizeof( HB_DYNS ) );
/* Always grab a first symbol. Never an empty bucket. *<1>* */
pDynItems->pDynSym->hMemvar = 0;
pDynItems->pDynSym->pSymbol = 0;

View File

@@ -218,7 +218,7 @@ int main( int argc, char * argv[] )
#ifdef HARBOUR_START_PROCEDURE
{
PDYNSYM pDynSym =hb_FindDynSym( HARBOUR_START_PROCEDURE );
PHB_DYNS pDynSym =hb_FindDynSym( HARBOUR_START_PROCEDURE );
if( pDynSym )
pSymStart =pDynSym->pSymbol;
else
@@ -928,12 +928,6 @@ void Equal( BOOL bExact )
PushLogical( 0 );
}
static void ForceLink( void ) /* To force the link of some functions */
{
HB_ERRORSYS();
HB_ERRORNEW();
}
void ForTest( void ) /* Test to check the end point of the FOR */
{
double dStep;
@@ -2173,6 +2167,12 @@ void DoInitFunctions( int argc, char * argv[] )
} while( pLastSymbols );
}
static void ForceLink( void ) /* To force the link of some functions */
{
HB_ERRORSYS();
HB_ERRORNEW();
}
/* ----------------------------- */
/* TODO: Put these to /source/rtl/?.c */
@@ -2256,7 +2256,7 @@ HARBOUR HB_VALTYPE( void )
{
PHB_ITEM pItem;
if( hb_pcount() )
if( hb_pcount() == 1 )
{
pItem = hb_param( 1, IT_ANY );
@@ -2298,7 +2298,10 @@ HARBOUR HB_VALTYPE( void )
}
}
else
hb_retc( "U" );
{
/* QUESTION: Clipper catches this at compile time! */
hb_errorRT_BASE(EG_ARGCOUNT, 3000, NULL, "VALTYPE");
}
}
HARBOUR HB_ERRORBLOCK(void)