Commit Graph

232 Commits

Author SHA1 Message Date
Przemyslaw Czerpak
5de7824e15 2007-11-12 16:09 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapifs.h
  * harbour/source/common/hbfsapi.c
    + added hb_fsMaxFilesError()

  * harbour/source/pp/ppcore.c
  * harbour/utils/hbpp/hbppcore.c
    * use hb_fsMaxFilesError() to avoid direct accessing of errno
      value - some compilers/platforms do not support errno

  * harbour/include/hbdate.h
  * harbour/source/rtl/seconds.c
    + added hb_dateMilliSeconds()

  * harbour/source/rtl/hbgtcore.c
  * harbour/source/rtl/idle.c
  * harbour/source/rtl/inkey.c
    * use hb_dateMilliSeconds() to avoid using clock_t clock()
      some compilers/platforms do not support it

  * harbour/include/hbwince.h
  * harbour/source/common/hbwince.c
    * disabled clock_t clock() emulation - it's not longer used
    + added some declarations for ANSI functions emulated by us
      for WinCE and some defines - code sent by Marek Paliwoda

  * harbour/include/hbwmain.c
  * harbour/source/vm/mainwin.c
    * always use unicode translations with WinMain() parameters for compilers
      which do not set UNICODE macro for WinCE

  * harbour/source/rtl/fserror.c
    * do not include errno.h for HB_WIN32_IO - it's not necessary

  * harbour/utils/hbver/hbverfix.c
    * do not include errno.h for _MSC_VER and HB_WINCE builds

  * harbour/contrib/libmisc/dates2.c
    - commented DATETIME() function - this was not standard DATETIME()
      value but raw ctime() function output and some compilers/platforms
      do not support ctime()

  * harbour/contrib/libnf/getenvrn.c
    + added HB_OS_WIN_32_USED

  * harbour/contrib/mtpl.mak
  * harbour/contrib/pdflib/pdflib.h
    * replaced TABs with SPACEs

  * harbour/include/hbsetup.ch
    ! reenabled HB_EXTENSION in default builds - disabling it makes
      a lot of RDD code unusable and breaks default builds due to
      insufficient dependences
2007-11-12 15:10:28 +00:00
Przemyslaw Czerpak
a3fc484d14 2007-11-07 13:53 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
  * harbour/source/rtl/hbgtcore.c
  * harbour/source/rtl/cdpapi.c
  * harbour/source/rtl/mlcfunc.c
  * harbour/source/vm/classes.c
  * harbour/source/common/reserved.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/hbfunchk.c
    * cleaned possible dangerous code reported by Chen - many thanks
2007-11-07 12:53:20 +00:00
Przemyslaw Czerpak
13427dd60a 2007-11-03 02:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/bmdbfcdx/bmdbfcdx1.c
    * replaced all direct access to hb_set structure with functions
      Now it's possible to link bmdbfcdx with harbour.dll but because
      it still access hb_cdp_page then only if linker supports auto
      import conversions

  * harbour/source/common/hbfsapi.c
  * harbour/source/main/harbour.c
  * harbour/source/pp/hbppgen.c
  * harbour/utils/hbpp/hbpp.c
    * added filename conversion (hb_fsNameConv()) to hb_fsFileExists()
      function

  * harbour/include/hbapifs.h
  + harbour/source/common/hbfopen.c
  * harbour/source/common/Makefile
  * harbour/common.mak
    + added hb_fopen() function - it's a wrapper to fopen() function but
      calls internally hb_fsNameConv()

  * harbour/source/pp/hbppgen.c
  * harbour/source/pp/ppcore.c
  * harbour/source/common/hbtrace.c
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/genhrb.c
  * harbour/source/compiler/gencobj.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/genc.c
  * harbour/source/rtl/gtchrmap.c
  * harbour/source/vm/fm.c
    * use hb_fopen() instead of fopen()
2007-11-03 01:35:47 +00:00
Przemyslaw Czerpak
32f17091b8 2007-10-26 03:46 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbstack.h
  * harbour/include/hboo.ch
  * harbour/ChangeLog
  * harbour/utils/hbmake/hbmlang.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpp/hbpp.c
  * harbour/source/pp/ppcore.c
  * harbour/source/rtl/cdpapi.c
  * harbour/source/rtl/gtcrs/gtcrs.c
  * harbour/source/rtl/gtalleg/fixedth.sfc
  * harbour/source/rtl/fstemp.c
  * harbour/source/rtl/idle.c
  * harbour/source/rtl/gtstd/gtstd.c
  * harbour/source/rtl/gttrm/gttrm.c
  * harbour/source/rtl/gtpca/gtpca.c
  * harbour/source/rtl/hbffind.c
  * harbour/source/rtl/hbregex.c
  * harbour/source/vm/hvm.c
  * harbour/contrib/xhb/hboutdbg.c
  * harbour/contrib/xhb/hbxml.c
  * harbour/contrib/xhb/hbxml.h
  * harbour/contrib/xhb/cstructc.c
  * harbour/contrib/xhb/hbsyslog.c
  * harbour/contrib/libmisc/hb_f.c
  * harbour/contrib/libnf/fttext.c
  * harbour/contrib/libnf/mouse.c
  * harbour/contrib/tip/encmthd.c
  * harbour/contrib/rdd_ads/ads1.c
  * harbour/contrib/rdd_ads/ace.h
  * harbour/contrib/btree/hb_btree.c
  * harbour/contrib/samples/status.c
  * harbour/contrib/samples/gauge.c
  * harbour/contrib/odbc/odbc.c
  * harbour/contrib/bmdbfcdx/hbrddbmcdx.h
  * harbour/contrib/bmdbfcdx/bmdbfcdx1.c
    * cleanup errors in strict ANSI C compilation
2007-10-26 01:47:21 +00:00
Przemyslaw Czerpak
01c5248dde 2007-10-15 17:39 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
  * harbour/include/hbmath.h
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/ppgen.c
  * harbour/source/pp/Makefile
  * harbour/source/rtl/diskspac.c
  * harbour/source/rtl/fserror.c
  * harbour/source/rtl/gtchrmap.c
  * harbour/source/rtl/disksphb.c
  * harbour/source/rtl/gttone.c
  * harbour/source/rtl/gtwvt/gtwvt.c
  * harbour/source/rtl/fssize.c
  * harbour/source/rtl/hbinet.c
  * harbour/source/rtl/hbffind.c
  * harbour/source/rtl/filesys.c
  * harbour/source/vm/mainwin.c
  * harbour/source/common/hbver.c
  * harbour/source/common/hbtrace.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/ppcomp.c
  * harbour/utils/hbver/hbverfix.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/config/w32/pocc.cf
    * code cleanup:
      - eliminated unnecessary errno access
      - use WinAPI functions instead of some standard C library functions
        in Windows builds
2007-10-15 15:40:17 +00:00
Przemyslaw Czerpak
b5d010fbeb 2007-10-01 19:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/rtl/errorapi.c
    + added protection against possible GPF when some assign methods
      were called without parameters

  * harbour/source/rdd/workarea.c
    * initialize uiFalgs also when DBS_FLAGS is not set

  * harbour/contrib/bmdbfcdx/bmdbfcdx1.c
    * fixed hb_cdxSkipFilter() declaration - it should be 'static' function

  * harbour/source/pp/ppcore.c
  * harbour/source/compiler/ppcomp.c
    + added support for changing all -k? switches by #pragma, f.e.;
         #pragma -ks+
         #pragma -kM-
         #pragma -kx1
         #pragma -kJ0

  * harbour/source/compiler/hbusage.c
    * changed -ks description

  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
    * do not generate error message for negative indexes and
      [] operators are used for simple types when -ks option
      is used

  * harbour/include/hbvmpub.h
  * harbour/include/hbapi.h
  * harbour/source/vm/hvm.c
  * harbour/source/vm/extend.c
  * harbour/source/vm/itemapi.c
  * harbour/source/vm/memvars.c
    + added HB_IT_DEFAULT flags - it allows to check if item was changed

  * harbour/source/vm/memvars.c
  * harbour/include/hbvm.h
    ! fixed HB_IT_MEMOFLAG updating to be Clipper compatible. Here we are
      not Clipper compatible in one place: in clodeblock local parameters
      with memo values are marked as MEMO but if you leave function where
      codeblock were created then Clipper during detaching removes MEMO
      flag. In Harbour memo flag is kept.

  * harbour/include/hbvm.h
  * harbour/source/vm/classes.c
  * harbour/source/vm/hvm.c
    % improved speed of extended references used for SETGET methods
      and overloaded [] operators

  * harbour/include/hbapi.h
  * harbour/include/hbsetup.ch
  * harbour/source/compiler/hbcomp.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/macro.c
  * harbour/source/vm/cmdarg.c
    * removed HB_COMPAT_XHB flags - only one HB_COMPAT_XHB still exist
      in HVM in hashes.c - it will be removed soon.

  * harbour/source/common/hbverdsp.c
    * removed information about xHarbour compatibility mode - it's not
      longer used. We are emulating xHarbour behavior using external
      XHB library and standard compiler/HVM features

  * harbour/contrib/xhb/xhb.ch
  * harbour/contrib/xhb/xhbfunc.c
  * harbour/source/vm/arrayshb.c
    * moved XHB_AINS(), XHB_ADEL() from XHB lib to HVM as HB_AINS(), HB_ADEL()

  * harbour/contrib/xhb/xhb.ch
    + added #pragma -ks+
    + added transaltion for hb_enumindex( <enumvar> )

  + harbour/contrib/xhb/xhbenum.c
    + added emulation for HB_EUMMINDEX()

  * harbour/contrib/xhb/xhbfunc.c
    * do not add INET*() function wrappers for DOS builds or when
      HB_NO_DEFAULT_INET macro is set

  * harbour/contrib/xhb/xhbmsgs.c
    * added comment

  * harbour/contrib/Makefile
    + added TIP and XHB

  * harbour/make_rpm.sh
  * harbour/harbour.spec
    * removed HB_COMPAT_XHB, --with tip, --with xhb
      they are not longer necessary
