~ubuntu-branches/ubuntu/gutsy/funnelweb-doc/gutsy

« back to all changes in this revision

Viewing changes to tutorial/examples_postscript.html

  • Committer: Bazaar Package Importer
  • Author(s): Yann Dirson
  • Date: 2002-03-28 23:21:07 UTC
  • Revision ID: james.westby@ubuntu.com-20020328232107-3d1jiqv1eqmco3j9
Tags: upstream-3.2d
ImportĀ upstreamĀ versionĀ 3.2d

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
<HTML>
 
3
<!--
 
4
***********************************************************************
 
5
FUNNELWEB MANUAL WEB PAGE
 
6
=========================
 
7
Copyright (c) Ross N. Williams 1992,1999. All rights reserved.
 
8
 
 
9
Permission is granted to redistribute and use this manual in
 
10
any medium, with or without modification, provided that all
 
11
notices (including, without limitation, the copyright
 
12
notice, this permission notice, any record of modification,
 
13
and all legal notices) are preserved on all copies, that all
 
14
modifications are clearly marked, and that modified versions
 
15
are not represented as the original version unless all the
 
16
modifications since the manual's original release by Ross N.
 
17
Williams (www.ross.net) consist of translations or other
 
18
transformations that alter only the manual's form, not its
 
19
content. THIS MANUAL IS PROVIDED "AS IS" AND WITHOUT ANY
 
20
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
 
21
LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND
 
22
FITNESS FOR A PARTICULAR PURPOSE. TO THE EXTENT PERMITTED BY
 
23
LAW THERE IS ABSOLUTELY NO WARRANTY.
 
24
 
 
25
***********************************************************************
 
26
-->
 
27
 
 
28
<HEAD>
 
29
<TITLE>6.1 Analyzing the Monster Postscript Header File</TITLE>
 
30
<STYLE TYPE="text/css"> <!-- A {text-decoration: none} // --> </STYLE>
 
31
</HEAD>
 
32
<BODY BACKGROUND="binary/background.gif"
 
33
      BGCOLOR="#FFFFFF"
 
34
      TEXT="#000000"
 
35
      VLINK="#660000"
 
36
      LINK="#FF0000"
 
37
      ALINK="#CC0000">
 
38
 
 
39
<TABLE WIDTH="490">
 
40
<TR>
 
41
<TD WIDTH="130" VALIGN="top">
 
42
<IMG SRC="binary/d_clear.gif" ALT="" WIDTH="130" HEIGHT="1"><BR>
 
43
 
 
44
<FONT SIZE="2">
 
45
<BR>
 
46
 
 
47
<A HREF="http://www.ross.net/"
 
48
 TARGET="rosshome"
 
49
 onClick="window.open('','rosshome','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
 
50
>
 
51
 <IMG SRC="binary/rossnet_logo.gif"
 
52
  WIDTH="64" HEIGHT="32"
 
53
  BORDER="0" ALT="RossNet"
 
54
  HSPACE="0" VSPACE="1"></A><BR>
 
55
<BR>
 
56
 
 
57
<A HREF="../index.shtml"
 
58
 TARGET="funnelweb"
 
59
 onClick="window.open('','funnelweb','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
 
60
>
 
61
 <IMG SRC="binary/linklogo.gif"
 
62
  WIDTH="64" HEIGHT="32"
 
63
  BORDER="0" ALT="FunnelWeb"
 
64
  HSPACE="0" VSPACE="1"></A><BR>
 
65
<BR>
 
66
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0><TR><TD BGCOLOR="#000000">
 
67
<A HREF="../reference/index.html"
 
68
 TARGET="funnelwebreference"
 
69
 onClick="window.open('','funnelwebreference','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
 
70
><FONT COLOR="#FFFFFF"><B>Reference</B></FONT></A><BR>
 
71
<BR>
 
72
<A HREF="../developer/index.html"
 
73
 TARGET="funnelwebdeveloper"
 
74
 onClick="window.open('','funnelwebdeveloper','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
 
75
><FONT COLOR="#FFFFFF"><B>Developer</B></FONT></A><BR>
 
76
<BR>
 
77
<A HREF="index.html"><FONT COLOR="#FFFFFF"><B>Tutorial</B></FONT></A><BR>
 
