File: examples_postscript.html

package info (click to toggle)
funnelweb-doc 3.2d-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,740 kB
  • sloc: perl: 241; makefile: 23
file content (257 lines) | stat: -rw-r--r-- 9,527 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257

<HTML>
<!--
***********************************************************************
FUNNELWEB MANUAL WEB PAGE
=========================
Copyright (c) Ross N. Williams 1992,1999. All rights reserved.

Permission is granted to redistribute and use this manual in
any medium, with or without modification, provided that all
notices (including, without limitation, the copyright
notice, this permission notice, any record of modification,
and all legal notices) are preserved on all copies, that all
modifications are clearly marked, and that modified versions
are not represented as the original version unless all the
modifications since the manual's original release by Ross N.
Williams (www.ross.net) consist of translations or other
transformations that alter only the manual's form, not its
content. THIS MANUAL IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND
FITNESS FOR A PARTICULAR PURPOSE. TO THE EXTENT PERMITTED BY
LAW THERE IS ABSOLUTELY NO WARRANTY.

***********************************************************************
-->

<HEAD>
<TITLE>6.1 Analyzing the Monster Postscript Header File</TITLE>
<STYLE TYPE="text/css"> <!-- A {text-decoration: none} // --> </STYLE>
</HEAD>
<BODY BACKGROUND="binary/background.gif"
      BGCOLOR="#FFFFFF"
      TEXT="#000000"
      VLINK="#660000"
      LINK="#FF0000"
      ALINK="#CC0000">

<TABLE WIDTH="490">
<TR>
<TD WIDTH="130" VALIGN="top">
<IMG SRC="binary/d_clear.gif" ALT="" WIDTH="130" HEIGHT="1"><BR>

<FONT SIZE="2">
<BR>

<A HREF="http://www.ross.net/"
 TARGET="rosshome"
 onClick="window.open('','rosshome','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
>
 <IMG SRC="binary/rossnet_logo.gif"
  WIDTH="64" HEIGHT="32"
  BORDER="0" ALT="RossNet"
  HSPACE="0" VSPACE="1"></A><BR>
<BR>

<A HREF="../index.shtml"
 TARGET="funnelweb"
 onClick="window.open('','funnelweb','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
>
 <IMG SRC="binary/linklogo.gif"
  WIDTH="64" HEIGHT="32"
  BORDER="0" ALT="FunnelWeb"
  HSPACE="0" VSPACE="1"></A><BR>
<BR>
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0><TR><TD BGCOLOR="#000000">
<A HREF="../reference/index.html"
 TARGET="funnelwebreference"
 onClick="window.open('','funnelwebreference','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
><FONT COLOR="#FFFFFF"><B>Reference</B></FONT></A><BR>
<BR>
<A HREF="../developer/index.html"
 TARGET="funnelwebdeveloper"
 onClick="window.open('','funnelwebdeveloper','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
><FONT COLOR="#FFFFFF"><B>Developer</B></FONT></A><BR>
<BR>
<A HREF="index.html"><FONT COLOR="#FFFFFF"><B>Tutorial</B></FONT></A><BR>
<A HREF="intro.html"><FONT COLOR="#FFFFFF">1 Introduction</FONT></A><BR>
<A HREF="macro.html"><FONT COLOR="#FFFFFF">2 Macros</FONT></A><BR>
<A HREF="type.html"><FONT COLOR="#FFFFFF">3 Typesetting</FONT></A><BR>
<A HREF="example.html"><FONT COLOR="#FFFFFF">4 Example</FONT></A><BR>
<A HREF="hints.html"><FONT COLOR="#FFFFFF">5 Hints</FONT></A><BR>
<A HREF="examples.html"><FONT COLOR="#FFFFFF">6 Examples</FONT></A><BR>
<A HREF="web.html"><FONT COLOR="#FFFFFF">7 Webmaking</FONT></A><BR>

<BR>
<A HREF="search.html"><FONT COLOR="#FFFFFF"><B>SEARCH</B></FONT></A><BR>
</FONT>
</TD></TR></TABLE>


</TD>
<TD WIDTH="360" VALIGN="top">
<FONT SIZE="3">


<A HREF="../reference/index.html"><IMG SRC="binary/title.gif"
 WIDTH="302" HEIGHT="24"
 BORDER="0" ALT="FunnelWeb Tutorial Manual"
 HSPACE="0" VSPACE="0"></A>
<P><FONT SIZE="5">6.1 Analyzing the Monster Postscript Header File</FONT><BR>




<P>During my Ph.D. candidature, I determined at one point
that it would be very desirable to automatically insert
diagrams from the <I>MacDraw</I>&nbsp; program
on my Macintosh into TeX <SAMP>insert</SAMP>ions in
my thesis. This would allow diagrams to
float around with the text and be printed automatically
rather than having to be printed separately and stuck in
with real glue. On the face of it, the problem seemed
inherently solvable, as the Macintosh could
generate PostScript for each diagram and
this PostScript could presumably be inserted into the
PostScript generated using TeX.