2007-10-01 17:43:52 +00:00
Przemyslaw Czerpak
503c1ddf13 2007-09-02 17:27 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/hbgtmk.sh
  * harbour/tests/codebl.prg
  * harbour/tests/testprof.prg
  * harbour/tests/keywords.prg
  * harbour/tests/testpp.prg
  * harbour/make_rpm.sh
  * harbour/makefile.gc
  * harbour/bin/hb-mkslib.sh
  * harbour/include/hbexpra.c
  * harbour/include/hbmath.ch
  * harbour/include/hbrddntx.h
  * harbour/include/hbexprb.c
  * harbour/harbour.spec
  * harbour/contrib/dot/pp.prg
  * harbour/contrib/libct/ctwin.c
  * harbour/contrib/ole2/w32ole.c
  * harbour/contrib/hgf/win32/win32.c
  * harbour/contrib/mysql/mysql.ch
  * harbour/contrib/odbc/todbc.prg
  * harbour/contrib/odbc/sql.ch
  * harbour/contrib/hb_struc/hbstruc.ch
  * harbour/contrib/bmdbfcdx/bmdbfcdx1.c
  * harbour/contrib/msql/msql.ch
  * harbour/contrib/msql/readme.txt
  * harbour/source/pp/ppcore.c
  * harbour/source/rtl/gtdos/gtdos.c
  * harbour/source/rtl/gtxwc/gtxwc.h
  * harbour/source/rtl/hbgtcore.c
  * harbour/source/rtl/gtcrs/gtcrs.h
  * harbour/source/rtl/gtalleg/gtalleg.c
  * harbour/source/rtl/gtalleg/ssf.h
  * harbour/source/rtl/gtalleg/fixedth.sfc
  * harbour/source/rtl/gtchrmap.c
  * harbour/source/rtl/itemseri.c
  * harbour/source/rtl/gtstd/gtstd.c
  * harbour/source/rtl/gtsln/gtsln.h
  * harbour/source/rtl/gttrm/gttrm.c
  * harbour/source/rtl/gtpca/gtpca.c
  * harbour/source/rtl/hbhex.c
  * harbour/source/rtl/tget.prg
  * harbour/source/rtl/gtcgi/gtcgi.c
  * harbour/source/rtl/hbinet.c
  * harbour/source/vm/hvm.c
  * harbour/source/debug/dbgtobj.prg
  * harbour/source/debug/dbgwa.prg
  * harbour/source/common/expropt2.c
  * harbour/source/rdd/dbfcdx/dbfcdx1.c
  * harbour/source/rdd/dbffpt/dbffpt1.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpptest/pp_test.prg
  * harbour/utils/hbpptest/pretest.prg
  * harbour/make_tgz.sh
    * converted TABs to SPACEs
2007-09-02 15:28:05 +00:00
Przemyslaw Czerpak
ea97d11a41 2007-08-22 19:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/source/pp/ppcore.c
  * harbour/source/rtl/gttrm/gttrm.c
  * harbour/source/main/harbour.c
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/hbcmplib.c
  * harbour/source/compiler/ppcomp.c
    * added 'const' to some 'char *' declarations
    + added hb_pp_inBuffer()
    + extended hb_compMain() to accept source code passed as ASCIIZ
      string
    + .prg function HB_COMPILEFROMBUF()
    + added support for -q2 compiler switch - it disables _ALL_ stdout/stderr
      messages

  * harbour/utils/Makefile
  + harbour/utils/hbdot
  + harbour/utils/hbdot/hbdot.prg
  + harbour/utils/hbdot/Makefile
    + added hbdot utility program.
      It's a "DOt Prompt" Console for the Harbour Language
         Syntax:  hbdot [<hrbfile[.prg]> [<parameters,...>]]
      It should look and work in similar way to pp/xBaseScript
      by Ron Pinkas but unlike xBaseScript is does not have preprocessor
      or simulated runtime environment but simply uses Harbour pp and
      compiler libraries to preprocess and compile commands. It means
      that it supports all language constructions also statements, f.e.:
         "for i:=1 to 10; ? i; next"
      Additionally it can also compile and execute .prg files given as
      first parameter just like hbrun.
      Please test it. If it will work as expected then we can remove
      'pp' (contrib/dot) from standard packages
2007-08-22 17:10:40 +00:00
Przemyslaw Czerpak
c35370c2b9 2007-08-21 16:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/vm/memvars.c
    + added __MVSETBASE() function

  * harbour/source/pp/ppcore.c
    * redirect error messages when error trap is not defined into
      user dispout function

  * harbour/include/hbcomp.h
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/genjava.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/hbcmplib.c
  * harbour/source/compiler/ppcomp.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/genhrb.c
  * harbour/source/compiler/gencobj.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/hbusage.c
  * harbour/source/compiler/hbgenerr.c
    + added hb_compOutStd() and hb_compOutErr()
    * redirected all compiler output to above functions
2007-08-21 14:01:01 +00:00
Przemyslaw Czerpak
8db4f58efb 2007-08-08 15:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/libnf/at2.prg
  * harbour/contrib/libnf/min2dhm.prg
  * harbour/contrib/libnf/ontick.c
  * harbour/contrib/libnf/sqzn.prg
  * harbour/contrib/libnf/bytexor.prg
  * harbour/contrib/libnf/asum.prg
  * harbour/contrib/libnf/sleep.prg
  * harbour/contrib/libnf/any2any.prg
  * harbour/contrib/libnf/origin.c
  * harbour/contrib/libnf/mouse.c
  * harbour/contrib/libnf/stod.c
  * harbour/contrib/libnf/vertmenu.prg
  * harbour/contrib/libnf/aredit.prg
  * harbour/contrib/libnf/n2color.c
  * harbour/contrib/libnf/xbox.prg
  * harbour/contrib/libnf/hex2dec.prg
  * harbour/contrib/libnf/getver.c
  * harbour/contrib/libnf/Makefile
  * harbour/contrib/libnf/invclr.prg
  * harbour/contrib/libnf/popadder.prg
  * harbour/contrib/libnf/d2e.prg
  * harbour/contrib/libnf/anomatch.prg
  * harbour/contrib/libnf/color2n.c
  * harbour/contrib/libnf/datecnfg.prg
  * harbour/contrib/libnf/easter.prg
  * harbour/contrib/libnf/ntow.prg
  * harbour/contrib/libnf/floptst.prg
  * harbour/contrib/libnf/pchr.prg
  * harbour/contrib/libnf/tbwhile.prg
  * harbour/contrib/libnf/e2d.prg
  * harbour/contrib/libnf/sysmem.prg
  * harbour/contrib/libnf/dfile.prg
  * harbour/contrib/libnf/clrsel.prg
  + harbour/contrib/libnf/fttext.c
  + harbour/contrib/libnf/putkey.c
    * basic cleanup and syncing with some of xHarbour fixes and extensions.
      I'd like to ask Windows users to update non GNU make file

  * harbour/source/pp/ppcore.c
    + added support for .T., .F., .Y., .N. in PP and #IF ... / #ELIF ...
      expressions. It was reported by Nick Van Dyck on xHarbour devel list
      that old PP supported it. I haven't known that old PP suported .T.
      and .F. in #IF directive. Please not that there are other diferences
      between new PP and the old one in expresions which can be used in
      #IF ... / #ELIF directives. New PP supports C like expressions with
      support for pseudo functions like defined(), operates on integer
      numbers only to not damage 64bit values during conversion to double
      and keep C compatible results (the old one used double values) and
      is much more restrictive in checking for valid expression.
2007-08-08 13:21:15 +00:00
Przemyslaw Czerpak
237af158fa 2007-07-04 15:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.y
    ! fixed using LOOP inside SWITCH/CASE.../END statement
    ! fixed possible memory leeks when compile time error appear
      with some unfinished LOOP statements
    ! do not push unnecessary NIL on HVM stack when SWITCH/CASE.../END
      statement were used without OTHERWISE clause

  * harbour/source/pp/ppcore.c
    ! do not calculate last line when it does not contain any character
    * clear line number counter after preprocessing standard definitions/
      rules - I hope it will make David happy ;-)
2007-07-04 13:13:10 +00:00
Przemyslaw Czerpak
113866e6a1 2007-06-20 21:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbgtinfo.ch
    + added GTI_ADDKEYMAP and GTI_DELKEYMAP

  * harbour/include/hbapicdp.h
  * harbour/source/rtl/cdpapi.c
    + added const to declarations of some function parameters

  * harbour/include/hbgtcore.h
  * harbour/source/rtl/Makefile
  + harbour/source/rtl/gtchrmap.c
  * harbour/source/rtl/gtcrs/Makefile
  - harbour/source/rtl/gtcrs/chrmap.c
  * harbour/source/rtl/gtcrs/gtcrs.c
  * harbour/source/rtl/gtcrs/gtcrs.h
    * hb_gt_chrmapinit() common function now for different GT drivers
    * minor cleanup in GTCRS code

  * harbour/include/hbcompat.ch
    + added some new translation rules

  * harbour/include/hbapi.h
    * cleanup comment

  * harbour/source/pp/ppcore.c
    ! fixed line numbering when errors are reported in different order
      due to preprocessing extended code block

  + harbour/source/rtl/gttrm
  + harbour/source/rtl/gttrm/Makefile
  + harbour/source/rtl/gttrm/gttrm.c
    + added new GT driver - it's terminal driver like GTCRS and GTSLN
      but it does not use any external library like [N]CURSES or SLANG
      so it can be compiled in nearly all POSIX systems. It's not such
      flexible like curses or slang base drivers because instead of
      using termcap/terminfo databases to extract terminal capabilities
      it uses some hard coded sequences for few terminals (now Linux, ANSI,
      XTERM) but it should cover users requests in 95% of cases. Terminals
      I tested are quite well supported (GTTRM works even better then GTCRS
      or GTSLN and is much faster in full screen mode - 2-4 times).
      I noticed that most terminal emulators works much better with GTTRM
      then with GTCRS or GTSLN due to limited list of used escape sequences
      so some minor differences in each terminal implementation are not
      noticeable. GTTRM automatically detects ISO/UTF8 terminal mode and
      chose valid output what should also help *nix users.
      Now I would like to ask BSD and MacOSX users to test GTTRM in these
      systems with pure text console and XWindow terminal emulators. I'm
      interesting in any problems you may found.

  * harbour/source/vm/hvm.c
    + added protection for possible GPF caused by wrong .prg code

  * harbour/source/vm/maindllp.c
    % store function addreses in static variables to improved execution
      speed
    + added support for compilers which does not use "_" as function prefix
    + added support for using with harbour*.dll

  * harbour/source/vm/memvars.c
    + added new method of detaching enumerators and array item references
      covered by HB_COMPAT_XHB macro. xHarbour does not work in such way
      but the final results are similar.

  * harbour/source/vm/dynlibhb.c
    + added protection against passing wrong pointer items to HB_LIB*()
      functions

  * harbour/source/common/reserved.c
    * cleaned warning

  * harbour/bin/hb-func.sh
  * harbour/config/hpux/global.cf
  * harbour/config/darwin/global.cf
  * harbour/config/linux/global.cf
  * harbour/config/sunos/global.cf
  * harbour/config/bsd/global.cf
    + added GTTRM to library list