78
<A HREF="intro.html"><FONT COLOR="#FFFFFF">1 Introduction</FONT></A><BR>
 
79
<A HREF="macro.html"><FONT COLOR="#FFFFFF">2 Macros</FONT></A><BR>
 
80
<A HREF="type.html"><FONT COLOR="#FFFFFF">3 Typesetting</FONT></A><BR>
 
81
<A HREF="example.html"><FONT COLOR="#FFFFFF">4 Example</FONT></A><BR>
 
82
<A HREF="hints.html"><FONT COLOR="#FFFFFF">5 Hints</FONT></A><BR>
 
83
<A HREF="examples.html"><FONT COLOR="#FFFFFF">6 Examples</FONT></A><BR>
 
84
<A HREF="web.html"><FONT COLOR="#FFFFFF">7 Webmaking</FONT></A><BR>
 
85
 
 
86
<BR>
 
87
<A HREF="search.html"><FONT COLOR="#FFFFFF"><B>SEARCH</B></FONT></A><BR>
 
88
</FONT>
 
89
</TD></TR></TABLE>
 
90
 
 
91
 
 
92
</TD>
 
93
<TD WIDTH="360" VALIGN="top">
 
94
<FONT SIZE="3">
 
95
 
 
96
 
 
97
<A HREF="../reference/index.html"><IMG SRC="binary/title.gif"
 
98
 WIDTH="302" HEIGHT="24"
 
99
 BORDER="0" ALT="FunnelWeb Tutorial Manual"
 
100
 HSPACE="0" VSPACE="0"></A>
 
101
<P><FONT SIZE="5">6.1 Analyzing the Monster Postscript Header File</FONT><BR>
 
102
 
 
103
 
 
104
 
 
105
 
 
106
<P>During my Ph.D. candidature, I determined at one point
 
107
that it would be very desirable to automatically insert
 
108
diagrams from the <I>MacDraw</I>&nbsp; program
 
109
on my Macintosh into TeX <SAMP>insert</SAMP>ions in
 
110
my thesis. This would allow diagrams to
 
111
float around with the text and be printed automatically
 
112
rather than having to be printed separately and stuck in
 
113
with real glue. On the face of it, the problem seemed
 
114
inherently solvable, as the Macintosh could
 
115
generate PostScript for each diagram and
 
116
this PostScript could presumably be inserted into the
 
117
PostScript generated using TeX.
 
118
 
 
119
<P>The only trouble was that the Macintosh PostScript code
 
120
for the diagrams relied on an Apple PostScript header
 
121
file. This meant that the
 
122
header file had to be included at the start of the TeX
 
123
PostScript if the inserted PostScript for the diagrams was
 
124
to work. Unfortunately, merely including the header file at
 
125
the top didn't work, and it turned out that a rather
 
126
detailed analysis of some parts of the Apple header file was
 
127
required in order to perform the necessary surgery on the
 
128
header file to make it work. This analysis was severely
 
129
aggravated by the fact that the PostScript header file was
 
130
virtually unreadable. Basically it was about 50K of
 
131
interwoven definitions, that looked as if it had been run
 
132
through a word processor. There was no way that the code
 
133
could be understood clearly without some kind of
 
134
reformatting. Two other aspects of the problem further
 
135
complicated the analysis:
 
136
 
 
137
<P>
 
138
<UL>
 
139
 
 
140
<LI> The definitions of interest (i.e. the ones causing
 
141
the problems) were scattered throughout the heaeder file.
 
142
 
 
143
<LI> Many definitions could not be moved within the
 
144
header file. For one or more
 
145
reasons (e.g. to keep a definition within the activation of
 
146
a particular dictionary <SAMP>begin</SAMP> and <SAMP>end</SAMP>)
 
147
it would have been unwise to move the definitions of
 
148
interest to the same point in the file.
 
149
 
 
150
</UL>
 
151
 
 
152
<P>In fact the file was so messy and complicated that, as
 
153
a rule, it had to be handled with kid gloves. It would have
 
154
been unwise to re-arrange the definitions or to insert
 
155
comments.
 
156
 
 
157
<P>To my surprise, FunnelWeb provided an unexpected
 
