diff --git a/harbour/ChangeLog b/harbour/ChangeLog index b6e4da4cc2..11435d41c3 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,105 @@ +2000-05-27 23:12 UTC+0100 Victor Szakats + + * 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 * 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 +2000-05-28 02:15 UTC-0500 Paul Tucker * 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 +2000-05-22 10:40 UTC-0800 Ron Pinkas * include/hbvmpub.h * Modified HB_FS_FIRST to ( ( HB_SYMBOLSCOPE ) 0x04 ) @@ -91,8 +193,8 @@ 20000524-17:55 GMT+1 Ryszard Glab *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 @@ -247,7 +349,7 @@ DECLARE AS [ AS ] ;; #TRANSLATE AS NEW => AS CLASS := ( Eval( __ ), HB_Structure( ) ) - #TRANSLATE AS NEW => AS CLASS := ():New() + #TRANSLATE AS NEW => AS CLASS := ():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 *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 *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 *makefile.bc @@ -508,7 +610,7 @@ 20000515-17:15 GMT+1 Ryszard Glab *source/rtl/gtcrs/gtcrs.c - *fixed initialization of curses library + *fixed initialization of curses library 20000514-22:25 GMT-8 Ron Pinkas @@ -581,20 +683,20 @@ 20000514-14:55 GMT+1 Ryszard Glab *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 *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 diff --git a/harbour/contrib/hbclip/hbclip.ch b/harbour/contrib/hbclip/hbclip.ch index 993af2588c..609b1eafff 100644 --- a/harbour/contrib/hbclip/hbclip.ch +++ b/harbour/contrib/hbclip/hbclip.ch @@ -59,6 +59,8 @@ #xtranslate HB_SETKEYSAVE( [] ) => ( {} ) #xtranslate HB_SETKEYCHECK( [, [, [, ]]] ) => ( .F. ) +/* Strong typing */ + #translate AS ARRAY [OF ] => #translate AS CHAR => @@ -86,7 +88,4 @@ #translate AS VAR => #translate AS VARIANT => -#command DECLARE <*x*> => -#command STRUCTURE <*x*> => - #endif diff --git a/harbour/contrib/libgt/makefile.vc b/harbour/contrib/libgt/makefile.vc index 18c1b7b4b1..f3f98e236d 100644 --- a/harbour/contrib/libgt/makefile.vc +++ b/harbour/contrib/libgt/makefile.vc @@ -96,7 +96,7 @@ HARBOUR_EXE = $(BIN_DIR)\harbour.exe # LIBLIST = \ - $(TOOLS_LIB) \ + $(TOOLS_LIB) # # TOOLS.LIB rules diff --git a/harbour/doc/cvs_ssh.txt b/harbour/doc/cvs_ssh.txt deleted file mode 100644 index 40d4ce1740..0000000000 --- a/harbour/doc/cvs_ssh.txt +++ /dev/null @@ -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. diff --git a/harbour/doc/cvs_tips.txt b/harbour/doc/cvs_tips.txt deleted file mode 100644 index a05dd54e26..0000000000 --- a/harbour/doc/cvs_tips.txt +++ /dev/null @@ -1,84 +0,0 @@ -/* - * $Id$ - */ - -Various tips on CVS usage -========================= - -Switching from anonymous access to read/write access -==================================================== -by David G. Holm - -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 - -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 - -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. - - diff --git a/harbour/doc/depend.txt b/harbour/doc/depend.txt deleted file mode 100644 index 2c49bc7c7d..0000000000 --- a/harbour/doc/depend.txt +++ /dev/null @@ -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 diff --git a/harbour/doc/howtocvs.txt b/harbour/doc/howtocvs.txt index d649ca824d..71ec87c65e 100644 --- a/harbour/doc/howtocvs.txt +++ b/harbour/doc/howtocvs.txt @@ -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 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 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 - 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 + YYYY-MM-DD HH:MM UTC[-|+]hhmm Your Full Name + + For example: 2000-05-27 23:12 UTC+0100 Victor Szakats - 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 +1.5 Switching from anonymous access to read/write access +======================================================== +by David G. Holm + +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 + +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 + +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 + +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. + diff --git a/harbour/doc/whatsnew.txt b/harbour/doc/whatsnew.txt index b01647fd63..a85129f402 100644 --- a/harbour/doc/whatsnew.txt +++ b/harbour/doc/whatsnew.txt @@ -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 ---------------------------------------------------------------------- diff --git a/harbour/include/hbapi.h b/harbour/include/hbapi.h index 8d037540cb..c71d4ee988 100644 --- a/harbour/include/hbapi.h +++ b/harbour/include/hbapi.h @@ -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 ); diff --git a/harbour/include/hbcomp.h b/harbour/include/hbcomp.h index 2dc385de8a..276ef206fc 100644 --- a/harbour/include/hbcomp.h +++ b/harbour/include/hbcomp.h @@ -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 */ diff --git a/harbour/include/hbextern.ch b/harbour/include/hbextern.ch index 26404797ca..a4146aaee7 100644 --- a/harbour/include/hbextern.ch +++ b/harbour/include/hbextern.ch @@ -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_ */ diff --git a/harbour/makefile.bc b/harbour/makefile.bc index 0e2c05b99f..c84e668a1b 100644 --- a/harbour/makefile.bc +++ b/harbour/makefile.bc @@ -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) -+$@,, diff --git a/harbour/makefile.vc b/harbour/makefile.vc index ae15edadef..bd1a5e6a84 100644 --- a/harbour/makefile.vc +++ b/harbour/makefile.vc @@ -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 diff --git a/harbour/source/compiler/cmdcheck.c b/harbour/source/compiler/cmdcheck.c index b074a815d5..1f9b5a500b 100644 --- a/harbour/source/compiler/cmdcheck.c +++ b/harbour/source/compiler/cmdcheck.c @@ -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: diff --git a/harbour/source/compiler/harbour.c b/harbour/source/compiler/harbour.c index eef84f9f0b..b976f725f8 100644 --- a/harbour/source/compiler/harbour.c +++ b/harbour/source/compiler/harbour.c @@ -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. */ diff --git a/harbour/source/compiler/harbour.y b/harbour/source/compiler/harbour.y index 2bddb21bbd..65754363f2 100644 --- a/harbour/source/compiler/harbour.y +++ b/harbour/source/compiler/harbour.y @@ -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 diff --git a/harbour/source/compiler/hbusage.c b/harbour/source/compiler/hbusage.c index 3e619ec869..587bc4c074 100644 --- a/harbour/source/compiler/hbusage.c +++ b/harbour/source/compiler/hbusage.c @@ -94,6 +94,7 @@ void hb_compPrintCredits( void ) "Credits: The Harbour Team at www.harbour-project.org\n" "\n" "April White \n" + "Alejandro de Garate \n" "Alexander S. Kresin \n" "Andi Jahja \n" "Antonio Linares \n" diff --git a/harbour/source/debug/dbgmenu.prg b/harbour/source/debug/dbgmenu.prg index c3f60fd86c..56c46ebf82 100644 --- a/harbour/source/debug/dbgmenu.prg +++ b/harbour/source/debug/dbgmenu.prg @@ -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 diff --git a/harbour/source/debug/dbgtmenu.prg b/harbour/source/debug/dbgtmenu.prg index dc2b1bfdf8..134135ef2f 100644 --- a/harbour/source/debug/dbgtmenu.prg +++ b/harbour/source/debug/dbgtmenu.prg @@ -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,; diff --git a/harbour/source/debug/debugger.prg b/harbour/source/debug/debugger.prg index 23088dc652..e68f254c02 100644 --- a/harbour/source/debug/debugger.prg +++ b/harbour/source/debug/debugger.prg @@ -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 ) diff --git a/harbour/source/pp/pptable.c b/harbour/source/pp/pptable.c index 196aea0003..e58b8e21fa 100644 --- a/harbour/source/pp/pptable.c +++ b/harbour/source/pp/pptable.c @@ -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 [, ] => ; - STATIC __ := {|| IF( __ == NIL, , ) , HB_Structure( <"StruName">, { <"Var1"> [, <"VarN">] } )} ;; - DECLARE [ ] ;; - #TRANSLATE AS NEW => AS STRUCTURE := ( Eval( __ ), 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*/; + diff --git a/harbour/source/rtl/Makefile b/harbour/source/rtl/Makefile index 6936ff32d8..a72c309249 100644 --- a/harbour/source/rtl/Makefile +++ b/harbour/source/rtl/Makefile @@ -141,7 +141,10 @@ PRG_SOURCES=\ tget.prg \ tgetlist.prg \ tlabel.prg \ + tmenuitm.prg \ + tpopup.prg \ treport.prg \ + ttopbar.prg \ typefile.prg \ wait.prg \ diff --git a/harbour/source/rtl/filesys.c b/harbour/source/rtl/filesys.c index c085a38aab..beb0b71828 100644 --- a/harbour/source/rtl/filesys.c +++ b/harbour/source/rtl/filesys.c @@ -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; diff --git a/harbour/source/rtl/gtcrs/gtcrs.c b/harbour/source/rtl/gtcrs/gtcrs.c index dc5e0689c6..b8af800706 100644 --- a/harbour/source/rtl/gtcrs/gtcrs.c +++ b/harbour/source/rtl/gtcrs/gtcrs.c @@ -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> 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; } diff --git a/harbour/source/rtl/gtcrs/kbdcrs.c b/harbour/source/rtl/gtcrs/kbdcrs.c index f7695c048e..0553605574 100644 --- a/harbour/source/rtl/gtcrs/kbdcrs.c +++ b/harbour/source/rtl/gtcrs/kbdcrs.c @@ -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; diff --git a/harbour/source/rtl/gtdos/gtdos.c b/harbour/source/rtl/gtdos/gtdos.c index 531a4aef98..d108bc2e4e 100644 --- a/harbour/source/rtl/gtdos/gtdos.c +++ b/harbour/source/rtl/gtdos/gtdos.c @@ -44,6 +44,19 @@ * Copyright 1999 David G. Holm * hb_gt_ReadKey() * + * Copyright 2000 Alejandro de Garate + * 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 - * 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; } diff --git a/harbour/source/rtl/setkey.c b/harbour/source/rtl/setkey.c index 480c4c53b4..310ea74d5e 100644 --- a/harbour/source/rtl/setkey.c +++ b/harbour/source/rtl/setkey.c @@ -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 diff --git a/harbour/source/rtl/menuitem.prg b/harbour/source/rtl/tmenuitm.prg similarity index 83% rename from harbour/source/rtl/menuitem.prg rename to harbour/source/rtl/tmenuitm.prg index 5d8de38d6f..e08d3ecdda 100644 --- a/harbour/source/rtl/menuitem.prg +++ b/harbour/source/rtl/tmenuitm.prg @@ -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 diff --git a/harbour/source/rtl/popup.prg b/harbour/source/rtl/tpopup.prg similarity index 95% rename from harbour/source/rtl/popup.prg rename to harbour/source/rtl/tpopup.prg index 63b192ac4a..990029bac3 100644 --- a/harbour/source/rtl/popup.prg +++ b/harbour/source/rtl/tpopup.prg @@ -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 diff --git a/harbour/source/rtl/topbar.prg b/harbour/source/rtl/ttopbar.prg similarity index 91% rename from harbour/source/rtl/topbar.prg rename to harbour/source/rtl/ttopbar.prg index c21a6a289b..cd9ca70fd7 100644 --- a/harbour/source/rtl/topbar.prg +++ b/harbour/source/rtl/ttopbar.prg @@ -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 diff --git a/harbour/source/vm/borinit.c b/harbour/source/vm/borinit.c index 3a6d6e0d82..1a99e14803 100644 --- a/harbour/source/vm/borinit.c +++ b/harbour/source/vm/borinit.c @@ -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 )--; } -} \ No newline at end of file +} + diff --git a/harbour/source/vm/eval.c b/harbour/source/vm/eval.c index 4e4f437352..1a80fef7fe 100644 --- a/harbour/source/vm/eval.c +++ b/harbour/source/vm/eval.c @@ -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 diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 33d3b160c3..0e80f7bfa4 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -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 ); diff --git a/harbour/source/vm/macro.c b/harbour/source/vm/macro.c index 0d5ebbc752..e149eb3132 100644 --- a/harbour/source/vm/macro.c +++ b/harbour/source/vm/macro.c @@ -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 ); } } diff --git a/harbour/tests/Makefile b/harbour/tests/Makefile index 1804ea3742..6e95ee1504 100644 --- a/harbour/tests/Makefile +++ b/harbour/tests/Makefile @@ -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 \ diff --git a/harbour/tests/testwarn.prg b/harbour/tests/testwarn.prg index 845908a382..30611fd216 100644 --- a/harbour/tests/testwarn.prg +++ b/harbour/tests/testwarn.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