ide/project; compiler: Fixed IDE hangs on numerous syntax errors
- Added GetLinePeek() to DualPipe class
- Modified ProcessBuildPipeOutput() to make use of GetLinePeek()
- Calling fflush() on stdout from compiler
- Did not apply to other IDE/Project locations where GetLine() is used with pipes
 (ProcessCleanPipeOutput(), Build() when eC_Debug is on, ProcessPipeOutputRaw() when justPrint or isVC is on)
compiler/libec: Recognizing wide strings (L"text") distinctly
- Typed as uint16 * for now
compiler/libec: Improved detection of incompatible pointer types
- Added an additional check based on type size, as the compiler
  would previously not warn for assigning a uint16 * to a uint *
- Fixed type size computation for C structs (as included in C headers)
- Fixed FindType()'s null check to be for the context passed in rather than 'curContext'
  (assuming that was the original intent)
compiler/libec: Added missing casts in generated code from pass2
compiler/libec: Fixed warnings in generated code for incompatible pointer types
- Extending class objects casts to operator expressions in addition to args
- Silencing passing pointers to a function expecting a void ** arg
- Casting to void * when passing as typed_object &
   (Should really be a void * rather than a void **, but that might require
   tweaking code generated for classes methods if not already explicitly casted)
ecere/sys/JSON: add support for unit classes, struct members and null strings.
ecere/sys/Time: add missing TimeStamp::OnGetDataFromString.
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.
ecere/sys/GlobalSettings: fix settingsFilePath deleted even if FileOpenTryWrite opens file successfully.
ecere/sys/GlobalSettings: add GlobalSettings::settingsDirectory property to support specifying a subdirectory for the location of the settings file.
 - allow setting GlobalSettings::settingsDirectory::settingsFilePath property to specify a custom location for the settings file.
 - reuse code with new GetFilePath function.
README: use 'SQLCipher' which refers to the open source project instead of SQLiteCipher which is the name of the EDA driver.
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
ide: don't show same file name message if other same-named files are excluded when renaming a file in project view.
extras: add debug print line debugging tools.
ide: no functional change. rename various debug print line function calls. use ecere-sdk/extras/include/dpl.ec file.
------------------------------------------------ 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