2007-06-20 19:07:37 +00:00
Przemyslaw Czerpak
0724963ab3 2007-05-26 09:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    ! fixed bug reported by Lorenzo

  * harbour/contrib/rdd_ads/ads1.c
    * changed static variable name from iSetListenerHandle to
      s_iSetListenerHandle to keep common naming convention

  * harbour/include/hbapi.h
  * harbour/source/vm/hashes.c
  * harbour/source/vm/hashfunc.c
  * harbour/source/vm/hvm.c
    + added new 3-rd parameter to hb_hashGetItemPtr() to control
      independently hash autoadd behavior in access/assign operation

  * harbour/include/hbrdddbf.h
  * harbour/include/hbrddntx.h
  * harbour/source/rdd/dbfntx/dbfntx1.c
    * moved static variables holding RDDI_* settings to RDDNODE data so
      they can be set separately for each RDD which inherits from DBFNTX

  * harbour/source/vm/classes.c
    + added disabled code to access hash items using messages

  * harbour/source/vm/garbage.c
    * comment
2007-05-26 07:06:07 +00:00
Przemyslaw Czerpak
e0aa40573c 2007-05-21 13:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    ! fixed E"..."
    ! added new hack for strings inside []
2007-05-21 11:21:20 +00:00
Przemyslaw Czerpak
ff3876d887 2007-05-19 15:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbclass.ch
    * formatting

  * harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
    + added support for:
         #pragma escapedstrings = on
         cStr := "some value with internal \" character"
         #pragma escapedstrings = off
    + added support for multiline strings in escaped strings

  * harbour/source/compiler/gencobj.c
    * minor simplification

  * harbour/source/rtl/hbffind.c
    * always set hb_fsError()

  * harbour/source/rtl/mlcfunc.c
    ! fixed minor typo
2007-05-19 13:41:20 +00:00
Przemyslaw Czerpak
c1ceed3cf0 2007-05-17 00:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/TODO
    * removed some not longer necessary TODO/TOFIX

  * harbour/common.mak
  * harbour/source/rtl/Makefile
  - harbour/source/rtl/memoline.c
  - harbour/source/rtl/mlcount.c
  - harbour/source/rtl/mlctopos.c
  - harbour/source/rtl/mlpos.c
  - harbour/source/rtl/mpostolc.c
  + harbour/source/rtl/mlcfunc.c
    * new version of memo line functions:
         MEMOLINE(), MLCOUNT(), MLPOS(), MLCTOPOS(), MPOSTOLC()

  * harbour/include/hbexpra.c
    ! fixed in HB_COMPAT_XHB build hb_enumIndex() used inside internal
      FOR/NEXT loop

  * harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
    ! removed some not longer necessary hack
    % added some speed optimizations - it's not done in the way I want to
      have in the final version but with some very small modifications it
      should make people using a lot of #[x]translate (Enrico ;-)) happy.

  * harbour/source/rtl/set.c
    * minor cleanup in HB_SET_EOL initialization

  * harbour/source/vm/hvm.c
    * clean MEMO flag in array and hash items created by { MEMOFILED, ... }
      or { "KEY" => MEMOFILED, ... } and optimized results of PLUS operation

  * harbour/utils/hbtest/rt_misc.prg
    * SET EOL to CHR(13) + CHR( 10 ) before MLCTOPOS() tests to avoid false
      alarm on platforms with differ default EOL
2007-05-16 22:20:36 +00:00
Przemyslaw Czerpak
2f0189d34f 2007-05-12 10:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprop.h
  * harbour/include/hbpp.h
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbmain.c
  * harbour/source/pp/ppcore.c
    + added support for extended multiline codeblocks:
         { |<params,...>| <EOL>
            <statement1>
            ...
            <statementN>
            return <val>
         }
      Such codeblocks allow nested definitions. They can also have their
      own variable declarations (local, static, field, memvar, parameters,
      private, public) and visibility of declared variables is similar to
      nested function in Pascal but please note that there is one limitation
      which exists also for normal codeblocks (Clipper compatible behavior):
      internal codeblock local parameters and local variables cannot be
      used in nested codeblocks, f.e. such code:
            eval( { |p| eval( {|| qout( p + 1 ) } ) } )
      is illegal in Clipper and Harbour. This limitation also can be
      eliminated but but it will be necessary to make deeper modifications
      in code for local detaching changing the method of generating
      codeblocks local variables in nested blocks so unlike the above
      also some modifications in HVM will be necessary.
      Please test.
2007-05-12 08:48:12 +00:00
Przemyslaw Czerpak
a44eae4498 2007-04-16 21:30 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompat.ch
    * always translate hash H*() function to HB_H*() ones even if
      HB_COMPAT_XHB is set. Code which uses HB_H*() functions can
      be linked with any Harbour builds

  * harbour/include/hbapi.h
  * harbour/source/vm/hashes.c
    + added hb_hashId()

  * harbour/source/pp/ppcore.c
    + added #ytranslate, #ycommand, #yuntranslate, #yuncommand
      case sensitive version of corresponding #x* directives

  * harbour/source/rtl/itemseri.c
    + added support for serialization arrays and/or hashes with cyclic
      references
2007-04-16 19:29:50 +00:00
Przemyslaw Czerpak
23bc767460 2007-04-12 13:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
  * harbour/include/hbcomp.h
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/pplib.c
  * harbour/utils/hbpp/hbpp.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpp/hbppdef.h
    * changed error and warning messages to const char *

  * harbour/source/compiler/genhrb.c
    * rewritten to work on memory buffers and with new compiler code

  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/source/compiler/hbmain.c
  * harbour/source/main/harbour.c
    + added LANG_PORT_OBJ_BUF which allow to generate .hrb files into
      memory buffers

  * harbour/source/compiler/hbcmplib.c
    + added HB_COMPILEBUF() functions which returns compiled .hrb file
      as string item

  * harbour/source/vm/runner.c
    + added support for executing compiled .hrb files stored in string
      items in __HRBRUN() function - it works just like in __HRBLOAD()

  * harbour/harbour.spec
  * harbour/utils/hbrun/hbrun.prg
    + added default include directories to hbrun
    * use HB_COMPILEBUF() instead of HB_COMPILE() to eliminate temporary
      files
2007-04-12 11:57:04 +00:00
Przemyslaw Czerpak
96561eeae0 2007-03-31 12:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/Makefile
  + harbour/include/hbchksum.h
  * harbour/source/rtl/Makefile
  + harbour/source/rtl/hbadler.c
  + harbour/source/rtl/hbcrc.c
  + harbour/source/rtl/hbmd5.c
    + added functions to calculate different checksums
         HB_ADLER( <cValue> [, <nStart> ] ) -> <nCC>
         HB_CRC32( <cValue> [, <nStart> ] ) -> <nCRC>
         HB_CRC16( <cValue> [, <nStart> ] ) -> <nCRC>
         HB_CRC  ( <cValue> [, <nStart> ] [, <nPolynomial> ] ) -> <nCRC>
         HB_CRCCT( <cValue> [, <nStart> ] [, <nPolynomial> ] ) -> <nCRC>
         HB_MD5( <cString> ) -> <cMD5>
         HB_MD5FILE( <cFileName> ) -> <cMD5>
      HB_CRC() is general CRC function which can be used for any polynomial
      given as second argument, f.e.: 0x104C11DB7 is CRC32 polynomial,
      0x18005 -> CRC16, 0x11021 -> CRC16 X.26, 0x1393 -> CRC12, 0x101 -> LCR8
      HB_CRCCT() makes exactly the same job but it uses broken algorithm.
      Unfortunately it seems that this broken version is widely used by many
      other projects, f.e. HB_CRCCT() gives exactly the same results as
      COM_CRC() from CT3. Generated results are usually "good enough" but
      if you do not need compatibility with some other tools which uses
      broken CRC algorithm then I suggest to not use it.
      HB_ADLER() is ADLER32 check sum - this function gives the same results
      as HB_CHECKSUM in xHarbour.
      HB_MD5*() functions are from Dmitry V. Korzhov code modified a
      little bit by me for other then x86@32 machines files and buffers
      longer then 2^32. I also fixed possible problems with wrong results
      in some cases.

  * harbour/source/compiler/hbmain.c
    * increase number of optimization passes

  * harbour/source/pp/ppcore.c
    * cleaned C compiler warning
2007-03-31 10:42:19 +00:00
Przemyslaw Czerpak
a5d329536c 2007-03-30 18:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    + added support for multiline string concatenated by ';'
      f.e.:
         cVar := "line 1;
         line 2;
         line 3"
      To enable the above it's necessary to build PP with
      HB_PP_MULTILINE_STRING macro.
      It's not Clipper compatible extension and it's not enabled by default
      anyhow old PP worked in such way so I'm leaving the decision to Harbour
      community if the above should be enabled by default or not.
2007-03-30 16:51:26 +00:00
Przemyslaw Czerpak
759c045f73 2007-03-30 15:12 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbexprb.c
    % optimize PCODE generated for IIF() used as statement

  * harbour/include/hbpp.h
    * fixed typo in comment

  * harbour/source/pp/ppcore.c
    * fixed .ppo output in some string expressions inside []

  * harbour/source/rdd/dbfcdx/dbfcdx1.c
  * harbour/source/rdd/dbfntx/dbfntx1.c
    + added some missing DBOI_* actions

  * harbour/source/rtl/hbregex.c
    + added comment

  * harbour/source/vm/hashes.c
    * set autoadd by default when compiled with HB_COMPAT_XHB macro

  * harbour/source/debug/debugger.prg
  * harbour/source/rdd/dbstrux.prg
  * harbour/source/rtl/tbrowse.prg
    * removed unnecessary NIL in in IIF() statements
  * harbour/utils/hbtest/rt_misc.prg
    * removed unnecessary ::cValue in in IIF() statements
