compiler/libec: (#18, #26, #439, #685) Fixed serious performance issues and warnings ('declared inside parameter list')
- Proper identification of dependencies between C external declarations (edges of the graph)
- Implementation of a Topological Sort with support for breaking edges with forward declarations
- Algorithm based on description and pseudo code from en.wikipedia.org/wiki/Topological_sorting (first described by Kahn, 1962)
- (#18) Since we no longer have spurious warnings from bad generated C code, it is no longer necessary to perform any kind of
  filtering in the IDE build output and parallel builds will show all warnings
- Removed precompiled rules and source files as the grammar files now build as fast as any other files
- Fixed duplicate 'static' qualifiers for self watchers in classes declare static
- Improvements to the generated C code to reduce the number of differences with the bootstrap and not hard code struct sizes
   - Using actual size of structs and sizeof(void *)
   - Passing 0xF000F000 to eMember_/eClass_AddDataMember for 'alignment' now means 'pointer size alignment'
compiler/libec/pass15: Fix for using ^ (binary XOR) operator with enum values without warnings
ecere/net/Service: Avoiding problems when trying to start a Service already started
extras; samples: Fixed warnings
ecere/sys/JSON: add support for writing public base classes members.
ecere/gui/Window: update normalAnchor and normalSizeAnchor in ExternalPosition. add public get only property normalSizeAnchor.
ide: add GuiConfigData.ec to extras/gui. use GuiConfigData to remember ide and dialogs window positions.
README: use 'SQLCipher' which refers to the open source project instead of SQLiteCipher which is the name of the EDA driver.
ide: don't show same file name message if other same-named files are excluded when renaming a file in project view.
ide: (#882) save workspace file (.ews) in json format.
ide;workspace: (#56) save opened files with relative file paths.
 - discard old or broken opened files entries.
 - fix a few null crashes.
 - fix a couple new compiler warnings.
ide: fix broken remove project from workspace.
ide: fix goto line from find in files not working because results (code) mistaken for valgrind output.
 - improve go to file/line from output logs
amendments for the two dpl commits.
extras/XMLParser: fix warning.
------------------------------------------------ work in progress starts here
buildsystem,epj2make,ide: (#996-related) wip-fix remaining issues with .ec modules containing ampersands or projects in paths that have ampersands in it or other special characters.
 - fix crossplatform.mk's echo shell command to all echoing empty line.
 - add cat/type shell commands to crossplatform.mk
 - wip-fix crossplatform.mk's shell commands (cp, mkdir, rmdir?) to properly handle file lists with file name with spaces in them
tarball: wip-add portable distribution tools. make portable. etc...
wip todo:
 [ x ] fix the commented out rules for files with filename with spaces in them
 [ . ] add support for PortableApps.com
 [ . ] portable/README -- rename the flavors? core/minimal/complete vs core/mingw/mingwc++/allinone

 [   ] OBJ = ../obj/portable.$(CONFIG).$(PLATFORM)$(COMPILER_SUFFIX)$(DEBUG_SUFFIX)/ vs OBJ = ../obj/portable/
 [   ] 32 vs 64 bit vs both
 [   ] cross compiling (portable and installer)
 [   ] linux version!
 [   ] ../obj/win32/bin -- hard coded paths, use vars, support bith depth, crossbuild

 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_TINYCC -- include this in minimal
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_SOURCES -- to include ecere-sdk source code
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_TDM_CPP -- make cpp optional, PORTABLE_ECERE_SDK_OPT_TDM would not install c++
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_MINGW -- a mingw-w64 edition? I think not...
 [   ] missing opt #PORTABLE_ECERE_SDK_OPT_MINGW_CPP -- "

 [   ] ecereIDE.ini multiple compiler configs?

 [   ] these files?

       [   ] $(call cpq,../obj/win32.x32/bin/ecere.dll ../obj/win32.x32/lib/libecereVanilla.a "ecere-sdk32")
       [   ] $(call cpq,../obj/win32.x32/bin/documentor.exe ../obj/win32.x32/bin/ide.exe "ecere-sdk32/ide")
       [   ] $(call cpq,../obj/win32.x32/bin/ear.exe ../obj/win32.x32/bin/ec.dll ../obj/win32.x32/bin/ecc.exe ../obj/win32.x32/bin/ecereCOM.dll ../obj/win32.x32/bin/ecp.exe ../obj/win32.x32/bin/ecs.exe ../obj/win32.x32/bin/epj2make.exe "ecere-sdk32/compiler")
       [   ] $(call cpq,../obj/win32.x32/bin/EDA.dll ../obj/win32.x32/bin/EDASQLite.dll "ecere-sdk32/eda")

       [   ] $(call cpq,../ide/res/icon.png ecere.png ryoanji.png ryoanji-progress.png ""

       [   ] $(call cpq,../ecere/res/elements/areaClose.png ../ecere/res/elements/areaMaximize.png ../ecere/res/elements/areaMinimize.png ../ecere/res/elements/areaRestore.png ../ecere/res/elements/arrowDown.png ../ecere/res/elements/arrowLeft.png ../ecere/res/elements/arrowRight.png ../ecere/res/elements/arrowUp.png "ecere/elements"
       [   ] $(call cpq,../ecere/res/unicode/derivedGeneralCategoryStripped.txt "ecere/unicode"
       [   ] $(call cpq,../ecere/res/actions/folderNew.png ../ecere/res/actions/goUp.png "ecere/actions"
       [   ] $(call cpq,../ecere/res/devices/computer.png ../ecere/res/devices/driveHardDisk.png ../ecere/res/devices/driveRemovableMedia.png ../ecere/res/devices/mediaFloppy.png ../ecere/res/devices/mediaOptical.png "ecere/devices"
       [   ] $(call cpq,../ecere/res/mimeTypes/file.png ../ecere/res/mimeTypes/brokenFile.png "ecere/mimetypes"
       [   ] $(call cpq,../ecere/res/places/driveRemote.png ../ecere/res/places/folder.png ../ecere/res/places/folderRemote.png ../ecere/res/places/networkServer.png ../ecere/res/places/networkWorkgroup.png ../ecere/res/places/brokenFolder.png "ecere/places"
       [   ] $(call cpq,../ecere/res/status/folderOpen.png "ecere/status"

       [   ] $(call cpq,../ecere/locale/es.mo ../ecere/locale/hu.mo ../ecere/locale/mr.mo ../ecere/locale/nl.mo ../ecere/locale/pt_BR.mo ../ecere/locale/ru.mo ../ecere/locale/zh_CN.mo "ecere/locale"

       [   ] $(call cpq,../obj/win32/bin/ecere.dll ../obj/win32/lib/libecereVanilla.a "ecere-sdk"
       [   ] $(call cpq,../obj/win32/bin/documentor.exe ../obj/win32/bin/ide.exe "ecere-sdk/ide"
       [   ] $(call cpq,../obj/win32/bin/ear.exe ../obj/win32/bin/ec.dll ../obj/win32/bin/ecc.exe ../obj/win32/bin/ecereCOM.dll ../obj/win32/bin/ecp.exe ../obj/win32/bin/ecs.exe ../obj/win32/bin/epj2make.exe "ecere-sdk/compiler"
       [   ] $(call cpq,../obj/win32/bin/EDA.dll ../obj/win32/bin/EDASQLite.dll "ecere-sdk/eda"

       [   ] $(call cpq,coursework/Chapter\ 1\ -\ Getting\ Started/answers\ -\ chapter\ 1.odt coursework/Chapter\ 1\ -\ Getting\ Started/exercises\ -\ chapter\ 1.odt "ecere-sdk/coursework/Chapter 1 - Getting Started"
       [   ] $(call cpq,coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.1/helloWorld.ec coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.1/HelloWorld.epj "ecere-sdk/coursework/Chapter 1 - Getting Started/Lab1.1"
       [   ] $(call cpq,coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.2/form1.ec coursework/Chapter\ 1\ -\ Getting\ Started/Lab1.2/HelloForm.epj "ecere-sdk/coursework/Chapter 1 - Getting Started/Lab1.2"
       [   ] $(call cpq,coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/answers\ -\ chapter\ 2.odt coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/exercises\ -\ chapter\ 2.odt "ecere-sdk/coursework/Chapter 2 - Variables and Data Types"
       [   ] $(call cpq,coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.4/lab2.ec coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.4/Lab2.epj "ecere-sdk/coursework/Chapter 2 - Variables and Data Types/Lab2.4"
       [   ] $(call cpq,coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.5/variables.ec coursework/Chapter\ 2\ -\ Variables\ and\ Data\ Types/Lab2.5/VariablesApp.epj "ecere-sdk/coursework/Chapter 2 - Variables and Data Types/Lab2.5"
       [   ] $(call cpq,coursework/Chapter\ 3\ -\ Operators/answers\ -\ chapter\ 3.odt coursework/Chapter\ 3\ -\ Operators/exercises\ -\ chapter\ 3.odt "ecere-sdk/coursework/Chapter 3 - Operators"
       [   ] $(call cpq,coursework/Chapter\ 3\ -\ Operators/Lab3/lab3.ec coursework/Chapter\ 3\ -\ Operators/Lab3/Lab3.epj "ecere-sdk/coursework/Chapter 3 - Operators/Lab3"
       [   ] $(call cpq,coursework/Chapter\ 4\ -\ Flow\ Control/answers\ -\ chapter\ 4.odt coursework/Chapter\ 4\ -\ Flow\ Control/exercises\ -\ chapter\ 4.odt "ecere-sdk/coursework/Chapter 4 - Flow Control"
       [   ] $(call cpq,coursework/Chapter\ 4\ -\ Flow\ Control/Lab4/lab4.ec coursework/Chapter\ 4\ -\ Flow\ Control/Lab4/Lab4.epj "ecere-sdk/coursework/Chapter 4 - Flow Control/Lab4"
       [   ] $(call cpq,coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/answers\ -\ chapter\ 5.odt coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/exercises\ -\ chapter\ 5.odt "ecere-sdk/coursework/Chapter 5 - Structures and Enumerations"
       [   ] $(call cpq,coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/colors/lab5colors.ec coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/colors/lab5colors.epj "ecere-sdk/coursework/Chapter 5 - Structures and Enumerations/Lab5/colors"
       [   ] $(call cpq,coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/vectors/lab5vectors.ec coursework/Chapter\ 5\ -\ Structures\ and\ Enumerations/Lab5/vectors/lab5vectors.epj "ecere-sdk/coursework/Chapter 5 - Structures and Enumerations/Lab5/vectors"
       [   ] $(call cpq,coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/answers\ -\ chapter\ 6.odt coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/exercises\ -\ chapter\ 6.odt "ecere-sdk/coursework/Chapter 6 - Classes, Methods and Instances"
       [   ] $(call cpq,coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/Lab6/lab6.ec coursework/Chapter\ 6\ -\ Classes,\ Methods\ and\ Instances/Lab6/lab6.epj "ecere-sdk/coursework/Chapter 6 - Classes, Methods and Instances/Lab6"
------------------------------------------------ customized starts here
ide: FindInFilesDialog: add checkboxes similar to 'include subdirectories' for in/ex-cluding 'obj' dirs and '.git' dirs.