2000-05-27 23:12 UTC+0100 Victor Szakats <info@szelvesz.hu>

This commit is contained in:
Viktor Szakats
2000-05-28 19:52:03 +00:00
parent 4a7c3337a0
commit be81ee127d
36 changed files with 979 additions and 1714 deletions

View File

@@ -1,3 +1,105 @@
2000-05-27 23:12 UTC+0100 Victor Szakats <info@szelvesz.hu>
* source/rtl/gtdos/gtdos.c
* source/compiler/hbusage.c
* Some cleanups and small fixes.
+ Crew list updated
* makefile.bc
* makefile.vc
* source/rtl/Makefile
! Synchronized.
! Borland makefile fixed for 16 bit compilers (STARTUP excluded)
* contrib/hbclip/hbclip.ch
* tests/testwarn.prg
- Structure #translate removed
* contrib/libgt/makefile.vc
! Minor fix
* doc/howtocvs.txt
- doc/cvs_ssh.txt
- doc/cvs_tips.txt
* Merged all CVS related info into one file. Content list added.
* Updated timestamp format
* doc/whatsnew.txt
+ Added Version 0.34 feature list
* include/hbapi.h
* include/hbcomp.h
* include/hbextern.ch
+ HB_SETKEYARRAY added
+ 5.3 menu related stuff added
* source/compiler/cmdcheck.c
* Minor optimization
* source/compiler/harbour.y
! Extremly long lines fixed.
! GCC -O2 warning fixed.
* source/pp/pptable.c
- Commented out lines removed.
* source/debug/dbgmenu.prg
* source/debug/dbgtmenu.prg
* source/debug/debugger.prg
! AltToKey_debugger() renamed to __dbgAltToKey()
! BulidMenu() renamed to __dbgBuildMenu()
* source/rtl/setkey.c
! Some variables and symbols renamed, indented with three chars
! Some bugs fixed (error situations, handling of zero keycode)
% Some things made more simple (removed returns from inside the
functions for example).
% Variable scopes adjusted.
- Removed extension guards from C level code.
- Removed all the runtime error generations
- Removed the extension when an array was accepted as the
first parameter of SETKEY().
+ HB_SETKEYARRAY() added instead of the above feature.
* source/vm/borinit.c
* Minor header formatting.
* source/compiler/harbour.c
* source/rtl/filesys.c
* source/rtl/gtcrs/gtcrs.c
* source/rtl/gtcrs/kbdcrs.c
* source/vm/eval.c
* source/vm/hvm.c
* source/vm/macro.c
* tests/Makefile
! Fixed TAB usage in the source. (please check your editors!)
+ source/rtl/tmenuitm.prg
+ source/rtl/tpopup.prg
+ source/rtl/ttopbar.prg
- source/rtl/menuitem.prg
- source/rtl/popup.prg
- source/rtl/topbar.prg
! Renamed to conform with other class filenames (T*.PRG)
+ Added HB_COMPAT_C53 guards.
! AltToKey_debugger() requirement removed to link without the debugger.
- doc/depend.txt
- Removed since it was very outdated.
Missing entries:
+contrib\hbzlib\makefile.bc
*makefile for zlib library
+contrib\hbzlib\zipfile1.c
contrib\hbzlib\zlibapi.c
*Source code to the library
*contrib\hbzlib\test.prg
*test program for the library
*contrib\hbzlib\*.h
*include files need by the library
20000528-21:38 GMT+2 Maurilio Longo <maurilio.longo@libero.it>
* contrib/msql/tmsql.prg
@@ -44,14 +146,14 @@
+ added files making up mSQL access classes. They're work in progress, but
we all believe in "release early, release often", don't we? :-)
2000-05-28 02:15 UTC-500 Paul Tucker <ptucker@sympatico.ca>
2000-05-28 02:15 UTC-0500 Paul Tucker <ptucker@sympatico.ca>
* makefile.bc
* move eval from rtl.lib to vm.lib
* (Already built that way, but the dependancy was wrong)
* makefile.vc
* bring up to date
2000-05-22 10:40 UTC-800 Ron Pinkas <Ron@Profit-Master.com>
2000-05-22 10:40 UTC-0800 Ron Pinkas <Ron@Profit-Master.com>
* include/hbvmpub.h
* Modified HB_FS_FIRST to ( ( HB_SYMBOLSCOPE ) 0x04 )
@@ -91,8 +193,8 @@
20000524-17:55 GMT+1 Ryszard Glab <rglab@imid.med.pl>
*source/vm/macro.c
*fixed bug in TYPE() function (PUBLIC/PRIVATE variables
were not recognized properly)
*fixed bug in TYPE() function (PUBLIC/PRIVATE variables
were not recognized properly)
2000-05-24 10:35 GMT-4 David G. Holm <dholm@jsd-llc.com>
@@ -247,7 +349,7 @@
DECLARE <StruName> <Var1> AS <Type1> [ <VarN> AS <TypeN> ] ;;
#TRANSLATE AS NEW <ClassName> => AS CLASS <StruName> := ( Eval( __<StruName> ), HB_Structure( <StruName> ) )
#TRANSLATE AS NEW <ClassName> => AS CLASS <ClassName> := <ClassName>():New()
#TRANSLATE AS NEW <ClassName> => AS CLASS <ClassName> := <ClassName>():New()
* source/rtl/tclass.prg
+ Added Function HB_Structure() ( Fully Declared! ) This function is used internally, but may be freely called from Clipper level.
@@ -326,19 +428,19 @@
20000520-15:25 GMT+1 Ryszard Glab <rglab@imid.med.pl>
*source/rtl/gtcrs/gtcrs.c
* fixed hb_gt_SetAttribute() to work correctly
with ncurses library
(thanks to Marek Paliwoda)
* fixed hb_gt_SetAttribute() to work correctly
with ncurses library
(thanks to Marek Paliwoda)
20000520-14:45 GMT+1 Ryszard Glab <rglab@imid.med.pl>
*source/rtl/gtcrs/gtcrs.c
* fixed hb_gt_SetAttribute() to work with plain curses library
(thanks to Marek Paliwoda)
* fixed hb_gt_SetAttribute() to work with plain curses library
(thanks to Marek Paliwoda)
*source/rtl/gtcrs/kbdcrs.c
*source/rtl/gtcrs/mousecrs.c
* fixed a module description
* fixed a module description
20000519-23:50 GMT-3 Luiz Rafael Culik <culik@sl.conex.net>
*makefile.bc
@@ -508,7 +610,7 @@
20000515-17:15 GMT+1 Ryszard Glab <rglab@imid.med.pl>
*source/rtl/gtcrs/gtcrs.c
*fixed initialization of curses library
*fixed initialization of curses library
20000514-22:25 GMT-8 Ron Pinkas <Ron@Profit-Master.com>
@@ -581,20 +683,20 @@
20000514-14:55 GMT+1 Ryszard Glab <rglab@imid.med.pl>
*source/compiler/harbour.y
* fixed bug in line counting that was causing no code
generated for statements placed within BEGIN/END SEQUENCE
* fixed bug in line counting that was causing no code
generated for statements placed within BEGIN/END SEQUENCE
20000513-14:50 GMT+1 Ryszard Glab <rglab@imid.med.pl>
*include/hbcomp.h
* added 'int iDeclLine' to VAR structure to hold the line number
where a variable was declared
* added 'int iDeclLine' to VAR structure to hold the line number
where a variable was declared
*source/compiler/harbour.c
*source/compiler/harbour.y
* fixed generation of 'unreachable code' warnings
* warnings for declared but not used variable reports the line
number where this variable was declared
* fixed generation of 'unreachable code' warnings
* warnings for declared but not used variable reports the line
number where this variable was declared
20000513-13:51 GMT+2 Maurilio Longo <maurilio.longo@libero.it>

View File

@@ -59,6 +59,8 @@
#xtranslate HB_SETKEYSAVE( [<a>] ) => ( {} )
#xtranslate HB_SETKEYCHECK( <n>[, <x1>[, <x2>[, <x3>]]] ) => ( .F. )
/* Strong typing */
#translate AS ARRAY [OF <type>] =>
#translate AS CHAR =>
@@ -86,7 +88,4 @@
#translate AS VAR =>
#translate AS VARIANT =>
#command DECLARE <*x*> =>
#command STRUCTURE <*x*> =>
#endif

View File

@@ -96,7 +96,7 @@ HARBOUR_EXE = $(BIN_DIR)\harbour.exe
#
LIBLIST = \
$(TOOLS_LIB) \
$(TOOLS_LIB)
#
# TOOLS.LIB rules

View File

@@ -1,60 +0,0 @@
/*
* $Id$
*/
This is how I got SSH and CVS to work together!
The trick was in how to set up the CVSROOT variable.
I did this on NT4, but it should be similar for 95/98 and OS/2.
Note: Your CVS ID is the same as your SourceForge login ID, with one
very important difference: Any and all upper case letters are
converted to lower case. So if your SourceForge login ID is
MyFullName, then your CVS ID will be myfullname.
First I set up SSH, using the following steps:
1) I pointed my web browser to ftp://ftp.cs.hut.fi/pub/ssh/contrib/
2) I downloaded the ssh-1.2.14-win32bin.zip file
3) I unzipped the file into a directory that was already on my PATH
4) I created a directory E:\hb-dev\ for my Harbour development CVS tree
5) I created a batch file LOGIN.BAT, in the E:\hb-dev\ directory, with
the following commands in it:
@echo off
SET HOME=E:\hb-dev\
ssh -l dholm Harbour-project.sourceforge.net
6) I ran the LOGIN batch file, which automatically created a .ssh
directory under E:\hb-dev\, automatically accepted the key from
SourceForge, and prompted me for my password.
7) I entered my password and got logged into a SourceForge shell,
thus confirming that SSH is configured properly.
8) I entered "exit" to quit back to the DOS prompt.
Next I set up CVS, using the following steps:
1) I pointed my browser to http://download.cyclic.com/pub/cvs-1.10/windows/
2) I downloaded the cvs-1.10-win.zip file
3) I renamed my old CVS.EXE to CVS-OLD.EXE
4) I unzipped the new file into a directory that was already on my PATH
5) I created a batch file CHECKOUT.BAT, in my E:\hb-dev\ directory,
with the following commands in it:
@echo off
SET HOMEDRIVE=E:
SET HOMEPATH=/hb-dev/
SET CVSROOT=:ext:dholm@cvs.Harbour-project.sourceforge.net:/cvsroot/Harbour-project
SET CVS_RSH=ssh
cvs co harbour
6) I ran the CHECKOUT batch file and was prompted for my SourceForge
password. And it checked out the entire harbour CVS tree!
So all you have to do is make the obvious substitions for drive letters,
path names, and user IDs, and this procedure should work for you.
You may not even have to download a new copy of CVS, but you may
have to have a text mode version of SSH.
I found the trick to setting up the CVSROOT properly by doing a search for
"CVS SSH NT" at http://www.google.com/ and following the third link, named
"Configuring WinCVS and Secure SHell on Windows NT" and located at
http://www.cc.gatech.edu/classes/RWL/Projects/scenicview/Web/cvs-ssh-config.html
David G. Holm, Set Captain and all around
Harbour Project Clipper Compatibility fanatic.

View File

@@ -1,84 +0,0 @@
/*
* $Id$
*/
Various tips on CVS usage
=========================
Switching from anonymous access to read/write access
====================================================
by David G. Holm <Harbour@SpaceMoose.com>
1) Change your CVSROOT variable from
:pserver:anonymous@cvs.Harbour-project.sourceforge.net:/cvsroot/Harbour-project
to
:ext:your_source_forge_ID_in_lower_case@cvs.Harbour-project.sourceforge.net:/cvsroot/Harbour-project
2) Set up CVS to use SSH (see cvs_ssh.txt for details).
3) Visit each and every one of the CVS subdirectories in your local
CVS tree and change the contents of the 'Root' file from your old
CVSROOT contents to your new CVSROOT contents.
Note: Every time you issue a CVS command, you will have to enter your
SourceForge password.
Things to do to avoid damaging the SourceForge CVS tree
=======================================================
by David G. Holm <Harbour@SpaceMoose.com>
1) Always do your Harbour development using your local CVS tree. Do not
do your development outside your local CVS tree and then copy your
changes into your local CVS tree to commit them, because that leads
easily to accidentally overwriting changes made by others, because
you didn't notice that a module that you were also working on was
changed by someone else. By always doing Harbour development using
your local CVS tree, changes made by others will be merged with your
changes and you only need to recompile and retest before committing.
2) Always run 'cvs update' from the 'harbour' directory before you run
'cvs commit'. Ideally, you should redirect the output from the update
to a file and look at the results to confirm that you are ready to do
a commit. Any files marked M, A or D are files that you have modified
or are adding or deleting. Confirm that you have comments for all of
them in your ChangeLog entry. If you see many modules marked P or U,
then you need to recompile and retest before you commit your changes.
If you see any conflicts reported in the update output, then you need
to resolve them before committing. CVS is generally good at merging
changes, so you probably won't see conflicts very often, but if you
edit the ChangeLog file before you run 'cvs update' and other changes
have been committed by others, then ChangeLog will have conflicts. To
resolve those conflicts, simply remove the conflict markers. What I do
to avoid conflicts to ChangeLog is to record my changes in changes.txt
and then copy them into ChangeLog between the update and the commit.
How to add CVS ID to new files
=======================================================
by Maurilio Longo <maurilio.longo@libero.it>
When a new file is added to cvs tree it has not a CVS ID.
CVS IDs look like this:
/*
* $Id$
*/
To add one to a file lacking it simply put as first lines:
/*
* Chr(36) + "Id" + Chr(36)
*/
I can't write it here because cvs server would change it as soon as I
commit this file, but second line should not have Chr(36) but $ signs
and no spaces between dollar sign and Id.
as soon as you commit your file cvs ID string will be expanded
by cvs server to full length.
Note that last dollar sign is mandatory.

View File