2007-03-30 13:16:10 +00:00
Przemyslaw Czerpak
88cda3200d 2007-03-22 12:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/common.mak
    * updated for new files - please check

  * harbour/harbour.spec
    * added compiler library

  * harbour/bin/pack_src.sh
  * harbour/bin/hb-func.sh
    * updated for new files and libraries

  * harbour/config/w32/mingw32.cf
  * harbour/config/w32/watcom.cf
  * harbour/config/w32/xcc.cf
    * added winsock libraries

  * harbour/include/hbapicdp.h
  * harbour/source/rtl/cdpapi.c
    + added hb_cdpicmp() - not case sensitive version of hb_cdpcmp()

  * harbour/include/hbapiitm.h
  * harbour/source/vm/itemapi.c
    + hb_itemStrICmp(), hb_itemCopyFromRef(), hb_itemMoveFromRef()

  * harbour/include/hbapi.h
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprop.h
  * harbour/include/hbmacro.h
  * harbour/include/hbpcode.h
  * harbour/include/hbvmpub.h
  * harbour/include/hbxvm.h
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/genhrb.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbdead.c
  * harbour/source/compiler/hbfix.c
  * harbour/source/compiler/hblbl.c
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/hbopt.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/hbstripl.c
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
  * harbour/source/macro/macro.yyh
  * harbour/source/macro/macrolex.c
  * harbour/source/vm/Makefile
  * harbour/source/vm/arrays.c
  * harbour/source/vm/asort.c
  * harbour/source/vm/classes.c
  * harbour/source/vm/eval.c
  * harbour/source/vm/garbage.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/itemapi.c
  * harbour/source/vm/macro.c
  + harbour/source/vm/hashes.c
  + harbour/source/vm/hashfunc.c
    + added hash items, f.e.:
         local h1 := {=>}, h2 := { "a"=>1.234, "b"=>2.345 }
         ? h2[ "a" ], h2[ "b ]
    + added support for DYNAMIC function declaration - it allow to define
      functions which are lately bound at runtime, f.e.:
         /*** t01.prg ***/
         dynamic func1
         proc main()
         local h:=__hrbload("t02.hrb")
         ? func1()
         return

         /*** t02.prg ***/
         func func1
         return "Hello!!!"

    % use new FUNCALL structure to hold EXTERNAL and DYNAMIC functions,
      it reduce memory usage, FUNCALL is much smaller then FUNCTION
    % use symbol scope bits when possible instead of making some linear scan
    + added new enumarator message: __ENUMKEY - it allow to access
      key value when hash item is base enumerator value, f.e.:
         proc main()
         local v, h:={"a"=>1.000,"b"=>2.000,"c"=>3.000}
         heval( h, { |k,v,i| qout( k, v, i ) } ); ?
         for each v in h
            ? v, "=>", v:__enumKey(), v:__enumValue(), v:__enumIndex(), ;
                       valtype(v:__enumBase())
            v += 0.123
         next
         ? ;heval( h, { |k,v,i| qout( k, v, i ) } )
         return
    + added C level hb_hash*() functions
    + added support for full HASH item cloning and updated array cloning
      to also clone nested hashes - please note that xHarbour does not do
      that, in xHarbour ACLONE() clones _ONLY_ nested arrays and HCLONE()
      _DOES_NOT_ clone _ANY_ nested items.

  * harbour/include/hbextern.ch
    + added hash functions HB_H*()
    * changed INET*() functions to HB_INET*()
    + added hash functions H*() and socket functions INET*() when
      HB_COMPAT_XHB is set

  * harbour/include/hbtypes.h
    + added missing HB_EXTERN_BEGIN / HB_EXTERN_END

  * harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
    ! added protection against automatic word concatenation in some cases
    ! fixed preprocessing expressions when match marker matches ';' token

  * harbour/source/rtl/Makefile
  + harbour/source/rtl/itemseri.c
    + added functions for item serialization: HB_SERIALIZE() and
      HB_DESERIALIZE() - these function are not binary compatible
      with xHarbour functions with the same names but make very
      similar job with the exception to serialization of codeblock
      and object variables - Harbour does not allow to serialize
      codeblocks and serialize objects as arrays.
      In most cases these functions can replace the xHarbour ones
    + added HB_DESERIALBEGIN() and HB_DESERIALIZE() functions covered
      by HB_COMPAT_XHB macro - this functions are only for compatibility
      with existing xHarbour code, In Harbour HB_DESERIALBEGIN() is
      dummy function which returns first parameter and HB_DESERIALNEXT()
      is a simple wrapper to HB_DESERIALIZE() so it's not necessary to
      use them.

  * harbour/source/rtl/hbinet.c
    * changed INET*() functions to HB_INET*() and enable them for default
      build
    + added INET*() functions wrappers covered by HB_COMPAT_XHB macro

  * harbour/source/rtl/hbrandom.c
    + added HB_RANDOMINT() - xHarbour compatible

  * harbour/source/rtl/len.c
    + added support for HASHes

  * harbour/source/rtl/valtype.c
    + added support for HASHes
    + added set of HB_IS*() functions - they are a little bit faster then
      calling VALTYPE( v ) == <cVal>
    - removed HB_ISBYREF() - this function cannot longer work, it was using
      a Clipper incompatible anomalies in passing variables by reference I
      fixed so it has to stop to work. If it will be realy necessary to
      implement HB_ISBYREF() function then please inform me - it will have
      to be done at compiler level or with some much deeper HVM stack
      checking.

  * harbour/source/vm/extend.c
    ! fixed hb_extIsArray() and hb_extIsObject() to work well with
      parameters passed by reference.
      Please note that now hb_extIsArray() return TRUE only for pure arrays
      not object values.

  * harbour/contrib/Makefile
  + harbour/contrib/tip/Changelog
  + harbour/contrib/tip/Makefile
  + harbour/contrib/tip/atokens.c
  + harbour/contrib/tip/base64x.c
  + harbour/contrib/tip/cgi.prg
  + harbour/contrib/tip/client.prg
  + harbour/contrib/tip/credent.prg
  + harbour/contrib/tip/cstr.prg
  + harbour/contrib/tip/encb64.prg
  + harbour/contrib/tip/encmthd.c
  + harbour/contrib/tip/encoder.prg
  + harbour/contrib/tip/encqp.prg
  + harbour/contrib/tip/encurl.prg
  + harbour/contrib/tip/ftpcln.prg
  + harbour/contrib/tip/hbhex2n.c
  + harbour/contrib/tip/httpcln.prg
  + harbour/contrib/tip/mail.prg
  + harbour/contrib/tip/popcln.prg
  + harbour/contrib/tip/smtpcln.prg
  + harbour/contrib/tip/tip.ch
  + harbour/contrib/tip/url.prg
  + harbour/contrib/tip/utils.c
    + added TIP library - code borrowed from xHarbour



   Please test - a lot of above code is not well tested, also some peaces
   were written over year ago for different things (f.e. serialization for
   NETRDD) and now I collected them and committed.
   The TIP library was not tested at all. It can be compiled but I cannot
   say if it works - I hope that people familiar with it can make necessary
   test and fixes.
   It's also not the final version of low level HASH item code. I'm working
   on more efficient structure which uses binary tries but I cannot say when
   I'll finish it (maybe in this weekend or maybe in next year) so I committed
   working version now even if I'm not happy with overall performance (BTW
   not worser then in xHarbour)
2007-03-22 12:28:14 +00:00
Przemyslaw Czerpak
f9452a8f85 2007-03-04 14:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapifs.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbpp.h
  * harbour/source/common/hbfsapi.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/hbusage.c
  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
    * cleanup .ppo file creation
    + new compiler switch: p+ to enable preprocessor tracing
      when used information about applied rules is stored in .ppt file
  * harbour/include/hbdefs.h
  * harbour/source/rtl/gtos2/gtos2.c
    * OS2 build cleanup
2007-03-04 13:11:36 +00:00
Przemyslaw Czerpak
29f3929a08 2007-03-02 00:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    * clear included file counter in hb_pp_reset()
    * insert space after stream comment /* */ - it's not Clipper
      compatible but it's necessary as long as we have automatic
      identifier concatenation
2007-03-01 23:44:00 +00:00
Przemyslaw Czerpak
425dfbe58e 2007-03-01 05:22 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    ! fixed comments like /*/*/
2007-03-01 04:22:57 +00:00
Przemyslaw Czerpak
01c55fa2c1 2007-03-01 01:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbclass.ch
    * cleaned scope error message

  * harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
    * added hack for accepting expressions which start with ':' character
      as regular/list match markers
2007-03-01 00:57:25 +00:00
Przemyslaw Czerpak
1cba971155 2007-02-28 08:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/pp/ppcore.c
    * updated lexer to recognize IF(<exp1>,<exp2>,<exp3>) in expressions like
      IF(<exp,...>) - it allow to make some grammar rules much more simple.
2007-02-28 07:11:17 +00:00
Przemyslaw Czerpak
fb4d3ca4b8 2007-02-25 17:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbstdgen.ch
    * added #undef HB_COMPAT_XHB
  * harbour/source/common/hbstr.c
    * indenting
  * harbour/source/compiler/ppcomp.c
    * updated line numbering in #pragma dump code and error messages
      executed for disabled code
  * harbour/source/pp/ppcore.c
    * changed the precedence of #pragma BEGINDIUMP/ENDDUMP - now
      it has higher precedence then conditional compilation with
      #IF[DEF]/#ENDIF
    * added support for defined() pseudo function in #IF / #ELIF
      directives, f.e.:
         #if defined( __HARBOUR__ ) .and. !defined( HB_COMPAT_XHB )
            #stdout "Harbour compiler compiled without xHarbour extensions."
         #endif
2007-02-25 16:20:22 +00:00
Przemyslaw Czerpak
36d66abf4d 2007-02-12 10:50 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    ! fix line numbering when preprocess static buffers, f.e. by
       __PP_PROCESS()

  * harbour/source/rtl/strcase.c
  * harbour/source/rtl/transfrm.c
    - removed unnecessary extern PHB_CODEPAGE hb_cdp_page;
