<pre style='margin:0'>
Chris Jones (cjones051073) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/5097953904842f0d107547043c6e9c207dd53af6">https://github.com/macports/macports-ports/commit/5097953904842f0d107547043c6e9c207dd53af6</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 5097953 fpc: Update to 3.0.4 and improvements
</span>5097953 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 5097953904842f0d107547043c6e9c207dd53af6
</span>Author: Karl-Michael Schindler <karl-michael.schindler@web.de>
AuthorDate: Tue Apr 23 11:07:34 2019 +0200
<span style='display:block; white-space:pre;color:#404040;'> fpc: Update to 3.0.4 and improvements
</span>---
lang/fpc/Portfile | 197 +++++++++-----
lang/fpc/files/patch-iso-tmp.diff | 346 +++++++++++++++++++++++++
lang/fpc/files/patch-transparent-filename.diff | 93 +++++++
3 files changed, 576 insertions(+), 60 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/fpc/Portfile b/lang/fpc/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 5629b75..08e9f23 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/fpc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/fpc/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3,94 +3,171 @@
</span> PortSystem 1.0
name fpc
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version 2.6.4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 3.0.4
</span> categories lang
platforms darwin
license GPL-2 LGPL-2
maintainers nomaintainer
<span style='display:block; white-space:pre;background:#ffe0e0;'>-description free pascal
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-long_description Open source compiler for Pascal and Object Pascal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description Free Pascal, an open source Pascal and Object Pascal compiler.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description Free Pascal is a 32, 64 and 16 bit professional Pascal compiler. \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ It can target many processor architectures: Intel x86 (including 8086), \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AMD64/x86-64, PowerPC, PowerPC64, SPARC, ARM, AArch64, MIPS and the JVM. \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Supported operating systems include Linux, FreeBSD, Mac OS X/iOS/iPhoneSimulator/Darwin, \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Win32, Win64, WinCE and Android.
</span> homepage http://www.freepascal.org
master_sites sourceforge:freepascal
set src ${name}build-${version}.tar.gz
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set pp universal-macosx-10.5-ppcuniversal.tar.bz2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the 3.0.0 bootstrap compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set pp x86_64-macosx-10.7-ppcx64.tar.bz2
</span> distfiles ${src} ${pp}
checksums ${src} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 339b71d3c9983a720eed7c6bda1cfd330d89966f \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 8d9c3bcfa469d9b37c05663e2775d179809e4b3443604fac7d21aa64c9a56daa \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 f9414fe72342cff4317029f3a83a90e8dc710389 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 f66514e6f2c2e4e1bccccb4d554c24b77682ed61c87811ae5dd210f421855e76 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 68908523 \
</span> ${pp} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 0124c2f4447ba7f96e3db0a27e6bff459c5749f4 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 e7243e83e6a04de147ebab7530754ec92cd1fbabbc9b6b00a3f90a796312f3e9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 25fb3c2eb9fa364ee56a5f3c2667151143f39777 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 a67ef5def356d122a4692e21b209c328f6d46deef4539f4d4506c3dc1eecb4b0 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 1095556
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+supported_archs x86_64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# doesn't install shared libraries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+installs_libs no
</span>
extract.only ${src}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> use_configure no
universal_variant no
<span style='display:block; white-space:pre;background:#ffe0e0;'>-post-extract {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- system -W ${workpath} "bzip2 -dc ${distpath}/${pp} | tar xf -"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set fpcbasepath ${prefix}/libexec/${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+subport "chmcmd-${name}" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ description The FPC Pascal htmlhelp (CHM) compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ long_description \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ chmcmd is an cross-platform utility to generate compressed HTML (.chm) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ documentation, written in Free Pascal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_build-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ port:${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extract.post_args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/chm \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/fcl-xml \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/fcl-base \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/fcl-process \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/fpmkunit \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/hash \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/iconvenc \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/libtar \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/paszlib \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/packages/univint \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${name}build-${version}/fpcsrc/rtl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ worksrcdir ${name}build-${version}/fpcsrc/packages/chm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use_configure yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.cmd ${fpcbasepath}/bin/fpcmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.pre_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args -r -v Makefile.fpc.fpcmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.post_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build.env PREFIX=${prefix}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build.target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build.post_args-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ V=1 VERBOSE=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 755 ${build.dir}/chmcmd ${destroot}${prefix}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-worksrcdir ${name}build-${version}/fpcsrc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set fpcbasepath ${prefix}/lib/${name}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-build.env PP=${workpath}/ppcuniversal \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- PREFIX=${destroot}${fpcbasepath}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-build.target all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${subport} eq "${name}"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ installs_libs yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ post-extract {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system -W ${workpath} "bzip2 -dc ${distpath}/${pp} | tar xf -"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-destroot.env ${build.env}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Fix filename issues in iso mode. Should be resolved in version 3.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles patch-transparent-filename.diff patch-iso-tmp.diff
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Yosemite fix: fpc's build system checkes MACOSX_DEPLOYMENT_TARGET and halts if > 10.9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-platform darwin {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.major} > 13} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- macosx_deployment_target 10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ post-patch {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # adjust the path "codfilepath" for plex from /usr/local to MacPort's prefix.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinplace "s|/usr/local|${prefix}|g" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/utils/tply/pyacc.y \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/utils/tply/pyacc.pas \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${worksrcpath}/utils/tply/plex.pas
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-post-destroot {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# create a symlink to the architecture dependent executable
</span> switch ${build_arch} {
"x86_64" {
set b "ppcx64"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "i386" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set b "ppc386"
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set b "ppcppc"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ worksrcdir ${name}build-${version}/fpcsrc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build.env PP=${workpath}/${b} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ PREFIX=${destroot}${fpcbasepath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ build.target all
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ destroot.env ${build.env}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Yosemite fix: fpc's build system checks MACOSX_DEPLOYMENT_TARGET and halts if > 10.9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ platform darwin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${os.major} > 13} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ macosx_deployment_target 10.9
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ln -s ${fpcbasepath}/lib/${name}/${version}/${b} ${destroot}${fpcbasepath}/bin
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# generate a configuration file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -d ${destroot}${fpcbasepath}/etc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- system "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${destroot}${fpcbasepath}/bin/fpcmkcfg \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -d basepath=${fpcbasepath}/lib/${name}/${version} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -o ${destroot}${fpcbasepath}/etc/fpc.cfg
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# install man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -d ${destroot}${fpcbasepath}/man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach d {1 5} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- file copy ${workpath}/${name}build-${version}/install/man/man${d} ${destroot}${fpcbasepath}/man
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach f [glob ${destroot}${fpcbasepath}/man/man${d}/*.${d}] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- system "/usr/bin/gzip ${f}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # build the compiler utilities msgdif and msg2inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ post-build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system -W ${worksrcpath}/compiler/utils \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "../ppcx64 -WM10.9 -Fu../../rtl/units/${build_arch}-darwin msgdif.pp && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ../ppcx64 -WM10.9 -Fu../../rtl/units/${build_arch}-darwin msg2inc.pp"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ post-destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # create a symlink to the architecture dependent executable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s ${fpcbasepath}/lib/${name}/${version}/${b} ${destroot}${fpcbasepath}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # generate a configuration file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -d ${destroot}${fpcbasepath}/etc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${fpcbasepath}/bin/fpcmkcfg \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -d basepath=${fpcbasepath}/lib/${name}/${version} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -o ${destroot}${fpcbasepath}/etc/fpc.cfg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s ${fpcbasepath}/etc/fpc.cfg ${destroot}${prefix}/etc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # install man
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -d ${destroot}${fpcbasepath}/man
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach d {1 5} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file copy ${workpath}/${name}build-${version}/install/man/man${d} ${destroot}${fpcbasepath}/man
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f [glob ${destroot}${fpcbasepath}/man/man${d}/*.${d}] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system "/usr/bin/gzip ${f}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s ${fpcbasepath}/man/man1/fpc.1.gz ${destroot}${prefix}/share/man/man1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s ${fpcbasepath}/man/man5/fpc.cfg.5.gz ${destroot}${prefix}/share/man/man5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # chmcmd will be installed by the chmcmd-fpc subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file delete -force ${destroot}${fpcbasepath}/bin/chmcmd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach b [glob -nocomplain ${destroot}${fpcbasepath}/bin/*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set n [file tail ${b}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s ${fpcbasepath}/bin/${n} ${destroot}${prefix}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # install the compiler utilities msgdif and msg2inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 755 ${worksrcpath}/compiler/utils/msgdif ${destroot}${prefix}/bin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 755 ${worksrcpath}/compiler/utils/msg2inc ${destroot}${prefix}/bin
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ln -s ${fpcbasepath}/man/man1/fpc.1.gz ${destroot}${prefix}/share/man/man1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ln -s ${fpcbasepath}/man/man5/fpc.cfg.5.gz ${destroot}${prefix}/share/man/man5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-notes "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- The compiler fpc looks for the fpc.cfg file in the following places: \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- - The current directory. \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- - Home directory, looks for .fpc.cfg \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- - The directory specified in the environment variable PPC_CONFIG_PATH, \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- and if it's not set under compilerdir/../etc. \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- - If it is not yet found: in /etc. \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- All the files of fpc are installed in ${fpcbasepath} and \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- the executables are installed in ${fpcbasepath}/bin. \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- The fpc.cfg is installed in ${fpcbasepath}/etc to make fpc find fpc.cfg. \n\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- To customize, use ~/.fpc.cfg or /etc/fpc.cfg and call ${fpcbasepath}/bin/fpc directly.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ notes "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ The compiler fpc looks for the fpc.cfg file in the following places: \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ - The current directory. \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ - Home directory, looks for .fpc.cfg \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ - The directory specified in the environment variable PPC_CONFIG_PATH, \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ and if it's not set under compilerdir/../etc. \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ - If it is not yet found: in /etc. \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ All the files of fpc are installed in ${fpcbasepath} and \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ the executables are installed in ${fpcbasepath}/bin. \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ The fpc.cfg is installed in ${fpcbasepath}/etc to make fpc find fpc.cfg. \n\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ To customize, use ~/.fpc.cfg or /etc/fpc.cfg and call ${fpcbasepath}/bin/fpc directly.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/fpc/files/patch-iso-tmp.diff b/lang/fpc/files/patch-iso-tmp.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..918300c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/fpc/files/patch-iso-tmp.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,346 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur rtl/inc/iso7185.pp rtl-new/inc/iso7185.pp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- rtl/inc/iso7185.pp 2017-02-17 19:04:47.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ rtl-new/inc/iso7185.pp 2017-02-18 10:38:58.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -47,13 +47,160 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ implementation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$IF defined(WINDOWS)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ isoLPWStr = PWideChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ isoWinBool = LongBool;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TSysCharSet = set of AnsiChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function GetEnvironmentStringsW: isoLPWStr; stdcall; external 'kernel32' name 'GetEnvironmentStringsW';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function FreeEnvironmentStringsW(_para1 : isoLPWStr): isoWinBool; stdcall; external 'kernel32' name 'FreeEnvironmentStringsW';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function StrLen(p : PWideChar): sizeint; external name 'FPC_PWIDECHAR_LENGTH'; overload;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$push}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$checkpointer off}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function CharInSet(Ch : WideChar; const CSet : TSysCharSet): Boolean;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CharInSet := (Ch <= #$FF) and (AnsiChar(byte(Ch)) in CSet);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function InternalChangeCase(const S : UnicodeString; const Chars: TSysCharSet; const Adjustment: Longint): UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i : Integer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p : PWideChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unique : Boolean;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ InternalChangeCase := S;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if InternalChangeCase = '' then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unique := false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p := PWideChar(InternalChangeCase);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for i := 1 to Length(InternalChangeCase) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if CharInSet(p^, Chars) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if not unique then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ UniqueString(InternalChangeCase);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p := @InternalChangeCase[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unique := true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p^ := WideChar(Ord(p^) + Adjustment);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function UpperCase(const s : UnicodeString) : UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ UpperCase := InternalChangeCase(s, ['a'..'z'], -32);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function GetEnvironmentVariable(const EnvVar : UnicodeString) : UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ s, upperenv : UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i : Longint;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hp, p : PWideChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ GetEnvironmentVariable := '';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p := GetEnvironmentStringsW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hp := p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ upperenv := uppercase(envvar);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while hp^ <> #0 do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ s := hp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i := pos('=', s);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if uppercase(copy(s,1,i-1)) = upperenv then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ GetEnvironmentVariable := copy(s, i+1, length(s)-i);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { next string entry }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hp := hp + strlen(hp) + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ FreeEnvironmentStringsW(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function getTempDir: String;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ astringLength : Integer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := GetEnvironmentVariable('TMP');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if getTempDir = '' then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := GetEnvironmentVariable('TEMP');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ astringlength := Length(getTempDir);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (astringlength > 0) and (getTempDir[astringlength] <> DirectorySeparator) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := getTempDir + DirectorySeparator;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$pop}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ELSEIF defined(UNIX)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function getTempDir: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ key: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_env, i_key, i_value: integer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value := '/tmp/'; (** default for UNIX **)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while (envp <> NIL) and assigned(envp^) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_env := 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_key := 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while not (envp^[i_env] in ['=', #0]) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ key[i_key] := envp^[i_env];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_env);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_key);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ setlength(key, i_key - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (key = 'TEMP') or (key = 'TMP') or (key = 'TMPDIR') then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_env); (** skip '=' **)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_value := 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while (envp^[i_env] <> #0) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value[i_value] := envp^[i_env];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_env);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ setlength(value, i_value - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(envp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_value:=length(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (i_value > 0) and (value[i_value] <> DirectorySeparator) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value := value + DirectorySeparator;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := value;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ELSE} // neither unix nor windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function getTempDir: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir:='';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ENDIF}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {$i-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ procedure DoAssign(var t : Text);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ifndef FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ NextIndex : Word = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$endif FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Assign(t,'fpc_'+HexStr(random(1000000000),8)+'.tmp');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ifdef FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Assign(t,getTempDir+'fpc_'+HexStr(random(1000000000),8)+'.tmp');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$else FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Assign(t,getTempDir+'fpc_'+HexStr(NextIndex,4)+'.tmp');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Inc(NextIndex);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$endif FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Procedure Rewrite(var t : Text);[IOCheck];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { create file name? }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -172,7 +319,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { we shouldn't do this because it might confuse user programs, but for now it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ is good enough to get pretty unique tmp file names }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ifdef FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Randomize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$endif FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { reset opens with read-only }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Filemode:=0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur rtl/inc/typefile.inc rtl-new/inc/typefile.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- rtl/inc/typefile.inc 2017-02-18 10:41:19.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ rtl-new/inc/typefile.inc 2017-02-18 10:48:32.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -68,12 +68,151 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Rewrite(UnTypedFile(f),Size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ End;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{ this code is duplicated in the iso7185 unit }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$IF defined(WINDOWS)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ type
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ isoLPWStr = PWideChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ isoWinBool = LongBool;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TSysCharSet = set of AnsiChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function GetEnvironmentStringsW: isoLPWStr; stdcall; external 'kernel32' name 'GetEnvironmentStringsW';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function FreeEnvironmentStringsW(_para1 : isoLPWStr): isoWinBool; stdcall; external 'kernel32' name 'FreeEnvironmentStringsW';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function StrLen(p : PWideChar): sizeint; external name 'FPC_PWIDECHAR_LENGTH'; overload;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$push}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$checkpointer off}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function CharInSet(Ch : WideChar; const CSet : TSysCharSet): Boolean;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ CharInSet := (Ch <= #$FF) and (AnsiChar(byte(Ch)) in CSet);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function InternalChangeCase(const S : UnicodeString; const Chars: TSysCharSet; const Adjustment: Longint): UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i : Integer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p : PWideChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unique : Boolean;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ InternalChangeCase := S;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if InternalChangeCase = '' then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unique := false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p := PWideChar(InternalChangeCase);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for i := 1 to Length(InternalChangeCase) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if CharInSet(p^, Chars) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if not unique then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ UniqueString(InternalChangeCase);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p := @InternalChangeCase[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unique := true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p^ := WideChar(Ord(p^) + Adjustment);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function UpperCase(const s : UnicodeString) : UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ UpperCase := InternalChangeCase(s, ['a'..'z'], -32);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function GetEnvironmentVariable(const EnvVar : UnicodeString) : UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ s, upperenv : UnicodeString;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i : Longint;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hp, p : PWideChar;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ GetEnvironmentVariable := '';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ p := GetEnvironmentStringsW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hp := p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ upperenv := uppercase(envvar);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while hp^ <> #0 do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ s := hp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i := pos('=', s);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if uppercase(copy(s,1,i-1)) = upperenv then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ GetEnvironmentVariable := copy(s, i+1, length(s)-i);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { next string entry }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ hp := hp + strlen(hp) + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ FreeEnvironmentStringsW(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function getTempDir: String;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ astringLength : Integer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := GetEnvironmentVariable('TMP');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if getTempDir = '' then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := GetEnvironmentVariable('TEMP');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ astringlength := Length(getTempDir);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (astringlength > 0) and (getTempDir[astringlength] <> DirectorySeparator) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := getTempDir + DirectorySeparator;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$pop}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ELSEIF defined(UNIX)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function getTempDir: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ var
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ key: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_env, i_key, i_value: integer;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value := '/tmp/'; (** default for UNIX **)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while (envp <> NIL) and assigned(envp^) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_env := 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_key := 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while not (envp^[i_env] in ['=', #0]) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ key[i_key] := envp^[i_env];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_env);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_key);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ setlength(key, i_key - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (key = 'TEMP') or (key = 'TMP') or (key = 'TMPDIR') then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_env); (** skip '=' **)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_value := 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ while (envp^[i_env] <> #0) do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value[i_value] := envp^[i_env];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_env);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(i_value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ setlength(value, i_value - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ inc(envp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ i_value:=length(value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (i_value > 0) and (value[i_value] <> DirectorySeparator) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ value := value + DirectorySeparator;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir := value;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ELSE} // neither unix nor windows
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ function getTempDir: string;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ getTempDir:='';
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ENDIF}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {$ifdef FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { this code is duplicated in the iso7185 unit }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Procedure DoAssign(var t : TypedFile);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Assign(t,'fpc_'+HexStr(random(1000000000),8)+'.tmp');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Assign(t,getTempDir+'fpc_'+HexStr(random(1000000000),8)+'.tmp');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ End;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {$else FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { this code is duplicated in the iso7185 unit }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -81,8 +220,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ start : dword = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- Assign(t,'fpc_'+HexStr(start,8)+'.tmp');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$ifdef EXCLUDE_COMPLEX_PROCS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ runerror(219);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$else EXCLUDE_COMPLEX_PROCS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ Assign(t,getTempDir+'fpc_'+HexStr(start,8)+'.tmp');
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ inc(start);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ {$endif EXCLUDE_COMPLEX_PROCS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ End;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {$endif FPC_HAS_FEATURE_RANDOM}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/fpc/files/patch-transparent-filename.diff b/lang/fpc/files/patch-transparent-filename.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..39019b8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/fpc/files/patch-transparent-filename.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,93 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur compiler/globtype.pas compiler/globtype.pas
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- compiler/globtype.pas 2017-02-18 11:41:40.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ compiler/globtype.pas 2017-02-18 11:49:27.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -179,6 +179,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { parameter switches }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cs_check_unit_name,cs_constructor_name,cs_support_exceptions,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cs_support_c_objectivepas,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cs_transparent_file_names,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ { units }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cs_load_objpas_unit,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cs_load_gpc_unit,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur compiler/ngenutil.pas compiler/ngenutil.pas
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- compiler/ngenutil.pas 2017-02-18 11:41:57.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ compiler/ngenutil.pas 2017-02-18 11:48:51.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -274,12 +274,22 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (tfiledef(tstaticvarsym(p).vardef).filetyp=ft_text) and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (tstaticvarsym(p).isoindex<>0) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- addstatement(stat^,ccallnode.createintern('fpc_textinit_iso',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ccallparanode.create(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- cordconstnode.create(tstaticvarsym(p).isoindex,uinttype,false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ccallparanode.create(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- cloadnode.create(tstaticvarsym(p),tstaticvarsym(p).Owner),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- nil))));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if cs_transparent_file_names in current_settings.globalswitches then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ addstatement(stat^,ccallnode.createintern('fpc_textinit_filename_iso',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ccallparanode.create(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cstringconstnode.createstr(tstaticvarsym(p).Name),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ccallparanode.create(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cordconstnode.create(tstaticvarsym(p).isoindex,uinttype,false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ccallparanode.create(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cloadnode.create(tstaticvarsym(p),tstaticvarsym(p).Owner),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ nil)))))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ addstatement(stat^,ccallnode.createintern('fpc_textinit_iso',
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ccallparanode.create(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cordconstnode.create(tstaticvarsym(p).isoindex,uinttype,false),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ccallparanode.create(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ cloadnode.create(tstaticvarsym(p),tstaticvarsym(p).Owner),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ nil))));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur compiler/options.pas compiler/options.pas
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- compiler/options.pas 2017-02-18 11:42:12.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ compiler/options.pas 2017-02-18 11:47:51.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1933,6 +1933,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include(init_settings.moduleswitches,cs_support_macro);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 'o' : //an alternative to -Mtp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SetCompileMode('TP',true);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 'r' :
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ If UnsetBool(More, j, opt, false) then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ exclude(init_settings.globalswitches,cs_transparent_file_names)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ include(init_settings.globalswitches,cs_transparent_file_names);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {$ifdef gpc_mode}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 'p' : //an alternative to -Mgpc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SetCompileMode('GPC',true);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur rtl/inc/compproc.inc rtl/inc/compproc.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- rtl/inc/compproc.inc 2017-02-18 11:44:14.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ rtl/inc/compproc.inc 2017-02-18 11:47:10.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -411,6 +411,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Function fpc_get_input:PText;compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Function fpc_get_output:PText;compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Procedure fpc_textinit_iso(var t : Text;nr : DWord);compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Procedure fpc_textinit_filename_iso(var t : Text;nr : DWord;const filename : string);compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Procedure fpc_textclose_iso(var t : Text);compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Procedure fpc_Write_End(var f:Text); compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Procedure fpc_Writeln_End(var f:Text); compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff -Naur rtl/inc/text.inc rtl/inc/text.inc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- rtl/inc/text.inc 2017-02-18 11:44:36.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ rtl/inc/text.inc 2017-02-18 11:46:23.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -652,6 +652,20 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {$endif FPC_HAS_FEATURE_COMMANDARGS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Procedure fpc_textinit_filename_iso(var t : Text;nr : DWord;const filename : string);compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++begin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$ifdef FPC_HAS_FEATURE_COMMANDARGS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if paramstr(nr)='' then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ assign(t,filename+'.txt')
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ assign(t,paramstr(nr));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$else FPC_HAS_FEATURE_COMMANDARGS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ { primitive workaround for targets supporting no command line arguments,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ invent some file name, try to avoid complex procedures like concating strings which might
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ pull-in bigger parts of the rtl }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ assign(t,chr((nr mod 16)+65));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{$endif FPC_HAS_FEATURE_COMMANDARGS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Procedure fpc_textclose_iso(var t : Text);compilerproc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ begin
</span></pre><pre style='margin:0'>
</pre>