* INSTALL
+ documented hbmk2 usage as shell, script runner and
.hrb builder/runner
* package/mpkg_win.nsi
* package/winuni/mpkg_win_uni.nsi
+ use hbmk2 as interactive shell instead of hbrun
* utils/hbmk2/hbmk2.prg
+ display Harbour version when starting up the interactive shell
- utils/hbmk2/p_ext.hb
* utils/hbmk2/hbmk2.prg
* embedded shell plugin into hbmk2.prg
! fixed typos in prev causing shell plugin to not load
* killed the word 'dynamic extension'. All extensions are
now dynamic
* killed word 'hbrun' from hbmk2 source, now the shell is
called 'hbshell', 'shell' or 'Harbour shell'
* contrib/hbide/hbide.hbp
* contrib/hbide/idemain.prg
+ enabled rddads by default. Requires rddads dynamic
build, use HB_BUILD_CONTRIB_DYN=yes
* contrib/hbrun/plugins.prg
! fixed shell plugin extension changed in prev
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.es_PE.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.pt_BR.po
+ -env: option is now available inside .hbp/.hbp files
! fixed -env: option to be processed only for the main
project (and not processed again for subprojects)
* contrib/hbnetio/utils/hbnetio/hbnetio.hbp
- contrib/hbnetio/utils/hbnetio/netiomgm.prg
+ contrib/hbnetio/utils/hbnetio/netiomgm.hb
* renamed hbrun/hbmk2 shell plugin code to .hb extension
* contrib/hbnetio/utils/hbnetio/netiosvc.prg
! added missing copyright and SVN ID header
* utils/hbmk2/hbmk2.prg
+ documented '.' parameter on -help screen.
; With this, hbmk2 has all the features of hbrun. Except:
- it doesn't contain the selection of statically linked
contribs:
hbct, hbxpp, hbexpat, hbmemio, hbmzip, hbnetio, hbunix, hbwin
These can now be loaded on-demand, f.e. by speccing
them in envvar HB_EXTENSION, from shell prompt or
#require directive, etc
- it doesn't contain the 'hbnetio management console' shell
plugin.
It now can be loaded by copying /contrib/hbnetio/utils/hbnetio/netiomgm.hb
to <home>/.harbour/.
It means hbmk2 can now be used to:
- convert Harbour source code to various kind of executables/binaries
- run Harbour source code directly
- serve as an interactive Harbour prompt/shell.
; As a next steps, HB_BUILD_CONTRIB_DYN may be enabled by
default, hbrun be deleted and hbmk2 renamed to f.e. simply 'hb'.
; Needs testing on non-Windows envs
* utils/hbmk2/hbmk2.hbp
+ copied some remaining options from hbrun.hbp
* utils/hbmk2/hbmk2.prg
+ added -hbreg[=global] and -hbunreg[=global] to register/unregister
.hb file type on Windows. It uses a trick to load hbwin dynamically,
so this will only work with HB_BUILD_CONTRIB_DYN=yes. It's grey
area of dependency because core cannot depend on contrib, but in
this case it's done dynamically and optionally and it gracefully
fails if the contrib component is missing, but still, it uses it,
if available. Hopefully in the future win registry functions can
be moved to core so it can be cleaned, or this functionality
removed from hbmk2 anytime, since it's not critical.
+ always detecting Harbour dir layout when entering runner mode,
so all subsystems can now use that information
* cleaned loading user configured dynamic extensions in runner mode
! fixed not adding global Harbour include dir in runner mode
+ all strings moved from hbrun code made translatable (except some
CUI elements for now)
% experimentally disabled embedded Harbour headers (build break
possible)
! fixed loading "ext" (dynamic extension loader) shell plugin
+ output shell plugin load RTE to stderr
* contrib/hbrun/hbrun.prg
* utils/hbmk2/hbmk2.prg
% minor optimization to not try to create ~/.harbour directory
on each __hbrun_ConfigDir() call, only when saving there.
* harbour/include/hbset.h
* harbour/src/vm/set.c
% removed HB_SET_OSCODEPAGE
% replaced HB_SET_DBCODEPAGE with hb_set_dbcp
* generate RTE when wrong parameter type (not string or NIL) is
passed to HB_SET_LANGUAGE, HB_SET_CODEPAGE, HB_SET_OSCODEPAGE,
HB_SET_DBCODEPAGE
* harbour/src/rtl/langapi.c
* generate RTE 1303 when not existing lang module name is passed to
hb_langSelectID() C function. It affects on all upper level
code using this function. NULL is accepted as valid parameter.
* harbour/src/rtl/cdpapi.c
* generate RTE 1302 when not existing codepage name is passed to
hb_cdpFindExt() C function. It affects on all upper level
code using this function. NULL is accepted as valid parameter.
If programmer does not want to generate RTE when wrong codepage
name is passed then he should use hb_cdpFind() instead.
* harbour/src/rtl/cdpapihb.c
* use hb_cdpFindExt() instead if hb_cdpFind() in HB_CDPUNIID()
function.
* harbour/src/rtl/cdpapihb.c
* harbour/contrib/hbexpat/internal.c
! use hb_parc() instead of hb_parcx() to get codepage name
from optional parameter.
* harbour/utils/hbmk2/Makefile
! fixed build process, now hbmk2 need HB_LIBS_MT_RDD
* harbour/src/rtl/tpersist.prg
% optimized decoding code which could be two slow with UTF8EX or
similar CPs.
- contrib/hbamf/hbref.c
* contrib/hbamf/amfdec.c
* contrib/hbamf/amfenc.c
* contrib/hbamf/amfstdio.c
* contrib/hbamf/hbamf.hbp
* contrib/hbamf/hbcls.c
* added hbamf_ prefix to public C functions
* locally used public C functions converted to static
* utils/hbmk2/hbmk2.prg
* minor
* contrib/hbplist
+ contrib/hbamf
+ contrib/hbamf/amf.h
+ contrib/hbamf/amfdec.c
+ contrib/hbamf/amfenc.c
+ contrib/hbamf/amfstdio.c
+ contrib/hbamf/hbamf.hbc
+ contrib/hbamf/hbamf.hbp
+ contrib/hbamf/hbamf.hbx
+ contrib/hbamf/hbcls.c
+ contrib/hbamf/hbref.c
+ contrib/hbamf/issues.txt
+ contrib/hbamf/readme.txt
+ contrib/hbamf/tests
+ contrib/hbamf/tests/hbmk.hbm
+ contrib/hbamf/tests/tstendin.prg
+ added AMF3 encoder/decoder
work of Aleksander Czajczynski and Ilina Stoilkovska
(with minor additions of mine: build file
cleanup, some C level formatting/comment cleanup, C++
fixes)
; NOTE: this is only the pure AMF3 encoder/decoder,
and doesn't include websocket layers
; TODO: adding license
* utils/hbmk2/hbmk2.prg
* minor in comments
* contrib/hbrun/hbrun.prg
* contrib/hbrun/plugins.prg
* utils/hbmk2/hbmk2.prg
* synced recent changes
+ changed extension filename to <home>/.harbour/hb_extension (hb_ext.ini in MS-DOS)
envvar to HB_EXTENSION
+ plugins are now loaded from <home>/.harbour/*.hb, <home>/.harbour/*.hrb
* contrib/hbrun/hbrun.prg
* utils/hbmk2/hbmk2.prg
* renamed history file to have a tool agnostic name
INCOMPATIBLE (history will be lost unless you rename
the existing file from .hbrun_history to .hb_history)
* INSTALL
* minor clarifications to INSTALL/TROUBLESHOOTING
* config/os2/watcom.mk
* config/wce/mingwarm.mk
* config/wce/msvcarm.mk
* config/wce/poccarm.mk
* config/win/bcc.mk
* config/win/mingw.mk
* config/win/msvc.mk
* config/win/pocc.mk
* config/win/watcom.mk
* config/win/xcc.mk
+ added std header paths to RC commands
* utils/hbmk2/Makefile
+ utils/hbmk2/hbmk2.rc
* utils/hbmk2/hbmk2.hbp
+ added std windows versioninfo and manifest to hbmk2
* utils/hbmk2/hbmk2.prg
+ utils/hbmk2/p_extdyn.hb
+ added almost complete hbrun functionality into hbmk2
to run it, type: 'hbmk2 .'
Missing is extension registration, plugins don't seem
to work yet, and I plan to switch from full screen
prompt to shell-like prompt. Plugin paths, extension
configuration, history on-disk files need further
polishing.
+ hbmk2 will act as a hbrun, if renamed to hbrun
* contrib/hbqt/qtcore/hbqt_misc.prg
+ added two TOFIXes for missing PROTECTED keyword
for two object variables of unknown purpose. Not
even HBQT developers know what it is, but without
it, HBQT breaks.
; Those who need "stable" hbqt (meaning "it builds")
Go to:
http://sourceforge.net/p/hbqt/
* INSTALL
+ extended troubleshooting instructions for code that
involves non-ASCII chars
* utils/hbmk2/hbmk2.prg
+ use UTF8 HVM in runner mode
+ enabled translations in runner mode
! in runner mode fixed setting up core header dir when no
dyanmic libs are used
! in runner mode, dynamic lib location should now be detected
also on *nix systems (untested)
* some other minor cleanups and tweaks to runner mode
* contrib/hbhttpd/log.prg
* contrib/hbtip/log.prg
* contrib/hbziparc/ziparc.prg
* src/rtl/hbdoc.prg
* src/rtl/hbi18n2.prg
* src/rtl/memvarhb.prg
* src/rtl/tlabel.prg
* src/rtl/treport.prg
% use HB_FNAMEEXTSETDEF() instead of manual logic.
it also fixes RTEs in hbziparc when passed non-string
filename to nearly any of its APIs.
* utils/hbi18n/hbi18n.hbp
* missed -shared enabler in .hbp
* utils/hbmk2/Makefile
* utils/hbmk2/hbmk2.hbp
+ enabled -shared build for hbmk2
* utils/hbmk2/hbmk2.prg
% consolidated .hbc finder logic
% moved 'hbmk' structure initializations to subfunctions
+ added Harbour installation autodetection for hbmk2's
runner mode. It's copy-paste code yet.
+ added automatic include path configuration in hbmk2's
runner mode. It means that now #require-d extensions
will have their include paths setup, so their header
will be found, so they can be used now.
; I more and more see it a reality to integrate hbrun
functionality into hbmk2. #require logic needs
much of hbmk2's facilities, and hbmk2 already has
basic runner capabilities. Contrib libs (and plugins)
will all have to be loaded dynamically in such case,
but since it works well, it should not be a problem.
Finally hbmk2 can be the utility that runs scripts
dynamically and also able to build an exe from them,
using the exact same source code, without any external
configuration, if the source code provides "#require"
clues. All it needs is both dynamic and static versions
of extensions (=contribs or addons).
* utils/hbmk2/hbmk2.prg
+ added support for #require directive in minimal script
runner. The plan is to model .hbc processing and header
directory setup for #require-ed extensions and backport
it to hbrun.
* include/harbour.hbx
* src/rtl/Makefile
+ src/rtl/cdpdet.prg
+ src/rtl/cdpdetc.c
+ moved terminal and OS detection logic from hbmk2 to RTL
with changes necessary to fit into core. New functions are:
hb_cdpOS() -> <cCP | NIL>
hb_cdpTerm() -> <cCP | NIL>
it means these functions can be used in any apps now.
Example:
hb_SetTermCP( hb_cdpTerm() )
Set( _SET_OSCODEPAGE, hb_cdpOS() )
* contrib/hbrun/hbrun.prg
* utils/hbmk2/Makefile
- utils/hbmk2/hbmk2c.c
* utils/hbmk2/hbmk2.hbp
* utils/hbmk2/hbmk2.prg
* using hb_cdpOS() and hb_cdpTerm() to automatically
configure OS and terminal CP
* contrib/make.hb
% use $d in hb_strformat() instead of calling hb_ntos()
! switched to UTF8EX to be in sync with hbmk2
* utils/hbmk2/hbmk2.prg
! fixed nasty regression caused by old problem where --hbinfo
output might have contained other information. Now hbmk2
makes sure to keep -info disabled and -quiet enabled when
in --hbinfo mode
* include/Makefile
* include/common.ch
+ include/hbhash.ch
+ moved hash-related constants from common.ch to new hbhash.ch
; common.ch include hbhash.ch for compatibility, protected by
HB_LEGACY_LEVEL4 so it will stop being included automatically.
If you use HB_HAUTOADD_* or HB_HMERGE_* constants, make sure
to #include "hbhash.ch".
* contrib/hbrun/headers.prg
* utils/hbmk2/hbmk2.prg
+ include hbhash.ch
* src/rdd/hbsix/sxini.prg
* use hbhash.ch instead of common.ch
* contrib/make.hb
* utils/hbmk2/hbmk2.es_PE.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.prg
+ use JSON format instead of hand-rolled microformat for
--hbinfo output (used in Harbour SVN for communication
between contrib make.hb script and hbmk2)
INCOMPATIBLE. Update your system in the unlikely event
you use --hbinfo output.
+ contrib/hbrun/extdyn.prg
+ contrib/hbrun/extdynpl.hb
+ contrib/hbrun/extstat.prg
- contrib/hbrun/pullext.prg
- contrib/hbrun/pullextp.hb
* contrib/hbrun/hbrun.hbp
* contrib/hbrun/hbrun.prg
* contrib/hbrun/plugins.prg
* internal cleanup, renames and restructuring
+ findinpath function to accept arrays
+ loaded dynamic extensions are now searched in curdir,
hbrun dir and PATH on non-*nix and LD_LIBRARY_PATH on *nix
systems
! fixed findinpath always returning success
* renamed some stuff recently introduced:
HBRUN_DYN -> HBRUN_EXT
hbrun.dyn -> hbrun.ext
dyn plugin -> ext plugin (f.e. ext.list, ext.load, ext.unload)
; all non-core modules are called "extensions", the ones
linked at build time are called "static extensions", ones loaded
dynamically are called "dynamic extensions". Console command
plugins are called "plugins". It's still not final.
* utils/hbmk2/hbmk2.prg
! misplaced comment
* src/pp/ppcore.c
+ accept and ignore '#require' PP directive
* contrib/hbrun/hbrun.prg
* utils/hbmk2/hbmk2.prg
+ use '#require "name"' to request modules.
(This replaces former '//#require', '//#pragma module' and
'*#pragma module' directives.)
* utils/hbmk2/hbmk2.prg
+ add .hbc automatically for '#require' directives (experimental)
; TODO: to work also in non-incremental mode and to work
reliably in -inc mode. To not impact performance, the
compiler could do a callback when #require is found,
hbmk2 could find the .hbc and extend compiler options
dynamically.
! fixed finding .hbc files that were detected automatically
* contrib/hbrun/hbrun.1
+ added my name as author
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.es_PE.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.pt_BR.po
% use '$d' in hb_strformat() instead of manually converting to string
using hb_ntos() or str()
! fixed header misalignment in generated .hbx files after today's mods
* utils/hbmk2/hbmk2.prg
* default -plugin= extension is .hb (was .prg)
+ hbmk_FindInPath() API now accepts array as second parameter
+ .hbp files are now looked for in addons/contrib paths. They
will be found the same way as .hbc files, f.e. hello.hbp
in addons/hello/hello.hbp or contrib/hello/hello.hbp
(dir and .hbp name must be the same for this to happen).
You can extend the list of root dirs using HB_INSTALL_ADDONS
(same as for .hbc files). '-info' option will output the
the path where an .hbp file was found by hbmk2. This works
both for .hbp files passed to cmdline directly and embedded
.hbp subprojects.
* utils/hbmk2/hbmk2.es_PE.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.pt_BR.po
* updated with new original strings
* utils/hbmk2/hbmk2.prg
+ added all public plugin API function with "hbmk_" prefix.
old "hbmk2_" prefixed ones still exist for compatibility,
but it's recommended to change them. "hbmk2" is only used
now as the tool's name, but internally it's uniformly
referred to as "hbmk".
* utils/hbmk2/examples/plug_tpl.hb
+ most "hbmk2" converted to "hbmk"
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.es_PE.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.pt_BR.po
+ "hbmk2" name avoided inside the source and generated comments
+ "hbmk2" name converted to variable so it can be easily changed
! fixed few typos in outputs/help
* utils/hbmk2/hbmk2.prg
+ added extra protection to not delete the VCS revision
information when it already exist but current VCS revision
extraction command didn't return any results. This often
happens with new SVN 1.7.5, which fails with internal sqlite
error nearly always unless 'svn cleanup' is issued.
* utils/hbmk2/hbmk2.prg
+ use HB_DEFAULT()
% deleted common.ch
* contrib/hbrun/hbrun.prg
! fixed typo causing scripts being found in PATH to fail
to open.
* utils/hbmk2/hbmk2.prg
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.es_PE.po
! synced help text with actual list of supported macros.
* utils/hbmk2/Makefile
* utils/hbmk2/hbmk2.hbp
+ utils/hbmk2/hbmk2c.c
* utils/hbmk2/hbmk2.prg
+ added automatic detection of _SET_OSCODEPAGE and hb_SetDispCP()
Experimental, not well tested and it may need extensions to handle
all possible CPs and cases on *nix systems.
MS-DOS and OS/2 support are missing.
Autodetection will now be used instead of generic assumptions
and defaults stored in translation files.
+ enabled UTF8EX HVM CP on remaining (non-*nix) platforms.
; Once matured, this code can be moved to the core, possible
after rewrite in C. This will make it unnecessary to roll
private C code for hbmk2.
; Several problems remain on non-*nix systems when working with
actual non-ASCII filenames.
* utils/hbmk2/hbmk2.pt_BR.po
* utils/hbmk2/hbmk2.hu_HU.po
* utils/hbmk2/hbmk2.es_PE.po
- deleted translation (language) dependent CP settings.