2007-02-12 09:52:59 +00:00
Przemyslaw Czerpak
48f8dba263 2007-02-08 23:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbgtinfo.ch
  * harbour/contrib/libct/ctwin.c
  * harbour/source/rtl/gtalleg/gtalleg.c
  * harbour/source/rtl/gtcrs/gtcrs.c
  * harbour/source/rtl/gtdos/gtdos.c
  * harbour/source/rtl/gtos2/gtos2.c
  * harbour/source/rtl/gtpca/gtpca.c
  * harbour/source/rtl/gtsln/gtsln.c
  * harbour/source/rtl/gtstd/gtstd.c
  * harbour/source/rtl/gtwin/gtwin.c
  * harbour/source/rtl/gtwvt/gtwvt.c
  * harbour/source/rtl/gtxwc/gtxwc.c
    + added support for GTI_FULLSCREEN, GTI_KBDSUPPORT, GTI_ISCTWIN

  * harbour/source/rtl/hbgtcore.c
    ! fixed line and box drawing when the coordinates are out of screen size

  * harbour/include/hbapi.h
  * harbour/include/hbcomp.h
  * harbour/include/hbpcode.h
  * harbour/include/hbstack.h
  * harbour/include/hbvm.h
  * harbour/include/hbxvm.h
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbdead.c
  * harbour/source/compiler/hbfix.c
  * harbour/source/compiler/hblbl.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/hbstripl.c
  * harbour/source/vm/classes.c
  * harbour/source/vm/estack.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/itemapi.c
    ! added protection against cyclic references in arrays
    * eliminated action parameter from hb_vmRequestReenter() /
      hb_vmRequestRestore()
    * moved s_lRecoverBase and s_uiActionRequest to HB_STACK structure
      for future MT HVM version
    + added internal item structure hb_struRecover - it's not real item
      but this structure is used to keep information about BEGIN SEQUENCE
      data - it reduce HB_STACK usage
    + added support for ALWAYS clause in BEGIN SEQUENCE
      The syntax is:
         BEGIN SEQUENCE
            <code>
         [ RECOVER [ USING oErr ] ]
            <recoverCode>
         [ ALWAYS ]
            <alwaysCode>
         END [ SEQUENCE ]
      It's guaranteed that <alwaysCode> is _ALWAYS_ executed even if
      inside <code> or <recoverCode> some new exceptions like RETURN,
      BREAK or QUIT will appear.
      Please note that when the following code is executed:
         BEGIN SEQUENCE
            <code>
         ALWAYS
            <alwaysCode>
         END
      (without RECOVER clause) then BREAK exception inside <code> is not
      recovered, <alwaysCode> is executed and then BREAK exception is
      passed to outer BEGIN SEQUENCE. This is the same semantic as
      used in TRY / [ CATCH ] / FINALLY / END
      Those of you who prefer to use TRY / CATCH / FINALLY / END instead
      of BEGIN SEQUENCE / RECOVER / ALWAYS / END can simply add to your
      source code:
         #command TRY               => BEGIN SEQUENCE
         #command CATCH [ oErr ]    => RECOVER [ USING <oErr> ]
      and:
         errorBlock( {|oErr| break( oErr ) } )
      Though instead of 'break( oErr )' I suggest to use some small function
      which will support some basic recovery/substitute operations like in
      default errorsys() and LockErrHandler() to not break existing code
      which may depends on the default behavior.
      If you want I can add direct support for TRY / CATCH / FINALLY / END
      but I'm not sure it's really necessary.
      Please note also that in Harbour ALWAYS code is execute even for QUIT
      excpetion.
      When <alwaysCode> is executed current exception is stored and restored
      when is finished. If new exception appears inside <alwaysCode> then
      restored exception depends on the priority in the following order:
         QUIT     // highest priority
         BREAK
         RETURN
      If both exceptions have the same priority and contain additional value
      (error object in BREAK or return value in RETURN) then the recently set
      one is restored. It's similar behavior to destructor code.

  * harbour/source/common/hbstr.c
    * moved one character length string table (hb_szAscii) from hvm.c
      to use it also in compiler and preprocessor

  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/pplib.c
    * tuned error messages to be more Clipper compatible
    % use static strings from hb_szAscii

  * harbour/source/rtl/alert.prg
    * use hb_gtInfo( GTI_FULLSCREEN ) to detect type of GT driver
    ! some minor fixes
      TOFIX: we have to also use GTI_ISCTWIN or add window allocation
             to standard GT drivers to be Clipper compatible when CTWIN
	     is used - In Clipper Tools ALERT() works in differ way then
	     the standard one. It creates separate window box to display
	     data, supports SETKEY(), etc. I'll think about adding some
	     extended support for ALERT() and similar operations (f.e.
	     separate debugger windows) to GT API so it will be also
	     possible to overload standard alert() command by GUI message
	     box in GTGUI and similar GT drivers.

  * harbour/source/rtl/binnumx.c
    ! fixed U2BIN() - wrong casting
2007-02-08 22:56:31 +00:00
Ryszard Glab
c018b6bf9a 2006-12-18 18:20 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
* include/hbcomp.h
      + added extern BOOL hb_compCheckUnclosedStru( HB_COMP_DECL )

   * include/hbcompdf.h
      + added 'int iLastLineErr' to HB_COMP structure

   * include/hbpp.h
      + added extern BOOL hb_pp_eof( PHB_PP_STATE )

   * source/compiler/harbour.c
   * source/compiler/harbour.y
   * source/compiler/harbour.yyc
   * source/compiler/harbour.yyh
   * source/compiler/hbgenerr.c
      * fixed reporting errors in cases of unclosed delimiters or
      unclosed control structures IF/WHILE/FOR/etc

   * source/pp/ppcore.c
      + added hb_pp_eof() function
2006-12-18 17:22:06 +00:00
Przemyslaw Czerpak
93e0db5a23 2006-12-09 17:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/config/bsd/gcc.cf
  * harbour/config/darwin/gcc.cf
  * harbour/config/dos/bcc16.cf
  * harbour/config/dos/djgpp.cf
  * harbour/config/dos/owatcom.cf
  * harbour/config/dos/rsx32.cf
  * harbour/config/hpux/gcc.cf
  * harbour/config/linux/gcc.cf
  * harbour/config/linux/owatcom.cf
  * harbour/config/os2/gcc.cf
  * harbour/config/os2/icc.cf
  * harbour/config/sunos/gcc.cf
  * harbour/config/w32/bcc32.cf
  * harbour/config/w32/gcc.cf
  * harbour/config/w32/mingw32.cf
  * harbour/config/w32/msvc.cf
  * harbour/config/w32/rsxnt.cf
  * harbour/config/w32/watcom.cf
    * added respecting HB_GT_DEFAULT, though it's quite possible that I'll
      remove it at all soon.
    * some other cleanup

  * harbour/source/compiler/complex.c
    ! fixed wrongly replicated from FLEX lexer condition used to DECLARE.
      Now they should be the same as in FLEX lexer but IMHO they are not
      Clipper compatible.

  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/gencobj.c
  * harbour/source/compiler/genhrb.c
  * harbour/source/compiler/genjava.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.c
  * harbour/source/rtl/hbffind.c
  * harbour/source/pp/ppcore.c
  * harbour/source/rdd/workarea.c
    ! fixed sizes of some C stack buffers and strncpy() parameters
    * use hb_strn*() instead of strn*() in few places to be sure that 0
      is always stored in destination buffer

  * harbour/source/rtl/gtcgi/gtcgi.c
    * change reported GT name from "Standard stream console" to
      "Raw stream console" to make it differ then GTSTD one.
2006-12-09 16:11:10 +00:00
Przemyslaw Czerpak
b86b5a8fe7 2006-12-08 05:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/bin/hb-func.sh
  * harbour/bin/hb-mkslib.sh
  * harbour/bin/postinst.sh
  * harbour/config/bsd/gcc.cf
  * harbour/config/darwin/gcc.cf
  * harbour/config/dos/owatcom.cf
  * harbour/config/hpux/gcc.cf
  * harbour/config/linux/gcc.cf
  * harbour/config/linux/owatcom.cf
  * harbour/config/os2/gcc.cf
  * harbour/config/sunos/gcc.cf
  * harbour/config/w32/watcom.cf
  * harbour/contrib/rdd_ads/ads1.c
  * harbour/contrib/rdd_ads/adsfunc.c
  * harbour/include/hbapifs.h
  * harbour/include/hbexprc.c
  * harbour/include/hbsetup.h
  * harbour/source/common/expropt2.c
  * harbour/source/common/hbdate.c
  * harbour/source/common/hbgete.c
  * harbour/source/common/hbstr.c
  * harbour/source/common/hbver.c
  * harbour/source/common/hbverdsp.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/fixflex.c
  * harbour/source/compiler/gencobj.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbfix.c
  * harbour/source/compiler/hbfunchk.c
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/ppgen.c
  * harbour/source/pp/pplib.c
  * harbour/source/rdd/dbcmd.c
  * harbour/source/rdd/workarea.c
  * harbour/source/rdd/dbfcdx/dbfcdx1.c
  * harbour/source/rdd/dbffpt/dbffpt1.c
  * harbour/source/rdd/hsx/hsx.c
  * harbour/source/rtl/accept.c
  * harbour/source/rtl/ampm.c
  * harbour/source/rtl/console.c
  * harbour/source/rtl/defpath.c
  * harbour/source/rtl/errorint.c
  * harbour/source/rtl/filesys.c
  * harbour/source/rtl/fkmax.c
  * harbour/source/rtl/fstemp.c
  * harbour/source/rtl/hbffind.c
  * harbour/source/rtl/hbgtcore.c
  * harbour/source/rtl/langapi.c
  * harbour/source/rtl/seconds.c
  * harbour/source/rtl/set.c
  * harbour/source/rtl/tobject.prg
  * harbour/source/rtl/transfrm.c
  * harbour/source/rtl/gtcrs/chrmap.c
  * harbour/source/rtl/gtcrs/gtcrs.c
  * harbour/source/rtl/gtcrs/gtcrs.h
  * harbour/source/rtl/gtpca/gtpca.c
  * harbour/source/rtl/gtwvt/gtwvt.c
  * harbour/source/rtl/gtxwc/gtxwc.c
  * harbour/source/vm/classes.c
  * harbour/source/vm/cmdarg.c
  * harbour/source/vm/debug.c
  * harbour/source/vm/estack.c
  * harbour/source/vm/fm.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/macro.c
  * harbour/source/vm/proc.c
  * harbour/source/vm/runner.c
  * harbour/utils/hbmake/hbmlang.c
  * harbour/utils/hbpp/hbpp.c
  * harbour/utils/hbpp/hbppcomp.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpp/hbpplib.c
  * harbour/utils/hbpp/pragma.c
  * harbour/utils/hbver/hbverfix.c
    * general code cleanup: all strcpy() and strcat() replaced hb strn*()
      and hb_strn*(), sprintf() by snprintf(), etc.
      It fixed some possible buffer overflow but it's also possible that
      it will exploit some some hidden so far problems but I strongly
      prefer to know about them ASAP to fix them before final 1.0 release.
    ! fixed bug I introduce in codeblock falgs which disabled early macro
      evaluation in codeblocks.
    ! added missing protection against execution by bison destructor for
      used CBSTART token on syntax error.
    % use PP stringify logik added for FLEX support to remove all redundant
      spaces in stringified for early macro evaluation codeblocks and add
      spaces between operators if after preprocessing they were removed.
      Now we are supporting also some code which cannot be compiled by
      Clipper.
    % cleaned and improved the speed of printer redirecting in console code.
      Chen please check if CG still reports problems and if not ubdate
      TODO/TOFIX or inform me about them.
    * some cleanups in building process for different *nixes: MacOSX, SunOS,
      *BSD, etc.
    * removed not longer necessary (I hope) compiler flag to force default
      'char' type as signed. Now Harbour should work with signed and unsigned
      char without any problems. To other developers: please remember that
      when you are using 'char' as 8 bytes signed integer then it's a bug.
      Always explicitly use: 'signed char' in such case. On some platforms
      it's not possible to set default type for 'char' so if you hardcode
      that 'char' is signed or unsigned somewhere then code will not be
      portable. Chen if you will find a while to also rebuild Harbour with
      BCC and -K switch to make some tests with CG then I'll be thankful.