158
solution to the problem. First I replaced all occurrences of
 
159
the <SAMP>@</SAMP> in the header file with <SAMP>@@</SAMP>.
 
160
Second, I placed the entire header file in a FunnelWeb macro
 
161
definition connected to a product file. I then processed the
 
162
file and checked to make sure that the product file was
 
163
identical to the original file. By doing all this I had
 
164
placed the header file under FunnelWeb control. I then left
 
165
the macro definition largely untouched, but replaced the
 
166
PostScript definitions of interest with FunnelWeb macro
 
167
calls, moving the actual PostScript definitions into
 
168
FunnelWeb macro definitions at the end of the FunnelWeb
 
169
file.
 
170
 
 
171
<P>
 
172
<PRE>
 
173
@O@&lt;LaserHeader.ps@&gt;==@{@-
 
174
Unreadable Postscript code
 
175
@&lt;Print routine@&gt;
 
176
Unreadable Postscript code
 
177
@&lt;Zap routine@&gt;
 
178
Unreadable Postscript code
 
179
@}
 
180
 
 
181
@A This routine looks as if it does this, but really is
 
182
does that, blah, blah blah.
 
183
 
 
184
@$@&lt;Print routine@&gt;==@{@-
 
185
/print { push pop pop push turn around
 
186
         and jump up and down and print it} def
 
187
@}
 
188
 
 
189
@A This routine zaps the...
 
190
 
 
191
@$@&lt;Zap routine@&gt;==@{@-
 
192
/zap { push pop pop push turn around and
 
193
       jump up and down and print it} def
 
194
@}
 
195
</PRE>
 
196
 
 
197
<P>Use of FunnelWeb meant that I was able to pluck out the
 
198
definitions of interest (a very small part of the whole
 
199
file) and collect them as a group at the end of the file
 
200
where they could be studied. Because each definition was
 
201
safely contained in a macro, it was possible to write a
 
202
detailed commentary of each routine without fear of
 
203
affecting the final PostScript code in any way at all. Once
 
204
this analysis was completed, it was possible to perform
 
205
surgery on the offending PostScript definitions in an
 
206
extremely controlled way. In particular, the FunnelWeb input
 
207
file served as a repository for all the different versions
 
208
of particular routines that were tried in order to get the
 
209
definitions to work. A new (<STRONG>Z</STRONG>ero) macro was created for
 
210
each version of each definition, and a commentary of how it
 
211
performed added above it.
 
212
 
 
213
<P>This case demonstrates that FunnelWeb is an extremely
 
214
powerful tool for dissecting and documenting cryptic text
 
215
files. Through the use of
 
216
macros, particular parts of the file can be isolated and
 
217
discussed without affecting the final product file in any
 
218
way. In the example above, only a small part of the file was
 
219
analysed, the rest being left as a blob, but in the general
 
220
case, a cryptic text file could be inserted into FunnelWeb
 
221
and then incrementally dissected (and possibly modified)
 
222
until the result is a fully documented literate program.
 
223
That this can be done without affecting the actual product
 
224
file demonstrates the high degree of descriptive control
 
225
that FunnelWeb provides.
 
226
 
 
227
 
 
228
<P>
 
229
<TABLE WIDTH="100%">
 
230
<TR>
 
231
<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>
 
232
<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>
 
233
<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>
 
234
</TR>
 
235
</TABLE>
 
236
 
 
237
 
 
238
 
 
239
<HR>
 
240
<FONT SIZE="2">
 
241
<A HREF="mailto:webmaster@ross.net">Webmaster</A>&nbsp;&nbsp;&nbsp;
 
242
<A HREF="copyright.html">Copyright &copy; Ross N. Williams 1992,1999. All rights reserved.</A><BR>
 
243
</FONT>
 
244
 
 
245
</FONT>
 
246
</TD>
 
247
</TR>
 
248
</TABLE>
 
249
 
 
250
 
 
251
</BODY>
 
252
 
 
253
<!-- *********************************************************************** -->
 
254
<!--      End Of A FunnelWeb Manual Web Page (www.ross.net/funnelweb/)       -->
 
255
<!-- *********************************************************************** -->
 
256
 
 
257
</HTML>