@@ -1,786 +0,0 @@
/*
* $Id$
*/
library file : harbour.lib
modules : 38
public symbols : 400
module source public
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
arrays source\rtl\arrays.c _hb_arrayNew
_hb_arrayGet
_hb_arrayLen
_hb_arraySet
_hb_arraySize
_hb_arrayRelease
_hb_arrayGetString
_hb_arrayGetStringLen
_hb_arrayGetBool
_hb_arrayGetDouble
_hb_arrayGetType
_hb_arrayDel
_hb_arrayClone
_hb_arrayAdd
_hb_arrayGetDate
HB_AADD
HB_ACLONE
HB_ACOPY
HB_ADEL
HB_AEVAL
HB_AFILL
HB_AINS
HB_ARRAY
HB_ASCAN
HB_ASIZE
HB_ATAIL
_Arrays__InitSymbols
_hb_arrayLast
_hb_arrayFill
_hb_arrayIns
_hb_arrayScan
_hb_arrayEval
_hb_arrayCopy
asort source\rtl\asort.c HB_ASORT
_ASORT__InitSymbols
classes source\rtl\classes.c _GetMethod
_hb_GetClassName
_pClasses
_wClasses
_pMethod
_msgClassName
_msgClassH
_msgEval
_msgClassSel
HB_CLASSADD
HB_CLASSCREATE
HB_CLASSDEL
HB_CLASSINSTANCE
HB_CLASSMOD
HB_CLASSNAME
_hb_isMessage
HB_ISMESSAGE
HB_OCLONE
HB_OSEND
_ReleaseClass
_ReleaseClasses
HB___INSTSUPER
HB___WDATAS
HB___WDATADEC
HB___WDATAINC
_Classes__InitSymbols
HB___WCLSDATAS
codebloc source\rtl\codebloc.c _hb_CodeblockNew
_hb_CodeblockDelete
_hb_CodeblockEvaluate
_hb_CodeblockGetVar
_hb_CodeblockGetRef
_hb_CodeblockCopy
copyfile source\rtl\copyfile.c HB___COPYFILE
_CopyFile__InitSymbols
dates source\rtl\dates.c _hb_dow
_hb_dtoc
_hb_dateEncode
_hb_dateDecode
HB_CDOW
HB_CMONTH
HB_CTOD
HB_DATE
HB_DAY
HB_DOW
HB_DTOC
HB_DTOS
HB_MONTH
HB_SECONDS
HB_STOD
HB_TIME
HB_YEAR
_Dates__InitSymbols
_hb__seconds
_hb_cmonth
_hb_cdow
dates2 source\tools\dates2.c HB_ADAYS
HB_AMONTHS
HB_BOM
HB_BOY
HB_DAYSINMONTH
HB_DOY
HB_EOM
HB_EOY
HB_ISLEAPYEAR
HB_WOM
HB_WOY
_Dates2__InitSymbols
_hb_isleapyear
_hb_daysinmonth
_hb_doy
_hb_wom
_hb_woy
datesx source\tools\datesx.c HB_DATETIME
debug source\tools\debug.c HB___ASTATIC
HB___STATIC
_AddToArray
_GlobalStackLen
HB___GLOBALSTACKLEN
HB___AGLOBALSTACK
_StackLen
HB___STACKLEN
HB___ASTACK
HB___APARAM
descend source\rtl\descend.c HB_DESCEND
_Descend__InitSymbols
_hb_strdescend
devoutp source\rtl\devoutp.c HB_DEVOUTPICT
_DEVOUTP__InitSymbols
dir source\rtl\dir.c HB_DIRECTORY
_Dir__InitSymbols
dynsym source\vm\dynsym.c _GetDynSym
_NewDynSym
_FindDynSym
_NewSymbol
_LogSymbols
_ReleaseDynamicSymbols
HB_DYNSYMNAME
HB_DYNSYMBOLS
HB_GETDYNSYM
environ source\rtl\environ.c HB___RUN
HB_GETENV
HB_OS
HB_VERSION
_Environ__InitSymbols
error source\rtl\error.c HB_ERRORNEW
_ERROR__InitSymbols
errorapi source\rtl\errorapi.c _hb_errNew
_hb_errLaunch
_hb_errRelease
_hb_errGetSeverity
_hb_errPutSeverity
_hb_errGetGenCode
_hb_errPutGenCode
_hb_errGetOsCode
_hb_errPutOsCode
_hb_errGetFlags
_hb_errPutFlags
_hb_errGetTries
_hb_errPutTries
_hb_errGetSubCode
_hb_errPutSubCode
_hb_errGetSubSystem
_hb_errPutSubSystem
_hb_errGetDescription
_hb_errPutDescription
_hb_errGetOperation
_hb_errPutOperation
_hb_errGetFileName
_hb_errPutFileName
_hb_errorRT_BASE
_hb_errorRT_TERMINAL
errorsys source\rtl\errorsys.c HB_ERRORSYS
_ERRORSYS__InitSymbols
extend source\rtl\extend.c _hb_param
_hb_parc
_hb_parclen
_hb_pards
_hb_parl
_hb_parnd
_hb_parni
_hb_parnl
_hb_parinfo
_hb_storc
_hb_storclen
_hb_stords
_hb_storl
_hb_storni
_hb_stornl
_hb_stornd
_hb_pcount
_hb_ret
_hb_retc
_hb_retclen
_hb_retds
_hb_retl
_hb_retni
_hb_retnl
_hb_retnd
_hb_reta
_hb_xgrab
_hb_xrealloc
_hb_xfree
_hb_xsize
_hb_parinfa
_ulMemoryBlocks
_ulMemoryMaxBlocks
_ulMemoryMaxConsumed
_ulMemoryConsumed
files source\rtl\files.c _hb_fsChDir
_hb_fsChDrv
_hb_fsClose
_hb_fsCommit
_hb_fsCreate
_hb_fsCurDir
_hb_fsCurDrv
_hb_fsDelete
_hb_fsError
_hb_fsExtOpen
_hb_fsIsDrv
_hb_fsLock
_hb_fsMkDir
_hb_fsOpen
_hb_fsRead
_hb_fsRmDir
_hb_fsRename
_hb_fsSeek
_hb_fsWrite
HB_BIN2I
HB_BIN2L
HB_BIN2W
HB_FCLOSE
HB_FCREATE
HB_FERASE
HB_FERROR
HB_FILE
HB_FOPEN
HB_FREAD
HB_FREADSTR
HB_FRENAME
HB_FSEEK
HB_FWRITE
HB_I2BIN
HB_L2BIN
HB_W2BIN
_Files__InitSymbols
hardcr source\rtl\hardcr.c HB_HARDCR
_HardCR__InitSymbols
_hb_hardcr
hb_f source\tools\hb_f.c HB_HB_FUSE
HB_HB_FRECNO
HB_HB_FSKIP
HB_HB_FREADLN
HB_HB_FEOF
HB_HB_FGOTO
HB_HB_FGOBOTTOM
HB_HB_FGOTOP
HB_HB_FLASTREC
HB_HB_FSELECT
initsymb source\vm\initsymb.c _InitSymbolTable
itemapi source\rtl\itemapi.c _hb_evalLaunch
_hb_evalNew
_hb_evalPutParam
_hb_evalRelease
_hb_itemArrayGet
_hb_itemArrayNew
_hb_itemArrayPut
_hb_itemCopyC
_hb_itemFreeC
_hb_itemGetC
_hb_itemGetDS
_hb_itemGetL
_hb_itemGetND
_hb_itemGetNL
_hb_itemNew
_hb_itemParam
_hb_itemPutC
_hb_itemPutCL
_hb_itemPutDS
_hb_itemPutL
_hb_itemPutND
_hb_itemPutNL
_hb_itemRelease
_hb_itemReturn
_hb_itemSize
_hb_itemType
math source\rtl\math.c HB_ABS
HB_EXP
HB_INT
HB_LOG
HB_MAX
HB_MIN
HB_MOD
HB_ROUND
HB_SQRT
_Math__InitSymbols
mathx source\tools\mathx.c HB_ACOS
HB_ASIN
HB_ATAN
HB_COS
HB_COSH
HB_LOG10
HB_SIN
HB_SINH
HB_TAN
HB_TANH
memvars source\rtl\memvars.c _hb_GlobalValueNew
_hb_GlobalValueIncRef
_hb_GlobalValueDecRef
_hb_GlobalValueBaseAddress
_hb_MemvarInit
_hb_MemvarRelease
msguk source\rtl\natmsg\msguk.c _hb_monthsname
_hb_daysname
mtran source\rtl\mtran.c HB_MEMOTRAN
_Memotran__InitSymbols
_hb_memotran
objfunc source\rtl\objfunc.c HB_ISDATA
HB_ISMETHOD
HB_AODATA
HB_AOMETHOD
HB_AOGET
HB_AOSET
HB_OADDMETHOD
HB_OADDINLINE
HB_OADDDATA
HB_OMODMETHOD
HB_OMODINLINE
HB_ODELMETHOD
HB_ODELINLINE
HB_ODELDATA
_OBJFUNC__InitSymbols
set source\rtl\set.c HB_SET
_hb_setInitialize
_hb_setRelease
_hb_set
_hb_set_century
_hb_set_althan
_hb_set_extrahan
_hb_set_printhan
HB___SETCENTURY
_Set__InitSymbols
setcolor source\rtl\setcolor.c _hb_setColor
HB_SETCOLOR
_SETCOLOR__InitSymbols
strcmp source\rtl\strcmp.c _hb_itemStrCmp
_hb_stricmp
stringp source\rtl\stringp.c HB_DEFAULT
HB_TOCHAR
HB_DEBUG
_STRINGP__InitSymbols
strings source\rtl\strings.c _hb_str
_hb_strempty
HB_ALLTRIM
HB_ASC
HB_AT
HB_CHR
HB_ISALPHA
HB_ISDIGIT
HB_ISUPPER
HB_ISLOWER
HB_LEFT
HB_LOWER
HB_LTRIM
HB_PAD
HB_PADC
HB_PADL
HB_PADR
HB_RAT
HB_REPLICATE
HB_RIGHT
HB_RTRIM
HB_SPACE
HB_STR
HB_STRTRAN
HB_STUFF
HB_SUBSTR
HB_TRIM
HB_UPPER
HB_VAL
_Strings__InitSymbols
_hb_strLTrim
_hb_strRTrimLen
_hb_strAt
_hb_strLower
_hb_strUpper
_hb_strVal
stringsx source\tools\stringsx.c HB_STRDUMP
_hb_strtoken
HB_STRTOKEN
HB_ROT13
symbols source\compiler\symbols.asm _HB_LASTSYMBOL
_HB_FIRSTSYMBOL
tclass source\rtl\tclass.c HB_TCLASS
_TCLASS__InitSymbols
transfrm source\rtl\transfrm.c HB_TRANSFORM
_Transfrm__InitSymbols
_lFactDay
_lFactMonth
_lFactYear
_szBritish
_PictFunc
_NumPicture
_NumDefault
_DatePicture
======================================================================
what made harbour.exe
modules : 7
public symbols : 224
date : 18 july 1999
module source public symbols
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
harbour source\compiler\harbour.c _main
genobj32 source\compiler\genobj32.c _wExternals
_GenObj32
_GetSymbolsAmount
_IsExternal
_GetExternalPos
_putword
harbourl source\compiler\harbourl.c _yyleng
_yyin
_yyout
_yyrestart
_yy_switch_to_buffer
_yy_load_buffer_state
_yy_create_buffer
_yy_delete_buffer
_yy_init_buffer
_yy_flush_buffer
_yy_scan_buffer
_yy_scan_string
_yy_scan_bytes
_yytext
_yy_lex_input
_iLine
_lNumber
__iState
_iIndexSets
_i_INDEX_STATE
_yylex
harboury source\compiler\harboury.c _GetFunction
_GetFunctionPos
_OurMalloc
_OurRealloc
_OurFree
_GenError
_GenWarning
_Include
_SplitFilename
_MakeFilename
_yyerror
_yyparse
_yywrap
_yy_strdup
_yy_strupr
_AddFunCall
_AddExtern
_AddSearchPath
_AddVar
_AddSymbol
_CheckDuplVars
_Dec
_DimArray
_Do
_Duplicate
_DupPCode
_FixElseIfs
_FixReturns
_Function
_FunctionNew
_FunDef
_GenArray
_GenElseIf
_GenExterns
_GenReturn
_GetFuncall
_GetVar
_GetVarPos
_GetLocalVarPos
_GetSymbol
_GetSymbolOrd
_GetSymbolPos
_Inc
_Jump
_JumpFalse
_JumpHere
_JumpThere
_JumpTrue
_KillFunction
_KillSymbol
_Line
_LineBody
_MemvarPCode
_Message
_MessageFix
_MessageDupl
_PopId
_PushDouble
_PushId
_PushIdByRef
_PushInteger
_PushLogical
_PushLong
_PushNil
_PushString
_PushSymbol
_GenPCode1
_GenPCode3
_GenPCodeN
_SetData
_SetFrame
_SetAlias
_FieldsCount
_CodeBlockStart
_CodeBlockEnd
_StaticDefStart
_StaticDefEnd
_StaticAssign
_GenCCode
_GenJava
_GenPascal
_GenRC
_GenPortObj
_PrintUsage
_iVarScope
__szCErrors
__szWarnings
_sz_compare4
_files
_functions
_funcalls
__pInitFunc
_symbols
__iStartProc
__iLineNumbers
__iQuiet
__iSyntaxCheckOnly
__iLanguage
__iRestrictSymbolLength
__iShortCuts
__iWarnings
__wSeqCounter
__wForCounter
__wIfCounter
__wWhileCounter
__wCaseCounter
__lMessageFix
__wStatics
_pReturns
_pExterns
_pLoops
__pIncludePath
_pStackValType
_cVarType
_yychar
_yylval
_yynerrs
_yydebug
_close_on_exit
_harbour_main
_GetStaticVarPos
hbpp source\hbpp\hbpp.c _ParseDirective
_ParseDefine
_AddDefine
_ParseUndef
_ParseIfdef
_ParseCommand
_ConvertPatterns
_AddCommand
_AddTranslate
_getCommand
_ParseExpression
_WorkDefine
_WorkPseudoF
_WorkCommand
_CommandStuff
_WorkTranslate
_WorkMarkers
_getExpReal
_isExpres
_SkipOptional
_DefSearch
_ComSearch
_TraSearch
_SearnRep
_ReplacePattern
_RdStr
_WrStr
_hb_strAt
_md_strAt
_IsInStr
_Stuff
_strocpy
_stroncpy
_strincpy
_strincmp
_strolen
_stroupper
_strotrim
_strodup
_NextWord
_NextName
_NextParm
_OpenInclude
_ParseState
_lInclude
_aCondCompile
_nCondCompile
_maxCondCompile
_nline
_Repeate
_groupchar
_aDefnew
_koldefines
_maxdefines
_aCommnew
_kolcommands
_maxcommands
_aTranslates
_koltranslates
_maxtranslates
__szPErrors
hbppint source\hbpp\hbppint.c __xgrab
__xrealloc
__xfree
_PreProcess
_Hp_Parse
_iBuffer
_lenBuffer
_lPpo
_yyppo
_Hbpp_init
table source\hbpp\table.c _koldef
_aDefines
_kolcomm
_aCommands
======================================================================
Library File : TERMINAL.LIB
File Size : 16896
Time Stamp : 17 July 1999 05:21:11
Modules : 3
Public Symbols : 73
Reported By : LIBman 1.29, 17 July 1999 08:03:06
MODULE SOURCE PUBLIC
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
gtapi source\rtl\gtapi.c _hb_gtInit
_hb_gtBox
_hb_gtBoxD
_hb_gtBoxS
_hb_gtColorSelect
_hb_gtDispBegin
_hb_gtDispCount
_hb_gtDispEnd
_hb_gtGetColorStr
_hb_gtGetCursor
_hb_gtGetPos
_hb_gtIsColor
_hb_gtMaxCol
_hb_gtMaxRow
_hb_gtPostExt
_hb_gtPreExt
_hb_gtRectSize
_hb_gtRepChar
_hb_gtRest
_hb_gtSave
_hb_gtScrDim
_hb_gtScroll
_hb_gtSetBlink
_hb_gtSetColorStr
_hb_gtSetCursor
_hb_gtSetMode
_hb_gtSetPos
_hb_gtSetSnowFlag
_hb_gtWrite
_hb_gtWriteAt
_hb_gtWriteCon
gtdos source\rtl\gt\gtdos.c _gtInit
_gtDone
_gtGetScreenWidth
_gtGetScreenHeight
_gtGotoXY
_gtWhereX
_gtWhereY
_gtSetCursorStyle
_gtGetCursorStyle
_gtPuts
_gtGetText
_gtPutText
_gtScreenPtr
console source\rtl\console.c HB___ACCEPT
HB_COL
HB_DEVOUT
HB_DEVPOS
HB_DISPBEGIN
HB_DISPBOX
HB_DISPCOUNT
HB_DISPEND
Page 2
Library File : TERMINAL.LIB
File Size : 16896
Time Stamp : 17 July 1999 05:21:11
Modules : 3
Public Symbols : 73
Reported By : LIBman 1.29, 17 July 1999 08:03:06
MODULE SOURCE PUBLIC
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
HB_DISPOUT
HB___EJECT
HB_ISCOLOR
HB_MAXCOL
HB_MAXROW
HB_NOSNOW
HB_OUTSTD
HB_OUTERR
HB_PCOL
HB_PROW
HB_ROW
HB_SCROLL
HB_SETPOS
HB_SETPRC
HB_QOUT
HB_QQOUT
_Console__InitSymbols
_hb_max_row
_hb_max_col
_hb_setpos
_hb_devpos

View File