2006-12-08 05:03:58 +00:00
Przemyslaw Czerpak
4dfc616250 2006-12-01 18:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/bin/pack_src.sh
    + added packing *.yy[ch] files

  * harbour/makefile.bc
  * harbour/makefile.vc
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/include/hbexprop.h
  * harbour/include/hbpp.h
  * harbour/source/common/expropt1.c
  * harbour/source/common/expropt2.c
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
  * harbour/source/pp/ppcore.c
    + added hb_comp prefix to grammar/lexer compiler public functions to
      reduce possible conflict with 3-rd party code which may use default
      yy prefix.
    ! do not use bison destructors for expressions. Internal bison logic
      cannot properly detect if expression was used or not in some of our
      grammar rules and it's possible that some expressions will not be freed
      and some other freed twice.
    ! added protection against multiple destructors execution for CBSTART
      and LITERAL tokens
    * added small garbage collector for deallocating expressions which were
      not freed (such situation can happen in syntax errors)
    % some optimizations in used structures to reduce their sizes
    + added protection against execution PCODE optimizations for functions
      which were not cleanly compiled.

  * harbour/source/rtl/idle.c
    * use const in nanosec() timeout declaration
2006-12-01 18:00:53 +00:00
Przemyslaw Czerpak
a9fd83033c 2006-11-25 20:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbexprb.c
    ! fixed parenthesis in expression

  * harbour/source/pp/ppcore.c
    ! fixed code block tokens stringify
2006-11-25 19:01:59 +00:00
Przemyslaw Czerpak
e6a3baea64 2006-11-24 19:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/config/bsd/gcc.cf
  * harbour/config/darwin/gcc.cf
  * harbour/config/dos/djgpp.cf
  * harbour/config/dos/owatcom.cf
  * harbour/config/hpux/gcc.cf
  * harbour/config/linux/gcc.cf
  * harbour/config/linux/owatcom.cf
  * harbour/config/os2/gcc.cf
  * harbour/config/sunos/gcc.cf
  * harbour/config/w32/bcc32.cf
  * harbour/config/w32/gcc.cf
  * harbour/config/w32/mingw32.cf
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hberrors.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbver.h
  * harbour/source/common/hbstr.c
  * harbour/source/common/hbver.c
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/genjava.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.c
  - harbour/source/compiler/harbour.simple
  - harbour/source/compiler/harbour.slx
  - harbour/source/compiler/harbour.sly
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/hbgenerr.c
  - harbour/source/compiler/hbslex.c
  - harbour/source/compiler/hbstrong.c
  * harbour/source/compiler/hbusage.c
  - harbour/source/compiler/simplex.c
  * harbour/source/macro/Makefile
  - harbour/source/macro/macro.slx
  - harbour/source/macro/macroslx.c
  * harbour/source/pp/ppcore.c
  * harbour/utils/hbpp/hbppcomp.c
    - removed SIMPLEX references
    ! fixed memory leak in request _GET_
    * use hb_compIdentifiersNew() in INLINE and AUTOOPEN structures
      members
    * eliminated all internal exit() calls. Now hb_compGenError() with
      fatal errors does not interrupt application but only sets
         HB_COMP_PARAM->fExit = TRUE;
      What should cause silent clean application close.
      Please keep it in mind making future modifications and do not
      introduce and exit() function call.
    + added support for \x<hex> and \<oct> quoting in extended strings
      (just like in C). Warning !!!. Embedded 0 bytes are supported by
      PP, lexer and expression optimizer but not by bison. To make them
      working it will be necessary to change Literal terminal symbol
      holder and add length field in bison rules and also change the hash
      table used to hold identifiers, literals and macros to store and use
      real string length. If someone will try to use strings with embedded
      0 now then they will be cut but nothing worser should happen.
2006-11-24 18:10:07 +00:00
Przemyslaw Czerpak
9cd2098d6d 2006-11-23 20:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
  * harbour/include/hbcomp.h
  + harbour/include/hbcompdf.h
  * harbour/include/hberrors.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/include/hbexprop.h
  * harbour/include/hbmacro.h
  * harbour/include/hbpp.h
  * harbour/include/hbvm.h
  * harbour/source/common/expropt1.c
  * harbour/source/common/expropt2.c
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/gencobj.c
  * harbour/source/compiler/genhrb.c
  * harbour/source/compiler/genjava.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/hbdead.c
  * harbour/source/compiler/hbfix.c
  * harbour/source/compiler/hbfunchk.c
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/hbident.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/ppcomp.c
  * harbour/source/macro/macro.y
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/ppgen.c
  * harbour/source/pp/pplib.c
  * harbour/source/vm/cmdarg.c
  * harbour/source/vm/estack.c
  * harbour/source/vm/fm.c
  * harbour/source/vm/macro.c
  * harbour/utils/hbpp/hbpp.c
  * harbour/utils/hbpp/hbpp.h
  * harbour/utils/hbpp/hbppcomp.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpp/hbpplib.c
  * harbour/utils/hbpp/pragma.c
    * changed the internal compiler API to be MT safe.
      All global and static non constant variables replaced by
      HB_COMP structure which have all compiler context settings.
      It's possible to allocate simultaneously many compiler contexts
      and compile code. Only constant/read only variables are shared.
      In macro compiler HB_COMP is replaced by HB_MACRO.
      In source code I everywhere used to macros: HB_COMP_DECL and
      HB_COMP_PARAM which are equivalents of old HB_MACRO_DECL and
      HB_MACRO_PARAM definitions.
      We will only have to change compiler FATAL errors support to
      not execute exit() for non batch systems.
    * make macro compiler fully MT safe
    * removed not longer used definitions and variables
    ! add direct accessing to PP line number information - it fixes missing
      line numbers reported recently
    ! added generating .ppo files when tokens are teken directly by compiler
      - it fixes empty .ppo file problem
    ! clear hb_stack internall variables after removing hb_stack to avoid
      possible GPF if application still works and try to access unexsiting
      hb_stack
    ! do not allocate new memory block when final FM statistic report is
      generated - it fixes problem with GPF when application compiled with
      FM statistic exits and CLIPPER envvar is set.
    ! fixed memory leak hb_cmdargCheck()
    ! added to harbour.y symbol destructors - it should fixes memory leaks
      in syntax errors but it uses quite new bison feature which is not
      fully supported yet. Unfortunately it's also not MT safe and the
      destructors implementation in 1.875c does not respect %parse-param.
      Bison documentation says that it should so I hope it will be fixed
      soon (or maybe even already is in the newest bison versions) before
      I'll add multi context compilation support. If not then I will have
      to add some workaround. I can pass compiler context pointer inside
      YYSTYPE using hack in a lexer but it will force really huge number
      modifications in existing bison rules so probably it will be much
      easier to fix bison or write a small tool to update generated parser.
    * other modifications - the total size of patch is nearly 1MB and
      detail description will have to take me few days.
2006-11-23 18:57:54 +00:00
Przemyslaw Czerpak
0cada37011 2006-11-21 03:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/common.mak
  * harbour/source/compiler/Makefile
  * harbour/include/hbcomp.h
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/harbour.slx
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/hbident.c
  * harbour/source/compiler/ppcomp.c
  + harbour/source/compiler/complex.c
    + added new PP based compiler lexer - it's smaller, MT safe and a
      little bit faster then then the FLEX version.
    + added HB_COMP structure to hold compiler data in future MT version
    + added global variable HB_COMP_PTR hb_comp_data to make conversion
      to MT easier - now it holds only PP and lexer data.
    * update PP related code in compiler to be MT safe
    + added %pure-parser, %parse-param and %lex-param for bison to generate
      MT safe grammar parser.
    * updated FLEX to work with recent compiler modifications and pure-parser
      bison API

  * harbour/makefile.bc
  * harbour/makefile.vc
  * harbour/source/macro/Makefile
  * harbour/source/macro/macro.l
  * harbour/source/macro/macro.y
  * harbour/source/macro/macrolex.c
    * use hb_macro prefix instead of hb_comp in bison/flex parser/lexer
      used in macro compiler to avoid possible conflicts in the future
    * separated lexer data

  * harbour/include/hbapi.h
  * harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/ppgen.c
  * harbour/source/pp/pplib.c
  * harbour/source/vm/macro.c
    * removed not used members from HB_MACRO structure to make it
      cleaner before creating common to compiler and macro compiler
      structure
    + added new token HB_PP_TOKEN_EPSILON
    + added void * cargo parameters passed to executed user functions
    + hb_pp_tokenGet(), hb_pp_tokenToString(), hb_pp_tokenBlockString()
      functions for new PP based compiler lexer

  * harbour/utils/hbpp/hbpp.c
  * harbour/utils/hbpp/hbpp.h
  * harbour/utils/hbpp/hbppcomp.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpp/hbpplib.c
  * harbour/utils/hbpp/pragma.c
    * updated to compile with recent compiler header file modifications


    PP, new lexer and most of grammar parser should be MT safe. Now we should
    update all compiler functions to pass pointer to HB_COMP data structure
    where we should all current global variables. This structure as first
    member should have HB_CMPCOMMON structure which will hold common to
    compiler and macro compiler data. Ryszard I think you are the best person
    to define this structure.

    We have new lexer which is MT safe but please note that it has to be
    extensively tested so I would like to ask everybody to compile as much
    as possible different code and check if the final programs work as
    expected. Working on new code I removed some limitations existing in
    FLEX though not all. At the beginning I tried to replicate the exact
    FLEX behavior but I've found that in few places it does not work as
    it should so I begin to encode rules in a way which remove some
    limitations. In fact now it's much easier to control some things.
    I kept the FLEX code working and made all necessary modifications
    so it still can be used but keeping FLEX working cost us IMHO too
    much. It's not possible to introduce some improvements to grammar
    parser. All identifiers, keyword and macros returned by new lexer
    are converted to upper letters, do not have to be freed by hb_xfree()
    and is guarantied that will be always accessible. So from grammar file
    we can remove all hb_compIdentifierNew( hb_strupr($1), TRUE ) what
    should give noticeable speed improvement but will break the FLEX code.
    Ryszard and other you will have to decide if we will support FLEX in
    the future. We can also clean the code and remove most of other
    redundant hb_strupr() and hb_strdup() used in many places. BTW only
    one terminal symbol can be returned with lower letters: DOIDENT
    and I make it intentionally so it's possible to use:
         DO prog1 WITH "sth"
    on case sensitive file systems so this symbol should be cloned in
    upper cases as function symbol but used without modification as
    file name. It's current behavior but I'm not sure you will want
    to keep it. Maybe compiler switch to always convert file names
    created from
         DO <id> [WITH <params,...>]
    to lower cases will be better. Please think about it.