<P>The only trouble was that the Macintosh PostScript code
for the diagrams relied on an Apple PostScript header
file. This meant that the
header file had to be included at the start of the TeX
PostScript if the inserted PostScript for the diagrams was
to work. Unfortunately, merely including the header file at
the top didn't work, and it turned out that a rather
detailed analysis of some parts of the Apple header file was
required in order to perform the necessary surgery on the
header file to make it work. This analysis was severely
aggravated by the fact that the PostScript header file was
virtually unreadable. Basically it was about 50K of
interwoven definitions, that looked as if it had been run
through a word processor. There was no way that the code
could be understood clearly without some kind of
reformatting. Two other aspects of the problem further
complicated the analysis:

<P>
<UL>

<LI> The definitions of interest (i.e. the ones causing
the problems) were scattered throughout the heaeder file.

<LI> Many definitions could not be moved within the
header file. For one or more
reasons (e.g. to keep a definition within the activation of
a particular dictionary <SAMP>begin</SAMP> and <SAMP>end</SAMP>)
it would have been unwise to move the definitions of
interest to the same point in the file.

</UL>

<P>In fact the file was so messy and complicated that, as
a rule, it had to be handled with kid gloves. It would have
been unwise to re-arrange the definitions or to insert
comments.

<P>To my surprise, FunnelWeb provided an unexpected
solution to the problem. First I replaced all occurrences of
the <SAMP>@</SAMP> in the header file with <SAMP>@@</SAMP>.
Second, I placed the entire header file in a FunnelWeb macro
definition connected to a product file. I then processed the
file and checked to make sure that the product file was
identical to the original file. By doing all this I had
placed the header file under FunnelWeb control. I then left
the macro definition largely untouched, but replaced the
PostScript definitions of interest with FunnelWeb macro
calls, moving the actual PostScript definitions into
FunnelWeb macro definitions at the end of the FunnelWeb
file.

<P>
<PRE>
@O@&lt;LaserHeader.ps@&gt;==@{@-
Unreadable Postscript code
@&lt;Print routine@&gt;
Unreadable Postscript code
@&lt;Zap routine@&gt;
Unreadable Postscript code
@}

@A This routine looks as if it does this, but really is
does that, blah, blah blah.

@$@&lt;Print routine@&gt;==@{@-
/print { push pop pop push turn around
         and jump up and down and print it} def
@}

@A This routine zaps the...

@$@&lt;Zap routine@&gt;==@{@-
/zap { push pop pop push turn around and
       jump up and down and print it} def
@}
</PRE>

<P>Use of FunnelWeb meant that I was able to pluck out the
definitions of interest (a very small part of the whole
file) and collect them as a group at the end of the file
where they could be studied. Because each definition was
safely contained in a macro, it was possible to write a
detailed commentary of each routine without fear of
affecting the final PostScript code in any way at all. Once
this analysis was completed, it was possible to perform
surgery on the offending PostScript definitions in an
extremely controlled way. In particular, the FunnelWeb input
file served as a repository for all the different versions
of particular routines that were tried in order to get the
definitions to work. A new (<STRONG>Z</STRONG>ero) macro was created for
each version of each definition, and a commentary of how it
performed added above it.

<P>This case demonstrates that FunnelWeb is an extremely
powerful tool for dissecting and documenting cryptic text
files. Through the use of
macros, particular parts of the file can be isolated and
discussed without affecting the final product file in any
way. In the example above, only a small part of the file was
analysed, the rest being left as a blob, but in the general
case, a cryptic text file could be inserted into FunnelWeb
and then incrementally dissected (and possibly modified)
until the result is a fully documented literate program.
That this can be done without affecting the actual product
file demonstrates the high degree of descriptive control
that FunnelWeb provides.


<P>
<TABLE WIDTH="100%">
<TR>
<TD ALIGN="left"   VALIGN="bottom"><A HREF="examples.html"><IMG SRC="binary/fw_up.gif" HEIGHT="32" WIDTH="32" BORDER="0" ALT="Up"></A></TD>
<TD ALIGN="center" VALIGN="bottom"><A HREF="examples.html"><IMG SRC="binary/fw_up.gif" HEIGHT="32" WIDTH="32" BORDER="0" ALT="Up"></A></TD>
<TD ALIGN="right"  VALIGN="bottom"><A HREF="examples_adt.html"><IMG SRC="binary/fw_right.gif" HEIGHT="32" WIDTH="32" BORDER="0" ALT="Next"></A></TD>
</TR>
</TABLE>



<HR>
<FONT SIZE="2">
<A HREF="mailto:webmaster@ross.net">Webmaster</A>&nbsp;&nbsp;&nbsp;
<A HREF="copyright.html">Copyright &copy; Ross N. Williams 1992,1999. All rights reserved.</A><BR>
</FONT>

</FONT>
</TD>
</TR>
</TABLE>


</BODY>

<!-- *********************************************************************** -->
<!--      End Of A FunnelWeb Manual Web Page (www.ross.net/funnelweb/)       -->
<!-- *********************************************************************** -->

</HTML>