@@ -5,8 +5,21 @@
HOW TO USE THE CVS
------------------
Here's how to prepare for uploading to the CVS server
=====================================================
Content
=======
1.1 Here's how to prepare for uploading to the CVS server
1.2 Here's how to upload your changes to the CVS server
1.3 Here's how to format your ChangeLog entries
1.4 Here's how to use the CVS server in anonymous read-only mode (TODO)
1.5 Switching from anonymous access to read/write access
1.6 Things to do to avoid damaging the SourceForge CVS tree
1.7 How I got SSH and CVS to work together
1.8 How to add CVS ID to new files
1.1 Here's how to prepare for uploading to the CVS server
=========================================================
by Victor Szakats <info@szelvesz.hu>
1) Read the Harbour FAQ (www.harbour-project.org), monitor the
mailing-list (Harbour at www.egroups.com), consult with the
@@ -22,8 +35,9 @@ Here's how to prepare for uploading to the CVS server
(see: CVS_SSH.TXT)
6) Do a complete checkout to get the fresh source tree.
Here's how to upload your changes to the CVS server
===================================================
1.2 Here's how to upload your changes to the CVS server
=======================================================
by Victor Szakats <info@szelvesz.hu>
1) Do the changes in the source, and in parallel modify ChangeLog
2) Go online (if needed)
@@ -59,13 +73,16 @@ Important notes:
the name and placing of it. On the CVS, there's no way to completely
remove a directory, that's why this is important.
Here's how to format your ChangeLog entries
===========================================
1.3 Here's how to format your ChangeLog entries
===============================================
by Victor Szakats <info@szelvesz.hu>
- Always add new entries to the top of the ChangeLog file.
- Add an entry header using this format:
YYYYMMDD-HH:MM GMT-+TZ Your Full Name <your_email_address>
YYYY-MM-DD HH:MM UTC[-|+]hhmm Your Full Name <your_email_address>
For example: 2000-05-27 23:12 UTC+0100 Victor Szakats <info@szelvesz.hu>
- Add a entry body which lists all filenames changed, all of
them with full path spec. Mention the name of the changed function or
@@ -92,9 +109,140 @@ Here's how to format your ChangeLog entries
- Leave an empty line between the header and body and one after the body.
Here's how to use the CVS server in anonymous read-only mode
============================================================
1.4 Here's how to use the CVS server in anonymous read-only mode
================================================================
(TODO)
Victor Szakats <info@szelvesz.hu>
1.5 Switching from anonymous access to read/write access
========================================================
by David G. Holm <Harbour@SpaceMoose.com>
1) Change your CVSROOT variable from
:pserver:anonymous@cvs.Harbour-project.sourceforge.net:/cvsroot/Harbour-project
to
:ext:your_source_forge_ID_in_lower_case@cvs.Harbour-project.sourceforge.net:/cvsroot/Harbour-project
2) Set up CVS to use SSH (see cvs_ssh.txt for details).
3) Visit each and every one of the CVS subdirectories in your local
CVS tree and change the contents of the 'Root' file from your old
CVSROOT contents to your new CVSROOT contents.
Note: Every time you issue a CVS command, you will have to enter your
SourceForge password.
1.6 Things to do to avoid damaging the SourceForge CVS tree
===========================================================
by David G. Holm <Harbour@SpaceMoose.com>
1) Always do your Harbour development using your local CVS tree. Do not
do your development outside your local CVS tree and then copy your
changes into your local CVS tree to commit them, because that leads
easily to accidentally overwriting changes made by others, because
you didn't notice that a module that you were also working on was
changed by someone else. By always doing Harbour development using
your local CVS tree, changes made by others will be merged with your
changes and you only need to recompile and retest before committing.
2) Always run 'cvs update' from the 'harbour' directory before you run
'cvs commit'. Ideally, you should redirect the output from the update
to a file and look at the results to confirm that you are ready to do
a commit. Any files marked M, A or D are files that you have modified
or are adding or deleting. Confirm that you have comments for all of
them in your ChangeLog entry. If you see many modules marked P or U,
then you need to recompile and retest before you commit your changes.
If you see any conflicts reported in the update output, then you need
to resolve them before committing. CVS is generally good at merging
changes, so you probably won't see conflicts very often, but if you
edit the ChangeLog file before you run 'cvs update' and other changes
have been committed by others, then ChangeLog will have conflicts. To
resolve those conflicts, simply remove the conflict markers. What I do
to avoid conflicts to ChangeLog is to record my changes in changes.txt
and then copy them into ChangeLog between the update and the commit.
1.7 How I got SSH and CVS to work together
==========================================
by David G. Holm <Harbour@SpaceMoose.com>
The trick was in how to set up the CVSROOT variable.
I did this on NT4, but it should be similar for 95/98 and OS/2.
Note: Your CVS ID is the same as your SourceForge login ID, with one
very important difference: Any and all upper case letters are
converted to lower case. So if your SourceForge login ID is
MyFullName, then your CVS ID will be myfullname.
First I set up SSH, using the following steps:
1) I pointed my web browser to ftp://ftp.cs.hut.fi/pub/ssh/contrib/
2) I downloaded the ssh-1.2.14-win32bin.zip file
3) I unzipped the file into a directory that was already on my PATH
4) I created a directory E:\hb-dev\ for my Harbour development CVS tree
5) I created a batch file LOGIN.BAT, in the E:\hb-dev\ directory, with
the following commands in it:
@echo off
SET HOME=E:\hb-dev\
ssh -l dholm Harbour-project.sourceforge.net
6) I ran the LOGIN batch file, which automatically created a .ssh
directory under E:\hb-dev\, automatically accepted the key from
SourceForge, and prompted me for my password.
7) I entered my password and got logged into a SourceForge shell,
thus confirming that SSH is configured properly.
8) I entered "exit" to quit back to the DOS prompt.
Next I set up CVS, using the following steps:
1) I pointed my browser to http://download.cyclic.com/pub/cvs-1.10/windows/
2) I downloaded the cvs-1.10-win.zip file
3) I renamed my old CVS.EXE to CVS-OLD.EXE
4) I unzipped the new file into a directory that was already on my PATH
5) I created a batch file CHECKOUT.BAT, in my E:\hb-dev\ directory,
with the following commands in it:
@echo off
SET HOMEDRIVE=E:
SET HOMEPATH=/hb-dev/
SET CVSROOT=:ext:dholm@cvs.Harbour-project.sourceforge.net:/cvsroot/Harbour-project
SET CVS_RSH=ssh
cvs co harbour
6) I ran the CHECKOUT batch file and was prompted for my SourceForge
password. And it checked out the entire harbour CVS tree!
So all you have to do is make the obvious substitions for drive letters,
path names, and user IDs, and this procedure should work for you.
You may not even have to download a new copy of CVS, but you may
have to have a text mode version of SSH.
I found the trick to setting up the CVSROOT properly by doing a search for
"CVS SSH NT" at http://www.google.com/ and following the third link, named
"Configuring WinCVS and Secure SHell on Windows NT" and located at
http://www.cc.gatech.edu/classes/RWL/Projects/scenicview/Web/cvs-ssh-config.html
1.8 How to add CVS ID to new files
==================================
by Maurilio Longo <maurilio.longo@libero.it>
When a new file is added to cvs tree it has not a CVS ID.
CVS IDs look like this:
/*
* $Id$
*/
To add one to a file lacking it simply put as first lines:
/*
* Chr(36) + "Id" + Chr(36)
*/
I can't write it here because cvs server would change it as soon as I
commit this file, but second line should not have Chr(36) but $ signs
and no spaces between dollar sign and Id.
as soon as you commit your file cvs ID string will be expanded
by cvs server to full length.
Note that last dollar sign is mandatory.

View File

@@ -4,6 +4,39 @@
----------------------------------------------------------------------
Version 0.34 Build 34 (2000-??-??)
- Linux/Unix ncurses screen output and xterm mouse input support
- MEMOEDIT support started
- CONTRIBs better separated from core Harbour (TOOLS moved there)
- Simplified and enhanced base for multiplatform coding
- Language API (link/compile time language modul selection)
- Several small optimizations, enhancements and fixes (compiler, macro, GT,
inkey, make and build systems, more strict compiler warnings)
- Compiler pcode size optimizations (new compact pcode versions added and
other tricks)
- Far jump pcode support
- Double number size support in pcode
- Pcode finalized in the compiler, instead of the output generation modules.
- OS/2 support improved (DISKSPACE(), MEMORY(), locks, etc...)
- Linux/Unix support for file locks and commit.
- DBFCDX index creation support (started)
- Strong Typing support
- OBJ generation support for BCC5x + Blinker5
- Several new CONTRIBs (Nanfor LIB, ZLIB, MSQL, CA-Tools LIB, GT LIB)
- Clipper 5.3 compatible MENUITEM, POPUP, TOPBAR classes
- Documentation further enhanced
- RSX32 and RSXNT compiler support
- SETKEY functions, ASORT(), SAVESCREEN/RESTSCREEN rewritten in C
- Extensions (XPP, C53, Harbour) are easier to switch of and better separated
from Harbour.
- Some fixes for 10 chars support.
- New most compact and fast -gc0 (C language) output method added.
- -gf switch renamed to -go
- Compiler /BUILD switch added
- Crew list added to /CREDIT compiler switch
- CURDIR(), CURDRIVE() fixed
Version 0.33 Build 33 (2000-04-07)
- Final cleanups on global macro and symbol names.
@@ -130,7 +163,7 @@ Build #31 2000-01-27
- Added HARBOURCMD/CLIPPERCMD environment variables
- Added support for #pragma directives
- Enhanced Getenv() function
- Added //BUILD command line to compiler
- Added //BUILD app command line option
----------------------------------------------------------------------

View File

@@ -493,7 +493,7 @@ typedef struct HB_MACRO_ /* a macro compiled pcode container */
void * pParseInfo; /* data needed by the parser - it should be 'void *' to allow different implementation of macr compiler */
USHORT uiNameLen; /* the maximum symbol name length */
BOOL bShortCuts; /* are we using logical shorcuts (in OR/AND) */
int exprType; /* type of successfully compiled expression */
int exprType; /* type of successfully compiled expression */
} HB_MACRO, * HB_MACRO_PTR;
extern void hb_macroGetValue( HB_ITEM_PTR );

View File

@@ -112,7 +112,7 @@ typedef struct _VAR
char * szName; /* variable name */
char * szAlias; /* variable alias namespace */
int iUsed; /* number of times used */
int iDeclLine; /* declaration line number */
int iDeclLine; /* declaration line number */
BYTE cType; /* optional strong typing */
PCOMCLASS pClass;
struct _VAR * pNext; /* pointer to next defined variable */

View File

@@ -651,6 +651,7 @@ EXTERNAL READKEY
//
EXTERNAL SETKEY
#ifdef HB_EXTENSION
EXTERNAL HB_SETKEYARRAY
EXTERNAL HB_SETKEYGET
EXTERNAL HB_SETKEYSAVE
EXTERNAL HB_SETKEYCHECK
@@ -674,10 +675,6 @@ EXTERNAL TBROWSENEW
//
EXTERNAL TCLASS
//
// Structure support
//
EXTERNAL HB_STRUCTURE
//
//symbols from file: rtl\text.prg
//
EXTERNAL __TEXTSAVE
@@ -899,4 +896,10 @@ EXTERNAL __HRBRUN
EXTERNAL HB_LANGSELECT
EXTERNAL HB_LANGNAME
#ifdef HB_COMPAT_C53
EXTERNAL TOPBAR
EXTERNAL POPUP
EXTERNAL MENUITEM
#endif
#endif /* HB_EXTERN_CH_ */

View File

@@ -276,7 +276,6 @@ RTL_LIB_OBJS = \
$(OBJ_DIR)\fieldbl.obj \
$(OBJ_DIR)\getlist.obj \
$(OBJ_DIR)\getsys.obj \
$(OBJ_DIR)\hbstruc.obj \
$(OBJ_DIR)\input.obj \
$(OBJ_DIR)\memoedit.obj \
$(OBJ_DIR)\memvarbl.obj \
@@ -295,7 +294,10 @@ RTL_LIB_OBJS = \
$(OBJ_DIR)\tget.obj \
$(OBJ_DIR)\tgetlist.obj \
$(OBJ_DIR)\tlabel.obj \
$(OBJ_DIR)\tmenuitm.obj \
$(OBJ_DIR)\tpopup.obj \
$(OBJ_DIR)\treport.obj \
$(OBJ_DIR)\ttopbar.obj \
$(OBJ_DIR)\typefile.obj \
$(OBJ_DIR)\wait.obj
@@ -434,11 +436,15 @@ VM_LIB_OBJS = \
\
$(OBJ_DIR)\borinit.obj \
$(OBJ_DIR)\borsym.obj \
$(OBJ_DIR)\startup.obj \
$(OBJ_DIR)\symbols.obj \
\
$(OBJ_DIR)\harbinit.obj
!if !$d(B16)
VM_LIB_OBJS = $(VM_LIB_OBJS) \
$(OBJ_DIR)\startup.obj
!endif
#
# GTDOS.LIB rules
#
@@ -1154,13 +1160,6 @@ $(OBJ_DIR)\hardcr.obj : $(RTL_DIR)\hardcr.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\hbstruc.c : $(RTL_DIR)\hbstruc.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\hbstruc.obj : $(OBJ_DIR)\hbstruc.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\inkey.obj : $(RTL_DIR)\inkey.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
@@ -1515,10 +1514,24 @@ $(OBJ_DIR)\tlabel.obj : $(OBJ_DIR)\tlabel.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\tmenuitm.c : $(RTL_DIR)\tmenuitm.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\tmenuitm.obj : $(OBJ_DIR)\tmenuitm.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\tone.obj : $(RTL_DIR)\tone.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\tpopup.c : $(RTL_DIR)\tpopup.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\tpopup.obj : $(OBJ_DIR)\tpopup.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\trace.obj : $(RTL_DIR)\trace.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
@@ -1538,6 +1551,13 @@ $(OBJ_DIR)\trim.obj : $(RTL_DIR)\trim.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\ttopbar.c : $(RTL_DIR)\ttopbar.prg
$(HARBOUR_EXE) $(HARBOURFLAGS) $** -o$@
$(OBJ_DIR)\ttopbar.obj : $(OBJ_DIR)\ttopbar.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,
$(OBJ_DIR)\type.obj : $(RTL_DIR)\type.c
$(CC) $(CLIBFLAGS) -o$@ $**
tlib $(RTL_LIB) $(ARFLAGS) -+$@,,

View File

@@ -307,7 +307,6 @@ RTL_LIB_OBJS = \
$(OBJ_DIR)\fieldbl.obj \
$(OBJ_DIR)\getlist.obj \
$(OBJ_DIR)\getsys.obj \
$(OBJ_DIR)\hbstruc.obj \
$(OBJ_DIR)\input.obj \
$(OBJ_DIR)\memoedit.obj \
$(OBJ_DIR)\memvarbl.obj \
@@ -326,7 +325,10 @@ RTL_LIB_OBJS = \
$(OBJ_DIR)\tget.obj \
$(OBJ_DIR)\tgetlist.obj \
$(OBJ_DIR)\tlabel.obj \
$(OBJ_DIR)\tmenuitm.obj \
$(OBJ_DIR)\tpopup.obj \
$(OBJ_DIR)\treport.obj \
$(OBJ_DIR)\ttopbar.obj \
$(OBJ_DIR)\typefile.obj \
$(OBJ_DIR)\wait.obj

View File

