2000-05-27 23:12 UTC+0100 Victor Szakats <info@szelvesz.hu>
This commit is contained in:
@@ -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>
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -96,7 +96,7 @@ HARBOUR_EXE = $(BIN_DIR)\harbour.exe
|
||||
#
|
||||
|
||||
LIBLIST = \
|
||||
$(TOOLS_LIB) \
|
||||
$(TOOLS_LIB)
|
||||
|
||||
#
|
||||
# TOOLS.LIB rules
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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_ */
|
||||
|
||||
@@ -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) -+$@,,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,;
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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*/;
|
||||
|
||||
|
||||
@@ -141,7 +141,10 @@ PRG_SOURCES=\
|
||||
tget.prg \
|
||||
tgetlist.prg \
|
||||
tlabel.prg \
|
||||
tmenuitm.prg \
|
||||
tpopup.prg \
|
||||
treport.prg \
|
||||
ttopbar.prg \
|
||||
typefile.prg \
|
||||
wait.prg \
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void vmode28x40( void )
|
||||
static void vmode28x40( void )
|
||||
{
|
||||
union REGS regs;
|
||||
regs.x.ax = 0x0001; /* video mode 40 cols */
|
||||
HB_DOS_INT86( INT_VIDEO, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void vmode50x40( void )
|
||||
static void vmode50x40( void )
|
||||
{
|
||||
union REGS regs;
|
||||
regs.x.ax = 0x0001;
|
||||
HB_DOS_INT86( INT_VIDEO, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
regs.x.ax = 0x0003; /* mode in AL, if bit 7 is on, No CLS */
|
||||
HB_DOS_INT86( INT_VIDEO, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
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, ®s, ®s);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 )--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -34,8 +34,6 @@
|
||||
#TRANSLATE AS VARIANT =>
|
||||
|
||||
#COMMAND DECLARE <*x*> =>
|
||||
|
||||
#COMMAND STRUCTURE <*x*> =>
|
||||
#endif
|
||||
|
||||
DECLARE nMyFunc( cVar AS STRING, @nVar AS NUMERIC ) AS NUMERIC
|
||||
|
||||
Reference in New Issue
Block a user