summaryrefslogtreecommitdiff
path: root/tex/context/base/spec-ini.tex
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>1998-04-15 00:00:00 +0200
committerHans Hagen <pragma@wxs.nl>1998-04-15 00:00:00 +0200
commitf7ce2124ddf34c4a7c785e1500003921d70118ba (patch)
tree35d818611773ecd034e23a0e4079ba0a994c6887 /tex/context/base/spec-ini.tex
parent5f54d546a687e0615f87a117c5950b78ef346af7 (diff)
downloadcontext-f7ce2124ddf34c4a7c785e1500003921d70118ba.tar.gz
stable 1998.04.15
Diffstat (limited to 'tex/context/base/spec-ini.tex')
-rw-r--r--tex/context/base/spec-ini.tex1916
1 files changed, 958 insertions, 958 deletions
diff --git a/tex/context/base/spec-ini.tex b/tex/context/base/spec-ini.tex
index 0e3ef3be4..b26f067f1 100644
--- a/tex/context/base/spec-ini.tex
+++ b/tex/context/base/spec-ini.tex
@@ -1,958 +1,958 @@
-%D \module
-%D [ file=spec-ini,
-%D version=1996.01.25,
-%D title=\CONTEXT\ Special Macros,
-%D subtitle=Initialization,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. Non||commercial use is
-%C granted.
-
-%D Specials are \TEX's channel to the outside world. They make
-%D \TEX\ even more platform independant and permit easy
-%D adaption to new developments. One major drawback of specials
-%D is that they have to be supported by printer drivers. We've
-%D tried to overcome this problem by implementinmg specials as
-%D a sort of drivers themselves.
-
-\writestatus{loading}{Context Special Macros / Initialization}
-
-\unprotect
-
-\startmessages dutch library: specials
- title: specials
- 1: -- geladen
- 2: verdere nesting is niet toegestaan --
- 3: -- gereset
- 4: commando -- bestaat niet
- 5: definitiefile -- wordt geladen
- 6: nesting is niet toegestaan
-\stopmessages
-
-\startmessages english library: specials
- title: specials
- 1: -- loaded
- 2: no deeper nesting is permitted --
- 3: -- is reset
- 4: command -- does not exist
- 5: loading definition file --
- 6: nesting is not permitted
-\stopmessages
-
-\startmessages german library: specials
- title: spezielles
- 1: -- geladen
- 2: Keine tiefere Verschachtelung erlaubt --
- 3: -- ist zurueckgesetzt
- 4: Befehl -- existiert nicht
- 5: Lade Definitionsdatei --
- 6: Verschachtelung nicht erlaubt
-\stopmessages
-
-\startmessages dutch library: interactions
- 21: -- code tussengevoegd
-\stopmessages
-
-\startmessages english library: interactions
- 21: -- code inserted
-\stopmessages
-
-\startmessages german library: interactions
- 21: -- Code eingefuegt
-\stopmessages
-
-%D Because there is no standardization in the use of specials,
-%D more than one driver or program can be supported. The
-%D specials are grouped in libraries. Some of these are
-%D general, such as the \type{postscript} library, some are
-%D tuned to a special kind of program, like the \type{pdf}
-%D ones, and some support a specific driver, as we can see in
-%D the \type{yandy} library. A library is build with the
-%D commands:
-%D
-%D \starttypen
-%D \startspecials[name][inheritance]
-%D
-%D \definespecial\none{...}
-%D \definespecial\onlyone#1{...}
-%D \definespecial\alot#1#2#3#4{...}
-%D
-%D \stopspecials
-%D \stoptypen
-%D
-%D Because drivers show some overlap in their support of
-%D specials, a mechanism of inheritance is implemented. The
-%D predefined libraries show this feature.
-%D
-%D Every special has to be predefined first. We do this with
-%D the command:
-%D
-%D \starttypen
-%D \installspecial [\none] [and] [0]
-%D \installspecial [\onlyone] [and] [1]
-%D \installspecial [\alot] [or] [4]
-%D \stoptypen
-%D
-%D This means as much as: there is a special names
-%D \type{\none} which has no arguments and has more than one
-%D appearance. The special \type{\alot} on the other hand has
-%D four arguments and is only defined once. Every instance in
-%D the libraries of a special of category \type{and} is
-%D executed when called upon, but only one special of
-%D category \type{or} can be active. Most of the
-%D \type{postscript}||specials are of category \type{or},
-%D because they tend to interfere with driver specific ones.
-%D The interactive specials of \type{dviwindo} and \type{pdf}
-%D are an example of specials that can be called both.
-%D
-%D A library is defined in a file with the name
-%D \type{spec-...}. We load a library with the command:
-%D
-%D \starttypen
-%D \usespecials [list]
-%D \stoptypen
-%D
-%D where the list can contain one or more file tags, the
-%D \type{...} in the filename. The keyword \type{reset}
-%D resets all loaded specials. This is equivalent to
-%D \type{\resetspecials}.
-
-%D Although a mechanism of nesting can be implemented, we
-%D prefer to use a inheritance mechanism as mentioned. Calls
-%D upon \type{\usespecials} within a \type{\startspecials}
-%D would lead to confusion and errors.
-
-\newif\ifinheritspecials
-
-%D We define some local constants and variables. They look a
-%D bit horrible but we don't want conflicts.
-
-\def\@@specfil@@{@@specfil@@}
-\def\@@speclst@@{@@speclst@@}
-\def\@@speccat@@{@@speccat@@}
-\def\@@specarg@@{@@specarg@@}
-\def\@@specexc@@{@@specexc@@}
-
-\def\currentspecial {}
-\def\currentspecialfile {}
-\def\preloadedspecials {}
-
-%D \macros
-%D {preloadspecials}
-%D {}
-%D
-%D The following command can be used to show the loaded list
-%D of specials.
-
-\def\preloadspecials%
- {\doifsomething{\preloadedspecials}
- {\showmessage{\m!specials}{1}{\preloadedspecials}}}
-
-%D \macros
-%D {startspecials}
-%D {}
-%D
-%D Every library has a unique name, which is given as the first
-%D argument to \type{\startspecials}. When another library is
-%D defined with the same name, previous specials can be
-%D overruled. The name may differ from the file||tag.
-%D
-%D The optional second argument can consist of a list of
-%D libraries that are to be loaded first. This list can contain
-%D file||tags or names of libraries. Names are often more
-%D meaningful.
-
-\def\dostartspecials[#1][#2]%
- {\let\mainspecialfile=\currentspecialfile
- \doifelsenothing{#2}
- {\inheritspecialsfalse}
- {\ifinheritspecials
- \showmessage{\m!specials}{2}{(#2)}%
- \else
- \inheritspecialstrue
- \processcommalist[#2]\dousespecials
- \inheritspecialsfalse
- \fi}%
- \doifelsenothing{#1}
- {\def\currentspecial{\s!unknown}}
- {\def\currentspecial{#1}}%
- \let\currentspecialfile=\mainspecialfile
- \setevalue{\@@specfil@@\currentspecial}{\currentspecialfile}%
- \unprotect
- \addtocommalist{\currentspecial}\preloadedspecials}
-
-\def\startspecials%
- {\dodoubleempty\dostartspecials}
-
-\def\stopspecials%
- {\def\currentspecial{}%
- \protect}
-
-%D \macros
-%D {installspecial,
-%D resetspecials}
-%D {}
-%D
-%D We have to install specials before we can define and use
-%D them. The command itself is defined as a call to another
-%D command that executes one or more user||defined specials,
-%D depending of it's category: \type{or} versus \type{and}.
-%D
-%D The command \type{\installspecial} takes three
-%D (non||optional) arguments: the name of the command, the
-%D category it belongs to and the number of arguments it
-%D takes.
-%D
-%D With \type{\resetspecials} we can unload the predefined
-%D specials.
-
-\def\@@allspecials{}
-
-\def\doinstallspecial[#1][#2][#3]%
- {\setvalue{\@@speclst@@\string#1}{}%
- \setvalue{\@@speccat@@\string#1}{#2}%
- \setvalue{\@@specarg@@\string#1}{#3}%
- \addtocommalist{\string#1}\@@allspecials
- \def#1{\executespecial#1}}
-
-\def\installspecial%
- {\dotripleargument\doinstallspecial}
-
-\def\resetspecials%
- {\def\docommando##1%
- {\setvalue{\@@speclst@@##1}{}}%
- \processcommacommand[\@@allspecials]\docommando
- \showmessage{\m!specials}{3}{\preloadedspecials}%
- \def\preloadedspecials{}%
- \def\@@allspecials{}}
-
-%D \macros
-%D {definespecial}
-%D {}
-%D
-%D The command \type{\definespecial} take the place of
-%D \type{\def} in the definition of a special. Just to be
-%D sure, we first check if the command is permitted, i.e.
-%D installed. If not, we give a warning and gobble the
-%D illegal command in an quite elegant way.
-%D
-%D If the command can be combined (\type{and}) with others,
-%D we append it to a list, otherwise (\type{or}) it becomes
-%D the only item in the list.
-
-\def\definespecial#1%
- {\ifx#1\undefined
- \showmessage{\m!specials}{4}{\string#1}%
- \def\next%
- {\def\@@illegalspecial@@}%
- \else
- \def\next%
- {\doifelse{\getvalue{\@@speccat@@\string#1}}{or}
- {\edef\@@newspeclst@@{\currentspecial}}
- {\edef\@@newspeclst@@{\getvalue{\@@speclst@@\string#1}}%
- \addtocommalist{\currentspecial}\@@newspeclst@@}%
- \setevalue{\@@speclst@@\string#1}{\@@newspeclst@@}%
- \setvalue{\currentspecial\string#1}}%
- \fi
- \next}
-
-%D \macros
-%D {usespecials}
-%D {}
-%D
-%D We use \type{\usespecials} to load a specific library.
-%D This command is only permitted outside de definition part.
-
-\def\dousespecials#1%
- {\doifelse{#1}{\v!reset}
- {\resetspecials}
- {\doifdefinedelse{\@@specfil@@#1}
- {\edef\currentspecialfile{\getvalue{\@@specfil@@#1}}}
- {\edef\currentspecialfile{#1}}%
- \makeshortfilename[\f!specialprefix\currentspecialfile]%
- \showmessage{\m!specials}{5}{\currentspecialfile}%
- \startreadingfile
- \readsysfile{\shortfilename}{}{}%
- \stopreadingfile
- \showmessage{\m!specials}{1}{\preloadedspecials}}}
-
-\def\usespecials[#1]%
- {\doifelsenothing{\currentspecial}
- {\processcommalist[#1]\dousespecials}
- {\showmessage{\m!specials}{6}{}}}
-
-%D \macros
-%D {executespecials}
-%D {}
-%D
-%D The command \type{\executespecials} is used to execute the
-%D defined specials. Once a special is installed, the special
-%D itself calls for this command, so it's not needed outside
-%D this module. One can use it if wanted.
-%D
-%D A former implementation grouped the execution. Recent
-%D additions however |<|like the specials that implement object
-%D handling|>| asked for non||grouped execution.
-
-\def\executespecials#1#2%
- {\def\doonespecial##1%
- {\getvalue{##1\string#1}#2\relax}%
- \processcommacommand
- [\getvalue{\@@speclst@@\string#1}]\doonespecial}
-
-\def\executespecial#1%
- {\expandafter\ifcase\getvalue{\@@specarg@@\string#1}\relax
- \def\next%
- {\executespecials#1{}}%
- \or
- \def\next##1%
- {\executespecials#1{{##1}}}%
- \or
- \def\next##1##2%
- {\executespecials#1{{##1}{##2}}}%
- \or
- \def\next##1##2##3%
- {\executespecials#1{{##1}{##2}{##3}}}%
- \or
- \def\next##1##2##3##4%
- {\executespecials#1{{##1}{##2}{##3}{##4}}}%
- \or
- \def\next##1##2##3##4##5%
- {\executespecials#1{{##1}{##2}{##3}{##4}{##5}}}%
- \or
- \def\next##1##2##3##4##5##6%
- {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}}}%
- \or
- \def\next##1##2##3##4##5##6##7%
- {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}}%
- \or
- \def\next##1##2##3##4##5##6##7##8%
- {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}}%
- \or
- \def\next##1##2##3##4##5##6##7##8##9%
- {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}}%
- \else
- \def\next%
- {\message{illegal special: \string#1}}%
- \fi
- \next}
-
-%D The \type{{{...}}} are needed because we pass all those
-%D arguments to the specials support macro.
-
-\let\openspecialfile = \relax
-\let\closespecialfile = \relax
-
-% %D This is some new, experimental code, used for testing some
-% %D proposals of Laurent Siebenmann on behalf of the
-% %D \kap{EMJ} discussionlist.
-%
-% \newif\ifexternalspecials \externalspecialsfalse
-% \newif\ifspecialstatus \specialstatustrue
-%
-% \newwrite\specialfile
-%
-% \def\openspecialfile%
-% {\immediate\openout\specialfile=\jobname.etc\relax}
-%
-% \def\closespecialfile%
-% {\immediate\closeout\specialfile}
-%
-% \let\internalspecial=\special
-%
-% \def\externalspecial#1%
-% {\internalspecial{}%
-% \immediate\write\specialfile{\currentspecialdriver\space: #1}}
-%
-% \def\doinstallspecial[#1][#2][#3]%
-% {\setvalue{\@@specexc@@\string#1}{}%
-% \setvalue{\@@speclst@@\string#1}{}%
-% \setvalue{\@@speccat@@\string#1}{#2}%
-% \setvalue{\@@specarg@@\string#1}{#3}%
-% \addtocommalist{\string#1}\@@allspecials
-% \def#1{\executespecial#1}}
-%
-% \def\resetspecials%
-% {\def\docommando##1%
-% {\setvalue{\@@specexc@@##1}{}%
-% \setvalue{\@@speclst@@##1}{}}%
-% \processcommacommand[\@@allspecials]\docommando
-% \showmessage{\m!specials}{3}{\preloadedspecials}}
-%
-% \def\executespecials#1#2%
-% {\edef\supportedspecials{\getvalue{\@@speclst@@\string#1}}%
-% \def\doonespecial##1%
-% {\doifdefined{##1\string#1}
-% {\def\currentspecialdriver{##1}%
-% \getvalue{##1\string#1}#2\relax}}%
-% \ifexternalspecials
-% \let\special=\externalspecial
-% \doifelse{\supportedspecials}{}
-% {\ifspecialstatus
-% \immediate\write\specialfile{}%
-% \immediate\write\specialfile{skipping : \string#1}
-% \immediate\write\specialfile{}%
-% \fi}
-% {\ifspecialstatus
-% \immediate\write\specialfile{}%
-% \immediate\write\specialfile{executing : \string#1}%
-% \immediate\write\specialfile{supported : \supportedspecials}%
-% \fi
-% \immediate\write\specialfile{}%
-% \processcommacommand[\supportedspecials]\doonespecial}%
-% \else
-% \let\special=\internalspecial
-% \doifelse{\getvalue{\@@speccat@@\string#1}}{or}
-% {\doonespecial{\getvalue{\@@specexc@@\string#1}}}
-% {\processcommacommand[\supportedspecials]\doonespecial}%
-% \fi}
-%
-% \def\definespecial#1%
-% {\ifx#1\undefined
-% \showmessage{\m!specials}{4}{\string#1}%
-% \def\next%
-% {\def\@@illegalspecial@@}%
-% \else
-% \def\next%
-% {\edef\@@newspeclst@@{\getvalue{\@@speclst@@\string#1}}%
-% \addtocommalist{\currentspecial}\@@newspeclst@@
-% \setevalue{\@@speclst@@\string#1}{\@@newspeclst@@}%
-% \setevalue{\@@specexc@@\string#1}{\currentspecial}%
-% \setvalue{\currentspecial\string#1}}%
-% \fi
-% \next}
-%
-% %D So far for the experiment.
-
-\protect
-
-%D The following libraries are defined. Two postscript
-%D drivers are supported, as well as two mechanisms for
-%D interactive texts.
-%D
-%D \startregelcorrectie
-%D \starttabel[|l|l|l|l|l|]
-%D \HL
-%D \NC \bf file \NC
-%D \bf name \NC
-%D \bf calls \NC
-%D \bf support \NC
-%D \bf program / driver \NC\SR
-%D \HL
-%D \NC \tttf spec-tex \NC
-%D \tttf tex \NC
-%D \NC
-%D Generic \TEX\ (\DVI) \NC
-%D (default) \NC\FR
-%D \NC \tttf spec-ps \NC
-%D \tttf postscript \NC
-%D \NC
-%D Adobe PostScript \NC
-%D (default) \NC\MR
-%D \NC \tttf spec-tr \NC
-%D \tttf rokicky \NC
-%D \tttf postscript \NC
-%D Thomas Rokicky \NC
-%D (dvips) \NC\MR
-%D \NC \tttf spec-yy \NC
-%D \tttf yandy \NC
-%D \tttf postscript \NC
-%D YandY \NC
-%D (dvipsone, dviwindo) \NC\MR
-%D \NC \tttf spec-pdf \NC
-%D \tttf pdf \NC
-%D \NC
-%D Adobe PDF V2.1 \NC
-%D (Acrobat) \NC\MR
-%D \NC \tttf spec-win \NC
-%D \tttf dviwindo \NC
-%D YandY \NC
-%D (dviwindo) \NC\MR
-%D \NC \tttf spec-1p0 \NC
-%D \tttf pdf \NC
-%D \NC
-%D Adobe PDF V 1.0 \NC
-%D (Acrobat) \NC\MR
-%D \NC \tttf spec-2p0 \NC
-%D \tttf pdf \NC
-%D \NC
-%D Adobe PDF V 2.0 \NC
-%D (Acrobat) \NC\MR
-%D \NC \tttf spec-htm \NC
-%D \tttf html \NC
-%D \NC
-%D HTML V 2.0 \NC
-%D (dvips) \NC\LR
-%D \HL
-%D \stoptabel
-%D \stopregelcorrectie
-
-%D \macros
-%D {dostartgraymode,dostopgraymode,
-%D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode,dostopcolormode}
-%D {}
-%D
-%D We start with the installation of color and grayscale
-%D specials. The values are in the range 0..1 (e.g. 0.25).
-%D
-%D \starttypen
-%D \dostartgraymode {gray} ... \dostopgraymode
-%D \dostartrgbcolormode {red} {green} {blue} ... \dostopcolormode
-%D \dostartcmykcolormode {cyan} {magenta} {yellow} {black} ... \dostopcolormode
-%D \dostartgraycolormode {gray} ... \dostopcolormode
-%D \stoptypen
-%D
-%D Because we can expect conflicts between drivers, we
-%D implement them as category \type{or}. In previous versions
-%D of \DVIPSONE\ the use of their color||specials did not
-%D interfere with the PostScript ones, but recent versions do.
-
-\installspecial [\dostartgraymode] [or] [1]
-\installspecial [\dostopgraymode] [or] [0]
-
-\installspecial [\dostartrgbcolormode] [or] [3]
-\installspecial [\dostartcmykcolormode] [or] [4]
-\installspecial [\dostartgraycolormode] [or] [1]
-\installspecial [\dostopcolormode] [or] [0]
-
-%D \macros
-%D {doinsertfile}
-%D {}
-%D
-%D Probably the most problematic special is the following
-%D one. Because we want to be able to support different
-%D schemes, we pass a lot of data to it.
-%D
-%D \starttypen
-%D \doinsertfile {type,method} {file}
-%D {xscale} {yscale} {x} {y} {w} {h}
-%D {options}
-%D \stoptypen
-%D
-%D The scale is given percents, the other values are base
-%D points.
-%D
-%D The special is implemented as \type{or}. Because
-%D \DVIPSONE\ understands them all, a chain of alternatives
-%D would generate multiple courrences of the same
-%D illustration.
-%D
-%D When option 1 is passed, the viewers is asked to present a
-%D preview, like the first frame of a movie.
-
-\installspecial [\doinsertfile] [or] [9]
-
-%D \macros
-%D {dostartrotation,
-%D dostoprotation}
-%D {}
-%D
-%D We support rotation with the special:
-%D
-%D \starttypen
-%D \dostartrotation {angle} ... \dostoprotation
-%D \stoptypen
-%D
-%D For the moment these specials are installed as
-%D category \type{or}.
-
-\installspecial [\dostartrotation] [or] [1]
-\installspecial [\dostoprotation] [or] [0]
-
-%D \macros
-%D {dostartscaling,
-%D dostopscaling}
-%D {}
-%D
-%D Scaling is also supported:
-%D
-%D \starttypen
-%D \dostartscaling {x} {y} ... \dostopscaling
-%D \stoptypen
-%D
-%D Like the previous one, these specials are of category
-%D \type{or}.
-
-\installspecial [\dostartscaling] [or] [2]
-\installspecial [\dostopscaling] [or] [0]
-
-%D \macros
-%D {dostartmirroring,
-%D dostopmirroring}
-%D {}
-%D
-%D And indeed, mirroring is there too:
-%D
-%D \starttypen
-%D \dostartmirroring {x} {y} ... \dostopmirroring
-%D \stoptypen
-%D
-%D Again these specials are installed as category \type{or}.
-
-\installspecial [\dostartmirroring] [or] [0]
-\installspecial [\dostopmirroring] [or] [0]
-
-%D \macros
-%D {dostartnegative,
-%D dostopnegative}
-%D {}
-%D
-%D When producing output for an image setter, negating the
-%D page comes into view. Here are the tools:
-
-\installspecial [\dostartnegative] [or] [0]
-\installspecial [\dostopnegative] [or] [0]
-
-%D \macros
-%D {doselectfirstpaperbin,
-%D doselectsecondpaperbin}
-%D {}
-%D
-%D Here are some very printer||specific ones. No further
-%D comment.
-
-\installspecial [\doselectfirstpaperbin] [or] [0]
-\installspecial [\doselectsecondpaperbin] [or] [0]
-
-%D \macros
-%D {doovalbox}
-%D {}
-%D
-%D When we look at the implementation, this is a complicated
-%D one. There are seven arguments.
-%D
-%D \starttypen
-%D \doovalbox {w} {h} {d} {linewidth} {radius} {stroke} {fill}
-%D \stoptypen
-%D
-%D This command has to return a \type{\vbox} which can be used
-%D to lay over another one (with text). The radius is in
-%D degrees, the stroke and fill are~\type{1} (true) of~\type{0}
-%D (false).
-
-\installspecial [\doovalbox] [or] [7]
-
-%D \macros
-%D {dosetupidentity}
-%D {}
-%D
-%D We can declare some characteristics of the document with
-%D
-%D \starttypen
-%D \dosetupidentity {title} {subject} {author} {creator} {date}
-%D \stoptypen
-%D
-%D All data is in string format.
-
-\installspecial [\dosetupidentity] [and] [5]
-
-%D \macros
-%D {dosetuppaper}
-%D {}
-%D
-%D This special can be used to tell the driver what page size
-%D to use. The special takes three arguments.
-%D
-%D \starttypen
-%D \dosetuppaper {type} {width} {height}
-%D \stoptypen
-%D
-%D The type is one of the common identifiers, like A4, A5 or
-%D B2.
-
-\installspecial [\dosetuppaper] [and] [3]
-
-%D \macros
-%D {dosetupprinter}
-%D {}
-%D
-%D Some drivers enable the user to specify the paper type
-%D used and/or page dimensions to be taken into account.
-%D
-%D \starttypen
-%D \dosetupprinter {type} {hoffset} {voffset} {width} {height}
-%D \stoptypen
-%D
-%D The first argument is one of \type{letter}, \type{legal},
-%D \type{A4}, \type{A5} etc. The dimensions are in
-%D basepoints.
-
-\installspecial [\dosetupprinter] [and] [5]
-
-%D \macros
-%D {dosetuppage,
-%D dosetupinteraction,
-%D dosetupscreen}
-%D {}
-%D
-%D Here come some obscure interactive commands. Probably the
-%D specs will change with the development of the macros that
-%D use them.
-%D
-%D The first ones can be used to set up the interaction.
-%D
-%D \starttypen
-%D \dosetupinteraction
-%D \stoptypen
-%D
-%D Normally this command does nothing but giving a message
-%D that some scheme is supported. Postscript prolog files
-%D can best be loaded by the printer driver program.
-%D
-%D The second one sets up the screen. It takes three
-%D arguments:
-%D
-%D \starttypen
-%D \dosetupscreen {hoffset} {voffset} {width} {height} {options}
-%D \stoptypen
-%D
-%D The first four arguments are in scaled points. Option~1
-%D results in a full screen launch.
-
-\installspecial [\dosetupinteraction] [and] [0]
-\installspecial [\dosetupscreen] [and] [5]
-
-%D \macros
-%D {dostarthide,
-%D dostophide}
-%D {}
-%D
-%D Not every part of the screen is suitable for paper. Menus
-%D for instance have no meaning on an non||interactive medium.
-%D These elements are hidden by means of:
-%D
-%D \starttypen
-%D \dostarthide
-%D \dostophide
-%D \stoptypen
-
-\installspecial [\dostarthide] [or] [0]
-\installspecial [\dostophide] [or] [0]
-
-%D \macros
-%D {dostartgotolocation, dostopgotolocation,
-%D dostartgotorealpage, dostopgotorealpage}
-%D {}
-%D
-%D The interactive real work is done by the following four
-%D specials. The reason for providing the first one with both
-%D a label and a number, is a result of the quite poor
-%D implementation of \type{pdfmarks} in version 1.0 of
-%D Acrobat. Because only pagenumbers were supported as
-%D destination, we had to provide both labels (\DVIWINDO) and
-%D pagenumbers (\PDF). Some drivers use start stop pairs.
-%D
-%D \starttypen
-%D \dostartgotolocation {w} {h} {url} {file} {label} {page}
-%D \dostartgotorealpage {w} {h} {url} {file} {page}
-%D \stoptypen
-%D
-%D Their counterparts are:
-%D
-%D \starttypen
-%D \dostopgotolocation
-%D \dostopgotorealpage
-%D \stoptypen
-%D
-%D The internal alternative is used for system||generated
-%D links, the external one for user||generated links. The
-%D Uniform Resource Locator can be used to let the reader
-%D surf the net.
-
-\installspecial [\dostartgotolocation] [and] [6]
-\installspecial [\dostopgotolocation] [and] [0]
-\installspecial [\dostartgotorealpage] [and] [5]
-\installspecial [\dostopgotorealpage] [and] [0]
-
-%D \macros
-%D {dostartgotoJS, doflushJSpreamble}
-%D
-%D
-%D Rather special is the option to include and execute
-%D JavaScript code. This is a typical \PDF\ option.
-%D
-%D \starttypen
-%D \dostartgotoJS {w} {h} {script}
-%D \stoptypen
-%D
-%D This not so standard \TEX\ feature should be used with
-%D care. Preamble scripts are flushed by
-%D
-%D \doflushJSpreamble {script}
-
-\installspecial [\dostartgotoJS] [and] [3]
-\installspecial [\dostopgotoJS] [and] [0]
-\installspecial [\doflushJSpreamble][and] [1]
-
-%D \macros
-%D {dostartthisislocation, dostopthisislocation,
-%D dostartthisisrealpage, dostopthisisrealpage}
-%D {}
-%D
-%D The opposite commands of \type{\dogotosomething} have only
-%D one argument:
-%D
-%D \starttypen
-%D \dostartthisislocation {label}
-%D \dostartthisisrealpage {page}
-%D \stoptypen
-%D
-%D These commands are accompanied by:
-%D
-%D \starttypen
-%D \dostopthisislocation
-%D \dostopthisisrealpage
-%D \stoptypen
-%D
-%D As with all interactive commands's they are installed as
-%D \type{and} category specials.
-
-\installspecial [\dostartthisislocation] [and] [1]
-\installspecial [\dostopthisislocation] [and] [0]
-\installspecial [\dostartthisisrealpage] [and] [1]
-\installspecial [\dostopthisisrealpage] [and] [0]
-
-%D \macros
-%D {dostartexecutecommand, dostopexecutecommand}
-%D {}
-%D
-%D The actual behavior of the next pair of commands depends
-%D much on the viewing engine. Therefore one cannot depend
-%D too much on their support.
-%D
-%D \starttypen
-%D \dostartexecutecommand {w} {h} {command} {options}
-%D \stoptypen
-%D
-%D
-%D The next commands are supported:
-%D
-%D \startregelcorrectie\steluitlijnenin[midden]\leavevmode
-%D \starttabel[|l|l|]
-%D \HL
-%D \NC \bf command \NC \bf action \NC\SR
-%D \HL
-%D \NC first \NC go to the first page \NC\FR
-%D \NC previous \NC go to the previous page \NC\MR
-%D \NC next \NC go to the next page \NC\MR
-%D \NC last \NC go to the last page \NC\MR
-%D \NC backward \NC go back to the link list \NC\MR
-%D \NC forward \NC go forward in the link list \NC\MR
-%D \NC print \NC enter print mode \NC\MR
-%D \NC exit \NC exit viewer \NC\MR
-%D \NC close \NC close document \NC\MR
-%D \NC enter \NC enter viewer \NC\MR
-%D \NC help \NC show help on the viewer \NC\LR
-%D \HL
-%D \stoptabel
-%D \stopregelcorrectie
-%D
-%D There are no options yet. Options are to be passed as a
-%D comma separated list of assignments.
-
-\installspecial [\dostartexecutecommand] [and] [4]
-\installspecial [\dostopexecutecommand] [and] [0]
-
-%D \macros
-%D {dostartobject,
-%D dostopobject,
-%D doinsertobject}
-%D
-%D Reuse of object can reduce the output filesize
-%D considerably. Reusable objects are implemented with:
-%D
-%D \starttypen
-%D \dostartobject{name}{width}{height}{depth}
-%D some typeset material
-%D \dostopobject
-%D \stoptypen
-%D
-%D \starttypen
-%D \doinsertobject{name}
-%D \stoptypen
-%D
-%D The savings can be huge in interactive texts.
-
-\installspecial [\dostartobject] [or] [4]
-\installspecial [\dostopobject] [or] [0]
-\installspecial [\doinsertobject] [or] [1]
-
-% %D \macros
-% %D {dogetobjectreference}
-% %D
-% %D For very special purposes, one can ask for the internal
-% %D reference to the object. Beware!
-%
-% \installspecial [\dogetobjectreference] [or] [2]
-%
-% %D The first argument is the name, the second a macro that
-% %D gets the assiciated value.
-
-%D \macros
-%D {dostartrunprogram, dostoprunprogram,
-%D dostartgotoprofile, dostopgotoprofile,
-%D dobeginofprofile,
-%D doendofprofile}
-%D {}
-%D
-%D These specials are still experimental. They are not yet
-%D supported by the programs the way they should be.
-%D
-%D {\em --- still undocumented ---}
-
-\installspecial [\dostartrunprogram] [and] [3]
-\installspecial [\dostoprunprogram] [and] [0]
-\installspecial [\dostartgotoprofile] [and] [3]
-\installspecial [\dostopgotoprofile] [and] [0]
-\installspecial [\dobeginofprofile] [and] [4]
-\installspecial [\doendofprofile] [and] [0]
-
-%D \macros
-%D {doinsertbookmark}
-%D
-%D Bookmarks, that is viewer generated tables of contents, are
-%D a strange phenomena, mainly because \TEX\ can provide
-%D whatever kind of table in much better quality.
-
-\installspecial [\doinsertbookmark] [and] [5]
-
-%D This special is called as:
-%D
-%D \starttypen
-%D \doinstallbookmark {level} {nofsubentries} {text} {page} {open}
-%D \stoptypen
-%D
-%D This definition is very \PDF\ oriented, so for more
-%D information we kindly refer to the \PDF\ manuals.
-
-%D \macros
-%D {dosetpagetransition}
-%D
-%D In presentations, fancy page transitions can, at least for a
-%D short moment, let the audience focus at the screen. Like the
-%D previous one, this special is very \PDF.
-%D
-%D \starttypen
-%D \dosetpagetransition{dissolve}
-%D \stoptypen
-%D
-%D Transitions have symbolic names, like dissolve, box, split,
-%D blinds, wipe and glitter.
-
-\installspecial [\dosetpagetransition] [or] [1]
-
-%D So far for the installation. Finally we preload our
-%D favorite set of specials.
-
-\usespecials[ps,yy,win,pdf]
-
-%D One can overrule this by for instance
-%D
-%D \starttypen
-%D \usespecials[reset,ps,tr,pdf]
-%D \stoptypen
-
-\endinput
+%D \module
+%D [ file=spec-ini,
+%D version=1996.01.25,
+%D title=\CONTEXT\ Special Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. Non||commercial use is
+%C granted.
+
+%D Specials are \TEX's channel to the outside world. They make
+%D \TEX\ even more platform independant and permit easy
+%D adaption to new developments. One major drawback of specials
+%D is that they have to be supported by printer drivers. We've
+%D tried to overcome this problem by implementinmg specials as
+%D a sort of drivers themselves.
+
+\writestatus{loading}{Context Special Macros / Initialization}
+
+\unprotect
+
+\startmessages dutch library: specials
+ title: specials
+ 1: -- geladen
+ 2: verdere nesting is niet toegestaan --
+ 3: -- gereset
+ 4: commando -- bestaat niet
+ 5: definitiefile -- wordt geladen
+ 6: nesting is niet toegestaan
+\stopmessages
+
+\startmessages english library: specials
+ title: specials
+ 1: -- loaded
+ 2: no deeper nesting is permitted --
+ 3: -- is reset
+ 4: command -- does not exist
+ 5: loading definition file --
+ 6: nesting is not permitted
+\stopmessages
+
+\startmessages german library: specials
+ title: spezielles
+ 1: -- geladen
+ 2: Keine tiefere Verschachtelung erlaubt --
+ 3: -- ist zurueckgesetzt
+ 4: Befehl -- existiert nicht
+ 5: Lade Definitionsdatei --
+ 6: Verschachtelung nicht erlaubt
+\stopmessages
+
+\startmessages dutch library: interactions
+ 21: -- code tussengevoegd
+\stopmessages
+
+\startmessages english library: interactions
+ 21: -- code inserted
+\stopmessages
+
+\startmessages german library: interactions
+ 21: -- Code eingefuegt
+\stopmessages
+
+%D Because there is no standardization in the use of specials,
+%D more than one driver or program can be supported. The
+%D specials are grouped in libraries. Some of these are
+%D general, such as the \type{postscript} library, some are
+%D tuned to a special kind of program, like the \type{pdf}
+%D ones, and some support a specific driver, as we can see in
+%D the \type{yandy} library. A library is build with the
+%D commands:
+%D
+%D \starttypen
+%D \startspecials[name][inheritance]
+%D
+%D \definespecial\none{...}
+%D \definespecial\onlyone#1{...}
+%D \definespecial\alot#1#2#3#4{...}
+%D
+%D \stopspecials
+%D \stoptypen
+%D
+%D Because drivers show some overlap in their support of
+%D specials, a mechanism of inheritance is implemented. The
+%D predefined libraries show this feature.
+%D
+%D Every special has to be predefined first. We do this with
+%D the command:
+%D
+%D \starttypen
+%D \installspecial [\none] [and] [0]
+%D \installspecial [\onlyone] [and] [1]
+%D \installspecial [\alot] [or] [4]
+%D \stoptypen
+%D
+%D This means as much as: there is a special names
+%D \type{\none} which has no arguments and has more than one
+%D appearance. The special \type{\alot} on the other hand has
+%D four arguments and is only defined once. Every instance in
+%D the libraries of a special of category \type{and} is
+%D executed when called upon, but only one special of
+%D category \type{or} can be active. Most of the
+%D \type{postscript}||specials are of category \type{or},
+%D because they tend to interfere with driver specific ones.
+%D The interactive specials of \type{dviwindo} and \type{pdf}
+%D are an example of specials that can be called both.
+%D
+%D A library is defined in a file with the name
+%D \type{spec-...}. We load a library with the command:
+%D
+%D \starttypen
+%D \usespecials [list]
+%D \stoptypen
+%D
+%D where the list can contain one or more file tags, the
+%D \type{...} in the filename. The keyword \type{reset}
+%D resets all loaded specials. This is equivalent to
+%D \type{\resetspecials}.
+
+%D Although a mechanism of nesting can be implemented, we
+%D prefer to use a inheritance mechanism as mentioned. Calls
+%D upon \type{\usespecials} within a \type{\startspecials}
+%D would lead to confusion and errors.
+
+\newif\ifinheritspecials
+
+%D We define some local constants and variables. They look a
+%D bit horrible but we don't want conflicts.
+
+\def\@@specfil@@{@@specfil@@}
+\def\@@speclst@@{@@speclst@@}
+\def\@@speccat@@{@@speccat@@}
+\def\@@specarg@@{@@specarg@@}
+\def\@@specexc@@{@@specexc@@}
+
+\def\currentspecial {}
+\def\currentspecialfile {}
+\def\preloadedspecials {}
+
+%D \macros
+%D {preloadspecials}
+%D {}
+%D
+%D The following command can be used to show the loaded list
+%D of specials.
+
+\def\preloadspecials%
+ {\doifsomething{\preloadedspecials}
+ {\showmessage{\m!specials}{1}{\preloadedspecials}}}
+
+%D \macros
+%D {startspecials}
+%D {}
+%D
+%D Every library has a unique name, which is given as the first
+%D argument to \type{\startspecials}. When another library is
+%D defined with the same name, previous specials can be
+%D overruled. The name may differ from the file||tag.
+%D
+%D The optional second argument can consist of a list of
+%D libraries that are to be loaded first. This list can contain
+%D file||tags or names of libraries. Names are often more
+%D meaningful.
+
+\def\dostartspecials[#1][#2]%
+ {\let\mainspecialfile=\currentspecialfile
+ \doifelsenothing{#2}
+ {\inheritspecialsfalse}
+ {\ifinheritspecials
+ \showmessage{\m!specials}{2}{(#2)}%
+ \else
+ \inheritspecialstrue
+ \processcommalist[#2]\dousespecials
+ \inheritspecialsfalse
+ \fi}%
+ \doifelsenothing{#1}
+ {\def\currentspecial{\s!unknown}}
+ {\def\currentspecial{#1}}%
+ \let\currentspecialfile=\mainspecialfile
+ \setevalue{\@@specfil@@\currentspecial}{\currentspecialfile}%
+ \unprotect
+ \addtocommalist{\currentspecial}\preloadedspecials}
+
+\def\startspecials%
+ {\dodoubleempty\dostartspecials}
+
+\def\stopspecials%
+ {\def\currentspecial{}%
+ \protect}
+
+%D \macros
+%D {installspecial,
+%D resetspecials}
+%D {}
+%D
+%D We have to install specials before we can define and use
+%D them. The command itself is defined as a call to another
+%D command that executes one or more user||defined specials,
+%D depending of it's category: \type{or} versus \type{and}.
+%D
+%D The command \type{\installspecial} takes three
+%D (non||optional) arguments: the name of the command, the
+%D category it belongs to and the number of arguments it
+%D takes.
+%D
+%D With \type{\resetspecials} we can unload the predefined
+%D specials.
+
+\def\@@allspecials{}
+
+\def\doinstallspecial[#1][#2][#3]%
+ {\setvalue{\@@speclst@@\string#1}{}%
+ \setvalue{\@@speccat@@\string#1}{#2}%
+ \setvalue{\@@specarg@@\string#1}{#3}%
+ \addtocommalist{\string#1}\@@allspecials
+ \def#1{\executespecial#1}}
+
+\def\installspecial%
+ {\dotripleargument\doinstallspecial}
+
+\def\resetspecials%
+ {\def\docommando##1%
+ {\setvalue{\@@speclst@@##1}{}}%
+ \processcommacommand[\@@allspecials]\docommando
+ \showmessage{\m!specials}{3}{\preloadedspecials}%
+ \def\preloadedspecials{}%
+ \def\@@allspecials{}}
+
+%D \macros
+%D {definespecial}
+%D {}
+%D
+%D The command \type{\definespecial} take the place of
+%D \type{\def} in the definition of a special. Just to be
+%D sure, we first check if the command is permitted, i.e.
+%D installed. If not, we give a warning and gobble the
+%D illegal command in an quite elegant way.
+%D
+%D If the command can be combined (\type{and}) with others,
+%D we append it to a list, otherwise (\type{or}) it becomes
+%D the only item in the list.
+
+\def\definespecial#1%
+ {\ifx#1\undefined
+ \showmessage{\m!specials}{4}{\string#1}%
+ \def\next%
+ {\def\@@illegalspecial@@}%
+ \else
+ \def\next%
+ {\doifelse{\getvalue{\@@speccat@@\string#1}}{or}
+ {\edef\@@newspeclst@@{\currentspecial}}
+ {\edef\@@newspeclst@@{\getvalue{\@@speclst@@\string#1}}%
+ \addtocommalist{\currentspecial}\@@newspeclst@@}%
+ \setevalue{\@@speclst@@\string#1}{\@@newspeclst@@}%
+ \setvalue{\currentspecial\string#1}}%
+ \fi
+ \next}
+
+%D \macros
+%D {usespecials}
+%D {}
+%D
+%D We use \type{\usespecials} to load a specific library.
+%D This command is only permitted outside de definition part.
+
+\def\dousespecials#1%
+ {\doifelse{#1}{\v!reset}
+ {\resetspecials}
+ {\doifdefinedelse{\@@specfil@@#1}
+ {\edef\currentspecialfile{\getvalue{\@@specfil@@#1}}}
+ {\edef\currentspecialfile{#1}}%
+ \makeshortfilename[\f!specialprefix\currentspecialfile]%
+ \showmessage{\m!specials}{5}{\currentspecialfile}%
+ \startreadingfile
+ \readsysfile{\shortfilename}{}{}%
+ \stopreadingfile
+ \showmessage{\m!specials}{1}{\preloadedspecials}}}
+
+\def\usespecials[#1]%
+ {\doifelsenothing{\currentspecial}
+ {\processcommalist[#1]\dousespecials}
+ {\showmessage{\m!specials}{6}{}}}
+
+%D \macros
+%D {executespecials}
+%D {}
+%D
+%D The command \type{\executespecials} is used to execute the
+%D defined specials. Once a special is installed, the special
+%D itself calls for this command, so it's not needed outside
+%D this module. One can use it if wanted.
+%D
+%D A former implementation grouped the execution. Recent
+%D additions however |<|like the specials that implement object
+%D handling|>| asked for non||grouped execution.
+
+\def\executespecials#1#2%
+ {\def\doonespecial##1%
+ {\getvalue{##1\string#1}#2\relax}%
+ \processcommacommand
+ [\getvalue{\@@speclst@@\string#1}]\doonespecial}
+
+\def\executespecial#1%
+ {\expandafter\ifcase\getvalue{\@@specarg@@\string#1}\relax
+ \def\next%
+ {\executespecials#1{}}%
+ \or
+ \def\next##1%
+ {\executespecials#1{{##1}}}%
+ \or
+ \def\next##1##2%
+ {\executespecials#1{{##1}{##2}}}%
+ \or
+ \def\next##1##2##3%
+ {\executespecials#1{{##1}{##2}{##3}}}%
+ \or
+ \def\next##1##2##3##4%
+ {\executespecials#1{{##1}{##2}{##3}{##4}}}%
+ \or
+ \def\next##1##2##3##4##5%
+ {\executespecials#1{{##1}{##2}{##3}{##4}{##5}}}%
+ \or
+ \def\next##1##2##3##4##5##6%
+ {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}}}%
+ \or
+ \def\next##1##2##3##4##5##6##7%
+ {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}}%
+ \or
+ \def\next##1##2##3##4##5##6##7##8%
+ {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}}%
+ \or
+ \def\next##1##2##3##4##5##6##7##8##9%
+ {\executespecials#1{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}}%
+ \else
+ \def\next%
+ {\message{illegal special: \string#1}}%
+ \fi
+ \next}
+
+%D The \type{{{...}}} are needed because we pass all those
+%D arguments to the specials support macro.
+
+\let\openspecialfile = \relax
+\let\closespecialfile = \relax
+
+% %D This is some new, experimental code, used for testing some
+% %D proposals of Laurent Siebenmann on behalf of the
+% %D \kap{EMJ} discussionlist.
+%
+% \newif\ifexternalspecials \externalspecialsfalse
+% \newif\ifspecialstatus \specialstatustrue
+%
+% \newwrite\specialfile
+%
+% \def\openspecialfile%
+% {\immediate\openout\specialfile=\jobname.etc\relax}
+%
+% \def\closespecialfile%
+% {\immediate\closeout\specialfile}
+%
+% \let\internalspecial=\special
+%
+% \def\externalspecial#1%
+% {\internalspecial{}%
+% \immediate\write\specialfile{\currentspecialdriver\space: #1}}
+%
+% \def\doinstallspecial[#1][#2][#3]%
+% {\setvalue{\@@specexc@@\string#1}{}%
+% \setvalue{\@@speclst@@\string#1}{}%
+% \setvalue{\@@speccat@@\string#1}{#2}%
+% \setvalue{\@@specarg@@\string#1}{#3}%
+% \addtocommalist{\string#1}\@@allspecials
+% \def#1{\executespecial#1}}
+%
+% \def\resetspecials%
+% {\def\docommando##1%
+% {\setvalue{\@@specexc@@##1}{}%
+% \setvalue{\@@speclst@@##1}{}}%
+% \processcommacommand[\@@allspecials]\docommando
+% \showmessage{\m!specials}{3}{\preloadedspecials}}
+%
+% \def\executespecials#1#2%
+% {\edef\supportedspecials{\getvalue{\@@speclst@@\string#1}}%
+% \def\doonespecial##1%
+% {\doifdefined{##1\string#1}
+% {\def\currentspecialdriver{##1}%
+% \getvalue{##1\string#1}#2\relax}}%
+% \ifexternalspecials
+% \let\special=\externalspecial
+% \doifelse{\supportedspecials}{}
+% {\ifspecialstatus
+% \immediate\write\specialfile{}%
+% \immediate\write\specialfile{skipping : \string#1}
+% \immediate\write\specialfile{}%
+% \fi}
+% {\ifspecialstatus
+% \immediate\write\specialfile{}%
+% \immediate\write\specialfile{executing : \string#1}%
+% \immediate\write\specialfile{supported : \supportedspecials}%
+% \fi
+% \immediate\write\specialfile{}%
+% \processcommacommand[\supportedspecials]\doonespecial}%
+% \else
+% \let\special=\internalspecial
+% \doifelse{\getvalue{\@@speccat@@\string#1}}{or}
+% {\doonespecial{\getvalue{\@@specexc@@\string#1}}}
+% {\processcommacommand[\supportedspecials]\doonespecial}%
+% \fi}
+%
+% \def\definespecial#1%
+% {\ifx#1\undefined
+% \showmessage{\m!specials}{4}{\string#1}%
+% \def\next%
+% {\def\@@illegalspecial@@}%
+% \else
+% \def\next%
+% {\edef\@@newspeclst@@{\getvalue{\@@speclst@@\string#1}}%
+% \addtocommalist{\currentspecial}\@@newspeclst@@
+% \setevalue{\@@speclst@@\string#1}{\@@newspeclst@@}%
+% \setevalue{\@@specexc@@\string#1}{\currentspecial}%
+% \setvalue{\currentspecial\string#1}}%
+% \fi
+% \next}
+%
+% %D So far for the experiment.
+
+\protect
+
+%D The following libraries are defined. Two postscript
+%D drivers are supported, as well as two mechanisms for
+%D interactive texts.
+%D
+%D \startregelcorrectie
+%D \starttabel[|l|l|l|l|l|]
+%D \HL
+%D \NC \bf file \NC
+%D \bf name \NC
+%D \bf calls \NC
+%D \bf support \NC
+%D \bf program / driver \NC\SR
+%D \HL
+%D \NC \tttf spec-tex \NC
+%D \tttf tex \NC
+%D \NC
+%D Generic \TEX\ (\DVI) \NC
+%D (default) \NC\FR
+%D \NC \tttf spec-ps \NC
+%D \tttf postscript \NC
+%D \NC
+%D Adobe PostScript \NC
+%D (default) \NC\MR
+%D \NC \tttf spec-tr \NC
+%D \tttf rokicky \NC
+%D \tttf postscript \NC
+%D Thomas Rokicky \NC
+%D (dvips) \NC\MR
+%D \NC \tttf spec-yy \NC
+%D \tttf yandy \NC
+%D \tttf postscript \NC
+%D YandY \NC
+%D (dvipsone, dviwindo) \NC\MR
+%D \NC \tttf spec-pdf \NC
+%D \tttf pdf \NC
+%D \NC
+%D Adobe PDF V2.1 \NC
+%D (Acrobat) \NC\MR
+%D \NC \tttf spec-win \NC
+%D \tttf dviwindo \NC
+%D YandY \NC
+%D (dviwindo) \NC\MR
+%D \NC \tttf spec-1p0 \NC
+%D \tttf pdf \NC
+%D \NC
+%D Adobe PDF V 1.0 \NC
+%D (Acrobat) \NC\MR
+%D \NC \tttf spec-2p0 \NC
+%D \tttf pdf \NC
+%D \NC
+%D Adobe PDF V 2.0 \NC
+%D (Acrobat) \NC\MR
+%D \NC \tttf spec-htm \NC
+%D \tttf html \NC
+%D \NC
+%D HTML V 2.0 \NC
+%D (dvips) \NC\LR
+%D \HL
+%D \stoptabel
+%D \stopregelcorrectie
+
+%D \macros
+%D {dostartgraymode,dostopgraymode,
+%D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode,dostopcolormode}
+%D {}
+%D
+%D We start with the installation of color and grayscale
+%D specials. The values are in the range 0..1 (e.g. 0.25).
+%D
+%D \starttypen
+%D \dostartgraymode {gray} ... \dostopgraymode
+%D \dostartrgbcolormode {red} {green} {blue} ... \dostopcolormode
+%D \dostartcmykcolormode {cyan} {magenta} {yellow} {black} ... \dostopcolormode
+%D \dostartgraycolormode {gray} ... \dostopcolormode
+%D \stoptypen
+%D
+%D Because we can expect conflicts between drivers, we
+%D implement them as category \type{or}. In previous versions
+%D of \DVIPSONE\ the use of their color||specials did not
+%D interfere with the PostScript ones, but recent versions do.
+
+\installspecial [\dostartgraymode] [or] [1]
+\installspecial [\dostopgraymode] [or] [0]
+
+\installspecial [\dostartrgbcolormode] [or] [3]
+\installspecial [\dostartcmykcolormode] [or] [4]
+\installspecial [\dostartgraycolormode] [or] [1]
+\installspecial [\dostopcolormode] [or] [0]
+
+%D \macros
+%D {doinsertfile}
+%D {}
+%D
+%D Probably the most problematic special is the following
+%D one. Because we want to be able to support different
+%D schemes, we pass a lot of data to it.
+%D
+%D \starttypen
+%D \doinsertfile {type,method} {file}
+%D {xscale} {yscale} {x} {y} {w} {h}
+%D {options}
+%D \stoptypen
+%D
+%D The scale is given percents, the other values are base
+%D points.
+%D
+%D The special is implemented as \type{or}. Because
+%D \DVIPSONE\ understands them all, a chain of alternatives
+%D would generate multiple courrences of the same
+%D illustration.
+%D
+%D When option 1 is passed, the viewers is asked to present a
+%D preview, like the first frame of a movie.
+
+\installspecial [\doinsertfile] [or] [9]
+
+%D \macros
+%D {dostartrotation,
+%D dostoprotation}
+%D {}
+%D
+%D We support rotation with the special:
+%D
+%D \starttypen
+%D \dostartrotation {angle} ... \dostoprotation
+%D \stoptypen
+%D
+%D For the moment these specials are installed as
+%D category \type{or}.
+
+\installspecial [\dostartrotation] [or] [1]
+\installspecial [\dostoprotation] [or] [0]
+
+%D \macros
+%D {dostartscaling,
+%D dostopscaling}
+%D {}
+%D
+%D Scaling is also supported:
+%D
+%D \starttypen
+%D \dostartscaling {x} {y} ... \dostopscaling
+%D \stoptypen
+%D
+%D Like the previous one, these specials are of category
+%D \type{or}.
+
+\installspecial [\dostartscaling] [or] [2]
+\installspecial [\dostopscaling] [or] [0]
+
+%D \macros
+%D {dostartmirroring,
+%D dostopmirroring}
+%D {}
+%D
+%D And indeed, mirroring is there too:
+%D
+%D \starttypen
+%D \dostartmirroring {x} {y} ... \dostopmirroring
+%D \stoptypen
+%D
+%D Again these specials are installed as category \type{or}.
+
+\installspecial [\dostartmirroring] [or] [0]
+\installspecial [\dostopmirroring] [or] [0]
+
+%D \macros
+%D {dostartnegative,
+%D dostopnegative}
+%D {}
+%D
+%D When producing output for an image setter, negating the
+%D page comes into view. Here are the tools:
+
+\installspecial [\dostartnegative] [or] [0]
+\installspecial [\dostopnegative] [or] [0]
+
+%D \macros
+%D {doselectfirstpaperbin,
+%D doselectsecondpaperbin}
+%D {}
+%D
+%D Here are some very printer||specific ones. No further
+%D comment.
+
+\installspecial [\doselectfirstpaperbin] [or] [0]
+\installspecial [\doselectsecondpaperbin] [or] [0]
+
+%D \macros
+%D {doovalbox}
+%D {}
+%D
+%D When we look at the implementation, this is a complicated
+%D one. There are seven arguments.
+%D
+%D \starttypen
+%D \doovalbox {w} {h} {d} {linewidth} {radius} {stroke} {fill}
+%D \stoptypen
+%D
+%D This command has to return a \type{\vbox} which can be used
+%D to lay over another one (with text). The radius is in
+%D degrees, the stroke and fill are~\type{1} (true) of~\type{0}
+%D (false).
+
+\installspecial [\doovalbox] [or] [7]
+
+%D \macros
+%D {dosetupidentity}
+%D {}
+%D
+%D We can declare some characteristics of the document with
+%D
+%D \starttypen
+%D \dosetupidentity {title} {subject} {author} {creator} {date}
+%D \stoptypen
+%D
+%D All data is in string format.
+
+\installspecial [\dosetupidentity] [and] [5]
+
+%D \macros
+%D {dosetuppaper}
+%D {}
+%D
+%D This special can be used to tell the driver what page size
+%D to use. The special takes three arguments.
+%D
+%D \starttypen
+%D \dosetuppaper {type} {width} {height}
+%D \stoptypen
+%D
+%D The type is one of the common identifiers, like A4, A5 or
+%D B2.
+
+\installspecial [\dosetuppaper] [and] [3]
+
+%D \macros
+%D {dosetupprinter}
+%D {}
+%D
+%D Some drivers enable the user to specify the paper type
+%D used and/or page dimensions to be taken into account.
+%D
+%D \starttypen
+%D \dosetupprinter {type} {hoffset} {voffset} {width} {height}
+%D \stoptypen
+%D
+%D The first argument is one of \type{letter}, \type{legal},
+%D \type{A4}, \type{A5} etc. The dimensions are in
+%D basepoints.
+
+\installspecial [\dosetupprinter] [and] [5]
+
+%D \macros
+%D {dosetuppage,
+%D dosetupinteraction,
+%D dosetupscreen}
+%D {}
+%D
+%D Here come some obscure interactive commands. Probably the
+%D specs will change with the development of the macros that
+%D use them.
+%D
+%D The first ones can be used to set up the interaction.
+%D
+%D \starttypen
+%D \dosetupinteraction
+%D \stoptypen
+%D
+%D Normally this command does nothing but giving a message
+%D that some scheme is supported. Postscript prolog files
+%D can best be loaded by the printer driver program.
+%D
+%D The second one sets up the screen. It takes three
+%D arguments:
+%D
+%D \starttypen
+%D \dosetupscreen {hoffset} {voffset} {width} {height} {options}
+%D \stoptypen
+%D
+%D The first four arguments are in scaled points. Option~1
+%D results in a full screen launch.
+
+\installspecial [\dosetupinteraction] [and] [0]
+\installspecial [\dosetupscreen] [and] [5]
+
+%D \macros
+%D {dostarthide,
+%D dostophide}
+%D {}
+%D
+%D Not every part of the screen is suitable for paper. Menus
+%D for instance have no meaning on an non||interactive medium.
+%D These elements are hidden by means of:
+%D
+%D \starttypen
+%D \dostarthide
+%D \dostophide
+%D \stoptypen
+
+\installspecial [\dostarthide] [or] [0]
+\installspecial [\dostophide] [or] [0]
+
+%D \macros
+%D {dostartgotolocation, dostopgotolocation,
+%D dostartgotorealpage, dostopgotorealpage}
+%D {}
+%D
+%D The interactive real work is done by the following four
+%D specials. The reason for providing the first one with both
+%D a label and a number, is a result of the quite poor
+%D implementation of \type{pdfmarks} in version 1.0 of
+%D Acrobat. Because only pagenumbers were supported as
+%D destination, we had to provide both labels (\DVIWINDO) and
+%D pagenumbers (\PDF). Some drivers use start stop pairs.
+%D
+%D \starttypen
+%D \dostartgotolocation {w} {h} {url} {file} {label} {page}
+%D \dostartgotorealpage {w} {h} {url} {file} {page}
+%D \stoptypen
+%D
+%D Their counterparts are:
+%D
+%D \starttypen
+%D \dostopgotolocation
+%D \dostopgotorealpage
+%D \stoptypen
+%D
+%D The internal alternative is used for system||generated
+%D links, the external one for user||generated links. The
+%D Uniform Resource Locator can be used to let the reader
+%D surf the net.
+
+\installspecial [\dostartgotolocation] [and] [6]
+\installspecial [\dostopgotolocation] [and] [0]
+\installspecial [\dostartgotorealpage] [and] [5]
+\installspecial [\dostopgotorealpage] [and] [0]
+
+%D \macros
+%D {dostartgotoJS, doflushJSpreamble}
+%D
+%D
+%D Rather special is the option to include and execute
+%D JavaScript code. This is a typical \PDF\ option.
+%D
+%D \starttypen
+%D \dostartgotoJS {w} {h} {script}
+%D \stoptypen
+%D
+%D This not so standard \TEX\ feature should be used with
+%D care. Preamble scripts are flushed by
+%D
+%D \doflushJSpreamble {script}
+
+\installspecial [\dostartgotoJS] [and] [3]
+\installspecial [\dostopgotoJS] [and] [0]
+\installspecial [\doflushJSpreamble][and] [1]
+
+%D \macros
+%D {dostartthisislocation, dostopthisislocation,
+%D dostartthisisrealpage, dostopthisisrealpage}
+%D {}
+%D
+%D The opposite commands of \type{\dogotosomething} have only
+%D one argument:
+%D
+%D \starttypen
+%D \dostartthisislocation {label}
+%D \dostartthisisrealpage {page}
+%D \stoptypen
+%D
+%D These commands are accompanied by:
+%D
+%D \starttypen
+%D \dostopthisislocation
+%D \dostopthisisrealpage
+%D \stoptypen
+%D
+%D As with all interactive commands's they are installed as
+%D \type{and} category specials.
+
+\installspecial [\dostartthisislocation] [and] [1]
+\installspecial [\dostopthisislocation] [and] [0]
+\installspecial [\dostartthisisrealpage] [and] [1]
+\installspecial [\dostopthisisrealpage] [and] [0]
+
+%D \macros
+%D {dostartexecutecommand, dostopexecutecommand}
+%D {}
+%D
+%D The actual behavior of the next pair of commands depends
+%D much on the viewing engine. Therefore one cannot depend
+%D too much on their support.
+%D
+%D \starttypen
+%D \dostartexecutecommand {w} {h} {command} {options}
+%D \stoptypen
+%D
+%D
+%D The next commands are supported:
+%D
+%D \startregelcorrectie\steluitlijnenin[midden]\leavevmode
+%D \starttabel[|l|l|]
+%D \HL
+%D \NC \bf command \NC \bf action \NC\SR
+%D \HL
+%D \NC first \NC go to the first page \NC\FR
+%D \NC previous \NC go to the previous page \NC\MR
+%D \NC next \NC go to the next page \NC\MR
+%D \NC last \NC go to the last page \NC\MR
+%D \NC backward \NC go back to the link list \NC\MR
+%D \NC forward \NC go forward in the link list \NC\MR
+%D \NC print \NC enter print mode \NC\MR
+%D \NC exit \NC exit viewer \NC\MR
+%D \NC close \NC close document \NC\MR
+%D \NC enter \NC enter viewer \NC\MR
+%D \NC help \NC show help on the viewer \NC\LR
+%D \HL
+%D \stoptabel
+%D \stopregelcorrectie
+%D
+%D There are no options yet. Options are to be passed as a
+%D comma separated list of assignments.
+
+\installspecial [\dostartexecutecommand] [and] [4]
+\installspecial [\dostopexecutecommand] [and] [0]
+
+%D \macros
+%D {dostartobject,
+%D dostopobject,
+%D doinsertobject}
+%D
+%D Reuse of object can reduce the output filesize
+%D considerably. Reusable objects are implemented with:
+%D
+%D \starttypen
+%D \dostartobject{name}{width}{height}{depth}
+%D some typeset material
+%D \dostopobject
+%D \stoptypen
+%D
+%D \starttypen
+%D \doinsertobject{name}
+%D \stoptypen
+%D
+%D The savings can be huge in interactive texts.
+
+\installspecial [\dostartobject] [or] [4]
+\installspecial [\dostopobject] [or] [0]
+\installspecial [\doinsertobject] [or] [1]
+
+% %D \macros
+% %D {dogetobjectreference}
+% %D
+% %D For very special purposes, one can ask for the internal
+% %D reference to the object. Beware!
+%
+% \installspecial [\dogetobjectreference] [or] [2]
+%
+% %D The first argument is the name, the second a macro that
+% %D gets the assiciated value.
+
+%D \macros
+%D {dostartrunprogram, dostoprunprogram,
+%D dostartgotoprofile, dostopgotoprofile,
+%D dobeginofprofile,
+%D doendofprofile}
+%D {}
+%D
+%D These specials are still experimental. They are not yet
+%D supported by the programs the way they should be.
+%D
+%D {\em --- still undocumented ---}
+
+\installspecial [\dostartrunprogram] [and] [3]
+\installspecial [\dostoprunprogram] [and] [0]
+\installspecial [\dostartgotoprofile] [and] [3]
+\installspecial [\dostopgotoprofile] [and] [0]
+\installspecial [\dobeginofprofile] [and] [4]
+\installspecial [\doendofprofile] [and] [0]
+
+%D \macros
+%D {doinsertbookmark}
+%D
+%D Bookmarks, that is viewer generated tables of contents, are
+%D a strange phenomena, mainly because \TEX\ can provide
+%D whatever kind of table in much better quality.
+
+\installspecial [\doinsertbookmark] [and] [5]
+
+%D This special is called as:
+%D
+%D \starttypen
+%D \doinstallbookmark {level} {nofsubentries} {text} {page} {open}
+%D \stoptypen
+%D
+%D This definition is very \PDF\ oriented, so for more
+%D information we kindly refer to the \PDF\ manuals.
+
+%D \macros
+%D {dosetpagetransition}
+%D
+%D In presentations, fancy page transitions can, at least for a
+%D short moment, let the audience focus at the screen. Like the
+%D previous one, this special is very \PDF.
+%D
+%D \starttypen
+%D \dosetpagetransition{dissolve}
+%D \stoptypen
+%D
+%D Transitions have symbolic names, like dissolve, box, split,
+%D blinds, wipe and glitter.
+
+\installspecial [\dosetpagetransition] [or] [1]
+
+%D So far for the installation. Finally we preload our
+%D favorite set of specials.
+
+\usespecials[ps,yy,win,pdf]
+
+%D One can overrule this by for instance
+%D
+%D \starttypen
+%D \usespecials[reset,ps,tr,pdf]
+%D \stoptypen
+
+\endinput