2006-11-21 02:29:33 +00:00
Przemyslaw Czerpak
5e19a3c8fd 2006-11-17 22:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    ! fixed casting - it resolves problem reported by Alexander with
      preprocessing chr(255) from static buffer (PP used by .prg code)

  * harbour/source/macro/macro.y
    + added some comments

  * harbour/source/macro/Makefile
    * commented out compilation of FLEX based lexer for macro compiler and
      added compilation of new small lexer written in pure .c

  * harbour/common.mak
    * replaced macrol.obj by macrolex.obj

  + harbour/source/macro/macrolex.c
    + new small lexer written in pure .c. The code is much smaller,
      MT safe and more friendly for grammar parser. I think it should
      be also faster but I haven't made any tests yet. When we update
      grammar parser to not free string representation of terminal
      symbols then we should expect some farther speed improvement,
      it will also resolve some set of memory leaks like in:
         type("user input")
      and will allow to make some parts of grammar parser common to
      compiler and macro compiler by removing #if[n]def HB_MACRO_SUPPORT
2006-11-17 22:06:54 +00:00
Przemyslaw Czerpak
f474925255 2006-11-17 14:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/common/hbstr.c
    ! fixed decoding strings without trailing ASCII NUL character in
      hb_strRemEscSeq()

  * harbour/source/pp/ppcore.c
    + added decoding C escaped strings (e"...") to PP so they can be
      preprocessed like a normal strings, it's not enabled when
      HB_C52_STRICT macro is set
2006-11-17 13:59:17 +00:00
Przemyslaw Czerpak
8d38c093b4 2006-11-17 13:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
  * harbour/source/common/hbstr.c
  * harbour/source/compiler/harbour.l
  * harbour/source/macro/macro.l
  * harbour/source/macro/macro.slx
  * harbour/source/compiler/harbour.slx
    * changed parameters in function: hb_compStrToNum() now the string
      size is passed explicitly so it can work with strings which does
      not have trailing ASCII NUL character.

  * harbour/source/macro/macro.y
    * indenting

  * harbour/include/hbmacro.h
  * harbour/source/common/hbstr.c
  * harbour/source/macro/macro.l
  * harbour/source/macro/macro.y
    * added two new functions for macro compiler: hb_macroLexNew() and
      hb_macroLexDelete() to clearly separate lexer from grammar parser.

  * harbour/source/compiler/harbour.l
  * harbour/source/common/hbstr.c
  * harbour/source/pp/ppcore.c
    * added error generation for wrong e"..." strings and fixed \" quoting
    * removed \q quoting

  * harbour/source/pp/ppcore.c
  * harbour/source/pp/ppgen.c
    * added small description in headers

  * harbour/common.mak
  * harbour/source/pp/Makefile
  * harbour/source/pp/pplib.c
  + harbour/source/pp/pplib2.c
  * harbour/include/hbextern.ch
    + added auto destructor for allocated PP context, it's not longer
      necessary to execute __PP_FREE() so this function was moved from
      the standard .prg API to file with backward compatible functions
    * changed __PREPROCESS() to __PP_PROCESS()
    * moved setting std rules to separate file so now if user uses PP
      with only his own rules we are not forcing linking static tables
      which are quite huge (over 100kb)
      To include stdandard rules in static binaries user should add
      to his code:
         REQUEST __PP_STDRULES

  + harbour/source/pp/pplib3.c
    * old PP functions for backward compatibility:
         __PPADDRULE(), __PREPROCESS(), __PP_FREE()
      Please note that using this function is not MT safe. They should
      work like with old PP code. Using any of this function automatically
      forces linking __PP_STDRULES
2006-11-17 12:29:24 +00:00
Przemyslaw Czerpak
c448973306 2006-11-15 14:20 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
    + added
         void * pLex;
      member to HB_MACRO structure - it will be necessary for MT safe
      macro parser

  * harbour/include/set.ch
  * harbour/include/hbexprb.c
  * harbour/source/macro/macro.l
  * harbour/source/macro/macro.y
    * indenting, formatting and converting tabs to spaces

  * harbour/include/hbpp.h
  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/ppgen.c
  * harbour/source/pp/pplib.c
    * make HB_PP_TOKEN structure public for other code and changed
      public PP API to not force including static rules by programs
      which does not need them.
    + added basic API for using PP as lexer
    * divided HB_PP_TOKEN_MACRO to HB_PP_TOKEN_MACROVAR and
      HB_PP_TOKEN_MACROTEXT and mark
         [<keyword>][&<keyword>[.[<nextidchars>]]]+
      as HB_PP_TOKEN_MACROTEXT not pair HB_PP_TOKEN_KEYWORD and
      HB_PP_TOKEN_MACRO
      It allows easier integration PP as (macro)compiler lexer and
      fixes preprocessing [<keyword>][&<keyword>[.[<nextidchars>]]]+
      in some patterns.

  * harbour/utils/hbtest/Makefile
    + added PP library to linked library list

  * harbour/source/macro/macro.y
    + added seaport to use PP as lexer. It's disabled by default and
      can be enabled using by defining HB_PP_MACROLEX. It eliminates
      using FLEX or SIMPLEX lexer in macro compiler. Now it emulates
      the behavior of FLEX lexer because I wanted to minimize the
      modification but in fact because parsed token are freed when
      macro compiler finish its job then we can resolve RT memory
      leaks which apear during parsing wrong expressions. It will be
      enough to drop allocating memory for new terminal symbols and
      using them as is like in compiler. It will also quite nice
      simplify include/hbexpr*.c code and will allow to move some
      functions to COMMON library. I want to make also pure compiler
      code MT safe so I will have to add passing pointer to a structure
      with compiler context just like in macro compiler. It means that
      if we define a structure which will be common to compiler and macro
      compiler with local (not common) data stored in other structure for
      which will will keep only a pointer then we will be able to move most
      of include/hbexpr*.c code to common library. But I do not want to
      make farther modification without consultation without Ryszard.
      Also to make PP default lexer some farther modifications should
      be done in core PP code and include/hbexpr*.c files to not reduce
      the speed. Now using HB_PP_MACROLEX for sure will have to cause
      speed reduction in macro compiler. But if we make necessary
      modifications then we should keep at least the same speed or
      probably reach noticeable better results.
