texlive[64113] Master: transparent-io (13aug22)

commits+karl at tug.org commits+karl at tug.org
Sat Aug 13 22:34:14 CEST 2022


Revision: 64113
          http://tug.org/svn/texlive?view=revision&revision=64113
Author:   karl
Date:     2022-08-13 22:34:14 +0200 (Sat, 13 Aug 2022)
Log Message:
-----------
transparent-io (13aug22)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/plain/transparent-io/
    trunk/Master/texmf-dist/doc/plain/transparent-io/README
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIO.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOauto.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOextract.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinput.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinstall.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOlineno.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOmacros.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopen.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenin.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenout.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOprivate.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOsupport.org
    trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-TUGboat-danger.tex
    trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.pdf
    trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.tex
    trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-eccentric.tex
    trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-example.tex
    trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-hello.tex
    trunk/Master/tlpkg/tlpsrc/transparent-io.tlpsrc

Added: trunk/Master/texmf-dist/doc/plain/transparent-io/README
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/README	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/README	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,86 @@
+This package provides macros to make the file I/O in plain TeX more
+transparent. That is, every \input, \openin, and \openout operation by
+TeX is presented to the user who must check carefully what's going on
+and then has to enter several inputs including the repetition of the
+file name if the file I/O is accepted.
+
+The application of the macros requires concentration; don't execute
+TeX with an instrumented source file hastily. Moreover, to use the
+macros successfully you must have a non-beginner's knowledge of TeX.
+
+The macros are installed in an non-trivial process. The process is
+described in the manual for a UNIX-like system. You must be able to
+run sed and bash.
+
+
+>>> PACKAGE MAINTAINERS:
+This package cannot and should not be used from the TDS without an
+__individual__ installation by the user. The installation procedure
+renames the files and relocates them.
+
+
+I use the words package, program, TrIO macros, or TrIO when I refer to
+the program statements in the twelve files named either TrIO*.org (see
+below) or TrIO*.tex (six files, see below), openin.tex, openout.tex,
+TrIO*.sed (three files, see below), and TrIO.sh after the
+installation.
+
+ 1. TrIOmacros.org: main file to instrument a source file
+ 2. TrIOsupport.org: common macros to TrIOmacros.tex and TrIOauto.tex
+ 3. TrIOprivate.org: copies of control sequences and test routines
+ 4. TrIOinput.org: called for every \input
+ 5. TrIOopenin.org: entered by the user for every \openin
+ 6. TrIOopenout.org: entered by the user for every \openout
+
+ 7. TrIOextract.org: sed script to create TrIOnames.tex (see manual)
+ 8. TrIOlineno.org: another sed script to create TrIOnames.tex
+ 9. TrIOauto.org: replacement for TrIOmacros.tex in repeated executions
+10. TrIOopen.org: called for every I/O command in TrIOnames.tex
+
+11. TrIO.org: bash script to install the package
+12. TrIOinstall.org: sed script to set passwords and private messages
+
+The last two files are only used for the installation. They must be
+renamed and edited, see the manual. During their execution they will
+change and rename the other ten files.
+
+The first six files are renamed during the installation so that all
+have the extension .tex instead of .org; in the names of files 5 and 6
+the ``TrIO'' prefix is deleted too. Files 7--10 are also renamed: The
+first two become sed scripts the other two .tex files.
+
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 3 of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+The package consists of the following files:
+
+TrIO*.org                         -- 12 files (see above) that must be
+                                     customized to become an installation
+Transparent-IO-doc.pdf            -- a manual that describes the installation
+                                     and the use of the TrIO macros
+Transparent-IO-doc.tex            -- the source of the manual; it requires
+                                     plain TeX
+Transparent-IO-example.tex        -- an example from the documentation
+Transparent-IO-eccentric.tex      -- another example from the documentation
+Transparent-IO-hello.tex          -- used in the above two examples
+Transparent-IO-TUGboat-danger.tex -- see the TUGboat article referenced in
+                                     the documentation for its relevance;
+                                     rename the file to ``danger.tex'' if
+                                     you want to run this example
+README                            -- this file
+
+Copyright (C) 2022 Udo Wermuth (author)
+                   u dot wermuth (at) icloud dot com
+
+


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIO.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIO.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIO.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,13 @@
+#!/bin/bash
+inst_dir=.
+
+sed -f TrIOinstall.sed TrIOmacros.org > $inst_dir/TrIOmacros.tex
+sed -f TrIOinstall.sed TrIOauto.org > $inst_dir/TrIOauto.tex
+sed -f TrIOinstall.sed TrIOopen.org > $inst_dir/TrIOopen.tex
+sed -f TrIOinstall.sed TrIOprivate.org > $inst_dir/TrIOprivate.tex
+sed -f TrIOinstall.sed TrIOsupport.org > $inst_dir/TrIOsupport.tex
+sed -f TrIOinstall.sed TrIOinput.org > $inst_dir/TrIOinput.tex
+sed -f TrIOinstall.sed TrIOextract.org > $inst_dir/TrIOextract.sed
+sed -f TrIOinstall.sed TrIOlineno.org > $inst_dir/TrIOlineno.sed
+sed -f TrIOinstall.sed TrIOopenin.org > $inst_dir/openin.tex
+sed -f TrIOinstall.sed TrIOopenout.org > $inst_dir/openout.tex


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIO.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOauto.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOauto.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOauto.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,61 @@
+\input TrIOsupport.tex
+%
+% First, macro for \input
+%
+\def\input{\TRIObegingroup \TrIOhandleglobaldefs \TrIOcountiocmd
+   \TrIOsetcatcodes \TrIOcount=\TRIOinputlineno \TRIOlet\TrIOnxt==%
+   \TRIOinput TrIOopen.tex }
+\def\TrIOcCkPxXmove#1\input{% transfer tokens closer to \input
+   \def\TrIOcCkPxXtransfer{#1}\input}
+%
+% Second, macros for \openin and \openout (\immediate is handled in TrIOnames.tex)
+%
+\def\openin{\TRIOthe\TrIOtropenin} \TrIOtropenin={\TrIOopenin}
+\def\TrIOopenin{\TRIObegingroup \TrIOhandleglobaldefs \TrIOcountiocmd
+   \TRIOxdef\TrIOnext{\TrIOcount=\TRIOthe\TRIOinputlineno}%
+   \TRIOafterassignment\TrIOOpenIn \TrIOcount=}
+\def\TrIOOpenIn{\TRIOafterassignment\TrIOOPENIN \TRIOglobal\TRIOlet\TrIOnxt=}
+\def\TrIOOPENIN{\TrIOnext \TrIOsetcatcodes \TRIOinput TrIOopen.tex }
+\let\openout=\openin
+%
+% Third, macros used in TrIOnames.tex
+%
+\def\TrIOenvinput{% set \TrIOleft and \TrIOright for \input
+   \TRIOlet\TrIOleft=\TrIOendgroup \TRIOlet\TrIOright=\TRIOrelax}
+\def\TrIOenvopen{%  set \TrIOleft and \TrIOright for \openin & \openout
+   \TRIOlet\TrIOleft=\TRIOrelax \TRIOlet\TrIOright=\TrIOendgroup}
+%
+\def\TrIOfFLouUexecute{% password-protected name
+   \TRIOifx=\TrIOnxt \TRIOgdef\TrIOnext{TrIO_}%
+   \TRIOelse \TRIOgdef\TrIOnext{TrIO_\TrIOnxt}%
+   \TRIOfi \TRIOafterassignment\TrIOfFLouUdoiocmd
+   \TRIOfont\TRIOunused=\TrIOnext}
+\def\TrIOfFLouUdoiocmd{% execute the I/O command
+   \TRIOlet\TrIOnext=\TRIOundefined \TrIOresumeafterassignment
+   % \TRIOunused is ``select font nullfont''
+   % \TrIOiocmd is undefined for \openin & \openout, \TRIOinput for \input
+   % \TrIOfile is undefined for \openin & \openout, file name for \input
+   \TRIOifx\TrIOright\TRIOrelax \TRIOexpandafter\TrIOleft
+      \TRIOexpandafter\TrIOiocmd\TRIOexpandafter\TrIOfile
+   \TRIOelse \TrIOiocmd\TrIOfile\TrIOright
+   \TRIOfi}
+%
+% Start
+%
+\TRIOinput TrIOprivate.tex
+\TRIOinput TrIOnames.tex
+\begingroup \newlinechar=`\^^J
+\errhelp{File I/O ( \input\openin\openout) is now under TrIO's control.^^JBe
+   alerted if a file is loaded without the proper TrIO message^^Jand
+   check that the file name without extension that raises^^Jthe font error matches
+   the file name of the TrIO message.}
+\ifx y\disablespecial % deactivate \special; write to log file
+   \TrIOmessage{<<< TrIO >>> \string\special: disabled, trace in \jobname.log}
+\else\ifx n\disablespecial % trace \special
+   \TrIOmessage{<<< TrIO >>> \string\special: primitive, trace in \jobname.log}
+\else
+   \TrIOmessage{<<< TrIO >>> \string\special: primitive}
+\fi\fi
+\let\threenosubdirs=\undefined \let\twonosubdirs=\undefined
+\let\disablespecial\undefined
+\errmessage{TrIO auto-mode activated. Type h to get instructions}\endgroup


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOauto.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOextract.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOextract.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOextract.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,42 @@
+#n extract TrIO information from a .log file
+/^This is TeX, Version 3.141592653/{
+   s/^This is.*/\\def\\TrIOeEMnvVfilenames{% password-protected name/p
+}
+/^\*\*/{
+   s/.*/\\TRIOifcase\\TrIOcnt\\TrIOstop{case 0 in auto}%/p
+}
+/^TrIO >>>/{
+   x
+   s/}%%/ \\TrIOfile}%/p   
+   x
+   s/\(.*\)/\\TrIOmessage{\1}%%/
+   h
+   s/.*: /\\TRIOor\\TRIOdef\\TrIOiocmd{\\/
+   s/input/TRIOinput/
+   s/INPUT/TrIOcCkPxXtransfer\\TRIOinput/
+   s/openin/TRIOaAmNzZopenin/
+   s/immediate /TRIOimmediate\\/
+   s/openout/TRIObBlOyYopenout/
+   /TRIOinput/s/\\TRIOdef/\\TRIOgdef/
+   s/%%/%/p
+}
+/^Please type another input file name/{
+   s/.*: /\\TrIOenvinput\\TRIOgdef\\TrIOfile{/
+   s/$/ }%/
+   x
+   H
+}
+/^\\FilenameOPEN.*=/{
+   s/.*=/\\TrIOenvopen\\TRIOdef\\TrIOfile{/
+   s/$/}%/
+   x
+   s/^.*\n//g
+   H
+}
+${
+   x
+   s/}%%/ \\TrIOfile}%/p
+}
+$a\
+\\TRIOelse\\TrIOstop{unknown case ( \\TrIOcnt) in auto}%\
+\\TRIOfi\\TrIOfFLouUexecute}


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOextract.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinput.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinput.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinput.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,13 @@
+\%`\0=12 \%`\3=12 \%`\4=12 \%`\5=12 \%`\6=12 \%`\7=12
+\%`\8=12 \%`\9=12 \%`\a=11 \%`\b=11 \%`\c=11 \%`\d=11
+\%`\e=11 \%`\f=11 \%`\g=11 \%`\h=11 \%`\i=11 \%`\j=11
+\%`\k=11 \%`\l=11 \%`\m=11 \%`\n=11 \%`\o=11 \%`\p=11
+\%`\q=11 \%`\r=11 \%`\s=11 \%`\t=11 \%`\u=11 \%`\v=11
+\%`\w=11 \%`\x=11 \%`\y=11 \%`\z=11 \%`\A=11 \%`\B=11
+\%`\C=11 \%`\D=11 \%`\E=11 \%`\F=11 \%`\G=11 \%`\H=11
+\%`\I=11 \%`\J=11 \%`\K=11 \%`\L=11 \%`\M=11 \%`\N=11
+\%`\O=11 \%`\P=11 \%`\Q=11 \%`\R=11 \%`\S=11 \%`\T=11
+\%`\U=11 \%`\V=11 \%`\W=11 \%`\X=11 \%`\Y=11 \%`\Z=11
+\%`\>=12 \%`\:=12 \%`\!=12 \%`\{=1 \%`\}=2
+\%`\%=\TrIOnext \TrIOdDjQwWcheck
+\TrIOmessage{>>> TRIO: Check passed!}


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinput.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinstall.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinstall.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinstall.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,20 @@
+# change password-protected names in TrIO files
+s/aAmNzZ/new password/g
+s/bBlOyY/ditto but different/g
+s/cCkPxX/ditto/g
+s/dDjQwW/ditto/g
+s/eEMnvV/ditto/g
+s/fFLouU/ditto/g
+s/gGKptT/ditto/g
+s/hHJqsS/ditto/g
+# the private messages in openin.tex and openout.tex
+s/Enter 1> return 2> file name/new private message/g
+# the private message in TrIOinput.tex
+s/Check passed/another private message/g
+# activate the next lines to change the prefix T[r|R]IO
+# s/TrIOfixedef/TrIxOfixedef/g
+# s/\\TRIO/\\TRIxO/g
+# s/\\TrIO/\\TrIxO/g
+# s./TRIO./TRIxO.g
+# s./TrIO./TrIxO.g
+# s/\\ifTrIO/\\ifTrIxO/g


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOinstall.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOlineno.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOlineno.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOlineno.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,45 @@
+#n extract TrIO information from a .log file
+/^This is TeX, Version 3.141592653/{
+   s/^This is.*/\\def\\TrIOeEMnvVfilenames{% password-protected name/p
+}
+/^\*\*/{
+   s/.*/\\ifcase\\TrIOcnt\\iffalse/p
+}
+/^TrIO >>>/{
+   x
+   s/}%%/ \\TrIOfile}%/p
+   x
+   s/\(.*\)/\\TrIOmessage{\1}%%/
+   h
+   s/.*Line /\\else\\TrIOstop{case ( \\TrIOcnt) in auto}\\fi\n\\or\\ifnum\\TrIOcount=/
+   s/: /\\def\\TrIOiocmd{\\/
+   s/input/TRIOinput/
+   s/INPUT/TrIOcCkPxXtransfer\\TRIOinput/
+   s/openin/TRIOaAmNzZopenin/
+   s/immediate /immediate\\/
+   s/openout/TRIObBlOyYopenout/
+   /TRIOinput/s/\\def/\\gdef/
+   s/%%/%/p
+}
+/^Please type another input file name/{
+   s/.*: /\\TrIOenvinput\\gdef\\TrIOfile{/
+   s/$/ }%/
+   x
+   H
+}
+/^\\FilenameOPEN.*=/{
+   s/.*=/\\TrIOenvopen\\def\\TrIOfile{/
+   s/$/}%/
+   x
+   s/^.*\n//g
+   H
+}
+${
+   x
+   s/}%%/ \\TrIOfile}%/p
+   x
+   s/.*/\\else\\TrIOstop{case ( \\TrIOcnt) in auto}\\fi/p
+}
+$a\
+\\else\\TrIOstop{unknown case ( \\TrIOcnt) in auto}%\
+\\fi\\TrIOfFLouUexecute}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOlineno.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOmacros.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOmacros.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOmacros.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,115 @@
+\input TrIOsupport.tex
+%
+% First, macros for \input
+%
+\def\TrIOempty{}\def\TrIOfixedef{\TRIOnoexpand\TrIOempty{}\TRIOendgroup}
+% use \let\threenosubdirs=y or \let\twonosubdirs=y before \input \TrIOmacros
+\ifx y\threenosubdirs % set the prefix for \input; the directories must no exist
+   \def\TrIOnosubdir{nosubdir/nosubdir/nosubdir/}
+\else\ifx y\twonosubdirs
+   \def\TrIOnosubdir{nosubdir/nosubdir/}
+\else
+   \def\TrIOnosubdir{nosubdir/}
+\fi\fi
+\let\threenosubdirs=\undefined \let\twonosubdirs=\undefined
+% the next \def gives us the skip value 42 for \csname and \global, \long, \outer
+\def\TrIOinputmessage{% inform user what happens and what has to be done
+   \TrIOmessage{TrIO >>> ( \TrIOcnt) Line \TRIOthe\TRIOinputlineno: input}%
+   \TrIOmessage{>>> enter shown file name without `\TrIOnosubdir'.}\TrIOmessage{<<<}}
+\def\input{% add an unknown subdirectory to raise an error
+   \TRIObegingroup \TRIOafterassignment\TRIOnoexpand\TrIOempty
+   % the next line catches an \edef; then enter: 36, I\TrIOfixedef
+   \TRIOdef\TrIOskipXXXVIinsTrIOfixedef\TrIOempty{}\TrIOempty\TrIOhandleglobaldefs
+   \TRIOglobal\TRIOlet\TrIOskipXXXVIinsTrIOfixedef= \TRIOundefined \TrIOcountiocmd
+   \TrIOmessage{<<<}\TrIOsetcatcodes \TRIOinput TrIOinput.tex
+   \TrIOinputmessage \TrIOendgroup \TRIOinput \TrIOnosubdir}% plus file name gives error
+\def\TrIOcCkPxXmove#1\input{% transfer tokens closer to \TRIOinput
+   \def\TrIOcCkPxXtransfer{#1}\TrIOcCkPxXinput}
+\def\TrIOcCkPxXinputmessage{% inform user what happens and what has to be done
+   \TrIOmessage{TrIO >>> ( \TrIOcnt) Line \TRIOthe\TRIOinputlineno: INPUT}%
+   \TrIOmessage{>>> enter shown file name without `\TrIOnosubdir'.}\TrIOmessage{<<<}}
+\def\TrIOcCkPxXinput{% variant of \input for \TrIOcCkPxXmove
+   \TRIObegingroup \TRIOafterassignment\TRIOnoexpand\TrIOempty
+   \TRIOdef\TrIOskipXXXVIinsTrIOfixedef\TrIOempty{}\TrIOempty\TrIOhandleglobaldefs
+   \TRIOglobal\TRIOlet\TrIOskipXXXVIinsTrIOfixedef= \TRIOundefined \TrIOcountiocmd
+   \TrIOmessage{<<<}\TrIOsetcatcodes \TRIOinput TrIOinput.tex
+   \TrIOcCkPxXinputmessage \TrIOendgroup \TrIOcCkPxXtransfer\TRIOinput \TrIOnosubdir}
+%
+% Second, macros for \openin
+%
+\def\openin{\TRIOthe\TrIOtropenin} \TrIOtropenin={\TrIOopenin}
+\def\TrIOopenin{\TRIObegingroup \TrIOhandleglobaldefs \TrIOcountiocmd
+   \TRIOafterassignment\TrIOOpenIn \TrIOcount=}% get the stream number
+\def\TrIOOpenIn{\TRIOafterassignment\TrIOOPENIN
+   \TRIOlet\TrIOnxt=}% remove an optional =
+\def\TrIOOPENIN{% prepend the file name with a nonexistent subdirectory
+   \TrIOmessage{<<<}%
+   \TrIOmessage{TrIO >>> ( \TrIOcnt) Line \TRIOthe\TRIOinputlineno:
+      openin \TRIOthe\TrIOcount}%
+   \TrIOmessage{>>> If you accept that the file (without \TrIOnosubdir) is read}%
+   \TrIOmessage{>>> enter `openin' and follow the instructions.}%
+   \TrIOmessage{<<<}%
+   \TRIOifx=\TrIOnxt \TRIOdef\TrIOnxt{}\TRIOfi % keep a \next<>`='
+   \TrIOsetcatcodes \TRIOinput \TrIOnosubdir\TrIOnxt}% read a file name
+% look at file ``openin.tex''
+\def\TrIOaAmNzZopenin{% get a file name from user for \openin
+   \TRIOread16 to \FilenameOPENIN
+   \TRIOaAmNzZopenin\TRIOnumber\TrIOcount=\FilenameOPENIN
+   \TRIOlet\FilenameOPENIN=\TRIOundefined
+   \TRIOlet\TrIOnext=\TRIOundefined \TRIOlet\TrIOnxt=\TRIOundefined \TrIOendgroup}
+%
+% Third, macros for \immediate and \openout
+%
+\def\immediate{\TRIOthe\TrIOtrimmediate} \TrIOtrimmediate={\TrIOImmediate}
+\def\TrIOImmediate{% set a flag if \openout follows
+   \TRIObegingroup \TrIOhandleglobaldefs
+   \TRIOafterassignment\TrIOIMMEDIATE
+   \TrIOcount=`x}% a trick to expand the following token
+\def\TrIOIMMEDIATE#1{% if #1 is \TRIOimmediate set \TrIOimootrue
+   \TRIOifx#1\TRIOimmediate \TRIOglobal\TrIOimootrue
+   \TRIOelse \TRIOglobal\TrIOimoofalse\TRIOfi
+   \TrIOendgroup\TRIOimmediate#1}% apply the primitive
+\def\openout{\TRIOthe\TrIOtropenout} \TrIOtropenout={\TrIOopenout}
+\def\TrIOopenout{\TRIOimmediate\TRIObegingroup % unique start, not \begingroup
+   \TrIOhandleglobaldefs \TrIOcountiocmd
+   \TRIOafterassignment\TrIOOpenOut \TrIOcount=}
+\def\TrIOOpenOut{\TRIOafterassignment\TrIOOPENOUT
+   \TRIOlet\TrIOnxt=}% remove an optional =
+\def\TrIOOPENOUT{% prepend the file name with an unknown (!!) subdirectory
+   \TrIOmessage{<<<}%
+   \TrIOmessage{TrIO >>> ( \TrIOcnt) Line \TRIOthe\TRIOinputlineno:
+      \ifTrIOimoo immediate \TRIOfi openout \TRIOthe\TrIOcount}%
+   \TrIOmessage{>>> If you accept that the file (without \TrIOnosubdir) is created}%
+   \TrIOmessage{>>> enter `openout' and follow the instructions.}%
+   \TrIOmessage{<<<}%
+   \TRIOifx=\TrIOnxt \TRIOdef\TrIOnxt{}\TRIOfi % keep a \nxt<>`='
+   \TrIOsetcatcodes \TRIOinput \TrIOnosubdir\TrIOnxt}% read a file name
+% look at file ``openout.tex''
+\def\TrIObBlOyYopenout{% get a file name from user for \openout
+   \TRIOread16 to \FilenameOPENOUT
+   \ifTrIOimoo \TRIOglobal\TrIOimoofalse
+      \TRIOlet\TrIOnext=\TRIOimmediate
+   \TRIOelse \TRIOlet\TrIOnext=\TRIOrelax
+   \TRIOfi
+   \TrIOnext\TRIObBlOyYopenout\TRIOnumber\TrIOcount=\FilenameOPENOUT
+   \TRIOlet\FilenameOPENOUT=\TRIOundefined
+   \TRIOlet\TrIOnext=\TRIOundefined \TRIOlet\TrIOnxt=\TRIOundefined \TrIOendgroup}
+%
+% Start
+%
+\TRIOinput TrIOprivate
+\begingroup \newlinechar=`\^^J
+\errhelp{File I/O ( \input\openin\openout) is now under TrIO's control.^^JBe
+   alerted if a file is loaded without the proper TrIO message^^Jand
+   follow always the instruction of this message.^^JMake sure that the
+   sequence number is incremented sequentially.}
+\ifx y\disablespecial % deactivate \special; write to log file
+   \TrIOmessage{<<< TrIO >>> \string\special: disabled, trace in \jobname.log}
+\else\ifx n\disablespecial % trace \special
+   \TrIOmessage{<<< TrIO >>> \string\special: primitive, trace in \jobname.log}
+\else
+   \TrIOmessage{<<< TrIO >>> \string\special: primitive}
+\fi\fi
+\let\disablespecial\undefined
+\TrIOmessage{<<< TrIO >>> \string\TrIOnosubdir: \TrIOnosubdir}
+\errmessage{TrIO activated. Type h to get instructions}\endgroup


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOmacros.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopen.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopen.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopen.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,11 @@
+\%`\0=12 \%`\3=12 \%`\4=12 \%`\5=12 \%`\6=12 \%`\7=12
+\%`\8=12 \%`\9=12 \%`\a=11 \%`\b=11 \%`\c=11 \%`\d=11
+\%`\e=11 \%`\f=11 \%`\g=11 \%`\h=11 \%`\i=11 \%`\j=11
+\%`\k=11 \%`\l=11 \%`\m=11 \%`\n=11 \%`\o=11 \%`\p=11
+\%`\q=11 \%`\r=11 \%`\s=11 \%`\t=11 \%`\u=11 \%`\v=11
+\%`\w=11 \%`\x=11 \%`\y=11 \%`\z=11 \%`\A=11 \%`\B=11
+\%`\C=11 \%`\D=11 \%`\E=11 \%`\F=11 \%`\G=11 \%`\H=11
+\%`\I=11 \%`\J=11 \%`\K=11 \%`\L=11 \%`\M=11 \%`\N=11
+\%`\O=11 \%`\P=11 \%`\Q=11 \%`\R=11 \%`\S=11 \%`\T=11
+\%`\U=11 \%`\V=11 \%`\W=11 \%`\X=11 \%`\Y=11 \%`\Z=11
+\%`\%=\TrIOnext \TrIOdDjQwWcheck \TrIOeEMnvVfilenames


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopen.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenin.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenin.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenin.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,14 @@
+\%`\0=12 \%`\3=12 \%`\4=12 \%`\5=12 \%`\6=12 \%`\7=12
+\%`\8=12 \%`\9=12 \%`\a=11 \%`\b=11 \%`\c=11 \%`\d=11
+\%`\e=11 \%`\f=11 \%`\g=11 \%`\h=11 \%`\i=11 \%`\j=11
+\%`\k=11 \%`\l=11 \%`\m=11 \%`\n=11 \%`\o=11 \%`\p=11
+\%`\q=11 \%`\r=11 \%`\s=11 \%`\t=11 \%`\u=11 \%`\v=11
+\%`\w=11 \%`\x=11 \%`\y=11 \%`\z=11 \%`\A=11 \%`\B=11
+\%`\C=11 \%`\D=11 \%`\E=11 \%`\F=11 \%`\G=11 \%`\H=11
+\%`\I=11 \%`\J=11 \%`\K=11 \%`\L=11 \%`\M=11 \%`\N=11
+\%`\O=11 \%`\P=11 \%`\Q=11 \%`\R=11 \%`\S=11 \%`\T=11
+\%`\U=11 \%`\V=11 \%`\W=11 \%`\X=11 \%`\Y=11 \%`\Z=11
+\%`\>=12 \%`\{=1 \%`\}=2 \%`\%=\TrIOnext \TrIOdDjQwWcheck
+\TRIOgGKptTpausing=1 \TRIOdef\TrIOnext{My message
+Enter 1> return 2> file name}\TRIOgGKptTpausing=0
+\TrIOaAmNzZopenin


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenin.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenout.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenout.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenout.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,14 @@
+\%`\0=12 \%`\3=12 \%`\4=12 \%`\5=12 \%`\6=12 \%`\7=12
+\%`\8=12 \%`\9=12 \%`\a=11 \%`\b=11 \%`\c=11 \%`\d=11
+\%`\e=11 \%`\f=11 \%`\g=11 \%`\h=11 \%`\i=11 \%`\j=11
+\%`\k=11 \%`\l=11 \%`\m=11 \%`\n=11 \%`\o=11 \%`\p=11
+\%`\q=11 \%`\r=11 \%`\s=11 \%`\t=11 \%`\u=11 \%`\v=11
+\%`\w=11 \%`\x=11 \%`\y=11 \%`\z=11 \%`\A=11 \%`\B=11
+\%`\C=11 \%`\D=11 \%`\E=11 \%`\F=11 \%`\G=11 \%`\H=11
+\%`\I=11 \%`\J=11 \%`\K=11 \%`\L=11 \%`\M=11 \%`\N=11
+\%`\O=11 \%`\P=11 \%`\Q=11 \%`\R=11 \%`\S=11 \%`\T=11
+\%`\U=11 \%`\V=11 \%`\W=11 \%`\X=11 \%`\Y=11 \%`\Z=11
+\%`\>=12 \%`\{=1 \%`\}=2 \%`\%=\TrIOnext \TrIOdDjQwWcheck
+\TRIOgGKptTpausing=1 \TRIOdef\TrIOnext{My message
+Enter 1> return 2> file name}\TRIOgGKptTpausing=0
+\TrIObBlOyYopenout


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOopenout.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOprivate.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOprivate.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOprivate.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,245 @@
+% password-protected names for the used primitives, internal regeisters and quantities
+\let\TRIOhHJqsSbegingroup\begingroup
+\let\TRIOhHJqsSendgroup\endgroup
+\let\TRIOhHJqsSexpandafter\expandafter
+\let\TRIOhHJqsSnoexpand\noexpand
+\let\TRIOhHJqsSdef\def
+\let\TRIOhHJqsSedef\edef
+\let\TRIOhHJqsSgdef\gdef
+\let\TRIOhHJqsSxdef\xdef
+\let\TRIOhHJqsSlet\let
+\let\TRIOhHJqsSfuturelet\futurelet
+\let\TRIOhHJqsSglobal\global
+\let\TRIOhHJqsSglobaldefs\globaldefs
+\let\TRIOhHJqsSifcase\ifcase
+\let\TRIOhHJqsSifcat\ifcat
+\let\TRIOhHJqsSifnum\ifnum
+\let\TRIOhHJqsSifx\ifx
+\let\TRIOhHJqsSor\or
+\let\TRIOhHJqsSelse\else
+\let\TRIOhHJqsSfi\fi
+\let\TRIOhHJqsSafterassignment\TRIOafterassignment % must use the \TRIO... name here
+\let\TRIOhHJqsSimmediate\TRIOimmediate
+\let\TRIOhHJqsSinput\TRIOinput
+\let\TRIOhHJqsSread\read
+\let\TRIOhHJqsSwrite\write
+\let\TRIOhHJqsSthe\the
+\let\TRIOhHJqsSnumber\number
+\let\TRIOhHJqsSadvance\advance
+\let\TRIOhHJqsScatcode\catcode
+\let\TRIOhHJqsSfont\font
+\let\TRIOhHJqsSinputlineno\inputlineno
+\let\TRIOhHJqsSrelax\relax
+\let\TRIOhHJqsSundefined\undefined
+\let\TrIOhHJqsSspace\space
+%
+% password-protected macro names for allmost all defined macros
+\let\TrIOhHJqsSwlog\TrIOwlog
+\let\TrIOhHJqsSmessage\TrIOmessage
+\let\TrIOhHJqsSglobaldefs\TrIOglobaldefs
+\let\TrIOhHJqsSafter\TrIOafterassignment
+\let\TrIOhHJqsSsuspend\TrIOsuspendafterassignment
+\let\TrIOhHJqsSresume\TrIOresumeafterassignment
+\let\TrIOhHJqsSinit\TrIOinitafterassignment
+\let\TrIOhHJqsScheck\TrIOchecktoken
+\let\TrIOhHJqsSstore\TrIOstoresavedtoken
+\let\TrIOhHJqsSremove\TrIOremovesavedtoken
+\let\TrIOhHJqsSAFTER\TrIOAFTERASSIGNMENT
+\let\TrIOhHJqsSoutput\TrIOoutputtoken
+\let\TrIOhHJqsScountiocmd\TrIOcountiocmd
+\let\TrIOhHJqsShandleglobaldefs\TrIOhandleglobaldefs
+\let\TrIOhHJqsSsetcatcodes\TrIOsetcatcodes
+% nothing to do for \TRIOhHJqsSspecial
+\let\TrIOhHJqsSempty\TrIOempty
+\let\TrIOhHJqsSfixedef\TrIOfixedef
+\let\TrIOhHJqsSnosubdir\TrIOnosubdir
+\let\TrIOhHJqsSinputmessage\TrIOinputmessage
+% nothing to do for \TrIOcCkPxXmove
+% nothing to do for \TrIOcCkPxXinputmessage
+% nothing to do for \TrIOcCkPxXinput
+\let\TrIOhHJqsSopenin\TrIOopenin
+\let\TrIOhHJqsSOpenIn\TrIOOpenIn
+\let\TrIOhHJqsSOPENIN\TrIOOPENIN
+% nothing to do for \TrIOaAmNzZopenin
+\let\TrIOhHJqsSImmediate\TrIOImmediate
+\let\TrIOhHJqsSIMMEDIATE\TrIOIMMEDIATE
+\let\TrIOhHJqsSopenout\TrIOopenout
+\let\TrIOhHJqsSOpenOut\TrIOOpenOut
+\let\TrIOhHJqsSOPENOUT\TrIOOPENOUT
+% nothing to do for \TrIObBlOyYopenout
+\let\TrIOhHJqsSenvinput\TrIOenvinput
+\let\TrIOhHJqsSenvopen\TrIOenvopen
+% nothing to do for \TrIOfFLouUexecute
+% nothing to do for \TrIOfFLouUdoiocmd
+\let\TRIOhHJqsSerrmessage\errmessage
+\let\TRIOhHJqsSiftrue\iftrue
+\let\TRIOhHJqsSiffalse\iffalse
+% nothing to do for \TrIOhHJqsSstop
+% nothing to do for \TrIOdDjQwWcheck
+\let\TRIOgGKptTpausing\pausing
+% nothing to do for \TrIOeEMnvVfilenames
+%
+% password-protected names for token registers
+\edef\TrIOhHJqsStrafter{\the\TrIOtrafterassignment}
+\edef\TrIOhHJqsStropenin{\the\TrIOtropenin}
+\edef\TrIOhHJqsStrimmediate{\the\TrIOtrimmediate}
+\edef\TrIOhHJqsStropenout{\the\TrIOtropenout}
+%
+% test macro
+% the next three macros need password-protected names
+\def\TrIOhHJqsSstop#1{\TRIOhHJqsSerrmessage{TrIO ALERT !!!
+   Don't trust the source (#1)}}
+\let\TrIOstop\TrIOhHJqsSstop
+\def\TrIOdDjQwWcheck{% check that important macros aren't redefined
+   % general: \ifx, \else, \fi, and \TrIOstop
+   \TRIOhHJqsSifx\TRIOhHJqsSifx\TRIOifx
+      \TRIOhHJqsSelse\TrIOhHJqsSstop{TRIOifx}\TRIOhHJqsSfi
+   \TRIOifx\TRIOhHJqsSelse\TRIOelse
+      \TRIOhHJqsSelse\TrIOhHJqsSstop{TRIOelse}\TRIOhHJqsSfi
+   \TRIOifx\TRIOhHJqsSfi\TRIOfi
+      \TRIOelse\TrIOhHJqsSstop{TRIOfi}\TRIOhHJqsSfi
+   \TRIOifx\TrIOhHJqsSstop\TrIOstop
+      \TRIOelse\TrIOhHJqsSstop{TrIOstop}\TRIOfi
+   %
+   \TRIOifx\TRIOhHJqsSbegingroup\TRIObegingroup
+      \TRIOelse\TrIOstop{TRIObegingroup}\TRIOfi
+   \TRIOifx\TRIOhHJqsSendgroup\TRIOendgroup
+      \TRIOelse\TrIOstop{TRIOendgroup}\TRIOfi
+   \TRIOifx\TRIOhHJqsSexpandafter\TRIOexpandafter
+      \TRIOelse\TrIOstop{TRIOexpandafter}\TRIOfi
+   \TRIOifx\TRIOhHJqsSnoexpand\TRIOnoexpand
+      \TRIOelse\TrIOstop{TRIOnoexpand}\TRIOfi
+   \TRIOifx\TRIOhHJqsSdef\TRIOdef
+      \TRIOelse\TrIOstop{TRIOdef}\TRIOfi
+   \TRIOifx\TRIOhHJqsSedef\TRIOedef
+      \TRIOelse\TrIOstop{TRIOedef}\TRIOfi
+   \TRIOifx\TRIOhHJqsSgdef\TRIOgdef
+      \TRIOelse\TrIOstop{TRIOgdef}\TRIOfi
+   \TRIOifx\TRIOhHJqsSxdef\TRIOxdef
+      \TRIOelse\TrIOstop{TRIOxdef}\TRIOfi
+   \TRIOifx\TRIOhHJqsSlet\TRIOlet
+      \TRIOelse\TrIOstop{TRIOlet}\TRIOfi
+   \TRIOifx\TRIOhHJqsSfuturelet\TRIOfuturelet
+      \TRIOelse\TrIOstop{TRIOfuturelet}\TRIOfi
+   \TRIOifx\TRIOhHJqsSglobal\TRIOglobal
+      \TRIOelse\TrIOstop{TRIOglobal}\TRIOfi
+   \TRIOifx\TRIOhHJqsSglobaldefs\TRIOglobaldefs
+      \TRIOelse\TrIOstop{TRIOglobaldefs}\TRIOfi
+   \TRIOifx\TRIOhHJqsSifcase\TRIOifcase
+      \TRIOelse\TrIOstop{TRIOifcase}\TRIOfi
+   \TRIOifx\TRIOhHJqsSifcat\TRIOifcat
+      \TRIOelse\TrIOstop{TRIOifcat}\TRIOfi
+   \TRIOifx\TRIOhHJqsSifnum\TRIOifnum
+      \TRIOelse\TrIOstop{TRIOifnum}\TRIOfi
+   \TRIOifx\TRIOhHJqsSor\TRIOor
+      \TRIOelse\TrIOstop{TRIOor}\TRIOfi
+   \TRIOifx\TRIOhHJqsSafterassignment\TRIOafterassignment
+      \TRIOelse\TrIOstop{TRIOafterassignment}\TRIOfi
+   \TRIOifx\TRIOhHJqsSimmediate\TRIOimmediate
+      \TRIOelse\TrIOstop{TRIOimmediate}\TRIOfi
+   \TRIOifx\TRIOhHJqsSinput\TRIOinput
+      \TRIOelse\TrIOstop{TRIOinput}\TRIOfi
+   \TRIOifx\TRIOhHJqsSread\TRIOread
+      \TRIOelse\TrIOstop{TRIOread}\TRIOfi
+   \TRIOifx\TRIOhHJqsSwrite\TRIOwrite
+      \TRIOelse\TrIOstop{TRIOwrite}\TRIOfi
+   \TRIOifx\TRIOhHJqsSthe\TRIOthe
+      \TRIOelse\TrIOstop{TRIOthe}\TRIOfi
+   \TRIOifx\TRIOhHJqsSnumber\TRIOnumber
+      \TRIOelse\TrIOstop{TRIOnumber}\TRIOfi
+   \TRIOifx\TRIOhHJqsSadvance\TRIOadvance
+      \TRIOelse\TrIOstop{TRIOadvance}\TRIOfi
+   \TRIOifx\TRIOhHJqsScatcode\TRIOcatcode
+      \TRIOelse\TrIOstop{TRIOcatcode}\TRIOfi
+   \TRIOifx\TRIOhHJqsSfont\TRIOfont
+      \TRIOelse\TrIOstop{TRIOfont}\TRIOfi
+   \TRIOifx\TRIOhHJqsSinputlineno\TRIOinputlineno
+      \TRIOelse\TrIOstop{TRIOinputlineno}\TRIOfi
+   \TRIOifx\TRIOhHJqsSrelax\TRIOrelax
+      \TRIOelse\TrIOstop{TRIOrelax}\TRIOfi
+   \TRIOifx\TRIOhHJqsSundefined\TRIOundefined
+      \TRIOelse\TrIOstop{TRIOundefined}\TRIOfi
+   \TRIOifx\TrIOhHJqsSspace\TrIOspace
+      \TRIOelse\TrIOstop{TrIOspace}\TRIOfi
+   \TRIOifx\TrIOhHJqsSwlog\TrIOwlog
+      \TRIOelse\TrIOstop{TrIOwlog}\TRIOfi
+   \TRIOifx\TrIOhHJqsSmessage\TrIOmessage
+      \TRIOelse\TrIOstop{TrIOmessage}\TRIOfi
+   \TRIOifx\TrIOhHJqsSglobaldefs\TrIOglobaldefs
+      \TRIOelse\TrIOstop{TrIOglobaldefs}\TRIOfi
+   \TRIOifx\TrIOhHJqsSafter\TrIOafterassignment
+      \TRIOelse\TrIOstop{TrIOafterassignment}\TRIOfi
+   \TRIOifx\TrIOhHJqsSsuspend\TrIOsuspendafterassignment
+      \TRIOelse\TrIOstop{TrIOsuspendafterassignment}\TRIOfi
+   \TRIOifx\TrIOhHJqsSresume\TrIOresumeafterassignment
+      \TRIOelse\TrIOstop{TrIOresumeafterassignment}\TRIOfi
+   \TRIOifx\TrIOhHJqsSinit\TrIOinitafterassignment
+      \TRIOelse\TrIOstop{TrIOinitafterassignment}\TRIOfi
+   \TRIOifx\TrIOhHJqsScheck\TrIOchecktoken
+      \TRIOelse\TrIOstop{TrIOchecktoken}\TRIOfi
+   \TRIOifx\TrIOhHJqsSstore\TrIOstoresavedtoken
+      \TRIOelse\TrIOstop{TrIOstoresavedtoken}\TRIOfi
+   \TRIOifx\TrIOhHJqsSremove\TrIOremovesavedtoken
+      \TRIOelse\TrIOstop{TrIOremovesavedtoken}\TRIOfi
+   \TRIOifx\TrIOhHJqsSAFTER\TrIOAFTERASSIGNMENT
+      \TRIOelse\TrIOstop{TrIOAFTERASSIGNMENT}\TRIOfi
+   \TRIOifx\TrIOhHJqsSoutput\TrIOoutputtoken
+      \TRIOelse\TrIOstop{TrIOoutputtoken}\TRIOfi
+   \TRIOifx\TrIOhHJqsScountiocmd\TrIOcountiocmd
+      \TRIOelse\TrIOstop{TrIOcountiocmd}\TRIOfi
+   \TRIOifx\TrIOhHJqsShandleglobaldefs\TrIOhandleglobaldefs
+      \TRIOelse\TrIOstop{TrIOhandleglobaldefs}\TRIOfi
+   \TRIOifx\TrIOhHJqsSsetcatcodes\TrIOsetcatcodes
+      \TRIOelse\TrIOstop{TrIOsetcatcodes}\TRIOfi
+   \TRIOifx\TrIOhHJqsSempty\TrIOempty
+      \TRIOelse\TrIOstop{TrIOempty}\TRIOfi
+   \TRIOifx\TrIOhHJqsSfixedef\TrIOfixedef
+      \TRIOelse\TrIOstop{TrIOfixedef}\TRIOfi
+   \TRIOifx\TrIOhHJqsSnosubdir\TrIOnosubdir
+      \TRIOelse\TrIOstop{TrIOnosubdir}\TRIOfi
+   \TRIOifx\TrIOhHJqsSinputmessage\TrIOinputmessage
+      \TRIOelse\TrIOstop{TrIOinputmessage}\TRIOfi
+   \TRIOifx\TrIOhHJqsSopenin\TrIOopenin
+      \TRIOelse\TrIOstop{TrIOopenin}\TRIOfi
+   \TRIOifx\TrIOhHJqsSOpenIn\TrIOOpenIn
+      \TRIOelse\TrIOstop{TrIOOpenIn}\TRIOfi
+   \TRIOifx\TrIOhHJqsSOPENIN\TrIOOPENIN
+      \TRIOelse\TrIOstop{TrIOOPENIN}\TRIOfi
+   \TRIOifx\TrIOhHJqsSImmediate\TrIOImmediate
+      \TRIOelse\TrIOstop{TrIOImmediate}\TRIOfi
+   \TRIOifx\TrIOhHJqsSIMMEDIATE\TrIOIMMEDIATE
+      \TRIOelse\TrIOstop{TrIOIMMEDIATE}\TRIOfi
+   \TRIOifx\TrIOhHJqsSopenout\TrIOopenout
+      \TRIOelse\TrIOstop{TrIOopenout}\TRIOfi
+   \TRIOifx\TrIOhHJqsSOpenOut\TrIOOpenOut
+      \TRIOelse\TrIOstop{TrIOOpenOut}\TRIOfi
+   \TRIOifx\TrIOhHJqsSOPENOUT\TrIOOPENOUT
+      \TRIOelse\TrIOstop{TrIOOPENOUT}\TRIOfi
+   \TRIOifx\TrIOhHJqsSenvinput\TrIOenvinput
+      \TRIOelse\TrIOstop{TrIOenvinput}\TRIOfi
+   \TRIOifx\TrIOhHJqsSenvopen\TrIOenvopen
+      \TRIOelse\TrIOstop{TrIOenvopen}\TRIOfi
+   % registers and flags
+   \TRIObegingroup \TrIOsuspendafterassignment
+   \TRIOedef\TRIOnext{\the\TrIOtrafterassignment}%
+   \TRIOifx\TRIOnext\TrIOhHJqsStrafter
+      \TRIOelse\TrIOstop{TRIOtrafterassignment}\TRIOfi
+   \TRIOedef\TRIOnext{\the\TrIOtropenin}%
+   \TRIOifx\TRIOnext\TrIOhHJqsStropenin
+      \TRIOelse\TrIOstop{TRIOtropenin}\TRIOfi
+   \TRIOedef\TRIOnext{\the\TrIOtrimmediate}%
+   \TRIOifx\TRIOnext\TrIOhHJqsStrimmediate
+      \TRIOelse\TrIOstop{TRIOtrimmediate}\TRIOfi
+   \TRIOedef\TRIOnext{\the\TrIOtropenout}%
+   \TRIOifx\TRIOnext\TrIOhHJqsStropenout
+      \TRIOelse\TrIOstop{TRIOtropenout}\TRIOfi
+   \TRIOcatcode`\1=12 \TRIOcatcode`\f=11
+   \TRIOifcat
+      \TRIOifx\ifTrIOimoo\TRIOhHJqsSiftrue 1\TRIOelse f\TRIOfi
+      \TRIOifx\ifTrIOimoo\TRIOhHJqsSiffalse f\TRIOelse 1\TRIOfi
+   \TRIOelse\TrIOstop{ifTrIOimoo}\TRIOfi
+   \TRIOendgroup
+   % \special
+   \TRIOifx\TRIOhHJqsSspecial\TRIOhHJqsSundefined
+      \TRIOelse\TRIOifx\TRIOhHJqsSspecial\special
+         \TRIOelse\TrIOstop{special}\TRIOfi\TRIOfi}


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOprivate.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOsupport.org
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOsupport.org	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOsupport.org	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,163 @@
+% \let-assignments of the used primitives, internal regeisters and quantities
+\let\TRIObegingroup\begingroup
+\let\TRIOendgroup\endgroup
+\let\TRIOexpandafter\expandafter
+\let\TRIOnoexpand\noexpand
+\let\TRIOdef\def
+\let\TRIOedef\edef
+\let\TRIOgdef\gdef
+\let\TRIOxdef\xdef
+\let\TRIOlet\let
+\let\TRIOfuturelet\futurelet
+\let\TRIOglobal\global
+\let\TRIOglobaldefs\globaldefs
+\let\TRIOifcase\ifcase
+\let\TRIOifcat\ifcat
+\let\TRIOifnum\ifnum
+\let\TRIOifx\ifx
+\let\TRIOor\or
+\let\TRIOelse\else
+\let\TRIOfi\fi
+\let\TRIOafterassignment=\afterassignment
+\let\TRIOimmediate\immediate
+\let\TRIOinput\input
+\let\TRIOread\read
+\let\TRIOwrite\write
+\let\TRIOthe\the
+\let\TRIOnumber\number
+\let\TRIOadvance\advance
+\let\TRIOcatcode\catcode
+\let\TRIOfont\font
+\let\TRIOinputlineno\inputlineno
+\let\TRIOrelax\relax
+\let\TRIOundefined\undefined
+%
+\let\TrIOspace\space
+%
+\catcode`@=11
+\def\wlog{\TRIOimmediate\write\m at ne}% avoid our macros for \immediate in \wlog
+\def\TrIOwlog{\TRIOimmediate\TRIOwrite\m at ne}% and provide version with our \write
+\def\TrIOmessage{\TRIOimmediate\TRIOwrite\sixt@@n}% can't use \newlinechar
+\catcode`@=12
+%
+% First: \afterassignment
+%
+\newif\ifTrIOsavedtoken           % true: a token is stored by \afterassignment
+\newif\ifTrIOblockafterassignment % true: don't insert a token after an assignment
+\newif\ifTrIOusetokenlist         % true: store the saved token in a token register
+\newtoks\TrIOtoken                % the token register for \afterassignment
+\newtoks\TrIOtrafterassignment
+% \globaldefs
+\def\TrIOglobaldefs{% inform about \globaldefs>0 and switch to \globaldefs=0
+   \TRIOifnum\TRIOglobaldefs>0 \TrIOmessage{TrIO Info: globaldefs is >0 (store)}%
+      \TRIOafterassignment\TrIOsuspendafterassignment \TRIOglobaldefs=0
+      \TRIOdef\TrIOresetglobaldefs{\TrIOblockafterassignmentfalse
+         \TRIOafterassignment\TrIOinitafterassignment\TRIOglobaldefs=1 }%
+   \TRIOelse\TRIOifnum\TRIOglobaldefs<0
+      \TRIOafterassignment\TrIOsuspendafterassignment \TRIOglobaldefs=0
+      \TRIOdef\TrIOresetglobaldefs{\TrIOblockafterassignmentfalse
+         \TRIOafterassignment\TrIOinitafterassignment\TRIOglobaldefs=-1 }%
+   \TRIOelse \TrIOsuspendafterassignment
+      \TRIOdef\TrIOresetglobaldefs{\TrIOresumeafterassignment}%
+\TRIOfi\TRIOfi}
+% the replacement of the primitive
+\def\afterassignment{\TRIOthe\TrIOtrafterassignment}
+\TrIOtrafterassignment={\TrIOafterassignment}
+\def\TrIOafterassignment{% save a token for further inspection
+   \TRIObegingroup\TRIOendgroup   % a trick to make the prefix \global invalid
+   \TrIOglobaldefs \TrIOsavedtokentrue       % stop \globaldefs; store a token
+   \TRIOfuturelet\TrIOsavedtoken\TrIOchecktoken}% the token stays in the input
+% two more user commands for those who know the macros   
+\def\TrIOsuspendafterassignment{% inactivate the application of the token
+   \TrIOblockafterassignmenttrue}
+\def\TrIOresumeafterassignment{% activate insertion of a stored token
+   \TrIOblockafterassignmentfalse\TrIOinitafterassignment}
+\def\TrIOinitafterassignment{\TRIOafterassignment\TrIOAFTERASSIGNMENT}
+% the internal macros
+\def\TrIOchecktoken{% check type of token, store a macro in token register
+   \TRIOifcat\TRIOnoexpand\TrIOsavedtoken\TRIOrelax
+      \TRIOlet\TrIOnext=\TrIOstoresavedtoken   % save the macro in \TrIOtoken
+   \TRIOelse \TRIOlet\TrIOnext=\TrIOremovesavedtoken % otherwise remove token
+   \TRIOfi \TrIOnext}
+\def\TrIOstoresavedtoken#1{% #1: control sequence stored in token register
+   \TRIOlet\TrIOnext=\TRIOundefined
+   \TrIOusetokenlisttrue\TrIOtoken={#1}\TrIOresetglobaldefs}
+\def\TrIOremovesavedtoken{% the \TrIOsavedtoken is still part of the input
+   \TRIOlet\TrIOnext=\TRIOundefined
+   \TrIOusetokenlistfalse\TRIOafterassignment\TrIOresetglobaldefs
+   \TRIOlet\TrIOsavedtoken=}
+\def\TrIOAFTERASSIGNMENT{% use the stored token (sometimes)
+   \ifTrIOblockafterassignment                        % if true nothing to do
+   \TRIOelse\ifTrIOsavedtoken            % otherwise only if a token is saved
+      \TRIOifnum\TRIOglobaldefs>0 \TrIOmessage{TrIO Info: globaldefs is 1 (apply)}%
+         \TRIOglobaldefs=0 \TrIOsavedtokenfalse
+         \TRIOglobaldefs=1 \TRIOelse \TrIOsavedtokenfalse \TRIOfi
+      \TRIOexpandafter\TRIOexpandafter\TRIOexpandafter\TrIOoutputtoken
+      \TRIOexpandafter           % get rid of the 2 \fi with 3+1 \expandafter
+   \fi\fi}
+\def\TrIOoutputtoken{% output the token depending on its type
+   \ifTrIOusetokenlist \TRIOexpandafter\TRIOthe\TRIOexpandafter\TrIOtoken
+   \TRIOelse \TRIOexpandafter\TrIOsavedtoken \TRIOfi}
+%
+% Second: \input
+%
+% make sure that a file loaded via \input is always displayed on the terminal
+\let\batchmode\scrollmode \let\nonstopmode\scrollmode
+\def\TrIOcnt{0 }% an internal counter for each \input, \openin, \openout
+\countdef\TrIOcount=255 % counter for \TrIOcnt, stream numbers, etc.; used in a group
+\def\TrIOcountiocmd{% increment \TrIOcnt
+   \TrIOcount=\TrIOcnt \TRIOadvance \TrIOcount by 1
+   \TRIOxdef\TrIOcnt{\TRIOnumber\TrIOcount\TrIOspace}}
+\def\TrIOhandleglobaldefs{% inform about \globaldefs>0 and switch to \globaldefs=0
+   \TRIOifnum\TRIOglobaldefs>0 \TrIOmessage{TrIO Info: globaldefs is >0 (I/O)}%
+      \TRIOafterassignment\TrIOsuspendafterassignment \TRIOglobaldefs=0
+      \TRIOdef\TrIOendgroup{\TRIOendgroup            % end a group opened earlier
+         \TRIOafterassignment\TrIOinitafterassignment \TRIOglobaldefs=1 }%
+   \TRIOelse \TrIOsuspendafterassignment \TRIOglobaldefs=0
+      \TRIOdef\TrIOendgroup{\TRIOendgroup\TrIOinitafterassignment}%
+   \TRIOfi}
+\def\TrIOsetcatcodes{% establish a few \catcodes
+   \TRIOedef\TrIOnext{\TRIOthe\TRIOcatcode`\%}{\TRIOcatcode`\%=\TrIOnext}%
+   \TRIOcatcode`\%=12 \TRIOlet\%=\TRIOcatcode
+   \%`\\=0 \%`\==12 \%`\`=12 \%`\1=12 \%`\2=12 }
+%
+% Third: \openin
+%
+\newtoks\TrIOtropenin
+\let\TRIOaAmNzZopenin=\openin   % this name must be password protected
+%
+% Fourth: \immediate and \openout
+%
+\newif\ifTrIOimoo % true: \immediate is applied to \openout
+\newtoks\TrIOtrimmediate
+\newtoks\TrIOtropenout
+\let\TRIObBlOyYopenout=\openout % this name must be password protected
+%
+% Fifth: \special
+%
+\ifx y\disablespecial % deactivate \special; write to log file
+   \def\special{\TrIOwlog{<<< TrIO >>> Line \TRIOthe\inputlineno: special}\TrIOwlog}%
+   \let\TRIOhHJqsSspecial\special
+\else\ifx n\disablespecial % trace \special
+   \tracingoutput=1 \showboxdepth=10000 \showboxbreadth=10000
+   \let\tracingoutput=\tracinglostchars
+   \let\showboxdepth=\tracinglostchars \let\showboxbreadth=\tracinglostchars
+\fi\fi
+\let\disablespecial\undefined
+%
+% NO WARRANTY
+%
+\begingroup\newlinechar=`\^^J
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, version 3 (GPL3).
+% If you change the next line to \iffalse please obey the GPL3 license
+% when you distribute such a changed macro file.
+\iftrue
+   \errhelp{This program is distributed in the hope that it will be
+     useful,^^Jbut WITHOUT ANY WARRANTY; without even the implied warranty
+     of^^JMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+     the^^JGNU General Public License, version 3, for more
+     details.^^JType `x' if you want to stop the execution of TrIO now.}
+   \errmessage{The TrIO macros come with ABSOLUTELY NO WARRANTY; for details type `h'}
+\fi\endgroup


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/TrIOsupport.org
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-TUGboat-danger.tex
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-TUGboat-danger.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-TUGboat-danger.tex	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,22 @@
+\input TrIOmacros
+\newif\ifcontinue \continuetrue
+\def\uncat{\def\do##1{\c`##1=12 }\dospecials
+\do\^^M\do\*}\def\nice{\endlinechar=`\^^M
+\uncat}\def\readline#1to#2{\begingroup\nice
+\global\read#1to#2\endgroup}%
+{\newwrite\w\let\c\catcode\c`*13\def
+*{\afterassignment\d\count255"}\def\d{%
+\expandafter\c\the\count255=12}{*0D\def%
+\a#1^^M{\immediate\write\w{#1}}\c`^^M5%
+\newread\r\openin\r=\jobname
+\immediate\openout\w=../justafile.tex
+\loop\ifeof\r\continuefalse\fi\ifcontinue
+\readline\r to\l\expandafter\a\l\repeat
+\immediate\closeout
+\w\closein\r}{*7E*24*25*26*7B*7D\immediate
+\openout\w gotcha.tex \c`[1\c`]2\c`\@0
+\newlinechar`\^^J\endlinechar-1*5C at immediate
+ at write@w[What have I done?]@immediate
+ at closeout@w]}%
+\bye
+


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-TUGboat-danger.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.pdf	2022-08-13 20:30:17 UTC (rev 64112)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.pdf	2022-08-13 20:34:14 UTC (rev 64113)

Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.tex	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,832 @@
+% some \tt chars
+\def\bs{\char"5C }\def\ocb{\char"7B }\def\ccb{\char"7D }
+% simple \verbatim macros
+\def\beginverbatim{\medskip\noindent\bgroup\frenchspacing\tt}
+\def\parni{\par\noindent}\def\endverbatim{\egroup\goodbreak\medskip}
+% for control sequences in text another macro is used
+\def\cs#1{{\tt\string#1}}
+% important instructions are formulated as rules:
+\def\rule#1{\smallskip\def\par{\let\par=\endgraf\smallskip}{\parindent52pt \item{\rm#1. RULE:}}}
+% macros to indent error messages
+\def\fivespaces{\ \ \ \ \ }\def\tenspaces{\fivespaces\fivespaces}
+\def\twentyspaces{\tenspaces\tenspaces}\def\fortyspaces{\twentyspaces\twentyspaces}
+% macro to enter file names with descriptions
+\def\filename #1. #2:{\item{#1.}\hbox to 100pt{{\tt#2}\hfil--}}
+%
+\hyphenation{TrIO-macros TrIO-support TrIO-private TrIO-input
+   TrIO-extract TrIO-lineno TrIO-auto TrIO-open TrIO-names
+   TrIO-install openin open-out}
+\parskip=0pt
+
+
+
+\centerline{\bf TrIO: Transparent file I/O}
+\smallskip
+\centerline{\bf Version of 2022-04-30}
+\smallskip
+\centerline{Udo Wermuth}
+\smallskip
+
+\noindent
+The macros are written for the {\bf original \TeX} running with the
+format {\bf plain.tex}. It assumes that a path to a file uses
+directory names that are separated by slashes. Except letters, digits,
+and the slash only a period is used to separate the main part of the
+file name and its extension.
+
+The operation is done on a {\bf command line} and makes use of a {\bf
+bash script} and the stream editor~{\bf sed}. The installation scripts
+assume a {\bf UNIX-like operating system}.
+
+The application of the macros requires {\bf concentration}; don't
+execute \TeX\ with an instrumented source file hastily. Moreover, to
+use the macros successfully you must have a {\bf non-beginner's
+knowledge} of~\TeX. Strictly speaking, {\bf the more you know about
+plain \TeX\ the better}; see section~10.
+
+\smallskip
+{\sl Note}: My article in {\sl TUGboat\/} 43:1 (2022), 59--72,
+contains a lot of additional information, for example, about my
+motivation to develop these macros. But it omits some parts like the
+start message. I suggest to read the article and this manual if
+you want to apply the macros.
+
+\beginsection \rm a) Meaning of ``transparent'' 
+
+The word ``transparent'' means that the instrumented source cannot do
+any \cs\input, \cs\openin, or \cs\openout\ without an approval of the
+user. Well, {\tt\string\input} is an exception as it might be possible
+to input a file without approval---{\sl might} because it depends on
+your operating system and your \TeX\ program---but that a file is
+input is always shown on the terminal and the user must stop the
+processing. An evil-doer might try to circumvent the reporting of the
+macros. In such a case the user must check the source carefully for
+malicious code before it should be compiled again by~\TeX.
+
+\beginsection \rm b) Rules
+
+As indicated in the previous paragraph the application of the macros
+requires that the user follows a couple of rules. Otherwise the macros
+of this package might not do what is intended.
+
+ \rule1 Create in the directory with the source that you want to test
+a new subdirectory, say, {\tt trioo}, and redirect all \cs\openout\
+commands to this subdirectory.
+
+ \rule2 Check that the bundle of the source files doesn't include a
+file that carries a name that's identical to a file name of this
+package. Otherwise rename such a source file.
+
+ \rule3 Never approve that a file of this package is processed by the
+source file. Enter the new name of a source file if you renamed one of
+them because of rule~2. Otherwise stop the run and check the source.
+
+ \rule4 Follow all terminal messages carefully; don't allow that the
+source inputs a file without your approval. Otherwise stop the run and
+check the source. (Maybe you need to apply an option; see section~4.)
+
+
+
+\beginsection 1. Files in the package
+
+The package contains the following files:
+
+\medskip
+\filename  1. TrIOmacros.org: main file to instrument a source file
+\filename  2. TrIOsupport.org: common macros to {\tt TrIOmacros.tex} and {\tt TrIOauto.tex}
+\filename  3. TrIOprivate.org: copies of control sequences and test routines
+\filename  4. TrIOinput.org: called for every \cs\input
+\filename  5. TrIOopenin.org: entered by the user for every \cs\openin
+\filename  6. TrIOopenout.org: entered by the user for every \cs\openout
+\smallskip
+\filename  7. TrIOextract.org: {\tt sed} script to create {\tt TrIOnames.tex}
+\filename  8. TrIOlineno.org: another {\tt sed} script to create {\tt TrIOnames.tex}
+\filename  9. TrIOauto.org: replacement for {\tt TrIOmacros.tex} in repeated executions
+\filename 10. TrIOopen.org: called for every I/O command in {\tt TrIOnames.tex}
+\smallskip
+\filename 11. TrIO.org: {\tt bash} script to install the package
+\filename 12. TrIOinstall.org: {\tt sed} script to set passwords and private messages
+\filbreak\medskip
+
+The last two files are only used for the installation. They must be
+renamed and edited, see section~2. The other files get a new extension
+during the installation.
+
+The first six files are required to instrument a source; see
+section~3. All are renamed during the installation so that all have
+the extension {\tt tex} instead of {\tt org}; in the names of files 5
+and 6 the ``TrIO'' prefix is deleted too. Files 7--10 are needed for
+repeated executions; see section~8. The first two become {\tt sed}
+scripts the other two {\tt tex} files.
+
+
+
+\beginsection 2. Installation
+
+{\tt TrIOinstall.org} and {\tt TrIO.org} are used for the installation. 
+
+The other files are changed during the installation. They must be
+either moved into the directory that contains the source to be tested
+or they are installed in a directory that is searched for input files
+by the program \TeX.
+
+\beginsection Step 1: \rm Rename and edit {\tt TrIOinstall.org}
+
+{\tt TrIOinstall.org} must be copied to {\tt TrIOinstall.sed}. This
+file must then be edited to have {\bf individual password-protected
+macro names} and {\bf private messages}. Note there is no valid
+default active. The macros fail to do what they should do if this file
+isn't carefully edited.
+
+\beginsection \rm a) Passwords
+
+A password-protected name contains a string of at least six
+letters. It must be a mix of lower- and uppercase, one letter should
+be from the first and one from the last third of the alphabet. It
+should be neither an English word nor one in your language. The
+general idea is that this string cannot be guessed or computed by
+someone else. A user hasn't to enter these password-protected macro
+names (except one) so a user has not to remember them. Thus, they must
+not be simple.
+
+One of the passwords occur in a command that is displayed together
+with a private message. Although not required it would be nice to
+recognize this password. A second password is part of a control word
+that must be entered by the user into the source if the source
+contains extremely weird constructions; see section~5.
+
+In total eight passwords must be created. {\tt TrIOinstall.sed}
+contains lines like
+\smallskip\noindent
+{\tt s/aAmNzZ/new password/g}
+\smallskip\noindent
+and you have to replace ``{\tt new password}'' with the new password,
+i.e., a string of at least six letters with the above mentioned
+distribution. And please, never use the known default, i.e., the
+string {\tt aAmNzZ}, etc.
+
+\beginsection \rm b) Private messages
+
+Next, you have to choose two private messages. The first one explains
+what to do for \cs\openin\ or \cs\openout, the second signals that the
+correct file for \cs\input\ was executed.
+
+\medskip
+The rest of {\tt TrIOinstall.sed} can be ignored for the moment. These
+lines must be used if the source uses {\tt TrIO} or {\tt TRIO} as a
+prefix for its own macros; see c). Then one can change these prefixes
+in the macros of this package.
+
+\beginsection \rm c) Optional: Prefix ``{\tt T[r|R]IO}''
+
+The last lines in the installation script are used to change the
+prefix ``{\tt TrIO}'' and the prefix ``{\tt TRIO}'' in the case that
+some source uses one of them too. The macros detect if one of their
+control sequences gets redefined by the source and reports that with
+an error message: {\tt !\ TrIO ALERT !!!\ Don't trust the source
+(<name of the redefined control word>).}
+
+ \rule5 Stop the run if the ``{\tt TrIO ALERT}'' error message is
+displayed. The source has redefined one of the control words that
+occur in the macros of this package. Check the source carefully to
+determine if that happens by accident or intentionally.
+\smallskip
+
+Note, the easiest way to fix a single use of the prefix ``{\tt TrIO}''
+is to change the source. Otherwise a user can apply the installation
+script and change the prefix for all macros of the package. The prefix
+isn't private, i.e., the source might contain code that determines
+which prefix is used by the macro package.
+
+
+\beginsection Step 2: \rm Rename and edit {\tt TrIO.org}; then execute
+
+Rename {\tt TrIO.org} to {\tt TrIO.sh}. Make sure that the renamed
+file can be executed, for example, apply {\tt chmod 744}. The file
+must be edited too: Enter a valid path for {\tt inst\_dir}.
+
+The execution of the script {\tt TrIO.sh}, i.e., enter {\tt ./TrIO.sh}
+on a command line in the directory of the {\tt TrIO*.org} files,
+installs the files by default in this directory. This might be okay if
+the package should be placed there. But if you use a \TeX\
+distribution the installation directory should probably be changed;
+consult the documentation of your distribution to figure out where
+configured packages should be stored.
+
+My suggestion: Use the current directory for experiments. If you like
+the macros then install them in your \TeX\ file system and make sure
+that the correct {\tt openin.tex} and {\tt openout.tex} are found as
+these files carry quite generic names. (Maybe you must {\bf rename}
+them in {\tt TrIO.sh}; see also section~9.)
+
+
+
+
+\beginsection 3. Using {\tt TrIOmacros.tex}
+
+To activate the macros create a new first line in the main file of the
+source that should be instrumented. Enter ``{\tt
+<options> \cs\input\space TrIOmacros}''; where {\tt <options>} is a
+combination of
+\medskip
+\item{i)} empty;
+\item{ii)} {\tt\cs\let\cs\twonosubdirs=y};
+\item{iii)} {\tt\cs\let\cs\threenosubdirs=y};
+\item{iv)} {\tt\cs\let\cs\disablespecial=n};
+\item{v)} {\tt\cs\let\cs\disablespecial=y}.
+\medskip\noindent
+Note: here iii) beats ii) and v) beats iv). The options are explained
+in the next section.
+
+\beginsection \rm a) An example
+
+Let's do a trial run with {\tt Transparent-IO-example.tex}; here with
+line numbers.
+\beginverbatim
+1.\bs input TrIOmacros\parni
+2.\parni
+3.\bs input Transparent-IO-hello\parni
+4.\parni
+5.\bs openin0=Transparent-IO-hello\parni
+6.\parni
+7.\bs openout5=Transparent-IO-goodbye\parni
+8.\parni
+9.\bs bye\endverbatim
+
+After \TeX's banner line and the name of
+the main file, \TeX\ inputs three files (I omit the license message):
+\beginverbatim
+(./TrIOmacros.tex (./TrIOsupport.tex) (./TrIOprivate.tex)\parni
+<<< TrIO >>> \bs special: primitive\parni
+<<< TrIO >>> \bs TrIOnosubdir: nosubdir/\endverbatim
+
+You should check that the correct files of section 1, items 1--3, are
+input. Here I assume that the files are in the current directory
+indicated by ``{\tt./}''. Then \TeX\ displays two lines about the
+current values of control sequences that are influenced by
+options. Here both show the default value: \cs\special\ is kept
+as \TeX's primitive and \cs\TrIOnosubdir\ is a single directory
+with the name {\tt nosubdir/}.
+
+Next, the macros inform the user that they are active. 
+\beginverbatim
+! TrIO activated. Type h to get instructions.\parni
+l.115 ...IO activated. Type h to get instructions\ccb\parni
+\fortyspaces\tenspaces\bs endgroup\parni
+? h\parni
+File I/O ( \bs input \bs openin \bs openout ) is now under TrIO's control.\parni
+Be alerted if a file is loaded without the proper TrIO message\parni
+and follow always the instruction of this message.\parni
+Make sure that the sequence number is incremented sequentially.\parni
+? \parni
+)\endverbatim
+
+The help text gives two important hints. Follow the instructions that
+are displayed at every stop initiated by these macros. As above these
+messages contain a combination of the word ``TrIO'' and three `{\tt<}'
+or three `{\tt>}' symbols. The second hint defines a rule.
+
+ \rule6 Check the counter for I/O commands. It must increase
+sequentially; otherwise stop the run and check the source.
+\smallskip
+
+The counter appears as soon as \TeX\ stops for an I/O
+command. For \cs\input\ is looks like this.
+\beginverbatim
+<<<\parni
+(./TrIOinput.tex\parni
+>>> TRIO: Check passed!\parni
+)\parni
+TrIO >>> ( 1 ) Line 3: input\parni
+>>> enter shown file name without `nosubdir/'.\parni
+<<<\parni
+! I can't find file `nosubdir/Transparent-IO-hello.tex'.\parni
+l.3 \bs input Transparent-IO-hello\parni
+\ \parni
+Please type another input file name: \endverbatim
+
+The first four lines appear every time a file gets input. It contains
+one of the private messages; here it's the default message ``{\tt>>>
+TRIO: Check successful!}'' with an uppercase `R' in the word
+``TRIO''. During the installation this message was changed and you
+should always check that your private message is displayed.
+
+ \rule7 Check that for every \cs\input\ the file {\tt
+TrIOinput.tex} is input and that your private message
+follows. Otherwise stop the run and check the source.
+\smallskip
+
+Then the macros inform that an I/O command was found. It is the first
+command in the file: It occurs in line~3, and it's the
+command \cs\input. The stop of the run was initiated by an error
+message that was intentionally raised through the use of an
+nonexistent subdirectory in front of the file name. The source doesn't
+contain this subdirectory; it is added by the macros. Thus \TeX\
+reports that it cannot find ``{\tt nosubdir/Transparent-IO-hello.tex}'' although the
+source states ``{\tt\bs input Transparent-IO-hello}''.
+
+Next, the user has to enter a new file name. As the file {\tt
+Transparent-IO-hello.tex} doesn't belong to the macro package (see rule~4) we follow
+the instruction (see rule~4) and enter ``Transparent-IO-hello'' as new file name.
+\beginverbatim
+Please type another input file name: Transparent-IO-hello\parni
+(./Transparent-IO-hello.tex)\endverbatim
+
+The next block shows a stop for the I/O command \cs\openin\ with
+stream number~0.
+\beginverbatim
+<<<\parni
+TrIO >>> ( 2 ) Line 5: openin 0\parni
+>>> If you accept that the file (without nosubdir/) is read\parni
+>>> enter `openin' and follow the instructions.\parni
+<<<\parni
+! I can't find file `nosubdir/Transparent-IO-hello.tex'.\parni
+l.5 \bs openin0=Transparent-IO-hello\parni
+\ \parni
+Please type another input file name: \endverbatim
+
+After the check that the counter was increased we follow the
+instruction and enter the file name of the package ({\tt openin.tex})
+and not the name that appears in the source (here: {\tt Transparent-IO-hello}).
+\beginverbatim
+Please type another input file name: openin\parni
+(./openin.tex\parni
+Enter 1> return 2> file name\ccb\bs TRIOgGKptTpausing=0=>\endverbatim
+
+This block shows the second private message and one of our private
+passwords. Again, we follow the instructions, that is, we press
+{\tt<return>} and at the next prompt we enter the name of the file
+that should be opened:
+\beginverbatim
+\bs FilenameOPENIN=Transparent-IO-hello\parni
+)\endverbatim
+
+The treatment of \cs\openout\ is similar to \cs\openin.
+\beginverbatim
+<<<\parni
+TrIO >>> ( 3 ) Line 7: openout 5\parni
+>>> If you accept that the file (without nosubdir/) is created\parni
+>>> enter `openout' and follow the instructions.\parni
+<<<\parni
+! I can't find file `nosubdir/Transparent-IO-goodbye.tex'.\parni
+l.7 \bs openout5=Transparent-IO-goodbye\parni
+\ \parni
+Please type another input file name: openout\parni
+(./openout.tex\parni
+Enter 1> return 2> file name\ccb\bs TRIOgGKptTpausing=0=>\parni
+\ \parni
+\bs FilenameOPENOUT=trioo/Transparent-IO-goodbye\parni
+)\endverbatim
+
+There is one new technique based on rule~1. The file isn't created in
+the current directory but in a special subdirectory called {\tt
+trioo/} as seen in the second last line. Of course, one must remember
+which files were redirected to this subdirectory as the source might
+want to input it later again and then the name of the subdirectory
+must be used too.
+
+Of course, \cs\immediate\ is handled by the macros too; the user sees
+``immediate openout'' instead of ``openout'' in the {\tt TrIO >>>}
+line. But someone who knows the macros can fake the occurrence
+of \cs\immediate. Although there isn't much harm in a
+wrong \cs\immediate\ it is recommended to follow this rule.
+
+ \rule8 Always check that an \cs\immediate\ appears in front of
+an \cs\openout\ if the macros report ``immediate openout''. Check the
+source carefully and reject it if \cs\immediate\ doesn't appear.
+
+
+
+\beginsection 4. Options
+
+In section~3 the four options for the macros were introduced.
+
+\beginsection \rm a) Path with nonexistent directories
+
+As explained in section~3 a single nonexistent directory ``{\tt
+nosubdir/}'' is used in the macros by default. But if the source
+contains a file given with a path that starts with a move to the
+parent directory, i.e., {\tt../}, then the effect of {\tt
+nosubdir/../} might specify the current directory; this depends on
+several factors, i.e., your \TeX\ might not do it. If it's done a file
+in the current directory carrying the same name as the file that the
+source wants to input from the parent directory is directly input
+without a stop of the run. That violates rule~4.
+
+Therefore you should use either the option
+{\tt\cs\let\cs\twonosubdirs=y} or {\tt\cs\let\cs\threenosubdirs=y}. In
+the first case the single nonexistent directory is replaced by two
+nonexistent directories and in the second there are three
+nonexistent directories. The start message of the package shows how
+many {\tt nosubdir/}'s are present.
+
+ \rule9 Stop the processing if the source that failed with a single
+nonexistent directory fails again at the same I/O command although the
+number of nonexistent subdirectories was increased. The source reacts
+on this number.
+
+
+\beginsection \rm b) Treatment of \cs\special
+
+The second start message is about \cs\special. This command can be
+dangerous as it writes arbitrary data to \TeX's main output file. The
+macros don't check what is written to the DVI file and they assume
+that a user switches on the safety features of the program that
+display, prints, or transforms the DVI~file. Therefore \cs\special\ is
+kept as primitive.
+
+ \rule{10} The programs that interpret the DVI file can be the target
+by with an untrusted source attacks your system. Thus switch on all
+options to avoid that the DVI file executes unfriendly code if you
+keep the primitive \cs\special\ active.
+
+The option {\tt\cs\let\cs\disablespecial=y} redirects all data of
+a \cs\special\ into the LOG file of the \TeX\ run. That
+is, \cs\special\ is no longer a primitive; nothing is written to the
+DVI file.
+
+The option {\tt\cs\let\cs\disablespecial=n} tries to be a mixture of
+the described behaviours. The primitive \cs\special\ is kept but its
+data (or a part of it) is also written to the LOG file; the integer
+parameters \cs\showboxdepth\ and \cs\showboxbreadth\ are increased. To
+look at the data enter on a command-line the command ``{\tt grep
+-e'\char"5E\bs.\bs.*\bs\bs special' <logfile>}''.
+
+
+
+\beginsection 5. Errors
+
+Errors in the original source are of course kept in the instrumented
+source. But a few eccentric cases can occur that produce new errors
+because of the fact that the I/O primitives are now macros.
+
+I don't mean a case where a source tests if the I/O commands are
+macros or primitives. The source must do something after this test and
+whatever it does I don't count this as an error.
+
+Here is the file {\tt Transparent-IO-eccentric.tex} that contains some
+eccentric cases:\vskip-3pt
+\beginverbatim
+\bs input TrIOmacros\parni
+\bs global\bs input Transparent-IO-hello\parni
+\bs expandafter\bs show\bs input Transparent-IO-hello\parni
+\bs edef\bs csone\ocb\bs input Transparent-IO-hello \ccb\parni
+\bs expandafter\bs show\bs openin0=Transparent-IO-hello\parni
+\bs bye\parni
+\endverbatim
+
+
+\beginsection \rm a) Command in front of \cs\input\
+meant for the first token of the file that is input
+
+Some errors happen with \cs\input\ in situations like this one
+where \cs\global\ is applied to \cs\input.
+\beginverbatim
+! You can't use a prefix with `\bs begingroup'.\parni
+<to be read again> \parni
+\tenspaces\fivespaces\ \ \ \ \bs TRIObegingroup \parni
+\bs input ->\bs TRIObegingroup \parni
+\twentyspaces\fivespaces\bs TRIOafterassignment \bs TRIOnoexpand \bs TrIOempty \bs TRIO...\parni
+l.2 \bs global\bs input\parni
+\tenspaces\fivespaces\ \ \ Transparent-IO-hello\parni
+? \endverbatim
+
+This is the typical picture for an error where \TeX\ wants to read
+again the first token of the macro \cs\input. It is shown not only
+for \cs\global\ but also for \cs\number\ and many other commands.
+
+The solution is to type {\tt42}---you have to remember this
+number---and then to insert the command that appears in front
+of \cs\input; here it's \cs\global.
+\beginverbatim
+? 42\parni
+\ \parni
+\bs input ...put.tex \bs TrIOinputmessage \bs TrIOendgroup \parni
+\fortyspaces\tenspaces\bs TRIOinput \bs TrIOnosubdir \parni
+l.2 \bs global\bs input\parni
+\tenspaces\fivespaces\ \ \ Transparent-IO-hello\parni
+? I\bs global\parni
+! I can't find file `nosubdir/Transparent-IO-hello.tex'.\parni
+l.2 \bs global\bs input Transparent-IO-hello\parni
+\ \parni
+Please type another input file name: \endverbatim
+
+Note this is a very strange use of \cs\input\ as the acceptance of the
+command in front of \cs\input\ depends on the first token in the file
+that's input.
+
+
+\beginsection \rm b) \cs\input\ as second token after \cs\expandafter
+
+Another kind of error occurs if the commands in front of \cs\input\ digests
+tokens. Here is an example.
+\beginverbatim
+> \bs TRIObegingroup=\bs begingroup.\parni
+\bs input ->\bs TRIObegingroup \parni
+\twentyspaces\fivespaces\bs TRIOafterassignment \bs TRIOnoexpand \bs TrIOempty \bs TRIO...\parni
+l.3 \bs expandafter\bs show\bs input\parni
+\twentyspaces\fivespaces\ \ \ Transparent-IO-hello\parni
+? \endverbatim
+
+The solution is to type {\tt41} (as $42-1=41$) and then to insert the
+two commands in front of \cs\input.
+\beginverbatim
+? 41\parni
+\ \parni
+\bs input ...put.tex \bs TrIOinputmessage \bs TrIOendgroup \parni
+\fortyspaces\tenspaces\bs TRIOinput \bs TrIOnosubdir \parni
+l.3 \bs expandafter\bs show\bs input\parni
+\twentyspaces\fivespaces\ \ \ Transparent-IO-hello\parni
+? I\bs expandafter\bs show\parni
+! I can't find file `nosubdir/Transparent-IO-hello.tex'.\parni
+l.3 \bs expandafter\bs show\bs input Transparent-IO-hello\parni
+\ \parni
+Please type another input file name: \endverbatim
+
+
+\beginsection \rm c) Use of \cs\input\ in an \cs\edef
+
+Expansion in an \cs\edef\ or \cs\xdef\ generates a new kind of
+error. This time the error message is the well-known {\tt !\ Undefined
+control sequence}. This message is raised intentionally by a token
+that explains what to do next.
+\beginverbatim
+! Undefined control sequence.\parni
+\bs input ...y \bs TRIOdef \bs TrIOskipXXXVIinsTrIOfixedef \parni
+\fortyspaces\tenspaces\bs TrIOempty \ocb\ccb\bs TrIOempty \bs T...\parni
+l.4 \bs edef\bs csone\ocb\bs input\parni
+\twentyspaces\ \ \ Transparent-IO-hello \ccb\parni
+? \endverbatim
+
+The undefined control word states to skip {\tt36} tokens and then to
+insert \cs\TrIOfixedef. You could also enter
+first \cs\show\cs\TrIOfixedef\ and check that the macro wasn't changed.
+\beginverbatim
+? 36\parni
+\ \parni
+\bs input ...put.tex \bs TrIOinputmessage \bs TrIOendgroup \parni
+\fortyspaces\tenspaces\bs TRIOinput \bs TrIOnosubdir \parni
+l.4 \bs edef\bs csone\ocb\bs input\parni
+\twentyspaces\ \ \ Transparent-IO-hello \ccb\parni
+? I\bs TrIOfixedef\parni
+! I can't find file `nosubdir/Transparent-IO-hello.tex'.\parni
+l.4 \bs edef\bs csone\ocb\bs input Transparent-IO-hello \parni
+\twentyspaces\tenspaces\ccb\parni
+Please type another input file name: \endverbatim
+
+Note the source throws more errors as \cs\input\ cannot be used in
+an \cs\edef\ except the file that's input ends with a certain
+command. Again a unusual scenario.
+
+
+\beginsection \rm d) Errors with \cs\openin\ and \cs\openout
+
+For \cs\openin\ and \cs\openout\ there is only one error situation. It
+occurs with expansion if a sequence of tokens like the
+nonsense \cs\expandafter \cs\show \cs\openin{\tt0=Transparent-IO-hello} appears in
+the source. In this case the expansion of \cs\openin, which contains
+two tokens, looses its first token (that's a \cs\the). One has to
+insert this token to continue the processing.
+\beginverbatim
+> \bs TRIOthe=\bs the.\parni
+\bs openin ->\bs TRIOthe \parni
+\tenspaces\fivespaces\ \ \ \ \bs TrIOtropenin \parni
+l.5 \bs expandafter\bs show\bs openin\parni
+\twentyspaces\fivespaces\ \ \ \ 0=Transparent-IO-hello\parni
+? \endverbatim
+
+Again, a very strange code pattern. Why would someone want to expand
+an usually unexpandable token before \cs\show\ is applied?
+
+
+\beginsection \rm Summary
+
+Most of the described cases don't occur in normal code. Some cases
+represent a \TeX\ coding error, i.e., they throw one or more errors
+during normal execution. These cases might be inserted by someone who
+wants to fool you---maybe after the detection that {\tt TrIOmacros} is
+used. Thus, I recommend to either inspect the code carefully in order
+to find out why the unusual construction is used or to ignore the
+source.
+
+ \rule{11} Inspect the source carefully if an error occurs that involves
+one of the I/O commands. These errors can only appear with weird code
+without any valid use case. Consider to ignore the source.
+
+
+
+\beginsection 6. Permanent fixes for the errors
+
+Note that the interactive fixes of the errors in the previous section
+have suppressed several messages, for example, the counter was not
+shown and it was not increased. This generates a problem for {\tt
+TrIOauto.tex} as we will see later.
+
+An \cs\expandafter\ with \cs\openin\ or \cs\openout\ can be deleted in
+the source. Some constructions for \cs\input\ require a different
+approach; to fix a \cs\global\cs\input\ permanently the source must be
+edited too.
+
+The macros contain the password-protected control
+sequence \cs\TrIOcCkPxXmove\ that has to be entered in front of the
+commands that would occur after the {\tt ?I} in the interactive
+fix. For example, the above case is permanently fixed with the
+code \cs\TrIOcCkPxXmove\cs\global\cs\input. Of course, you must use
+the control word that contains the password that you picked during the
+installation; as mentioned above this is the only password one must
+remember.
+
+ \rule{12} Never return an edited source file to the author without
+removing the first line and all appearances of \cs\TrIOcCkPxXmove.
+
+ \rule{13} Never return a LOG file of your runs to the author of the
+source. If you want to return it make sure that it contains no
+information about your password-protected macro names, your private
+messages, or any trace information of the TrIO macros.
+
+ \rule{14} Never return the DVI file of your runs to the author of the
+source. If you want to return it check the DVI output and make sure,
+for example, by using the program {\tt dvitype} of the \TeX ware
+collection, that it contains no information about your
+password-protected macro names or your private messages.
+
+ \rule{15} Create new passwords and private messages if you violate
+one of the rules 12--14 by accident.
+
+
+
+\beginsection 7. An unsolvable problem
+
+There is one \TeX\ primitive that can create errors which cannot be
+detected by the macros and, thus, which cannot be fixed. But the
+macros can detect if the problematic primitive is active.
+If the macros report this the user has to check the source carefully
+in order to confirm that the activation is required and that it
+happens in a way which doesn't influence the work of the macros.\goodbreak
+
+The problematic primitive is the integer
+parameter \cs\globaldefs. Usually its value is 0 and the macros can do
+their work without problems. If its value is less than 0 everything is
+fine too. But a value greater than 0 makes any assignment global even
+if it is not prefixed with \cs\global\ and this can lead to a problem.
+
+Our macros first reset the value to 0; this assignment is global. At
+the end the macros set the value locally back to 1 or $-1$ depending
+of the value of \cs\globaldefs\ when a macro is called. Thus code like
+this doesn't work correctly: \cs\globaldefs{\tt=1 \ocb}\cs\input\ {\tt
+Transparent-IO-hello \ccb}. In this case the value of \cs\globaldefs\ after the
+closing brace is 0 not 1. But this case cannot be distinguished by the
+macros from the good case {\tt\ocb}\cs\globaldefs{\tt=1} \cs\input\
+{\tt Transparent-IO-hello \ccb}. The macros can only detect if \cs\globaldefs\ has a
+value greater than 0 and they report this finding.
+
+ \rule{16} Stop the run if the macros report that \cs\globaldefs\ is
+positive. Check the source carefully why this rarely used parameter
+must be set. If it must have a value greater 0 check that only the
+good case occurs. Otherwise reject the source.
+
+
+
+\beginsection 8. Using {\tt TrIOauto}
+
+If a run with {\tt TrIOmacros.tex} was successful, i.e., no interactive
+fix was necessary, repeated executions of the source can be made
+simpler.
+
+First, the LOG file of the successful run should be saved; copy it, for
+example, and give it the extension {\tt trio}. Second, one of the two
+{\tt sed} files must be applied to this copy. For example, {\tt sed -f
+TrIOlineno.sed <triofile> > TrIOnames.tex} where {\tt<triofile>} is
+the copy of the LOG file of the successful run. The last step is to
+change {\tt TrIOmacros} in the first line of the instrumented source
+by {\tt TrIOauto}.
+
+The file {\tt TrIOlineno.sed} makes stricter comparisons than {\tt
+TrIOextract.sed}. You can always recreate {\tt TrIOnames.tex} if the
+source file needs to be edited and a comparison of line numbers would
+fail by using {\tt TrIOextract.sed} instead of {\tt TrIOlineno.sed} in
+the above {\tt sed} command.
+
+\beginsection \rm a) Rerun of the example of section~3
+
+A run with {\tt TrIOauto.tex} starts similar to a run with {\tt
+TrIOmacros.tex} except that one more file is loaded but no information
+about a nonexistent subdirectory is given.
+\beginverbatim
+(./TrIOauto.tex (./TrIOsupport.tex) (./TrIOprivate.tex) (./TrIOnames.tex)\parni
+<<< TrIO >>> \bs special: primitive\parni
+! TrIO auto-mode activated. Type h to get instructions.\parni
+l.61 ...ode activated. Type h to get instructions\ccb\parni
+\fortyspaces\tenspaces\bs endgroup\parni
+? h\parni
+File I/O ( \bs input \bs openin \bs openout ) is now under TrIO's control.\parni
+Be alerted if a file is loaded without the proper TrIO message\parni
+and check that the file name without extension that raises\parni
+the font error matches the file name of the TrIO message.\parni
+? \endverbatim
+
+The nonexistent subdirectory isn't required anymore as all I/O
+commands are taken from the file {\tt TrIOnames.tex}. In this run a
+user cannot change a file name used in the source; the macros use the
+ones entered during the successful run. A surprise might be the text
+about ``font errors'' in the help text. Although no file name has to
+be entered the macros show the name of the successful run and the name
+that they read in the current run.
+\beginverbatim
+(./TrIOopen.tex\parni
+TrIO >>> ( 1 ) Line 3: input Transparent-IO-hello \parni
+)\parni
+! Font \bs TRIOunused=TrIO\char"5FTransparent-IO-hello not loadable: Metric (TFM) file not found.\parni
+<to be read again> \parni
+\tenspaces\fivespaces\ \ \ \ \bs par\parni
+l.4 \parni
+\ \parni
+? \endverbatim
+\noindent
+Note that \TeX\ has the complete file name only after it sees the next
+line which is empty.
+
+Although only approved file names are processed a user should still be
+concentrated.
+
+ \rule{17} With {\tt TrIOauto.tex} a user should check that {\tt
+TrIOopen.tex} is loaded, the sequential counter is increased from stop
+to stop, and that the main part of the file name in the line that
+starts with ``{\tt TrIO >>>}'' agrees with the name that appears after
+the underline in the error message (with \cs\openout\ the path is
+replaced by {\tt trioo}, see rule~1). Otherwise the source operates
+with varying file names; check the source carefully.\looseness=-1
+
+Now press return to input {\tt Transparent-IO-hello.tex} and to go to the next I/O
+command. The messages for \cs\openin\ and \cs\openout\ look similar.
+\beginverbatim
+(./TrIOopen.tex\parni
+TrIO >>> ( 2 ) Line 5: openin 0 Transparent-IO-hello\parni
+)\parni
+! Font \bs TRIOunused=TrIO\char"5FTransparent-IO-hello not loadable: Metric (TFM) file not found.\parni
+<to be read again> \parni
+\tenspaces\fivespaces\ \ \ \ \bs par\parni
+l.6 \parni
+\ \parni
+? \parni
+(./TrIOopen.tex\parni
+TrIO >>> ( 3 ) Line 7: openout 5 trioo/Transparent-IO-goodbye\parni
+)\parni
+! Font \bs TRIOunused=TrIO\char"5FTransparent-IO-goodbye not loadable: Metric (TFM) file not found.\parni
+<to be read again> \parni
+\tenspaces\fivespaces\ \ \ \ \bs par\parni
+l.8 \parni
+\ \parni
+? \endverbatim
+
+You can see that the subdirectory {\tt trioo} (see rule~1) is
+mentioned in the case of \cs\openout. Of course,
+an \cs\immediate\cs\openout\ is signaled by ``immediate openout''
+instead of ``openout'' in the line that starts with {\tt TrIO >>>}.
+
+
+
+
+\beginsection 9. Remarks about {\tt openin.tex} and {\tt openout.tex}
+
+The \TeX\ commands \cs\openin\ and \cs\openout\ are less verbose
+than \cs\input\ with respect to the file name they have to process. As
+they occur less frequently than \cs\input\ the macros implement a
+two-step procedure to enter the file names for \cs\openin\
+and \cs\openout. This slow-down in the workflow gives the user a
+chance to avoid hasty decisions.
+
+But I assume some users want to have a faster processing. Here are two
+ideas how to speed-up the workflow. (1)~The file {\tt openin.tex} and
+{\tt openout.tex} aren't called by other files of the package; they
+are only entered by the user. Thus, a user can rename them to make the
+names easier to type. (The names are used in messages (see {\tt
+TrIOmacros.org}) so either change them there too or remember that you
+have changed the file names.)  (2)~The files stop with a private
+message whereas {\tt TrIOinput.tex} just outputs such a message. If
+you check all private messages carefully you can change the code in
+{\tt openin.tex} and {\tt openout.tex} so that it displays the private
+message on the terminal without using \cs\pausing\ to avoid to enter
+{\tt<return>}.\looseness=-1
+
+
+
+
+\beginsection 10. Precautionary warning
+
+As you saw the macros cannot run without user interaction. This means,
+your knowledge about plain \TeX\ is a crucial success factor if
+problems occur. You must be able to distinguish if an error message is
+based on TrIO's actions, or if it's an aggressive attempt to
+circumvent TrIO, or if it's a simple error in the source.
+
+Above I wrote that you should have a non-beginner's knowledge of
+plain \TeX. Now you should be aware that your knowledge about the
+original \TeX, plain \TeX, the command {\tt\bs special} and its risks,
+as well as tools like {\tt dvitype}, {\tt sed}, etc.\ are important.
+
+As soon as you don't understand what happens in the untrusted source
+stop the execution by \TeX. Stop the execution in an error situation
+if you don't understand what you have to do with TrIO.
+
+\bye


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-doc.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-eccentric.tex
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-eccentric.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-eccentric.tex	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,6 @@
+\input TrIOmacros
+\global\input Transparent-IO-hello
+\expandafter\show\input Transparent-IO-hello
+\edef\csone{\input Transparent-IO-hello }
+\expandafter\show\openin0=Transparent-IO-hello
+\bye


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-eccentric.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-example.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-example.tex	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1,9 @@
+\input TrIOmacros
+
+\input Transparent-IO-hello
+
+\openin0=Transparent-IO-hello
+
+\openout5=Transparent-IO-goodbye
+
+\bye


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-example.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-hello.tex
===================================================================
--- trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-hello.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-hello.tex	2022-08-13 20:34:14 UTC (rev 64113)
@@ -0,0 +1 @@
+Hello \TeX!


Property changes on: trunk/Master/texmf-dist/doc/plain/transparent-io/Transparent-IO-hello.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2022-08-13 20:30:17 UTC (rev 64112)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2022-08-13 20:34:14 UTC (rev 64113)
@@ -820,7 +820,7 @@
     translation-ecv-de translation-enumitem-de translation-europecv-de
     translation-filecontents-de translation-moreverb-de
     translation-natbib-fr translation-tabbing-fr
-    translations translator transparent
+    translations translator transparent transparent-io
     tree-dvips treetex trfsigns
     trigonometry trimspaces trivfloat trsym truncate truthtable
     tsemlines

Modified: trunk/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc	2022-08-13 20:30:17 UTC (rev 64112)
+++ trunk/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc	2022-08-13 20:34:14 UTC (rev 64113)
@@ -103,6 +103,7 @@
 depend texinfo
 depend timetable
 depend tracklang
+depend transparent-io
 depend treetex
 depend trigonometry
 depend ulem

Added: trunk/Master/tlpkg/tlpsrc/transparent-io.tlpsrc
===================================================================


More information about the tex-live-commits mailing list.