@@ -187,9 +187,6 @@ void hb_compChkEnvironVar( char * szSwitch )
s++;
switch( *s )
{
case '?':
break;
case 'a':
case 'A':
hb_comp_bAutoMemvarAssume = TRUE;
@@ -324,6 +321,7 @@ void hb_compChkEnvironVar( char * szSwitch )
*/
case 'h':
case 'H':
case '?':
break;
/* NOTE:

View File

@@ -71,7 +71,7 @@ static void hb_compGenVarPCode( BYTE , char * ); /* generates the pcode for u
static PFUNCTION hb_compFunctionNew( char *, HB_SYMBOLSCOPE ); /* creates and initialises the _FUNC structure */
static void hb_compCheckDuplVars( PVAR pVars, char * szVarName ); /*checks for duplicate variables definitions */
//int hb_compSort_ULONG( ULONG * ulLeft, ULONG * ulRight );
/* int hb_compSort_ULONG( ULONG * ulLeft, ULONG * ulRight ); */
static void hb_compOptimizeJumps( void );
static void hb_compPrepareOptimize( void );
static void hb_compOptimizeFrames( PFUNCTION pFunc );
@@ -939,7 +939,7 @@ PCOMDECLARED hb_compMethodAdd( PCOMCLASS pClass, char * szMethodName )
pMethod = ( PCOMDECLARED ) hb_xgrab( sizeof( COMDECLARED ) );
pMethod->szName = szMethodName;
pMethod->cType = ' '; // Not known yet
pMethod->cType = ' '; /* Not known yet */
pMethod->cParamTypes = NULL;
pMethod->iParamCount = 0;
pMethod->pParamClasses = NULL;
@@ -1530,7 +1530,7 @@ static int hb_compLocalGetPos( char * szVarName ) /* returns the order + 1 of a
pVar->cType = ' ';
pVar->iUsed = VU_NOT_USED;
pVar->pNext = NULL;
pVar->iDeclLine = hb_comp_iLine;
pVar->iDeclLine = hb_comp_iLine;
/* Use negative order to signal that we are accessing a local
* variable from a codeblock
@@ -2817,9 +2817,9 @@ void hb_compFinalizeFunction( void ) /* fixes all last defined function returns
while( pVar )
{
if( pVar->szName && pFunc->szName && pFunc->szName[0] && ! ( pVar->iUsed & VU_USED ) )
{
char szFun[ 256 ];
sprintf( szFun, "%s(%i)", pFunc->szName, pVar->iDeclLine );
{
char szFun[ 256 ];
sprintf( szFun, "%s(%i)", pFunc->szName, pVar->iDeclLine );
hb_compGenWarning( hb_comp_szWarnings, 'W', HB_COMP_WARN_VAR_NOT_USED, pVar->szName, szFun );
}
@@ -2830,11 +2830,11 @@ void hb_compFinalizeFunction( void ) /* fixes all last defined function returns
while( pVar )
{
if( pVar->szName && pFunc->szName && pFunc->szName[0] && ! ( pVar->iUsed & VU_USED ) )
{
{
char szFun[ 256 ];
sprintf( szFun, "%s(%i)", pFunc->szName, pVar->iDeclLine );
hb_compGenWarning( hb_comp_szWarnings, 'W', HB_COMP_WARN_VAR_NOT_USED, pVar->szName, szFun );
}
}
pVar = pVar->pNext;
}
@@ -2890,7 +2890,7 @@ static void hb_compOptimizeFrames( PFUNCTION pFunc )
else
/* Check Global Statics. */
{
//PVAR pVar = pFunc->pStatics;
/* PVAR pVar = pFunc->pStatics; */
PVAR pVar = hb_comp_functions.pFirst->pStatics;
while( pVar )
@@ -3087,7 +3087,7 @@ static void hb_compOptimizeJumps( void )
{
/* Adjusting all later jumps (if negative) and target prior the current NOOP. */
// Only if points to code beyond the current fix.
/* Only if points to code beyond the current fix. */
if( pJumps[ iJump ] > pNOOPs[ iNOOP ] && pJumps[ iJump ] + piShifts[ iJump ] + ulOffset < pNOOPs[ iNOOP ] )
{
/* Decreasing Shift Counter for this Jump. */

View File

@@ -242,7 +242,7 @@ Source : Crlf { hb_comp_EOL = FALSE; }
| VarDefs { hb_comp_EOL = FALSE; }
| FieldsDef { hb_comp_EOL = FALSE; }
| MemvarDef { hb_comp_EOL = FALSE; }
| Declaration { hb_comp_EOL = FALSE; }
| Declaration { hb_comp_EOL = FALSE; }
| Function { hb_comp_EOL = FALSE; }
| Statement { hb_comp_EOL = FALSE; }
| Line { hb_comp_EOL = FALSE; }
@@ -284,7 +284,7 @@ AsType : /* not specified */ { hb_comp_cVarType = ' '; }
| AS_ARRAY { hb_comp_cVarType = 'A'; }
| AS_BLOCK { hb_comp_cVarType = 'B'; }
| AS_OBJECT { hb_comp_cVarType = 'O'; }
| AS_CLASS IdentName { hb_comp_cVarType = 'S'; hb_comp_szFromClass = $2 }
| AS_CLASS IdentName { hb_comp_cVarType = 'S'; hb_comp_szFromClass = $2 }
| AS_VARIANT { hb_comp_cVarType = ' '; }
| AS_NUMERIC_ARRAY { hb_comp_cVarType = 'n'; }
| AS_CHARACTER_ARRAY { hb_comp_cVarType = 'c'; }
@@ -293,7 +293,7 @@ AsType : /* not specified */ { hb_comp_cVarType = ' '; }
| AS_ARRAY_ARRAY { hb_comp_cVarType = 'a'; }
| AS_BLOCK_ARRAY { hb_comp_cVarType = 'b'; }
| AS_OBJECT_ARRAY { hb_comp_cVarType = 'o'; }
| AS_CLASS_ARRAY IdentName { hb_comp_cVarType = 's'; hb_comp_szFromClass = $2 }
| AS_CLASS_ARRAY IdentName { hb_comp_cVarType = 's'; hb_comp_szFromClass = $2 }
;
AsArray : AS_ARRAY { hb_comp_cVarType = 'A'; }
@@ -304,8 +304,8 @@ AsArray : AS_ARRAY { hb_comp_cVarType = 'A'; }
| AS_ARRAY_ARRAY { hb_comp_cVarType = 'a'; }
| AS_BLOCK_ARRAY { hb_comp_cVarType = 'b'; }
| AS_OBJECT_ARRAY { hb_comp_cVarType = 'o'; }
| AS_CLASS_ARRAY IdentName { hb_comp_cVarType = 's'; hb_comp_szFromClass = $2 }
;
| AS_CLASS_ARRAY IdentName { hb_comp_cVarType = 's'; hb_comp_szFromClass = $2 }
;
ParamList : IdentName AsType { hb_compVariableAdd( $1, hb_comp_cVarType ); $$ = 1; }
| ParamList ',' IdentName AsType { hb_compVariableAdd( $3, hb_comp_cVarType ); $$++; }
@@ -1138,100 +1138,109 @@ MemvarList : IdentName AsType { hb_compVariableAdd( $1, hb_c
| MemvarList ',' IdentName AsType { hb_compVariableAdd( $3, hb_comp_cVarType ); }
;
Declaration: DECLARE IdentName '(' { hb_compDeclaredAdd( $2 ); hb_comp_szDeclaredFun = $2; } DecList ')' AsType Crlf { if( hb_comp_pLastDeclared )
hb_comp_pLastDeclared->cType = hb_comp_cVarType;
hb_comp_szDeclaredFun = NULL;
hb_comp_cVarType = ' ';
hb_comp_iVarScope = VS_NONE;
}
Declaration: DECLARE IdentName '(' { hb_compDeclaredAdd( $2 ); hb_comp_szDeclaredFun = $2; } DecList ')' AsType Crlf
{
if( hb_comp_pLastDeclared )
hb_comp_pLastDeclared->cType = hb_comp_cVarType;
hb_comp_szDeclaredFun = NULL;
hb_comp_cVarType = ' ';
hb_comp_iVarScope = VS_NONE;
}
| DECLARE IdentName { hb_comp_pLastClass = hb_compClassAdd( $2 ); } ClassInfo Crlf { hb_comp_iVarScope = VS_NONE; }
;
;
ClassInfo : DecMethod
| ClassInfo DecMethod
| DecData
| ClassInfo DecData
;
| ClassInfo DecMethod
| DecData
| ClassInfo DecData
;
DecMethod : IdentName '(' { hb_comp_pLastMethod = hb_compMethodAdd( hb_comp_pLastClass, $1 ); } DecList ')' AsType { if ( hb_comp_pLastMethod )
{
hb_comp_pLastMethod->cType = hb_comp_cVarType;
if ( toupper( hb_comp_cVarType ) == 'S' )
{
hb_comp_pLastMethod->pClass = hb_compClassFind( hb_comp_szFromClass );
if( ! hb_comp_pLastMethod->pClass )
{
hb_compGenWarning( hb_comp_szWarnings, 'W', HB_COMP_WARN_CLASS_NOT_FOUND, hb_comp_szFromClass, hb_comp_pLastMethod->szName );
hb_comp_pLastMethod->cType = ( isupper( hb_comp_cVarType ) ? 'O' : 'o' );
}
DecMethod : IdentName '(' { hb_comp_pLastMethod = hb_compMethodAdd( hb_comp_pLastClass, $1 ); } DecList ')' AsType
{
if( hb_comp_pLastMethod )
{
hb_comp_pLastMethod->cType = hb_comp_cVarType;
if ( toupper( hb_comp_cVarType ) == 'S' )
{
hb_comp_pLastMethod->pClass = hb_compClassFind( hb_comp_szFromClass );
if( ! hb_comp_pLastMethod->pClass )
{
hb_compGenWarning( hb_comp_szWarnings, 'W', HB_COMP_WARN_CLASS_NOT_FOUND, hb_comp_szFromClass, hb_comp_pLastMethod->szName );
hb_comp_pLastMethod->cType = ( isupper( hb_comp_cVarType ) ? 'O' : 'o' );
}
/* Resetting */
hb_comp_szFromClass = NULL;
}
}
hb_comp_pLastMethod = NULL;
hb_comp_cVarType = ' ';
}
;
/* Resetting */
hb_comp_szFromClass = NULL;
}
}
hb_comp_pLastMethod = NULL;
hb_comp_cVarType = ' ';
}
;
DecData : IdentName { hb_comp_pLastMethod = hb_compMethodAdd( hb_comp_pLastClass, $1 ); } AsType { if ( hb_comp_pLastMethod )
{
PCOMCLASS pClass;
char * szSetData = ( char * ) hb_xgrab( strlen( $1 ) + 2 );
DecData : IdentName { hb_comp_pLastMethod = hb_compMethodAdd( hb_comp_pLastClass, $1 ); } AsType
{
if( hb_comp_pLastMethod )
{
PCOMCLASS pClass;
char * szSetData = ( char * ) hb_xgrab( strlen( $1 ) + 2 );
hb_comp_pLastMethod->cType = hb_comp_cVarType;
if ( toupper( hb_comp_cVarType ) == 'S' )
{
pClass = hb_compClassFind( hb_comp_szFromClass );
hb_comp_pLastMethod->pClass = pClass;
if( ! hb_comp_pLastMethod->pClass )
{
hb_compGenWarning( hb_comp_szWarnings, 'W', HB_COMP_WARN_CLASS_NOT_FOUND, hb_comp_szFromClass, hb_comp_pLastMethod->szName );
hb_comp_pLastMethod->cType = ( isupper( hb_comp_cVarType ) ? 'O' :'o' );
}
hb_comp_pLastMethod->cType = hb_comp_cVarType;
if ( toupper( hb_comp_cVarType ) == 'S' )
{
pClass = hb_compClassFind( hb_comp_szFromClass );
hb_comp_pLastMethod->pClass = pClass;
if( ! hb_comp_pLastMethod->pClass )
{
hb_compGenWarning( hb_comp_szWarnings, 'W', HB_COMP_WARN_CLASS_NOT_FOUND, hb_comp_szFromClass, hb_comp_pLastMethod->szName );
hb_comp_pLastMethod->cType = ( isupper( hb_comp_cVarType ) ? 'O' :'o' );
}
}
else
pClass = NULL;
}
sprintf( szSetData, "_%s", $1 );
sprintf( szSetData, "_%s", $1 );
hb_comp_pLastMethod = hb_compMethodAdd( hb_comp_pLastClass, szSetData );
hb_comp_pLastMethod->cType = hb_comp_cVarType;
hb_comp_pLastMethod->iParamCount = 1;
hb_comp_pLastMethod = hb_compMethodAdd( hb_comp_pLastClass, szSetData );
hb_comp_pLastMethod->cType = hb_comp_cVarType;
hb_comp_pLastMethod->iParamCount = 1;
hb_comp_pLastMethod->cParamTypes = ( BYTE * ) hb_xgrab( 1 );
hb_comp_pLastMethod->cParamTypes[0] = hb_comp_cVarType;
hb_comp_pLastMethod->cParamTypes = ( BYTE * ) hb_xgrab( 1 );
hb_comp_pLastMethod->cParamTypes[0] = hb_comp_cVarType;
hb_comp_pLastMethod->pParamClasses = ( PCOMCLASS * ) hb_xgrab( sizeof( COMCLASS ) );
hb_comp_pLastMethod->pParamClasses[0] = pClass;
hb_comp_pLastMethod->pParamClasses = ( PCOMCLASS * ) hb_xgrab( sizeof( COMCLASS ) );
hb_comp_pLastMethod->pParamClasses[0] = pClass;
if ( toupper( hb_comp_cVarType ) == 'S' )
{
hb_comp_pLastMethod->pClass = pClass;
if ( toupper( hb_comp_cVarType ) == 'S' )
{
hb_comp_pLastMethod->pClass = pClass;
/* Resetting */
hb_comp_szFromClass = NULL;
}
}
hb_comp_pLastMethod = NULL;
hb_comp_cVarType = ' ';
}
;
/* Resetting */
hb_comp_szFromClass = NULL;
}
}
hb_comp_pLastMethod = NULL;
hb_comp_cVarType = ' ';
}
;
DecList : {}
| FormalList
| FormalList OptList
;
| FormalList OptList
;
FormalList : IdentName AsType { hb_compVariableAdd( $1, hb_comp_cVarType ); }
| '@' IdentName AsType { hb_compVariableAdd( $2, hb_comp_cVarType + VT_OFFSET_BYREF ); }
| '@' IdentName AsType { hb_compVariableAdd( $2, hb_comp_cVarType + VT_OFFSET_BYREF ); }
| FormalList ',' IdentName AsType { hb_compVariableAdd( $3, hb_comp_cVarType ); }
| FormalList ',' '@' IdentName AsType { hb_compVariableAdd( $4, hb_comp_cVarType + VT_OFFSET_BYREF ); }
;
OptList : ',' OPTIONAL IdentName AsType { hb_compVariableAdd( $3, hb_comp_cVarType + VT_OFFSET_OPTIONAL ); }
| ',' OPTIONAL '@' IdentName AsType { hb_compVariableAdd( $4, hb_comp_cVarType + VT_OFFSET_OPTIONAL + VT_OFFSET_BYREF ); }
| OptList ',' OPTIONAL IdentName AsType { hb_compVariableAdd( $4, hb_comp_cVarType + VT_OFFSET_OPTIONAL ); }
| OptList ',' OPTIONAL '@' IdentName AsType { hb_compVariableAdd( $5, hb_comp_cVarType + VT_OFFSET_OPTIONAL + VT_OFFSET_BYREF ); }
;
| ',' OPTIONAL '@' IdentName AsType { hb_compVariableAdd( $4, hb_comp_cVarType + VT_OFFSET_OPTIONAL + VT_OFFSET_BYREF ); }
| OptList ',' OPTIONAL IdentName AsType { hb_compVariableAdd( $4, hb_comp_cVarType + VT_OFFSET_OPTIONAL ); }
| OptList ',' OPTIONAL '@' IdentName AsType { hb_compVariableAdd( $5, hb_comp_cVarType + VT_OFFSET_OPTIONAL + VT_OFFSET_BYREF ); }
;
ExecFlow : IfEndif
| DoCase

View File

@@ -94,6 +94,7 @@ void hb_compPrintCredits( void )
"Credits: The Harbour Team at www.harbour-project.org\n"
"\n"
"April White <awhite@user.rose.com>\n"
"Alejandro de Garate <alex_degarate@hotmail.com>\n"
"Alexander S. Kresin <alex@belacy.belgorod.su>\n"
"Andi Jahja <andij@aonlippo.co.id>\n"
"Antonio Linares <alinares@fivetech.com>\n"

View File

@@ -41,7 +41,7 @@
#xcommand SEPARATOR => TDbMenu():AddItem( TDbMenuItem():New( "-" ) )
#xcommand ENDMENU => ATail( TDbMenu():aMenus ):Build()
function BuildMenu( oDebugger ) // Builds the debugger pulldown menu
function __dbgBuildMenu( oDebugger ) // Builds the debugger pulldown menu
local oMenu

View File

@@ -372,7 +372,7 @@ METHOD ProcessKey( nKey ) CLASS TDbMenu
::GoBottom()
otherwise
if ( nPopup := ::GetHotKeyPos( AltToKey_debugger( nKey ) ) ) != 0
if ( nPopup := ::GetHotKeyPos( __dbgAltToKey( nKey ) ) ) != 0
if nPopup != ::nOpenPopup
::Close()
::ShowPopup( nPopup )
@@ -413,7 +413,7 @@ METHOD Display( cClrText, cClrHotKey ) CLASS TDbMenuItem
return nil
function AltToKey_debugger( nKey )
function __dbgAltToKey( nKey )
local nIndex := AScan( { K_ALT_A, K_ALT_B, K_ALT_C, K_ALT_D, K_ALT_E, K_ALT_F,;
K_ALT_G, K_ALT_H, K_ALT_I, K_ALT_J, K_ALT_K, K_ALT_L,;

View File

@@ -165,7 +165,7 @@ METHOD New() CLASS TDebugger
::aWindows := {}
::nCurrentWindow := 1
::cClrDialog := "N/W"
::oPullDown := BuildMenu( Self )
::oPullDown := __dbgBuildMenu( Self )
::oWndCode := TDbWindow():New( 1, 0, MaxRow() - 6, MaxCol(),, "BG+/B" )
::oWndCode:bKeyPressed := { | nKey | ::CodeWindowProcessKey( nKey ) }
@@ -421,7 +421,7 @@ METHOD HandleEvent() CLASS TDebugger
::oWndCommand:KeyPressed( nKey )
otherwise
if ( nPopup := ::oPullDown:GetHotKeyPos( AltToKey_debugger( nKey ) ) ) != 0
if ( nPopup := ::oPullDown:GetHotKeyPos( __dbgAltToKey( nKey ) ) ) != 0
if ::oPullDown:nOpenPopup != nPopup
SetCursor( SC_NONE )
::oPullDown:ShowPopup( nPopup )

View File

@@ -390,20 +390,6 @@ static COMMANDS sC___237 = {0,"SET","ORDER TO \1A00 [IN \1B40]","ordSetFocus( \1
static COMMANDS sC___238 = {0,"SET","ORDER TO TAG \1A40 [IN \1B40]","ordSetFocus( \1A30 [, \1B30] )",&sC___237 };
static COMMANDS sC___239 = {0,"SET","ORDER TO","ordSetFocus(0)",&sC___238 };
/*
static COMMANDS sC___240 = {0,"STRUCTURE","\1A00 \1B00 \1C20:AS CLASS,AS STRUCTURE,AS STRU,AS ARRAY OF,AS> \1D00 [, \1E00 \1F20:AS CLASS,AS STRUCTURE,AS STRU,AS ARRAY OF,AS> \1G00 ]","STATIC __\1A00 := {|| IF(__\1A00 == NIL, , ) ,hb_structure( \1A20, { \1B20 [, \1E20] } )} ; DECLARE \1A00 \1B00 \1C00 \1D00 [ \1E00 \1F00 \1G00 ] ; #translate AS NEW \1A00 => AS CLASS \1A00 := ( Eval(__\1A00), hb_Structure( \1A20 ) )",&sC___239 };
*/
/*
#COMMAND STRUCTURE <StruName> <Var1> <x1:AS CLASS,AS STRUCTURE,AS STRU,AS ARRAY OF,AS> <Type1> [, <VarN> <xN:AS CLASS,AS STRUCTURE,AS STRU,AS ARRAY OF,AS> <TypeN> ] => ;
STATIC __<StruName> := {|| IF( __<StruName> == NIL, , ) , HB_Structure( <"StruName">, { <"Var1"> [, <"VarN">] } )} ;;
DECLARE <StruName> <Var1> <x1> <Type1> [ <VarN> <xN> <TypeN> ] ;;
#TRANSLATE AS NEW <StruName> => AS STRUCTURE <StruName> := ( Eval( __<StruName> ), HB_Structure( <"StruName"> ) )
*/
/*
static COMMANDS sT___1 = {0,"AS","NEW \1A00","AS CLASS \1A00 := \1A00():New()",NULL };
*/
COMMANDS * hb_pp_topCommand = &sC___239 /*&sC___240*/;
COMMANDS * hb_pp_topTranslate = NULL /*&sT___1*/;

View File

@@ -141,7 +141,10 @@ PRG_SOURCES=\
tget.prg \
tgetlist.prg \
tlabel.prg \
tmenuitm.prg \
tpopup.prg \
treport.prg \
ttopbar.prg \
typefile.prg \
wait.prg \

View File

@@ -942,7 +942,7 @@ BOOL hb_fsLock ( FHANDLE hFileHandle, ULONG ulStart,
/* TODO: check for append locks (SEEK_END)
*/
struct flock lock_info;
switch( uiMode )
{
case FL_LOCK:
@@ -975,7 +975,7 @@ BOOL hb_fsLock ( FHANDLE hFileHandle, ULONG ulStart,
default:
iResult = 0;
}
}
}
s_uiErrorLast = errno;
#else
@@ -993,9 +993,9 @@ void hb_fsCommit( FHANDLE hFileHandle )
HB_TRACE(HB_TR_DEBUG, ("hb_fsCommit(%p)", hFileHandle));
#if defined(__WATCOMC__)
_dos_commit( hFileHandle );
#elif defined(HB_FS_FILE_IO) && !defined(HB_OS_OS2) && !defined(HB_OS_UNIX)
{
@@ -1027,18 +1027,18 @@ void hb_fsCommit( FHANDLE hFileHandle )
* original or duplicated file handle
*/
#if defined(_POSIX_SYNCHRONIZED_IO)
/* faster - flushes data buffers only, without updating directory info
/* faster - flushes data buffers only, without updating directory info
*/
if( fdatasync( hFileHandle ) < -1 )
#else
/* slower - flushes all file data buffers and i-node info
/* slower - flushes all file data buffers and i-node info
*/
if( fsync( hFileHandle ) < -1 )
#endif
s_uiErrorLast = FS_ERROR; /* failure */
s_uiErrorLast = FS_ERROR; /* failure */
else
s_uiErrorLast = 0;
#else
s_uiErrorLast = FS_ERROR;

View File

@@ -65,7 +65,7 @@ static void hb_gt_Initialize_Terminal( void )
int backg, foreg;
/* NOTE: color order=
DOS style -> ncurses style
--------------------------------
--------------------------------
0 black 0-> COLOR_BLACK
1 blue 4-> COLOR_RED
2 green 2-> COLOR_GREEN
@@ -74,31 +74,31 @@ static void hb_gt_Initialize_Terminal( void )
5 magenta 5-> COLOR_MAGENTA
6 yellow 3-> COLOR_CYAN
7 light gray 7-> COLOR_WHITE
8 gray 0-> BOLD BLACK
9 light blue 4-> BOLD RED
10 light green 2-> BOLD GREEN
11 light cyan 6-> BOLD YELLOW
12 light red 1-> BOLD BLUE
13 light magenta 5-> BOLD MAGENTA
14 light yellow 3-> BOLD CYAN
15 white 7-> BOLD WHITE
8 gray 0-> BOLD BLACK
9 light blue 4-> BOLD RED
10 light green 2-> BOLD GREEN
11 light cyan 6-> BOLD YELLOW
12 light red 1-> BOLD BLUE
13 light magenta 5-> BOLD MAGENTA
14 light yellow 3-> BOLD CYAN
15 white 7-> BOLD WHITE
*/
static char color_map[] = { 0, 4, 2, 6, 1, 5, 3, 7 };
start_color();
for( backg=0; backg<COLORS; backg++ )
for( foreg=0; foreg<COLORS; foreg++ )
init_pair( backg*COLORS+foreg, color_map[foreg], color_map[backg] );
init_pair( backg*COLORS+foreg, color_map[foreg], color_map[backg] );
for( i=0; i<256; i++ )
{
backg = ( i >> 4 ) & 0x07; /* bits 4-6, bit 7 is blinking attribute */
foreg = ( i & 0x07 );
s_attribmap_table[ i ] = COLOR_PAIR( backg*COLORS + foreg );
if( i & 0x08 )
s_attribmap_table[ i ] |= A_BOLD; /* 4-th bit is an intensity bit */
if( i & 0x80 )
s_attribmap_table[ i ] |= A_BLINK; /* 7-th bit is blinking bit */
foreg = ( i & 0x07 );
s_attribmap_table[ i ] = COLOR_PAIR( backg*COLORS + foreg );
if( i & 0x08 )
s_attribmap_table[ i ] |= A_BOLD; /* 4-th bit is an intensity bit */
if( i & 0x80 )
s_attribmap_table[ i ] |= A_BLINK; /* 7-th bit is blinking bit */
}
}
@@ -383,7 +383,7 @@ void hb_gt_SetAttribute( USHORT uiTop,
c &= (A_CHARTEXT | A_ALTCHARSET);
/* set new attribute */
c |= newAttr;
if (addch(c) == ERR) /* Stop on error */
if (addch(c) == ERR) /* Stop on error */
return;
}
uiTop++;
@@ -611,13 +611,13 @@ USHORT hb_gt_Box( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight,
if( s_under_xterm )
{
/* enable temporarily for box drawing
/* enable temporarily for box drawing
NOTE: under xterm characcters with ASCII code 96 - 124 are
used for special characters
used for special characters
*/
s_alternate_char_set = A_ALTCHARSET;
}
uiRow = uiTop;
uiCol = uiLeft;
@@ -684,7 +684,7 @@ USHORT hb_gt_BoxD( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight,
if( s_under_xterm )
{
/* Under xterm use hard-coded box drawing characters */
pbyFrame = s_xTermBox;
pbyFrame = s_xTermBox;
s_alternate_char_set = A_ALTCHARSET;
}
hb_gt_Box( uiTop, uiLeft, uiBottom, uiRight, pbyFrame, byAttr );
@@ -700,7 +700,7 @@ USHORT hb_gt_BoxS( USHORT uiTop, USHORT uiLeft, USHORT uiBottom, USHORT uiRight,
if( s_under_xterm )
{
/* Under xterm use hard-coded box drawing characters */
pbyFrame = s_xTermBox;
pbyFrame = s_xTermBox;
s_alternate_char_set = A_ALTCHARSET;
}
hb_gt_Box( uiTop, uiLeft, uiBottom, uiRight, pbyFrame, byAttr );
@@ -715,12 +715,12 @@ USHORT hb_gt_HorizLine( USHORT uiRow, USHORT uiLeft, USHORT uiRight, BYTE byChar
{
if( s_under_xterm )
byChar = ACS_HLINE;
if( uiLeft < uiRight )
mvhline( uiRow, uiLeft, byChar | A_ALTCHARSET | s_attribmap_table[ byAttr ],
uiRight - uiLeft + 1 );
else
mvhline( uiRow, uiRight, byChar | A_ALTCHARSET | s_attribmap_table[ byAttr ],
mvhline( uiRow, uiRight, byChar | A_ALTCHARSET | s_attribmap_table[ byAttr ],
uiLeft - uiRight + 1 );
return 0;
}
@@ -736,11 +736,11 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
uRow = uiBottom;
uiBottom = uiTop;
}
if( s_under_xterm )
byChar = ACS_VLINE;
mvvline( uRow, uiCol, byChar | A_ALTCHARSET | s_attribmap_table[ byAttr ],
uiBottom - uRow + 1 );
return 0;
}

View File

@@ -50,7 +50,7 @@ static void hb_gt_Add_terminfo_keymap( int, char * );
static void hb_gt_Add_keymap( int, char * );
/* max number of characters in a keymapped string */
#define HB_MAX_KEYMAP_CHARS 16
#define HB_MAX_KEYMAP_CHARS 16
struct key_map_struc
{
@@ -69,7 +69,7 @@ static int s_mouse_event_len;
void hb_gt_Initialize_Keyboard( void )
{
int i;
HB_TRACE(HB_TR_DEBUG, ("hb_gt_Initialize_Keyboard()"));
/* Initialize keycode table */
@@ -77,7 +77,7 @@ void hb_gt_Initialize_Keyboard( void )
s_keymap_table[ i ] = NULL;
s_under_xterm = !strncmp( getenv("TERM"), "xterm", 5 );
if( s_under_xterm )
if( s_under_xterm )
{
/* NOTE: under xterm \E[M is used as a leading code for a mouse event
Events are as follows:
@@ -105,7 +105,7 @@ void hb_gt_Initialize_Keyboard( void )
*/
s_mouse_event_len = 0;
}
hb_gt_Add_terminfo_keymap( K_ENTER, "kent" );
hb_gt_Add_terminfo_keymap( K_ENTER, "ind" );
hb_gt_Add_terminfo_keymap( K_TAB, "ht" );
@@ -221,7 +221,7 @@ void hb_gt_Exit_Keyboard( void )
{
int i, k;
struct key_map_struc *tmp;
HB_TRACE(HB_TR_DEBUG, ("hb_kbd_Exit()"));
for( i = 0; i < HB_HASH_KEY; i++ )
@@ -232,7 +232,7 @@ void hb_gt_Exit_Keyboard( void )
{
s_keymap_table[ i ] = tmp->Next;
hb_xfree( tmp );
tmp = s_keymap_table[ i ];
tmp = s_keymap_table[ i ];
k++;
}
}
@@ -263,15 +263,15 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
if( ch == 3 )
{
/* Ctrl-C was pressed */
ch = HB_BREAK_FLAG;
ch = HB_BREAK_FLAG;
}
else
{
int i = 0;
int i = 0;
BYTE sum;
key_codes[ 0 ] = sum = ch;
while( ( ch = getch() ) != ERR && i <= HB_MAX_KEYMAP_CHARS )
key_codes[ 0 ] = sum = ch;
while( ( ch = getch() ) != ERR && i <= HB_MAX_KEYMAP_CHARS )
{
key_codes[ ++i ] = ch;
/*fprintf( stderr, "key%i=%i(%c)\n", i, ch, ch );
@@ -279,7 +279,7 @@ fflush( stderr );
*/
sum += ch;
}
key_codes[ ++i ] = 0;
key_codes[ ++i ] = 0;
sum &= HB_HASH_KEY - 1;
ch = 0;
@@ -287,23 +287,23 @@ fflush( stderr );
{
/* there is an entry in the hash table */
struct key_map_struc *tmp = s_keymap_table[ sum ];
while( (ch == 0) && tmp )
{
/* now look for exact match */
if( (i == tmp->length) && (memcmp( tmp->key_string, key_codes, i ) == 0 ) )
{
ch = tmp->inkey_code; /* keycode found */
ch = tmp->inkey_code; /* keycode found */
tmp = NULL; /* NOTE: tmp->inkey_code can be set to 0 */
}
else
tmp = tmp->Next;
}
}
if( ch == 0 )
{
{
if( s_mouse_event_len )
{
/* check for mouse event */
@@ -318,10 +318,10 @@ fflush( stderr );
ch = key_codes[ 0 ];
else
{
key_waiting = 0; /* return raw key sequence */
key_waiting = 0; /* return raw key sequence */
ch = K_HB_KEYCODES;
}
}
}
}
}
return ch;
@@ -334,14 +334,14 @@ static void hb_gt_Add_keymap( int InkeyCode, char *key_string )
int iLength = strlen( key_string );
int i = 0;
BYTE sum = 0;
if( iLength && iLength <= HB_MAX_KEYMAP_CHARS )
{
while( i < iLength )
sum += key_string[ i++ ];
sum &= HB_HASH_KEY-1;
keymap = hb_xgrab( sizeof( struct key_map_struc ) );
keymap->inkey_code = InkeyCode;
keymap->key_string = key_string;

View File

@@ -44,6 +44,19 @@
* Copyright 1999 David G. Holm <dholm@jsd-llc.com>
* hb_gt_ReadKey()
*
* Copyright 2000 Alejandro de Garate <alex_degarate@hotmail.com>
* vmode12x40()
* vmode25x40()
* vmode28x40()
* vmode50x40()
* vmode12x80()
* vmode25x80()
* vmode28x80()
* vmode43x80()
* vmode50x80()
* hb_gt_SetMode()
* hb_gt_GetDisplay()
*
* See doc/license.txt for licensing terms.
*
*/
@@ -1161,233 +1174,118 @@ USHORT hb_gt_VertLine( USHORT uiCol, USHORT uiTop, USHORT uiBottom, BYTE byChar,
return 0;
}
/*
* Copyright 2000 Alejandro de Garate <alex_degarate@hotmail.com>
* vmode12x40()
* vmode25x40()
* vmode28x40()
* vmode50x40()
* vmode12x80()
* vmode25x80()
* vmode28x80()
* vmode43x80()
* vmode50x80()
* hb_gt_SetMode()
* hb_gt_GetDisplay()
*/
/* some definitions */
#define INT_VIDEO 0x10
#if defined(__DJGPP__)
#define POKE_BYTE(s,o,b) /* Do nothing */
#define POKE_BYTE( s, o, b ) /* Do nothing */
#else
#define POKE_BYTE(s,o,b) (*((BYTE FAR *)MK_FP((s),(o)) )=(BYTE)(b))
#define POKE_BYTE( s, o, b ) (*((BYTE FAR *)MK_FP((s),(o)) )=(BYTE)(b))
#endif
/* some prototypes */
BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols );
static void vmode12x40( void );
static void vmode25x40( void );
static void vmode28x40( void );
static void vmode50x40( void );
static void vmode12x80( void );
static void vmode25x80( void );
static void vmode28x80( void );
static void vmode43x80( void );
static void vmode50x80( void );
static USHORT hb_gt_GetDisplay( void );
BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
{
/* hb_gt_IsColor() test for color card, we need to know if it is a VGA board...*/
BOOL bIsVGA = (hb_gt_GetDisplay() == 8 ) ? 1 : 0;
BOOL bIsVesa = FALSE;
USHORT bSuccess = FALSE;
HB_TRACE( HB_TR_DEBUG, ("hb_gt_SetMode(%hu, %hu)", usRows, usCols) );
/* Available modes in B&N and color screens */
if( uiCols == 40) {
if( uiRows == 12)
vmode12x40();
if( uiRows == 25)
vmode25x40();
if( uiRows == 28)
vmode28x40();
if( uiRows == 50)
vmode50x40();
} /* endif */
if (bIsVGA) {
if( uiCols == 80) {
if( uiRows == 12)
vmode12x80();
if( uiRows == 25)
vmode25x80();
if( uiRows == 28)
vmode28x80();
if( uiRows == 43)
vmode43x80();
if( uiRows == 50)
vmode50x80();
}/* cols=80 */
if( uiCols > 80 && bIsVesa ) {
/* In development process
* return( hb_gt_Modevesa( nMode) );
*/
}
} /* endif bIsVGA */
/* Check for succesful */
if( (hb_gtMaxRow() == uiRows -1) && ( hb_gtMaxCol() == uiCols -1) )
{
bSuccess = TRUE;
} else {
vmode25x80();
bSuccess = FALSE;
} /* endif */
return( bSuccess );
}
void vmode12x40( void )
static void vmode12x40( void )
{
union REGS regs;
regs.x.ax = 0x0001; /* video mode 40 cols */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
outportb( 0x03D4, 0x09 ); /* update cursor size / pointers */
outportb( 0x03D4, 0x09 ); /* update cursor size / pointers */
regs.h.al = ( inportb( 0x03D5 ) | 0x80 );
outportb( 0x03D5, regs.h.al );
POKE_BYTE( 0x40, 0x84, 11); /* 11 rows number update */
return;
POKE_BYTE( 0x40, 0x84, 11); /* 11 rows number update */
}
void vmode25x40( void )
static void vmode25x40( void )
{
union REGS regs;
regs.x.ax = 0x0001;
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
return;
}
void vmode28x40( void )
static void vmode28x40( void )
{
union REGS regs;
regs.x.ax = 0x0001; /* video mode 40 cols */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.ax = 0x1111; /* load 8x8 monochrome char set into RAM */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
return;
}
void vmode50x40( void )
static void vmode50x40( void )
{
union REGS regs;
regs.x.ax = 0x0001;
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.ax = 0x1112; /* load 8x8 double dot char set into RAM */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
outport( 0x03D4, 0x060A );
return;
}
void vmode12x80( void )
static void vmode12x80( void )
{
union REGS regs;
regs.x.ax = 0x0003; /* mode in AL, if bit 7 is on, No CLS */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
outportb( 0x03D4, 0x09 ); /* update cursor size / pointers */
outportb( 0x03D4, 0x09 ); /* update cursor size / pointers */
regs.h.al = ( inportb( 0x03D5 ) | 0x80 );
outportb( 0x03D5, regs.h.al );
POKE_BYTE( 0x40, 0x84, 11); /* 11 rows number update */
return;
POKE_BYTE( 0x40, 0x84, 11); /* 11 rows number update */
}
void vmode25x80( void )
static void vmode25x80( void )
{
union REGS regs;
regs.x.ax = 0x1202; /* select 350 scan line mode */
regs.x.ax = 0x1202; /* select 350 scan line mode */
regs.h.bl = 0x30;
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.ax = 0x0083; /* mode in AL, if higher bit is on, No CLS */
regs.x.ax = 0x0083; /* mode in AL, if higher bit is on, No CLS */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.ax = 0x1114; /* load 8x14 VGA char set into RAM */
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.ax = 0x1114; /* load 8x14 VGA char set into RAM */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
return;
}
void vmode28x80( void )
static void vmode28x80( void )
{
union REGS regs;
regs.x.ax = 0x0003; /* mode in AL, if higher bit is on, No CLS */
regs.x.ax = 0x0003; /* mode in AL, if higher bit is on, No CLS */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.ax = 0x1111; /* load 8x8 monochrome char set into RAM */
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.ax = 0x1111; /* load 8x8 monochrome char set into RAM */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
return;
}
void vmode43x80( void )
static void vmode43x80( void )
{
union REGS regs;
regs.x.ax = 0x1201; /* select 350 scan line mode */
regs.x.ax = 0x1201; /* select 350 scan line mode */
regs.h.bl = 0x30;
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.ax = 0x0003; /* mode in AL, if higher bit is on, No CLS */
regs.x.ax = 0x0003; /* mode in AL, if higher bit is on, No CLS */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.h.bh = 0x1; /* bytes per character */
regs.h.bl = 0x0; /* load block 0 */
regs.x.ax = 0x1112; /* load 8x8 double dot char set into RAM */
regs.h.bh = 0x1; /* bytes per character */
regs.h.bl = 0x0; /* load block 0 */
regs.x.ax = 0x1112; /* load 8x8 double dot char set into RAM */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
outport( 0x03D4, 0x060A ); /* update cursor size / pointers */
POKE_BYTE( 0x40, 0x84, 42); /* 42 rows number update */
return;
outport( 0x03D4, 0x060A ); /* update cursor size / pointers */
POKE_BYTE( 0x40, 0x84, 42); /* 42 rows number update */
}
void vmode50x80( void )
static void vmode50x80( void )
{
union REGS regs;
regs.x.ax = 0x1202; /* select 400 scan line mode */
regs.x.ax = 0x1202; /* select 400 scan line mode */
regs.h.bl = 0x30;
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.ax = 0x0003; /* mode in AL, if bit 7 is on, No CLS */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.bx = 0; /* load block 0 (BL = 0) */
regs.x.ax = 0x1112; /* load 8x8 double dot char set into RAM */
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
return;
}
USHORT hb_gt_GetDisplay( void )
/*~**************************************************************************
/***************************************************************************
* Return the display combination: monitor + video card
*
* INT 10 - VIDEO - GET DISPLAY COMBINATION CODE (PS,VGA/MCGA)
@@ -1410,17 +1308,84 @@ USHORT hb_gt_GetDisplay( void )
* 0Ah MCGA w/ digital color display
* 0Bh MCGA w/ monochrome analog display
* 0Ch MCGA w/ color analog display
* FFh unknown display type>
* FFh unknown display type
****************************************************************************/
{
union REGS inregs, outregs;
USHORT uiDisplay;
inregs.x.ax = 0x1A00;
HB_DOS_INT86( INT_VIDEO, &inregs, &outregs);
if (outregs.h.al == 0x1A)
uiDisplay = outregs.h.bl;
else
uiDisplay = 0xFF;
return( uiDisplay );
static USHORT hb_gt_GetDisplay( void )
{
union REGS regs;
regs.x.ax = 0x1A00;
HB_DOS_INT86( INT_VIDEO, &regs, &regs);
return ( regs.h.al == 0x1A ) ? regs.h.bl : 0xFF;
}
BOOL hb_gt_SetMode( USHORT uiRows, USHORT uiCols )
{
/* hb_gt_IsColor() test for color card, we need to know if it is a VGA board...*/
BOOL bIsVGA = ( hb_gt_GetDisplay() == 8 );
BOOL bIsVesa = FALSE;
USHORT bSuccess = FALSE;
HB_TRACE( HB_TR_DEBUG, ("hb_gt_SetMode(%hu, %hu)", usRows, usCols) );
/* Available modes in B&N and color screens */
if( uiCols == 40 )
{
if( uiRows == 12 )
vmode12x40();
if( uiRows == 25 )
vmode25x40();
if( uiRows == 28 )
vmode28x40();
if( uiRows == 50 )
vmode50x40();
}
if( bIsVGA )
{
if( uiCols == 80)
{
if( uiRows == 12 )
vmode12x80();
if( uiRows == 25 )
vmode25x80();
if( uiRows == 28 )
vmode28x80();
if( uiRows == 43 )
vmode43x80();
if( uiRows == 50 )
vmode50x80();
}
if( uiCols > 80 && bIsVesa )
{
/* In development process
* return( hb_gt_Modevesa( nMode) );
*/
}
}
/* Check for succesful */
if( ( hb_gtMaxRow() == uiRows - 1 ) &&
( hb_gtMaxCol() == uiCols - 1 ) )
{
bSuccess = TRUE;
}
else
{
vmode25x80();
bSuccess = FALSE;
}
return bSuccess;
}

View File

@@ -34,439 +34,312 @@
*/
/*
Either way you have to clean up the memory on exit. The best way to
do this is to add a hb_setkeyInit() and hb_setkeyExit() function
and call them from CONSOLE.C Init/Exit functions.
Either way you have to clean up the memory on exit. The best way to
do this is to add a hb_setkeyInit() and hb_setkeyExit() function
and call them from CONSOLE.C Init/Exit functions.
*/
#include "hbvm.h"
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbapierr.h"
#include "hbapigt.h"
#define SK_NO_RETURN FALSE
#define SETKEY_ERRORS
typedef struct SetKey_S
typedef struct HB_SETKEY_
{
SHORT keycode;
PHB_ITEM Action;
#if defined( HB_EXTENSION )
PHB_ITEM IsActive;
#endif
struct SetKey_S *next;
} SetKey_T, *pSetKey_T;
SHORT iKeyCode;
PHB_ITEM pAction;
PHB_ITEM pIsActive;
struct HB_SETKEY_ * next;
} HB_SETKEY, * PHB_SETKEY;
pSetKey_T sk_list;
#if defined( SETKEY_ERRORS )
#define SK_ERR_NOARGS 3101
#define SK_ERR_ARGTYPE_KEY 3102
#define SK_ERR_ARGTYPE_KEYN 3103
#define SK_ERR_ARGTYPE_ACTION 3104
#define SK_ERR_ARGTYPE_ACTIVE 3105
#define SK_ERR_ARGTYPE_SKSAVE 3106
#define SK_ERR_ACTIVE_RESULTS 3107
static void sk_error( ULONG ulSubCode )
{
PHB_ITEM pResult;
char *szDescription;
switch ( ulSubCode ) {
case SK_ERR_NOARGS : szDescription = "Missing parameter(s)"; break;
case SK_ERR_ARGTYPE_KEY : szDescription = "anKey non-numeric"; break;
case SK_ERR_ARGTYPE_KEYN : szDescription = "anKey non-numeric and non-array of numbers"; break;
case SK_ERR_ARGTYPE_ACTION: szDescription = "bAction is not a code-block"; break;
case SK_ERR_ARGTYPE_ACTIVE: szDescription = "bCondition is not a code-block"; break;
case SK_ERR_ARGTYPE_SKSAVE: szDescription = "OldKeys must be return value from previous hb_SetKeySave(), or NIL"; break;
case SK_ERR_ACTIVE_RESULTS: szDescription = "bCondition returns non-logical"; break;
}
pResult = hb_errRT_BASE_Subst( EG_ARG, ulSubCode, szDescription, "SETKEY" );
if ( pResult )
{
hb_itemReturn( pResult );
hb_itemRelease( pResult );
}
}
#else
#define sk_error( n )
#endif
static PHB_SETKEY s_sk_list;
void hb_setkeyInit( void )
{
sk_list = NULL;
s_sk_list = NULL;
}
void hb_setkeyExit( void )
{
pSetKey_T sk_list_tmp;
while( s_sk_list )
{
PHB_SETKEY sk_list_tmp;
while ( sk_list != NULL )
{
hb_itemRelease( sk_list->Action );
hb_itemRelease( s_sk_list->pAction );
if( s_sk_list->pIsActive )
hb_itemRelease( s_sk_list->pIsActive );
#if defined( HB_EXTENSION )
if ( sk_list->IsActive )
hb_itemRelease( sk_list->IsActive );
#endif
sk_list_tmp = s_sk_list->next;
hb_xfree( ( void * ) s_sk_list );
s_sk_list = sk_list_tmp;
}
sk_list_tmp = sk_list->next;
hb_xfree( ( void * )sk_list );
sk_list = sk_list_tmp;
}
sk_list = NULL;
s_sk_list = NULL;
}
static pSetKey_T sk_findkey( SHORT key, pSetKey_T *sk_list_end )
static PHB_SETKEY sk_findkey( SHORT iKeyCode, PHB_SETKEY * sk_list_end )
{
pSetKey_T sk_list_tmp;
PHB_SETKEY sk_list_tmp;
*sk_list_end = NULL;
for ( sk_list_tmp = sk_list;
sk_list_tmp && sk_list_tmp->keycode != key;
*sk_list_end = NULL;
for( sk_list_tmp = s_sk_list;
sk_list_tmp && sk_list_tmp->iKeyCode != iKeyCode;
sk_list_tmp = sk_list_tmp->next )
{
*sk_list_end = sk_list_tmp;
}
*sk_list_end = sk_list_tmp;
return sk_list_tmp;
return sk_list_tmp;
}
static void sk_get( void )
static void sk_add( BOOL bReturn, SHORT iKeyCode, PHB_ITEM pAction, PHB_ITEM pIsActive )
{
pSetKey_T sk_list_tmp, sk_list_end;
PHB_ITEM pKeyCode = hb_param( 1, HB_IT_NUMERIC );
if( iKeyCode )
{
PHB_SETKEY sk_list_tmp, sk_list_end;
if ( pKeyCode )
{
/* sk_list_end is not used in this context */
sk_list_tmp = sk_findkey( hb_itemGetNI( pKeyCode ), &sk_list_end );
if ( sk_list_tmp )
{
#if defined( HB_EXTENSION )
PHB_ITEM pIsActiveResults;
if ( sk_list_tmp->IsActive != NULL )
sk_list_tmp = sk_findkey( iKeyCode, &sk_list_end );
if( sk_list_tmp == NULL )
{
pIsActiveResults = hb_vmEvalBlockV( sk_list_tmp->IsActive, 1, pKeyCode );
if ( !HB_IS_LOGICAL( pIsActiveResults ) )
sk_error( SK_ERR_ACTIVE_RESULTS );
}
else
pIsActiveResults = NULL;
if( pAction )
{
sk_list_tmp = ( PHB_SETKEY ) hb_xgrab( sizeof( HB_SETKEY ) );
sk_list_tmp->next = NULL;
sk_list_tmp->iKeyCode = iKeyCode;
sk_list_tmp->pAction = hb_itemNew( pAction );
sk_list_tmp->pIsActive = pIsActive ? hb_itemNew( pIsActive ) : NULL;
if ( pIsActiveResults == NULL ||
hb_itemGetL( pIsActiveResults ) )
{
#endif
PHB_ITEM pAction = hb_itemNew( sk_list_tmp->Action );
hb_itemReturn( pAction );
hb_itemRelease( pAction );
#if defined( HB_EXTENSION )
}
else
hb_ret();
#endif
}
}
else
{
hb_ret();
sk_error( SK_ERR_ARGTYPE_KEYN );
}
}
#if defined( HB_EXTENSION )
#define sk_addkey( r, k, a, i ) sk_add( r, k, a, i )
#else
#define sk_addkey( r, k, a, i ) sk_add( r, k, a )
#endif
static void sk_add( BOOL bReturn, SHORT nkeycode, PHB_ITEM pAction, PHB_ITEM pIsActive )
{
pSetKey_T sk_list_tmp, sk_list_end;
sk_list_tmp = sk_findkey( nkeycode, &sk_list_end );
if ( sk_list_tmp == NULL )
{
if ( bReturn )
hb_ret(); /* return a NIL */
/* if the action param is nil, and nothing found, no need to do anything */
if ( HB_IS_NIL( pAction ) )
return;
sk_list_tmp = ( pSetKey_T )hb_xgrab( sizeof( SetKey_T ) );
sk_list_tmp->next = NULL;
sk_list_tmp->keycode = nkeycode;
if ( sk_list_end == NULL )
sk_list = sk_list_tmp;
else
sk_list_end->next = sk_list_tmp;
}
else
{
if ( bReturn )
hb_itemReturn( sk_list_tmp->Action );
hb_itemRelease( sk_list_tmp->Action );
#if defined( HB_EXTENSION )
if ( sk_list_tmp->IsActive )
hb_itemRelease( sk_list_tmp->IsActive );
#endif
if ( HB_IS_NIL( pAction ) )
{
/* if this is true, then the key found is the first key in the list */
if ( sk_list_end == NULL )
{
sk_list_tmp = sk_list->next;
hb_xfree( sk_list );
sk_list = sk_list_tmp;
if( sk_list_end == NULL )
s_sk_list = sk_list_tmp;
else
sk_list_end->next = sk_list_tmp;
}
}
else
{
sk_list_end->next = sk_list_tmp->next;
hb_xfree( sk_list_tmp );
/* Return the previous value */
if( bReturn )
hb_itemReturn( sk_list_tmp->pAction );
/* Free the previous values */
hb_itemRelease( sk_list_tmp->pAction );
if( sk_list_tmp->pIsActive )
hb_itemRelease( sk_list_tmp->pIsActive );
/* Set the new values or free the entry */
if( pAction )
{
sk_list_tmp->pAction = hb_itemNew( pAction );
sk_list_tmp->pIsActive = pIsActive ? hb_itemNew( pIsActive ) : NULL;
}
else
{
/* if this is true, then the key found is the first key in the list */
if( sk_list_end == NULL )
{
sk_list_tmp = s_sk_list->next;
hb_xfree( s_sk_list );
s_sk_list = sk_list_tmp;
}
else
{
sk_list_end->next = sk_list_tmp->next;
hb_xfree( sk_list_tmp );
}
}
}
return;
}
}
sk_list_tmp->Action = hb_itemNew( pAction );
#if defined( HB_EXTENSION )
if ( pIsActive )
sk_list_tmp->IsActive = hb_itemNew( pIsActive );
else
sk_list_tmp->IsActive = NULL;
#endif
}
static void sk_set( void )
{
PHB_ITEM pKeyCode = hb_param( 1, HB_IT_ANY );
PHB_ITEM pAction = hb_param( 2, HB_IT_ANY );
#if defined( HB_EXTENSION )
PHB_ITEM pIsActive = hb_param( 3, HB_IT_BLOCK );
#endif
int nitem, nupper, nlower;
SHORT nkeycode;
if ( !HB_IS_NUMERIC( pKeyCode ) && !HB_IS_ARRAY( pKeyCode ) )
{
sk_error( SK_ERR_ARGTYPE_KEY );
return;
}
if ( !( HB_IS_NIL( pAction ) || HB_IS_BLOCK( pAction ) ) )
{
sk_error( SK_ERR_ARGTYPE_ACTION );
return;
}
#if defined( HB_EXTENSION )
if ( hb_pcount() >= 3 && pIsActive == NULL )
{
sk_error( SK_ERR_ARGTYPE_ACTIVE );
return;
}
#endif
if ( HB_IS_ARRAY( pKeyCode ) )
{
nlower = 1;
nupper = hb_arrayLen( pKeyCode );
}
else
nlower = nupper = 0;
/* use a loop to assign hot-keys - this will execute
only once if anKey [pKeyCode] is a number */
for ( nitem = nlower; nitem <= nupper; nitem++ )
{
if ( HB_IS_ARRAY( pKeyCode ) )
nkeycode = hb_itemGetNI( hb_arrayGetItemPtr( pKeyCode, nitem ) );
else
nkeycode = hb_itemGetNI( pKeyCode );
sk_addkey( ( BOOL )( nitem == nupper ), nkeycode, pAction, pIsActive );
}
}
}
HB_FUNC( SETKEY )
{
switch( hb_pcount() ) {
case 0:
sk_error( SK_ERR_NOARGS );
break;
PHB_ITEM pKeyCode = hb_param( 1, HB_IT_NUMERIC );
case 1:
sk_get();
break;
if( pKeyCode )
{
/* Get a SETKEY value */
default:
sk_set();
break;
}
if( hb_pcount() == 1 )
{
PHB_SETKEY sk_list_tmp, sk_list_end;
/* sk_list_end is not used in this context */
sk_list_tmp = sk_findkey( hb_itemGetNI( pKeyCode ), &sk_list_end );
if( sk_list_tmp )
{
#if defined( HB_EXTENSION )
PHB_ITEM pIsActiveResults = sk_list_tmp->pIsActive ? hb_vmEvalBlockV( sk_list_tmp->pIsActive, 1, pKeyCode ) : NULL;
if( pIsActiveResults == NULL || ! HB_IS_LOGICAL( pIsActiveResults ) || hb_itemGetL( pIsActiveResults ) )
{
#endif
PHB_ITEM pAction = hb_itemNew( sk_list_tmp->pAction );
hb_itemReturn( pAction );
hb_itemRelease( pAction );
#if defined( HB_EXTENSION )
}
#endif
}
}
}
else
{
/* Set a SETKEY value */
sk_add( TRUE, hb_itemGetNI( pKeyCode ),
hb_param( 2, HB_IT_BLOCK ),
#if defined( HB_EXTENSION )
hb_param( 3, HB_IT_BLOCK ) );
#else
NULL );
#endif
}
}
#if defined( HB_EXTENSION )
/* Sets the same block for an array of keycodes */
HB_FUNC( HB_SETKEYARRAY )
{
PHB_ITEM pKeyCodeArray = hb_param( 1, HB_IT_ARRAY );
if( pKeyCodeArray )
{
PHB_ITEM pAction = hb_param( 2, HB_IT_BLOCK );
PHB_ITEM pIsActive = hb_param( 3, HB_IT_BLOCK );
ULONG nLen = hb_arrayLen( pKeyCodeArray );
ULONG nPos;
for( nPos = 1; nPos <= nLen; nPos++ )
sk_add( FALSE, hb_arrayGetNI( pKeyCodeArray, nPos ), pAction, pIsActive );
}
}
HB_FUNC( HB_SETKEYGET )
{
pSetKey_T sk_list_tmp, sk_list_end;
PHB_ITEM pKeyCode = hb_param( 1, HB_IT_NUMERIC );
PHB_ITEM pIsActive = hb_param( 2, HB_IT_ANY );//HB_IT_BYREF );
PHB_ITEM pKeyCode = hb_param( 1, HB_IT_NUMERIC );
if ( pKeyCode )
{
/* sk_list_end is not used in this context */
sk_list_tmp = sk_findkey( hb_itemGetNI( pKeyCode ), &sk_list_end );
if ( sk_list_tmp )
{
hb_itemReturn( sk_list_tmp->Action );
if ( pIsActive )
hb_itemCopy( pIsActive, sk_list_tmp->IsActive );
}
}
else
{
hb_ret();
sk_error( SK_ERR_ARGTYPE_KEYN );
}
if( pKeyCode )
{
PHB_SETKEY sk_list_tmp, sk_list_end;
/* sk_list_end is not used in this context */
sk_list_tmp = sk_findkey( hb_itemGetNI( pKeyCode ), &sk_list_end );
if( sk_list_tmp )
{
PHB_ITEM pIsActive = hb_param( 2, HB_IT_ANY );
hb_itemReturn( sk_list_tmp->pAction );
if( pIsActive )
hb_itemCopy( pIsActive, sk_list_tmp->pIsActive );
}
}
}
HB_FUNC( HB_SETKEYSAVE )
{
PHB_ITEM pKeys, pParam;
pSetKey_T sk_list_tmp;
ULONG itemcount, nitem;
PHB_ITEM pKeys, pParam;
PHB_SETKEY sk_list_tmp;
ULONG itemcount, nitem;
/* build an multi-dimensional array from existing hot-keys, and return it */
/* build an multi-dimensional array from existing hot-keys, and return it */
/* count the number of items in the list */
for ( itemcount = 0, sk_list_tmp = sk_list;
/* count the number of items in the list */
for( itemcount = 0, sk_list_tmp = s_sk_list;
sk_list_tmp;
itemcount++, sk_list_tmp = sk_list_tmp->next )
;
;
pKeys = hb_itemArrayNew( itemcount );
pKeys = hb_itemArrayNew( itemcount );
for ( nitem = 1, sk_list_tmp = sk_list;
for( nitem = 1, sk_list_tmp = s_sk_list;
nitem <= itemcount;
nitem++, sk_list_tmp = sk_list_tmp->next )
{
PHB_ITEM pKeyElements, pTmp;
{
PHB_ITEM pKeyElements, pTmp;
pKeyElements = hb_itemArrayNew( 3 );
pKeyElements = hb_itemArrayNew( 3 );
pTmp = hb_itemPutNI( NULL, sk_list_tmp->keycode );
hb_itemArrayPut( pKeyElements, 1, pTmp );
hb_itemRelease( pTmp );
pTmp = hb_itemNew( sk_list_tmp->Action );
hb_itemArrayPut( pKeyElements, 2, pTmp );
hb_itemRelease( pTmp );
if ( sk_list_tmp->IsActive )
{
pTmp = hb_itemNew( sk_list_tmp->IsActive );
hb_itemArrayPut( pKeyElements, 3, pTmp );
pTmp = hb_itemPutNI( NULL, sk_list_tmp->iKeyCode );
hb_itemArrayPut( pKeyElements, 1, pTmp );
hb_itemRelease( pTmp );
}
hb_itemArrayPut( pKeys, nitem, pKeyElements );
hb_itemRelease( pKeyElements );
}
pTmp = hb_itemNew( sk_list_tmp->pAction );
hb_itemArrayPut( pKeyElements, 2, pTmp );
hb_itemRelease( pTmp );
hb_itemReturn( pKeys );
hb_itemRelease( pKeys );
pParam = hb_param( 1, HB_IT_ANY );
if ( pParam != NULL )
{
hb_setkeyExit(); /* destroy the internal list */
if ( HB_IS_ARRAY( pParam ) )
{
itemcount = hb_arrayLen( pParam );
for ( nitem = 1; nitem <= itemcount; nitem++ )
if( sk_list_tmp->pIsActive )
{
PHB_ITEM itmKeyElements, itmKeyCode, itmAction, itmIsActive;
itmKeyElements = hb_arrayGetItemPtr( pParam, nitem );
itmKeyCode = hb_arrayGetItemPtr( itmKeyElements, 1 );
itmAction = hb_arrayGetItemPtr( itmKeyElements, 2 );
itmIsActive = hb_arrayGetItemPtr( itmKeyElements, 3 );
sk_addkey( SK_NO_RETURN, ( SHORT )hb_itemGetNI( itmKeyCode ), itmAction, itmIsActive );
pTmp = hb_itemNew( sk_list_tmp->pIsActive );
hb_itemArrayPut( pKeyElements, 3, pTmp );
hb_itemRelease( pTmp );
}
}
else if ( !HB_IS_NIL( pParam ) )
sk_error( SK_ERR_ARGTYPE_SKSAVE );
}
hb_itemArrayPut( pKeys, nitem, pKeyElements );
hb_itemRelease( pKeyElements );
}
hb_itemReturn( pKeys );
hb_itemRelease( pKeys );
pParam = hb_param( 1, HB_IT_ANY );
if( pParam )
{
hb_setkeyExit(); /* destroy the internal list */
if( HB_IS_ARRAY( pParam ) )
{
itemcount = hb_arrayLen( pParam );
for( nitem = 1; nitem <= itemcount; nitem++ )
{
PHB_ITEM itmKeyElements = hb_arrayGetItemPtr( pParam, nitem );
sk_add( FALSE, ( SHORT ) hb_arrayGetNI( itmKeyElements, 1 ),
hb_arrayGetItemPtr( itmKeyElements, 2 ),
hb_arrayGetItemPtr( itmKeyElements, 3 ) );
}
}
}
}
HB_FUNC( HB_SETKEYCHECK )
{
pSetKey_T sk_list_tmp, sk_list_end;
PHB_ITEM pKeyCode = hb_param( 1, HB_IT_NUMERIC ), pIsActiveResults;
BOOL IsKeySet = FALSE;
PHB_ITEM pKeyCode = hb_param( 1, HB_IT_NUMERIC );
BOOL bIsKeySet = FALSE;
if ( pKeyCode )
{
/* sk_list_end is not used in this context */
sk_list_tmp = sk_findkey( hb_itemGetNI( pKeyCode ), &sk_list_end );
if ( sk_list_tmp )
{
if ( sk_list_tmp->IsActive == NULL )
IsKeySet = TRUE;
else
if( pKeyCode )
{
PHB_SETKEY sk_list_tmp, sk_list_end;
/* sk_list_end is not used in this context */
sk_list_tmp = sk_findkey( hb_itemGetNI( pKeyCode ), &sk_list_end );
if( sk_list_tmp )
{
pIsActiveResults = hb_vmEvalBlockV( sk_list_tmp->IsActive, 1, pKeyCode );
if ( HB_IS_LOGICAL( pIsActiveResults ) )
IsKeySet = hb_itemGetL( pIsActiveResults );
else
sk_error( SK_ERR_ACTIVE_RESULTS );
PHB_ITEM pIsActiveResults = sk_list_tmp->pIsActive ? hb_vmEvalBlockV( sk_list_tmp->pIsActive, 1, pKeyCode ) : NULL;
if( pIsActiveResults == NULL || ! HB_IS_LOGICAL( pIsActiveResults ) || hb_itemGetL( pIsActiveResults ) )
{
bIsKeySet = TRUE;
switch( hb_pcount() )
{
case 1: hb_vmEvalBlockV( sk_list_tmp->pAction, 1, pKeyCode ); break;
case 2: hb_vmEvalBlockV( sk_list_tmp->pAction, 2, hb_param( 2, HB_IT_ANY ), pKeyCode ); break;
case 3: hb_vmEvalBlockV( sk_list_tmp->pAction, 3, hb_param( 2, HB_IT_ANY ), hb_param( 3, HB_IT_ANY ), pKeyCode ); break;
default: hb_vmEvalBlockV( sk_list_tmp->pAction, 4, hb_param( 2, HB_IT_ANY ), hb_param( 3, HB_IT_ANY ), hb_param( 4, HB_IT_ANY ), pKeyCode ); break;
}
}
}
}
}
else
sk_error( SK_ERR_ARGTYPE_KEYN );
}
if ( IsKeySet )
{
PHB_ITEM p2 = hb_param( 2, HB_IT_ANY );
PHB_ITEM p3 = hb_param( 3, HB_IT_ANY );
PHB_ITEM p4 = hb_param( 4, HB_IT_ANY );
// PHB_ITEM pAction = hb_itemNew( sk_list_tmp->Action );
switch( hb_pcount() ) {
case 1: hb_vmEvalBlockV( sk_list_tmp->Action /*pAction*/, 1, pKeyCode ); break;
case 2: hb_vmEvalBlockV( sk_list_tmp->Action /*pAction*/, 2, p2, pKeyCode ); break;
case 3: hb_vmEvalBlockV( sk_list_tmp->Action /*pAction*/, 3, p2, p3, pKeyCode ); break;
default: hb_vmEvalBlockV( sk_list_tmp->Action /*pAction*/, 4, p2, p3, p4, pKeyCode ); break;
}
// hb_itemRelease( pAction );
}
hb_retl( IsKeySet );
hb_retl( bIsKeySet );
}
#endif

View File

@@ -35,20 +35,24 @@
#include "common.ch"
#include "button.ch"
#include "hbsetup.ch"
#ifdef HB_COMPAT_C53
//--------------------------------------------------------------------------//
function MenuItem( cCaption, boData, nShortcut, cMsg, nID )
LOCAL oClass
if ValType( boData ) == "B" .or. ValType( boData ) == "O"
boData := if( cCaption != MENU_SEPARATOR, boData, nil )
if ISBLOCK( boData ) .or. ISOBJECT( boData )
boData := iif( cCaption != MENU_SEPARATOR, boData, nil )
endif
DEFAULT cCaption TO "", ;
boData TO nil, ;
nShortcut TO 0, ;
cMsg TO "", ;
nID TO 0
DEFAULT cCaption TO ""
DEFAULT boData TO nil
DEFAULT nShortcut TO 0
DEFAULT cMsg TO ""
DEFAULT nID TO 0
oClass := TClass():New( "MENUITEM" )
@@ -57,7 +61,7 @@ function MenuItem( cCaption, boData, nShortcut, cMsg, nID )
oClass:AddData( "checked" , FALSE )
oClass:AddData( "column" , 0 )
oClass:AddData( "data" , boData )
oClass:AddData( "enabled" , if( cCaption != MENU_SEPARATOR, TRUE, FALSE ) )
oClass:AddData( "enabled" , iif( cCaption != MENU_SEPARATOR, TRUE, FALSE ) )
oClass:AddData( "id" , nID )
oClass:AddData( "message" , cMsg )
oClass:AddData( "row" , 0 )
@@ -69,14 +73,18 @@ function MenuItem( cCaption, boData, nShortcut, cMsg, nID )
oClass:Create()
return oClass:Instance()
//--------------------------------------------------------------------------//
static function isPopUp()
LOCAL Self := QSelf()
if ValType( ::data ) == "O" .and. ::data:ClassName() == "POPUPMENU"
if ISOBJECT( ::data ) .and. ::data:ClassName() == "POPUPMENU"
return TRUE
endif
return FALSE
//--------------------------------------------------------------------------//
#endif

View File

@@ -37,6 +37,9 @@
#include "button.ch"
#include "color.ch"
#include "common.ch"
#include "hbsetup.ch"
#ifdef HB_COMPAT_C53
/* TOFIX: Harbour doesn't check if the colorSpec instance
var has always six pairs of colors. It should
@@ -57,10 +60,10 @@ function PopUp( nTop, nLeft, nBottom, nRight )
coords are initialized to -1, so the TopBar can update them
accordingly to its own position on to the screen. [jlalin]
*/
DEFAULT nTop TO -1, ;
nLeft TO -1, ;
nBottom TO 0, ;
nRight TO 0
DEFAULT nTop TO -1
DEFAULT nLeft TO -1
DEFAULT nBottom TO 0
DEFAULT nRight TO 0
oClass := TClass():New( "POPUPMENU" )
@@ -410,12 +413,12 @@ static function Display()
DispOutAt( ;
::aItems[ n ]:row + nTop + n, ::left + 1, ;
if( ::aItems[ n ]:checked, SubStr( ::aItems[ n ]:style, 1, 1 ), " " ) + ;
iif( ::aItems[ n ]:checked, SubStr( ::aItems[ n ]:style, 1, 1 ), " " ) + ;
PadR( cPrompt + " ", ::width - 4 ) + ;
if( lPopUp, SubStr( ::aItems[ n ]:style, 2, 1 ), " " ), ;
iif( lPopUp, SubStr( ::aItems[ n ]:style, 2, 1 ), " " ), ;
hb_ColorIndex( ::colorSpec, ;
if( ::aItems[ n ]:enabled, ;
if( n == ::current, CLR_ENHANCED, CLR_STANDARD ), ;
iif( ::aItems[ n ]:enabled, ;
iif( n == ::current, CLR_ENHANCED, CLR_STANDARD ), ;
CLR_UNSELECTED ) ) )
if nAt > 0
@@ -423,8 +426,8 @@ static function Display()
::aItems[ n ]:row + nTop + n, ::left + nAt + 1, ;
SubStr( cPrompt, nAt, 1 ), ;
hb_ColorIndex( ::colorSpec, ;
if( ::aItems[ n ]:enabled, ;
if( n == ::current, CLR_BACKGROUND, CLR_BORDER ), ;
iif( ::aItems[ n ]:enabled, ;
iif( n == ::current, CLR_BACKGROUND, CLR_BORDER ), ;
CLR_UNSELECTED ) ) )
endif
endif
@@ -459,3 +462,5 @@ static function SetCoors( nItem, nRow, nCol )
return Self
//--------------------------------------------------------------------------//
#endif

View File

@@ -37,6 +37,10 @@
#include "button.ch"
#include "color.ch"
#include "common.ch"
#include "inkey.ch"
#include "hbsetup.ch"
#ifdef HB_COMPAT_C53
#define HB_DEBUG_MENU_COLORS "N/BG, W+/N, GR+/BG, GR+/N, N/BG, N/BG"
@@ -93,6 +97,7 @@ function TopBar( nRow, nLeft, nRight )
endif
return oClass:Instance()
//--------------------------------------------------------------------------//
static function AddItem( oItem )
@@ -109,6 +114,7 @@ static function AddItem( oItem )
aAdd( ::aItems, oItem )
return Self
//--------------------------------------------------------------------------//
static function DelItem( nPos )
@@ -120,6 +126,7 @@ static function DelItem( nPos )
endif
return Self
//--------------------------------------------------------------------------//
static function GetFirst()
@@ -133,6 +140,7 @@ static function GetFirst()
next
return 0
//--------------------------------------------------------------------------//
static function GetItem( nPos )
@@ -144,6 +152,7 @@ static function GetItem( nPos )
endif
return oItem
//--------------------------------------------------------------------------//
static function GetLast()
@@ -157,6 +166,7 @@ static function GetLast()
next
return 0
//--------------------------------------------------------------------------//
static function GetNext()
@@ -172,6 +182,7 @@ static function GetNext()
endif
return 0
//--------------------------------------------------------------------------//
static function GetPrev()
@@ -187,6 +198,7 @@ static function GetPrev()
endif
return 0
//--------------------------------------------------------------------------//
/* NOTE: This method corrects two bugs in Cl*pper:
1) when two menuitems have the same key and the
@@ -197,7 +209,7 @@ static function GetAccel( nKey )
LOCAL Self := QSelf()
LOCAL nAt := 0
LOCAL cKey := Upper( AltToKey_debugger( nKey ) ) /* By now */
LOCAL cKey := Upper( __AltToKey( nKey ) ) /* By now */
LOCAL n
for n := 1 to ::itemCount
@@ -209,6 +221,7 @@ static function GetAccel( nKey )
next
return 0
//--------------------------------------------------------------------------//
/* NOTE: In my tests I can't get other values than HTNOWHERE or a value
greather than 0 (selected item), althought the NG's says that
@@ -233,6 +246,7 @@ static function HitTest( nRow, nCol )
endif
return HTNOWHERE
//--------------------------------------------------------------------------//
static function InsItem( nPos, oItem )
@@ -253,6 +267,7 @@ static function InsItem( nPos, oItem )
endif
return Self
//--------------------------------------------------------------------------//
static function _Select( nPos )
@@ -273,6 +288,7 @@ static function _Select( nPos )
endif
return Self
//--------------------------------------------------------------------------//
static function SetItem( nPos, oItem )
@@ -283,6 +299,7 @@ static function SetItem( nPos, oItem )
endif
return Self
//--------------------------------------------------------------------------//
static function GetShortct( nKey )
@@ -296,6 +313,7 @@ static function GetShortct( nKey )
next
return 0
//--------------------------------------------------------------------------//
static function Display()
@@ -323,15 +341,15 @@ static function Display()
::row, ::aItems[ n ]:column, ;
cPrompt, ;
hb_ColorIndex( ::colorSpec, ;
if( ::aItems[ n ]:enabled, ;
if( n == ::current, CLR_ENHANCED, CLR_STANDARD ), ;
iif( ::aItems[ n ]:enabled, ;
iif( n == ::current, CLR_ENHANCED, CLR_STANDARD ), ;
CLR_UNSELECTED ) ) )
if nAt > 0
DispOutAt( ::row, ::aItems[ n ]:column + nAt, ;
SubStr( ::aItems[ n ]:caption, nAt + 1, 1 ), ;
hb_ColorIndex( ::colorSpec, ;
if( n == ::current, CLR_BACKGROUND, CLR_BORDER ) ) )
iif( n == ::current, CLR_BACKGROUND, CLR_BORDER ) ) )
endif
if ::aItems[ n ]:isPopup()
@@ -354,3 +372,22 @@ static function Display()
return Self
//--------------------------------------------------------------------------//
static function __AltToKey( nKey )
local nIndex := AScan( { K_ALT_A, K_ALT_B, K_ALT_C, K_ALT_D, K_ALT_E, K_ALT_F,;
K_ALT_G, K_ALT_H, K_ALT_I, K_ALT_J, K_ALT_K, K_ALT_L,;
K_ALT_M, K_ALT_N, K_ALT_O, K_ALT_P, K_ALT_Q, K_ALT_R,;
K_ALT_S, K_ALT_T, K_ALT_U, K_ALT_V, K_ALT_W, K_ALT_X,;
K_ALT_Y, K_ALT_Z }, nKey )
local cKey
if nIndex > 0
cKey := SubStr( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", nIndex, 1 )
else
cKey := ""
endif
return cKey
#endif

View File

@@ -1,8 +1,8 @@
#pragma option -a1 /* byte alignment */
/*
* $Id$
*
*/
/*
* Harbour Project source code:
* Borland _INIT_ segment initialization when not using Borland C startup
*
@@ -33,6 +33,10 @@
*
*/
#if (__BORLANDC__ > 1040) /* Use this only above Borland C++ 3.1 */
#pragma option -a1 /* byte alignment */
#endif
typedef struct
{
char calltype;
@@ -54,4 +58,5 @@ void hb_vmProcessBorlandInitSegment( void )
( ( char * ) pFirst )++; /* segment alignment */
( ( char * ) pFirst )--;
}
}
}

View File

@@ -54,7 +54,7 @@ HB_FUNC( EVAL )
* hb_param() is dereferencing the passed parameters
*/
for( uiParam = 2; uiParam <= uiPCount; uiParam++ )
hb_vmPush( hb_stack.pBase + 1 + uiParam );
hb_vmPush( hb_stack.pBase + 1 + uiParam );
hb_vmDo( uiPCount - 1 );
}
else

View File

@@ -2401,18 +2401,18 @@ static void hb_vmArrayPush( void )
if( ulIndex > 0 && ulIndex <= pArray->item.asArray.value->ulLen )
{
if( pArray->item.asArray.value->uiHolders > 1 )
{
/* this is a temporary copy of an array - we can overwrite
* it with no problem
*/
{
/* this is a temporary copy of an array - we can overwrite
* it with no problem
*/
hb_arrayGet( pArray, ulIndex, pArray );
hb_stackPop();
}
else
else
{
/* this is a constant array { 1, 2, 3 } - we cannot use
* the optimization here
*/
/* this is a constant array { 1, 2, 3 } - we cannot use
* the optimization here
*/
HB_ITEM item;
hb_arrayGet( pArray, ulIndex, &item );

View File

@@ -76,10 +76,10 @@ static int hb_macroParse( HB_MACRO_PTR pMacro, char * szString )
pMacro->pCodeInfo->pPrev = NULL;
HB_TRACE(HB_TR_DEBUG, ("hb_macroParse.(%p, %s)", pMacro, szString));
pMacro->pCodeInfo->pCode = ( BYTE * ) hb_xgrab( HB_PCODE_SIZE );
/* reset the type of compiled expression - this should be filled after
* successfully compilation
*/
*/
pMacro->exprType = HB_ET_NONE;
return hb_compParse( pMacro );
@@ -669,13 +669,13 @@ char * hb_macroGetType( HB_ITEM_PTR pItem )
{
/* passed string was successfully compiled
*/
if( struMacro.exprType == HB_ET_CODEBLOCK )
{
/* Clipper ignores any undeclared symbols or UDFs if the
* compiled expression is a valid codeblock
*/
szType ="B";
}
if( struMacro.exprType == HB_ET_CODEBLOCK )
{
/* Clipper ignores any undeclared symbols or UDFs if the
* compiled expression is a valid codeblock
*/
szType ="B";
}
else if( struMacro.status & ( HB_MACRO_UNKN_SYM | HB_MACRO_UNKN_VAR) )
{
/* request for a symbol that is not in a symbol table or
@@ -819,7 +819,7 @@ ULONG hb_compGenJumpTrue( LONG lOffset, HB_MACRO_DECL )
return HB_PCODE_DATA->lPCodePos - 2;
}
/* Checks if there is a visible memvar variable
/* Checks if there is a visible memvar variable
* szVarName = variable name
*/
static void hb_compMemvarCheck( char * szVarName, HB_MACRO_DECL )
@@ -835,7 +835,7 @@ static void hb_compMemvarCheck( char * szVarName, HB_MACRO_DECL )
HB_MACRO_DATA->status |= HB_MACRO_UNKN_VAR;
HB_MACRO_DATA->status &= ~HB_MACRO_CONT; /* don't run this pcode */
}
}
}
}
/*
@@ -1018,7 +1018,7 @@ void hb_compGenPopAliasedVar( char * szVarName,
* here if passed name is either a field or a memvar
*/
hb_compMemvarGenPCode( HB_P_MPOPALIASEDVAR, szVarName, HB_MACRO_PARAM );
hb_compMemvarCheck( szVarName, HB_MACRO_PARAM );
hb_compMemvarCheck( szVarName, HB_MACRO_PARAM );
}
}

View File

@@ -76,7 +76,7 @@ PRG_SOURCES=\
inline.prg \
iotest.prg \
iotest2.prg \
langapi.prg \
langapi.prg \
longdev.prg \
longstr.prg \
longstr2.prg \
@@ -128,7 +128,7 @@ PRG_SOURCES=\
tstalias.prg \
tstasort.prg \
tstcolor.prg \
tstdbi.prg \
tstdbi.prg \
tstdspac.prg \
version.prg \
vmasort.prg \

View File

@@ -34,8 +34,6 @@
#TRANSLATE AS VARIANT =>
#COMMAND DECLARE <*x*> =>
#COMMAND STRUCTURE <*x*> =>
#endif
DECLARE nMyFunc( cVar AS STRING, @nVar AS NUMERIC ) AS NUMERIC