2006-11-15 13:21:20 +00:00
Przemyslaw Czerpak
87538f21cd 2006-11-13 20:50 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
    ! fixed the problem reported by Enrico in code like:
         IF ["] $ var
      Unfortuantelly this fix also breaks some valid expressions like:
         x := a[ f("]") ] $ "test"
         x := a[ f( "'" ) ] $ "test"
      what is also Clipper compatible anyhow I think that in the future
      we may want to break Clipper compatibility and allow compilation
      of such code.

  * harbour/doc/pp.txt
    * updated documentation for the above modification
2006-11-13 19:49:57 +00:00
Przemyslaw Czerpak
d99b93ad14 2006-11-13 03:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/bin/hb-func.sh
    + pass GTK paths to GCC in hb* scripts when -xbgtk switch is used

  * harbour/contrib/rdd_ads/rddads.h
  * harbour/contrib/rdd_ads/adsfunc.c
    * indenting and casting

  * harbour/source/rdd/dbfcdx/dbfcdx1.c
    * cleaned typos in comments

  + harbour/tests/speedtst.prg
    + added speed test

  * harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
    + added HB_PP_TOKEN_ISNEUTRAL() macro to make code a little bit more
      readable

  * harbour/include/std.ch
    + added some missing old PP commands

  * harbour/source/Makefile
    * minor modification in order of compiled libraries

  * harbour/source/pp/pplib.c
    * changed the PP interface for .prg code.
      Now following functions are supported:

         __PP_INIT( [<cIncludePath>] [, <cStdChFile> ] ) -> <pPP>
            initialize new PP context and return pointer to it.
            when <cStdChFile> is empty string ("") then no default rules are
            used  only the dynamically created #defines like __HARBOUR__,
            __DATE__, __TIME__, __PLATFORM__*

         __PP_FREE( <pPP> )
            free PP context.

         __PP_PATH( <pPP>, <cPath> [, <lClearPrev>] )
            add new (or replace previous) include paths.

         __PP_RESET( <pPP> )
            reset the PP context (remove all rules added by user or
            preprocessed code)

         __PP_ADDRULE( <pPP>, <cDirective> )
            preprocess and execute new preprocessor directive

         __PREPROCESS( <pPP>, <cCode> ) -> <cPreprocessedCode>
            preprocess given code and return result

      User can create more then one PP context and then use each of them
      separately. Any modification in one context have no effect in other.
2006-11-13 02:40:33 +00:00
Przemyslaw Czerpak
a6415eebc4 2006-11-10 17:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/rdd_ads/rddads.h
    + added #define WIN32 when HB_OS_WIN_32 is set to not force -DWIN32
      compiler switch

  * harbour/source/pp/ppcore.c
    * cleaned BCC warnings

  * harbour/source/rdd/dbfcdx/dbfcdx1.c
    ! fixed ordKeyGoto() positioning when active filter is set and no
      controlling order
2006-11-10 16:40:40 +00:00
Przemyslaw Czerpak
c2b4a94705 2006-11-10 02:05 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbpp.h
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/hbusage.c
  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/ppgen.c
  * harbour/source/pp/pplib.c
    * restored support for old hb_inLine() syntax
    + added support for hb_inLine() to new PP. It can be enabled by
      -kI compiler switch. It's disabled by default.
      The new hb_inLine{} syntax is:
         [ <exp> ] hb_inLine [ ( [<params,...>] ) ] { [ <c_code> ] } [ <exp> ]
      <c_code> can contain new line characters.
      Nested hb_inLine{} in <params,...> is not supported. If you think
      it's important I can add it in few lines.
      This version does not break any valid Clipper syntax, hb_inLine is
      not reserved word and hb_inLine can be repeated many times in the
      same line. F.e. this code can be properly preprocessed and compied if
      you disable in compiler old hb_inLine() syntax and enable the new one
      by -kcI Harbour compiler switch:

         proc main()
         local hb_inLine := " (var) "
         ? hb_inLine{ hb_retc("inLine"); } + hb_inLine(" parameter ") {
              hb_retc( hb_parc( 1 ) );
              } + "!" + hb_inLine + hb_inLine() { hb_retc( ":-)" ); } + ;
           hb_inLine() + "{}"
         return
         function hb_inLine()
         return " func() "

      So from user point of view this version have real "inline" syntax.
      To be clear: I'm not a fun of any C inline extensions. They works
      only when we use .c code as compiler backend so the code which uses
      them cannot be used in .hrb files and any other format we will add
      in the future which do not support later C code compilation. F.e it
      will not work in compiler integrated with HVM or with .NET
      Anyhow if someone finds it useful then I think that it should be
      properly implemented. This is the reason I added the new version.
      The old one I left only for backward compatibility. It breaks any
      code which uses hb_inLine keyword can be used only once in a line
      and it does not have "inline" so IMHO it should not be enabled by
      default.
      I would like to hear your opinion about default compiler switches:
         1. should we disable both: hb_inLine() and hb_inLine {}
         2. should we disable hb_inLine() and enable hb_inLine {}
         3. should we disable hb_inLine {} and enable hb_inLine()
         4. should we enable both: hb_inLine() and hb_inLine {}

  + harbour/tests/hbinline.prg
    + added test code for new hb_inLine{} syntax

  * harbour/tests/inline_c.prg
    ! replaced direct access to HB_ITEM body by API function calls
2006-11-10 01:12:49 +00:00
Przemyslaw Czerpak
421371a395 2006-11-08 13:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/pp/ppcore.c
    * cleaned two warnings generated by old GCC versions
2006-11-08 12:39:15 +00:00
Przemyslaw Czerpak
437b04a8ea 2006-11-08 12:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/bin/hb-func.sh
    + added linker parametrs to hbcc

  * harbour/include/hbapi.h
    + added hb_retclenAdoptRaw()

  * harbour/include/hbapifs.h
  * harbour/source/common/hbfsapi.c
    * changed first parameters of hb_fsAddSearchPath() to const char *

  * harbour/include/hbclass.ch
    * update for new PP. I think that now we can try to create final
      version of our OOP rules.

  * harbour/include/hbdefs.h
    + added UCHAR and SCHAR typedefs

  * harbour/include/hbrddcdx.h
    * indenting

  * harbour/source/rdd/workarea.c
    ! fixed minor typo

  * harbour/source/common/hbdate.c
  * harbour/source/rtl/dates.c
    * moved hb_dateToday() and hb_dateTimeStr() from RTL to COMMON library

  - harbour/include/hbpp.h
  - harbour/source/pp/ppcomp.c
  - harbour/source/pp/ppcore.c
  - harbour/source/pp/pplib.c
  - harbour/source/pp/pptable.c
  - harbour/source/pp/pragma.c
  * harbour/utils/hbpp/Makefile
  * harbour/utils/hbpp/hbpp.c
  + harbour/utils/hbpp/hbpp.h
  + harbour/utils/hbpp/ppcomp.c
  + harbour/utils/hbpp/ppcore.c
  + harbour/utils/hbpp/pplib.c
  + harbour/utils/hbpp/pptable.c
  + harbour/utils/hbpp/pragma.c
    * moved all PP code to harbour/utils/hbpp
      It's interesting and working preprocessor and the code can be
      usable for some other things so I do not want to remove it.
      Probablly we should move it to contrib/hbpptext

  * harbour/include/hbcomp.h
  * harbour/include/hberrors.h
  * harbour/include/hbsetup.ch
  + harbour/include/hbpp.h
  + harbour/include/hbstdgen.ch
  * harbour/source/common/hbstr.c
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/hbgenerr.c
  + harbour/source/compiler/ppcomp.c
  * harbour/source/pp/Makefile
  + harbour/source/pp/ppcore.c
  + harbour/source/pp/pplib.c
  + harbour/source/pp/ppgen.c
    + New PP code written from scratch. It works in similar way to
      Clipper PP even the error codes are replicated. The code is MT
      safe does not have any limitation on size of preprocessed code,
      line, etc. It's also Clipper compatible lexer. It means that
      we do not longer need FLEX or SIMPLEX which can be replaced
      by new PP after some small modifications. Anyhow I haven't
      decided to make it myself. I would like to agree with with the
      rest of developers. I will be very happy if such modifications
      will be done by someone else, Ryszard?
      Meanwhile I current PP join on output the line tokens and give
      the string line to FLEX/SIMPLEX. It does not have any sense and
      all FLEX/SIMPLEX limitations are still existing. Ryszard, even
      if we keep it then I hope you can remove at least FLEX line buffer
      and use the one returned from PP.
      Because string tokens in parsed line are converted to text which is
      later once again decoded to tokens by FLEX I had to introduce new
      string format which supports embedded string delimiters. I chose
      modified version of xHarbour extension with escaped strings e"<sting>"
      so now FLEX understand such strings and decode them like C escaped
      strings. It means that you can use them also in the .prg code f.e.:
         outstd( e"Hello\n\rWorld" )
      The new PP is also noticeable faster. You should see the difference
      compiling long files. The build in PP rules are generated automatically
      by ppgen program created from source/pp/ppgen.c
      I had to add to GNU source/pp/Makefile these two lines:
         pptable.c : ppgen$(EXE_EXT)
         	./ppgen$(EXE_EXT) $(TOP)$(ROOT)include/hbstdgen.ch -opptable.c -q
      Sth like that will have to be done also in non GNU make system.
      Now Harbour can be compiled only using GNU make.
      Marek can you update non GNU make files? I would like to leave this
      modification to you or other developers who can test it.
      It was quite big modification and I do not believe that I haven't
      make any mistakes but I hope that in few weeks I'll fix any reported
      bugs and it will resolve any PP problems.
      TODO:
         * error messages
           create one common list of errors and warnings and keep it
           in common library. PP and compiler can still generate different
           errors with the same number. It can be confusing for the users
           and hard to document and add i18n translations.
           If possible we should also try to keep Clipper error numbers.
           In new PP code I added Clipper error numbers but I cannot use
           them until compiler code is not updated.
           We should aslo remove the ctype passed to error functions and
           hack with first character in warning messages and use only
           error number. The codes from 1000 to 1999 should be warnings
           where range 1000:1099 is activated by -w, 1100:1199 by -w1,
           1200:1299 by -w2, etc. 2000:2999 are errors and 3000:3999
           fatal errors. All compiler functions which generate an error
           should expect that error function will not stop the compiler
           but return and cleanly finished their job. It's necessary for
           MT support in compiler and making compiler part of some other
           programs which may still work and compile different source code.
         * FLEX/SIMPLEX
           remove them at all and add some final pass to PP to create
           more precise tokens for grammar parser or at least add better
           integration to remove some redundant code and existing limits.
         * hb_inLine() support - it's broken in new PP but as I can see
           it was never working correctly. I can add a hack to PP to support
           hb_inLine() but I'm not sure it's worth to do. Maybe in few days.

  + harbour/include/std.ch
    + added new std.ch. It was created without using Clipper's std.ch.
      It's quite possible that some rules are wrong and should be fixed
      so please help. Anyhow I created a set of programs based on new PP
      code generating all possible combinations of different commands I
      collected from different source code, documentation and match patterns
      of rules I was adding to new std.ch and then I was comparing .ppo
      files generated by Clipper and Harbour so I do not expect any bigger
      problems then some minor typos. I had to introduce some modifications
      in spacing as workaround for FLEX/SIMPLEX which cannot properly decode
      text preprocessed by Clipper after stringify.

  * harbour/utils/hbpptest/pretest.prg
    * updated for new PP
      It reports 16 wrong translations but some of them are valid
      and some others are caused by escaped string e"..." (one of hack
      for FLEX/SIMPLEX support)
      I also had to remove all spaces in comparison the results
      because they were not Clipper ocmpatible at all. Ryszard please
      look at it.
2006-11-08 12:06:17 +00:00
Przemyslaw Czerpak
68cb7f510b 2006-08-17 12:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/rdd_ads/ads1.c
  * harbour/include/hbapi.h
  * harbour/include/hbapigt.h
  * harbour/include/hbapiitm.h
  * harbour/include/hbdefs.h
  * harbour/include/hbrdddbf.h
  * harbour/include/hbstack.h
  * harbour/include/hbsxfunc.h
  * harbour/source/common/expropt1.c
  * harbour/source/common/hbstr.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/hbident.c
  * harbour/source/pp/ppcore.c
  * harbour/source/rdd/hbdbsort.c
  * harbour/source/rdd/dbffpt/dbffpt1.c
  * harbour/source/rdd/hbsix/sxcompr.c
  * harbour/source/rtl/hardcr.c
  * harbour/source/rtl/inkey.c
  * harbour/source/rtl/isprint.c
  * harbour/source/rtl/math.c
  * harbour/source/rtl/mtran.c
  * harbour/source/rtl/natmsg.c
  * harbour/source/rtl/gtcrs/chrmap.c
  * harbour/source/rtl/gtcrs/gtcrs.c
  * harbour/source/rtl/gtsln/gtsln.c
  * harbour/source/rtl/gtsln/gtsln.h
  * harbour/source/rtl/gtsln/kbsln.c
  * harbour/source/rtl/gtsln/keytrans.c
  * harbour/source/rtl/gtsln/mousesln.c
  * harbour/source/vm/estack.c
  * harbour/source/vm/extend.c
  * harbour/source/vm/runner.c
  * harbour/utils/hbver/hbverfix.c
    * general code cleanup, public functions declared in header files,
      local changed to static, added mising void for functions without
      parameters, etc.
      We still have some public functions which are not used by core code
      and not declared in header files, like:
         hb_memvarValueBaseAddress(), hb_memvarGetVarHandle(),
         hb_memvarGetValueByHandle(), hb_clsCreate(), hb_clsAdd(),
         hb_clsAssociate(), hb_hashTableDel(), hb_hashTableSize(),
      I haven't touched them yet though we will have to keep in mind that
      we should make sth with them.
2006-08-17 11:05:09 +00:00