home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume38 / lout / part01 < prev    next >
Encoding:
Text File  |  1993-08-11  |  74.8 KB  |  2,343 lines

  1. Newsgroups: comp.sources.misc
  2. From: jeff@joyce.cs.su.oz.au (Jeff Kingston)
  3. Subject: v38i069:  lout - Lout document formatting system, v2.05, Part01/35
  4. Message-ID: <csm-v38i069=lout.130423@sparky.Sterling.COM>
  5. X-Md4-Signature: 640afe1cc1864e70937cab39da6d00d6
  6. Keywords: document formatting typesetting lout
  7. Sender: kent@sparky.sterling.com (Kent Landfield)
  8. Organization: Sterling Software
  9. Date: Sun, 8 Aug 1993 18:05:05 GMT
  10. Approved: kent@sparky.sterling.com
  11.  
  12. Submitted-by: jeff@joyce.cs.su.oz.au (Jeff Kingston)
  13. Posting-number: Volume 38, Issue 69
  14. Archive-name: lout/part01
  15. Environment: UNIX
  16. Supersedes: lout: Volume 37, Issue 99-128
  17.  
  18. This is version 2.05 of the Lout document formatting system.  The system 
  19. reads a high-level description of a document similar in style to LaTeX 
  20. and produces a PostScript file which can be printed on many laser printers 
  21. and graphic display devices.
  22.  
  23. Lout offers an unprecedented range of advanced features, including
  24. optimal paragraph breaking, automatic hyphenation, PostScript EPS file
  25. inclusion, equation formatting, tables, diagrams, rotation and scaling,
  26. sorted indexes, bibliographic databases, running headers and odd-even
  27. pages, automatic cross referencing, and much more, all ready to go.
  28. Furthermore, Lout is easily extended with definitions which are very
  29. much easier to write than troff of TeX macros because Lout is a
  30. high-level language, the outcome of an eight-year research project that
  31. went back to the beginning.
  32.  
  33. New features just introduced in Version 2.05 include full support for the
  34. ISO-LATIN-1 character set and arbitrary PostScript encoding vectors, small
  35. changes to the DocumentLayout package to simplify porting it to non-English
  36. languages, source code which compiles cleanly on type-fussy compilers and
  37. at least one 64-bit architecture (the DEC Alpha) but is not yet ANSI, and
  38. a few small enhancements and bug fixes.
  39.  
  40. Lout is written in C, is highly portable to Unix systems, and produces
  41. PostScript output (used by many laser printers).  It is distributed under
  42. the GNU public licence as a compressed tar file called lout.2.05.tar.Z
  43. in the "jeff" subdirectory of the home directory you land in when running
  44. "ftp ftp.cs.su.oz.au" with login name "ftp" or "anonymous" (enter any
  45. non-empty password).  The comp.sources.misc newsgroup is an alternative
  46. source of Lout distributions.  The distribution contains
  47.  
  48.   *  Complete C source code
  49.  
  50.   *  Standard packages of definitions for tech reports, books, equations,
  51.      tables, diagrams, and Pascal prettyprinting (all written in Lout)
  52.  
  53.   *  Complete user documentation in the form of seven technical reports
  54.      and a Unix manual page
  55.  
  56.   *  A makefile and installation instructions
  57.  
  58. Lout was designed and implemented by Jeffrey H. Kingston (jeff@cs.su.oz.au)
  59. of the Basser Department of Computer Science at the University of Sydney.
  60. ---------------------------
  61. #! /bin/sh
  62. # This is a shell archive.  Remove anything before this line, then feed it
  63. # into a shell via "sh file" or similar.  To overwrite existing files,
  64. # type "sh file -c".
  65. # Contents:  README data doc doc/tr.begin doc/tr.eq
  66. #   doc/tr.eq/outfile.ps.A doc/tr.fig doc/tr.impl doc/tr.lout
  67. #   doc/tr.over doc/tr.tab evec font include man z34.c
  68. # Wrapped by kent@sparky on Sun Aug  8 12:29:20 1993
  69. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  70. echo If this archive is complete, you will see the following message:
  71. echo '          "shar: End of archive 1 (of 35)."'
  72. if test -f 'README' -a "${1}" != "-c" ; then 
  73.   echo shar: Will not clobber existing file \"'README'\"
  74. else
  75.   echo shar: Extracting \"'README'\" \(2189 characters\)
  76.   sed "s/^X//" >'README' <<'END_OF_FILE'
  77. XLOUT: A HIGH-LEVEL LANGUAGE FOR DOCUMENT FORMATTING
  78. XBASSER LOUT VERSION 2.05 COPYRIGHT (C) 1993 Jeffrey H. Kingston
  79. X
  80. XJeffrey H. Kingston
  81. XBasser Department of Computer Science
  82. XThe University of Sydney 2006
  83. XAUSTRALIA
  84. X
  85. XTelephone (direct): 61 2 692 4216
  86. XTelephone (messages): 61 2 692 3423
  87. XEmail: jeff@cs.su.oz.au
  88. XFax: 61 2 692 3838
  89. X
  90. XThis program is free software; you can redistribute it and/or modify
  91. Xit under the terms of the GNU General Public License as published by
  92. Xthe Free Software Foundation; either version 1, or (at your option)
  93. Xany later version.
  94. X
  95. XThis program is distributed in the hope that it will be useful,
  96. Xbut WITHOUT ANY WARRANTY; without even the implied warranty of
  97. XMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  98. XGNU General Public License for more details.
  99. X
  100. XYou should have received a copy of the GNU General Public License
  101. X(file gnu.gpl in this directory); if not, write to the Free Software
  102. XFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  103. X
  104. XVersion 2.05 is substantially different from Version 2.03 in its
  105. Xlow-level character handling and attention to strong typing, as well
  106. Xas in the major innovation of support for ISO-LATIN-1 characters and
  107. Xarbitrary PostScript encoding vectors.  There is also a change in the
  108. Xdatabase index (.li) file format, which means that all old database
  109. Xindex files should be deleted before using Version 2.05.
  110. X
  111. XThis directory contains everything needed to install the Lout document
  112. Xformatting system on Unix.  It contains the following directories:
  113. X
  114. X    include        Lout packages (in Lout) and hyphenation patterns file
  115. X    data           Lout databases (in Lout)
  116. X    font           Adobe Systems font metrics (AFM) files
  117. X    evec           Character encoding vectors (CEV) files
  118. X    doc            Lout documents (in Lout)
  119. X    man            Lout manual entry
  120. X
  121. Xand the following files:
  122. X
  123. X    externs z*.c   Lout source code
  124. X    gnu.gpl        A copy of the GNU General Public License
  125. X    hyph.install   Information about how to change the hyphenation patterns
  126. X    makefile       A makefile for installing Lout
  127. X    news.blurb       A news blurb describing Lout
  128. X
  129. XPlease see the makefile for installation instructions.
  130. END_OF_FILE
  131.   if test 2189 -ne `wc -c <'README'`; then
  132.     echo shar: \"'README'\" unpacked with wrong size!
  133.   fi
  134.   # end of 'README'
  135. fi
  136. if test ! -d 'data' ; then
  137.     echo shar: Creating directory \"'data'\"
  138.     mkdir 'data'
  139. fi
  140. if test ! -d 'doc' ; then
  141.     echo shar: Creating directory \"'doc'\"
  142.     mkdir 'doc'
  143. fi
  144. if test ! -d 'doc/tr.begin' ; then
  145.     echo shar: Creating directory \"'doc/tr.begin'\"
  146.     mkdir 'doc/tr.begin'
  147. fi
  148. if test ! -d 'doc/tr.eq' ; then
  149.     echo shar: Creating directory \"'doc/tr.eq'\"
  150.     mkdir 'doc/tr.eq'
  151. fi
  152. if test -f 'doc/tr.eq/outfile.ps.A' -a "${1}" != "-c" ; then 
  153.   echo shar: Will not clobber existing file \"'doc/tr.eq/outfile.ps.A'\"
  154. else
  155.   echo shar: Extracting \"'doc/tr.eq/outfile.ps.A'\" \(59623 characters\)
  156.   sed "s/^X//" >'doc/tr.eq/outfile.ps.A' <<'END_OF_FILE'
  157. X%!PS-Adobe-3.0
  158. X%%Creator: Basser Lout Version 2.05 (July 1993)
  159. X%%CreationDate: Tue Jul 27 15:23:26 1993
  160. X%%DocumentNeededResources: (atend)
  161. X%%Pages: (atend)
  162. X%%BoundingBox: 0 0 595 841
  163. X%%EndComments
  164. X
  165. X%%BeginProlog
  166. X%%BeginResource: procset LoutStartUp
  167. X/x { currentpoint exch pop moveto } def
  168. X/s { show } def
  169. X/in { 1440 mul } def
  170. X/cm { 567 mul } def
  171. X/pt { 20 mul } def
  172. X/em { 120 mul } def
  173. X/sp { louts mul } def
  174. X/vs { loutv mul } def
  175. X/ft { loutf mul } def
  176. X/dg {           } def
  177. X
  178. X/LoutGraphic {
  179. X  /louts exch def
  180. X  /loutv exch def
  181. X  /loutf exch def
  182. X  /ymark exch def
  183. X  /xmark exch def
  184. X  /ysize exch def
  185. X  /xsize exch def
  186. X} def
  187. X
  188. X/LoutFont
  189. X{ findfont exch scalefont setfont
  190. X} bind def
  191. X
  192. X/LoutRecode {
  193. X  { findfont dup length dict begin
  194. X    {1 index /FID ne {def} {pop pop} ifelse} forall
  195. X    /Encoding exch def
  196. X    currentdict end definefont pop
  197. X  }
  198. X  stopped {}
  199. X} bind def
  200. X
  201. X/BeginEPSF {
  202. X  /LoutEPSFState save def
  203. X  /dict_count countdictstack def
  204. X  /op_count count 1 sub def
  205. X  userdict begin
  206. X  /showpage { } def
  207. X  0 setgray 0 setlinecap
  208. X  1 setlinewidth 0 setlinejoin
  209. X  10 setmiterlimit [] 0 setdash newpath
  210. X  /languagelevel where
  211. X  { pop languagelevel
  212. X    1 ne
  213. X    { false setstrokeadjust false setoverprint
  214. X    } if
  215. X  } if
  216. X} bind def
  217. X
  218. X/EndEPSF {
  219. X  count op_count sub { pop } repeat
  220. X  countdictstack dict_count sub { end } repeat
  221. X  LoutEPSFState restore
  222. X} bind def
  223. X%%EndResource
  224. X
  225. X/vec1 [
  226. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  227. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  228. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  229. X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
  230. X/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
  231. X/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
  232. X/zero /one /two /three /four /five /six /seven
  233. X/eight /nine /colon /semicolon /less /equal /greater /question
  234. X/at /A /B /C /D /E /F /G
  235. X/H /I /J /K /L /M /N /O
  236. X/P /Q /R /S /T /U /V /W
  237. X/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
  238. X/quoteleft /a /b /c /d /e /f /g
  239. X/h /i /j /k /l /m /n /o
  240. X/p /q /r /s /t /u /v /w
  241. X/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
  242. X/.notdef /.notdef /.notdef /.notdef /.notdef /quotedblleft /quotedblright /fi
  243. X/fl /endash /emdash /bullet /dagger /daggerdbl /florin /fraction
  244. X/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
  245. X/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
  246. X/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
  247. X/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
  248. X/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
  249. X/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
  250. X/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
  251. X/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
  252. X/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
  253. X/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
  254. X/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
  255. X/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
  256. X/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
  257. X/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
  258. X] def
  259. X
  260. X/AvantGarde-Bookfnt1 vec1 /AvantGarde-Book LoutRecode
  261. X/fnt1 { /AvantGarde-Bookfnt1 LoutFont } def
  262. X/AvantGarde-BookObliquefnt2 vec1 /AvantGarde-BookOblique LoutRecode
  263. X/fnt2 { /AvantGarde-BookObliquefnt2 LoutFont } def
  264. X/AvantGarde-Demifnt3 vec1 /AvantGarde-Demi LoutRecode
  265. X/fnt3 { /AvantGarde-Demifnt3 LoutFont } def
  266. X/AvantGarde-DemiObliquefnt4 vec1 /AvantGarde-DemiOblique LoutRecode
  267. X/fnt4 { /AvantGarde-DemiObliquefnt4 LoutFont } def
  268. X/Bookman-Demifnt5 vec1 /Bookman-Demi LoutRecode
  269. X/fnt5 { /Bookman-Demifnt5 LoutFont } def
  270. X/Bookman-DemiItalicfnt6 vec1 /Bookman-DemiItalic LoutRecode
  271. X/fnt6 { /Bookman-DemiItalicfnt6 LoutFont } def
  272. X/Bookman-Lightfnt7 vec1 /Bookman-Light LoutRecode
  273. X/fnt7 { /Bookman-Lightfnt7 LoutFont } def
  274. X/Bookman-LightItalicfnt8 vec1 /Bookman-LightItalic LoutRecode
  275. X/fnt8 { /Bookman-LightItalicfnt8 LoutFont } def
  276. X/Courierfnt9 vec1 /Courier LoutRecode
  277. X/fnt9 { /Courierfnt9 LoutFont } def
  278. X/Courier-Obliquefnt10 vec1 /Courier-Oblique LoutRecode
  279. X/fnt10 { /Courier-Obliquefnt10 LoutFont } def
  280. X/Courier-Boldfnt11 vec1 /Courier-Bold LoutRecode
  281. X/fnt11 { /Courier-Boldfnt11 LoutFont } def
  282. X/Courier-BoldObliquefnt12 vec1 /Courier-BoldOblique LoutRecode
  283. X/fnt12 { /Courier-BoldObliquefnt12 LoutFont } def
  284. X/Helveticafnt13 vec1 /Helvetica LoutRecode
  285. X/fnt13 { /Helveticafnt13 LoutFont } def
  286. X/Helvetica-Obliquefnt14 vec1 /Helvetica-Oblique LoutRecode
  287. X/fnt14 { /Helvetica-Obliquefnt14 LoutFont } def
  288. X/Helvetica-Boldfnt15 vec1 /Helvetica-Bold LoutRecode
  289. X/fnt15 { /Helvetica-Boldfnt15 LoutFont } def
  290. X/Helvetica-BoldObliquefnt16 vec1 /Helvetica-BoldOblique LoutRecode
  291. X/fnt16 { /Helvetica-BoldObliquefnt16 LoutFont } def
  292. X/Helvetica-Condensedfnt17 vec1 /Helvetica-Condensed LoutRecode
  293. X/fnt17 { /Helvetica-Condensedfnt17 LoutFont } def
  294. X/Helvetica-Condensed-Boldfnt18 vec1 /Helvetica-Condensed-Bold LoutRecode
  295. X/fnt18 { /Helvetica-Condensed-Boldfnt18 LoutFont } def
  296. X/Helvetica-Condensed-Obliquefnt19 vec1 /Helvetica-Condensed-Oblique LoutRecode
  297. X/fnt19 { /Helvetica-Condensed-Obliquefnt19 LoutFont } def
  298. X/Helvetica-Condensed-BoldOblfnt20 vec1 /Helvetica-Condensed-BoldObl LoutRecode
  299. X/fnt20 { /Helvetica-Condensed-BoldOblfnt20 LoutFont } def
  300. X/Helvetica-Narrowfnt21 vec1 /Helvetica-Narrow LoutRecode
  301. X/fnt21 { /Helvetica-Narrowfnt21 LoutFont } def
  302. X/Helvetica-Narrow-Obliquefnt22 vec1 /Helvetica-Narrow-Oblique LoutRecode
  303. X/fnt22 { /Helvetica-Narrow-Obliquefnt22 LoutFont } def
  304. X/Helvetica-Narrow-Boldfnt23 vec1 /Helvetica-Narrow-Bold LoutRecode
  305. X/fnt23 { /Helvetica-Narrow-Boldfnt23 LoutFont } def
  306. X/Helvetica-Narrow-BoldObliquefnt24 vec1 /Helvetica-Narrow-BoldOblique LoutRecode
  307. X/fnt24 { /Helvetica-Narrow-BoldObliquefnt24 LoutFont } def
  308. X/NewCenturySchlbk-Romanfnt25 vec1 /NewCenturySchlbk-Roman LoutRecode
  309. X/fnt25 { /NewCenturySchlbk-Romanfnt25 LoutFont } def
  310. X/NewCenturySchlbk-Italicfnt26 vec1 /NewCenturySchlbk-Italic LoutRecode
  311. X/fnt26 { /NewCenturySchlbk-Italicfnt26 LoutFont } def
  312. X/NewCenturySchlbk-Boldfnt27 vec1 /NewCenturySchlbk-Bold LoutRecode
  313. X/fnt27 { /NewCenturySchlbk-Boldfnt27 LoutFont } def
  314. X/NewCenturySchlbk-BoldItalicfnt28 vec1 /NewCenturySchlbk-BoldItalic LoutRecode
  315. X/fnt28 { /NewCenturySchlbk-BoldItalicfnt28 LoutFont } def
  316. X/Palatino-Romanfnt29 vec1 /Palatino-Roman LoutRecode
  317. X/fnt29 { /Palatino-Romanfnt29 LoutFont } def
  318. X/Palatino-Italicfnt30 vec1 /Palatino-Italic LoutRecode
  319. X/fnt30 { /Palatino-Italicfnt30 LoutFont } def
  320. X/Palatino-Boldfnt31 vec1 /Palatino-Bold LoutRecode
  321. X/fnt31 { /Palatino-Boldfnt31 LoutFont } def
  322. X/Palatino-BoldItalicfnt32 vec1 /Palatino-BoldItalic LoutRecode
  323. X/fnt32 { /Palatino-BoldItalicfnt32 LoutFont } def
  324. X/fnt33 { /Symbol LoutFont } def
  325. X/Times-Romanfnt34 vec1 /Times-Roman LoutRecode
  326. X/fnt34 { /Times-Romanfnt34 LoutFont } def
  327. X/Times-Italicfnt35 vec1 /Times-Italic LoutRecode
  328. X/fnt35 { /Times-Italicfnt35 LoutFont } def
  329. X/Times-Boldfnt36 vec1 /Times-Bold LoutRecode
  330. X/fnt36 { /Times-Boldfnt36 LoutFont } def
  331. X/Times-BoldItalicfnt37 vec1 /Times-BoldItalic LoutRecode
  332. X/fnt37 { /Times-BoldItalicfnt37 LoutFont } def
  333. X/ZapfChancery-MediumItalicfnt38 vec1 /ZapfChancery-MediumItalic LoutRecode
  334. X/fnt38 { /ZapfChancery-MediumItalicfnt38 LoutFont } def
  335. X/fnt39 { /ZapfDingbats LoutFont } def
  336. X
  337. X%%BeginResource: procset LoutTabPrependGraphic
  338. X
  339. X% @PrependGraphic file /usr/staff/jeff/lout.lib/include/tab_prepend
  340. X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  341. X%                                                  %
  342. X%  PostScript @SysPrependGraphic file for @Tab     %
  343. X%                                                  %
  344. X%  To assist in avoiding name clashes, the names   %
  345. X%  of all these symbols begin with "ltab".         %
  346. X%                                                  %
  347. X%  Jeffrey H. Kingston                             %
  348. X%  24 September 1991                               %
  349. X%  22 December 1992                                %
  350. X%                                                  %
  351. X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  352. X
  353. X% linewidth ltabhs -
  354. X% horizontal single line
  355. X/ltabhs
  356. X{  0 0 moveto xsize 0 lineto
  357. X   setlinewidth 0 setlinecap stroke
  358. X} def
  359. X
  360. X% linewidth ltabhsp -
  361. X% horizontal single line with projecting ends
  362. X/ltabhsp
  363. X{  0 0 moveto xsize 0 lineto
  364. X   setlinewidth 2 setlinecap stroke
  365. X} def
  366. X
  367. X% linewidth ltabhd -
  368. X% horizontal double line
  369. X/ltabhd
  370. X{  dup dup
  371. X   0 0 moveto xsize 0 lineto
  372. X   0 exch 3 mul moveto xsize exch 3 mul lineto
  373. X   setlinewidth 0 setlinecap stroke
  374. X} def
  375. X
  376. X% linewidth ltabhdb -
  377. X% horizontal double line below mark
  378. X/ltabhdb
  379. X{  dup dup
  380. X   0 0 moveto xsize 0 lineto
  381. X   0 exch -3 mul moveto xsize exch -3 mul lineto
  382. X   setlinewidth 0 setlinecap stroke
  383. X} def
  384. X
  385. X% linewidth ltabhdnw -
  386. X% horizontal double line with northwest corner
  387. X/ltabhdnw
  388. X{  dup dup dup dup
  389. X   0 0 moveto xsize 0 lineto
  390. X   xsize exch 3 mul moveto
  391. X   -3 mul exch 3 mul lineto
  392. X   -3 mul 0 lineto
  393. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  394. X} def
  395. X
  396. X% linewidth ltabhdne -
  397. X% horizontal double line with northeast corner
  398. X/ltabhdne
  399. X{  dup dup dup dup
  400. X   0 0 moveto xsize 0 lineto
  401. X   0 exch 3 mul moveto
  402. X   3 mul xsize add exch 3 mul lineto
  403. X   3 mul xsize add 0 lineto
  404. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  405. X} def
  406. X
  407. X% linewidth ltabhdsw -
  408. X% horizontal double line with southwest corner
  409. X/ltabhdsw
  410. X{  dup dup dup dup
  411. X   0 0 moveto xsize 0 lineto
  412. X   xsize exch -3 mul moveto
  413. X   -3 mul exch -3 mul lineto
  414. X   -3 mul 0 lineto
  415. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  416. X} def
  417. X
  418. X% linewidth ltabhdse -
  419. X% horizontal double line with southeast corner
  420. X/ltabhdse
  421. X{  dup dup dup dup
  422. X   0 0 moveto xsize 0 lineto
  423. X   0 exch -3 mul moveto
  424. X   3 mul xsize add exch -3 mul lineto
  425. X   3 mul xsize add 0 lineto
  426. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  427. X} def
  428. X
  429. X% linewidth ltabvs -
  430. X% vertical single line
  431. X/ltabvs
  432. X{  0 0 moveto 0 ysize lineto
  433. X   setlinewidth 0 setlinecap stroke
  434. X} def
  435. X
  436. X% linewidth ltabvd -
  437. X% vertical double line
  438. X/ltabvd
  439. X{  dup dup
  440. X   0 0 moveto 0 ysize lineto
  441. X   -3 mul 0 moveto -3 mul ysize lineto
  442. X   setlinewidth 0 setlinecap stroke
  443. X} def
  444. X
  445. X% linewidth ltabvdr -
  446. X% vertical double line to right of mark
  447. X/ltabvdr
  448. X{  dup dup
  449. X   0 0 moveto 0 ysize lineto
  450. X   3 mul 0 moveto 3 mul ysize lineto
  451. X   setlinewidth 0 setlinecap stroke
  452. X} def
  453. X%%EndResource
  454. X%%BeginResource: procset LoutFigPrependGraphic
  455. X
  456. X% @PrependGraphic file /usr/staff/jeff/lout.lib/include/fig_prepend
  457. X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  458. X%                                                                    %
  459. X%  PostScript @SysPrependGraphic file for @Fig  Jeffrey H. Kingston  %
  460. X%  Version 2.0 (includes CIRCUM label)                 January 1992  %
  461. X%                                                                    %
  462. X%  To assist in avoiding name clashes, the names of all symbols      %
  463. X%  defined here begin with "lfig".  However, this is not feasible    %
  464. X%  with user-defined labels and some labels used by users.           %
  465. X%                                                                    %
  466. X%  <point>      is two numbers, a point.                             %
  467. X%  <length>     is one number, a length                              %
  468. X%  <angle>      is one number, an angle in degrees                   %
  469. X%  <dashlength> is one number, the preferred length of a dash        %
  470. X%                                                                    %
  471. X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  472. X
  473. Xerrordict begin
  474. X   /handleerror
  475. X   {
  476. X      {  /Times-Roman findfont 8 pt scalefont setfont
  477. X     0 setgray 4 pt 4 pt moveto
  478. X     $error /errorname get
  479. X     dup lfigdict exch known
  480. X     { lfigdict exch get }
  481. X     { 30 string cvs } ifelse
  482. X     show
  483. X     (  Command: ) show
  484. X     $error /command get 30 string cvs show
  485. X      } stopped {} if
  486. X      showpage stop
  487. X   } def
  488. Xend
  489. X
  490. X% concat strings: <string> <string> lfigconcat <string>
  491. X% must be defined outside lfigdict since used in lfigpromotelabels
  492. X/lfigconcat
  493. X{ 2 copy length exch length add string
  494. X  dup 0 4 index putinterval
  495. X  dup 3 index length 3 index putinterval
  496. X  3 1 roll pop pop
  497. X} def
  498. X
  499. X% <string> lfigdebugprint -
  500. X% must be defined outside lfigdict since used in arbitrary places
  501. X% /lfigdebugprint
  502. X% { print
  503. X%   (;  operand stack:\n) print
  504. X%   count copy
  505. X%   count 2 idiv
  506. X%   { ==
  507. X%     (\n) print
  508. X%   } repeat
  509. X%   (\n) print
  510. X% } def
  511. X
  512. X/lfigdict 120 dict def
  513. Xlfigdict begin
  514. X
  515. X% error messages
  516. X/dictfull (dictfull error:  too many labels?) def
  517. X/dictstackoverflow (dictstackoverflow error:  labels nested too deeply?) def
  518. X/execstackoverflow (execstackoverflow error:  figure nested too deeply?) def
  519. X/limitcheck (limitcheck error:  figure nested too deeply or too large?) def
  520. X/syntaxerror (syntaxerror error:  syntax error in text of figure?) def
  521. X/typecheck (typecheck error:  syntax error in text of figure?) def
  522. X/undefined (undefined error:  unknown or misspelt label?) def
  523. X/VMError (VMError error:  run out of memory?) def
  524. X
  525. X% push pi onto stack:  - lfigpi <num>
  526. X/lfigpi 3.14159 def
  527. X
  528. X% arc directions
  529. X/clockwise     false def
  530. X/anticlockwise true  def
  531. X
  532. X% maximum of two numbers:  <num> <num> lfigmax <num>
  533. X/lfigmax { 2 copy gt { pop } { exch pop } ifelse } def
  534. X
  535. X% minimum of two numbers:  <num> <num> lfigmin <num>
  536. X/lfigmin { 2 copy lt { pop } { exch pop } ifelse } def
  537. X
  538. X% add two points:  <point> <point> lfigpadd <point>
  539. X/lfigpadd { exch 3 1 roll add 3 1 roll add exch } def
  540. X
  541. X% subtract first point from second:  <point> <point> lfigpsub <point>
  542. X/lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def
  543. X
  544. X% max two points:  <point> <point> lfigpmax <point>
  545. X/lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def
  546. X
  547. X% min two points:  <point> <point> lfigpmin <point>
  548. X/lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def
  549. X
  550. X% scalar multiplication: <point> <num> lfigpmul <point>
  551. X/lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def
  552. X
  553. X% point at angle and distance:  <point> <length> <angle> lfigatangle <point>
  554. X/lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def
  555. X
  556. X% angle from one point to another:  <point> <point> lfigangle <angle>
  557. X/lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
  558. X
  559. X% distance between two points:  <point> <point> lfigdistance <length>
  560. X/lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def
  561. X
  562. X% difference in x coords: <point> <point> lfigxdistance <length>
  563. X/lfigxdistance { pop 3 1 roll pop sub } def
  564. X
  565. X%difference in y coords: <point> <point> lfigydistance <length>
  566. X/lfigydistance { 3 1 roll pop sub exch pop } def
  567. X
  568. X% stroke a solid line:  <length> <dashlength> lfigsolid -
  569. X/lfigsolid
  570. X{  pop pop [] 0 setdash stroke
  571. X} def
  572. X
  573. X% stroke a lfigdashed line:   <length> <dashlength> lfigdashed -
  574. X/lfigdashed
  575. X{  2 copy div 2 le 1 index 0 le or
  576. X   {  exch pop 1 pt lfigmax [ exch dup ] 0 setdash }
  577. X   {  dup [ exch 4 2 roll 2 copy div
  578. X      1 sub 2 div ceiling dup 4 1 roll
  579. X      1 add mul sub exch div ] 0 setdash
  580. X   } ifelse stroke
  581. X} def
  582. X
  583. X% stroke a lfigcdashed line:  <length> <dashlength> lfigcdashed -
  584. X/lfigcdashed
  585. X{  2 copy le 1 index 0 le or
  586. X   {  exch pop 1 pt lfigmax [ exch dup ] copy 0 get 2 div setdash }
  587. X   { dup [ 4 2 roll exch 2 copy exch div
  588. X     2 div ceiling div 1 index sub
  589. X     ] exch 2 div setdash
  590. X   } ifelse stroke
  591. X} def
  592. X
  593. X% stroke a dotted line:  <length> <dashlength> lfigdotted -
  594. X/lfigdotted
  595. X{  dup 0 le
  596. X   {  exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash }
  597. X   { 1 index exch div ceiling div
  598. X     [ 0 3 2 roll ] 0 setdash
  599. X   } ifelse stroke
  600. X} def
  601. X
  602. X% stroke a noline line:  <length> <dashlength> lfignoline -
  603. X/lfignoline
  604. X{ pop pop
  605. X} def
  606. X
  607. X% painting (i.e. filling): - lfigwhite - (etc.)
  608. X/lfigwhite   { 1.0  setgray fill } def
  609. X/lfiglight   { 0.95 setgray fill } def
  610. X/lfiggrey    { 0.9  setgray fill } def
  611. X/lfiggray    { 0.9  setgray fill } def
  612. X/lfigdark    { 0.7  setgray fill } def
  613. X/lfigblack   { 0.0  setgray fill } def
  614. X/lfignopaint {                   } def
  615. X
  616. X% line caps (and joins, not currently used)
  617. X/lfigbutt       0 def
  618. X/lfiground      1 def
  619. X/lfigprojecting 2 def
  620. X/lfigmiter      0 def
  621. X/lfigbevel      2 def
  622. X
  623. X% shape and labels of the @Box symbol
  624. X/lfigbox
  625. X{
  626. X   0     0     /SW  lfigpointdef
  627. X   xsize 0     /SE  lfigpointdef
  628. X   xsize ysize /NE  lfigpointdef
  629. X   0     ysize /NW  lfigpointdef
  630. X   SE 0.5 lfigpmul /S   lfigpointdef
  631. X   NW 0.5 lfigpmul /W   lfigpointdef
  632. X   W SE lfigpadd   /E   lfigpointdef
  633. X   S NW lfigpadd   /N   lfigpointdef
  634. X   NE 0.5 lfigpmul /CTR lfigpointdef
  635. X   [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
  636. X   SW SE NE NW SW
  637. X} def
  638. X
  639. X% shape and labels of the @Square symbol
  640. X/lfigsquare
  641. X{
  642. X   xsize ysize 0.5 lfigpmul /CTR lfigpointdef
  643. X   CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef
  644. X   CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
  645. X   CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
  646. X   CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
  647. X   SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef
  648. X   NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef
  649. X   SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef
  650. X   SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef
  651. X   [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
  652. X   SW SE NE NW SW
  653. X} def
  654. X
  655. X% shape and labels of the @Diamond symbol
  656. X/lfigdiamond
  657. X{
  658. X   xsize 0 0.5 lfigpmul /S   lfigpointdef
  659. X   0 ysize 0.5 lfigpmul /W   lfigpointdef
  660. X   S W         lfigpadd /CTR lfigpointdef
  661. X   CTR W       lfigpadd /N   lfigpointdef
  662. X   CTR S       lfigpadd /E   lfigpointdef
  663. X   [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef
  664. X   S E N W S
  665. X} def
  666. X
  667. X% shape and labels of the @Ellipse symbol
  668. X/lfigellipse
  669. X{
  670. X   xsize 0 0.5 lfigpmul /S   lfigpointdef
  671. X   0 ysize 0.5 lfigpmul /W   lfigpointdef
  672. X   S W         lfigpadd /CTR lfigpointdef
  673. X   CTR W       lfigpadd /N   lfigpointdef
  674. X   CTR S       lfigpadd /E   lfigpointdef
  675. X   CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef
  676. X   0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef
  677. X   xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef
  678. X   0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef
  679. X   [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef
  680. X   S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
  681. X} def
  682. X
  683. X% shape and labels of the @Circle symbol
  684. X/lfigcircle
  685. X{
  686. X   xsize ysize 0.5 lfigpmul /CTR lfigpointdef
  687. X   CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef
  688. X   CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef
  689. X   CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef
  690. X   CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
  691. X   CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef
  692. X   CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
  693. X   CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef
  694. X   CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
  695. X   [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef
  696. X   S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
  697. X} def
  698. X
  699. X% shape and labels of the @HLine and @HArrow symbols
  700. X/lfighline
  701. X{
  702. X   0 ymark lfigprevious /FROM lfigpointdef
  703. X   xsize ymark lfigprevious /TO lfigpointdef
  704. X} def
  705. X
  706. X% shape and labels of the @VLine and @VArrow symbols
  707. X/lfigvline
  708. X{
  709. X   xmark ysize lfigprevious /FROM lfigpointdef
  710. X   xmark 0 lfigprevious /TO lfigpointdef
  711. X} def
  712. X
  713. X% points of a polygon around base with given no of sides, vert init angle:
  714. X% <sides> <angle> figpolygon <point> ... <point>
  715. X/lfigpolygon
  716. X{  xsize ysize 0.5 lfigpmul /CTR lfigpointdef
  717. X   90 sub CTR 2 copy lfigmax 5 3 roll
  718. X   [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef
  719. X   exch dup 360 exch div exch
  720. X   1 1  3 2 roll
  721. X   {  4 string cvs (P) exch lfigconcat cvn
  722. X      6 copy pop pop lfigatangle 2 copy 10 2 roll
  723. X      3 2 roll lfigpointdef
  724. X      dup 3 1 roll add exch
  725. X   }  for
  726. X   pop lfigatangle
  727. X} def
  728. X
  729. X% next array element:  <array> <index> lfiggetnext <array> <index> <any> true
  730. X%                                               or <array> <index> false
  731. X/lfiggetnext
  732. X{  2 copy exch length ge
  733. X   { false }
  734. X   { 2 copy get exch 1 add exch true } ifelse
  735. X} def
  736. X
  737. X% check whether thing is number:  <any> lfigisnumbertype <any> <bool>
  738. X/lfigisnumbertype
  739. X{  dup type dup
  740. X   /integertype eq exch /realtype eq or
  741. X} def
  742. X
  743. X% check whether thing is an array:  <any> lfigisarraytype <any> <bool>
  744. X/lfigisarraytype { dup type /arraytype eq } def
  745. X
  746. X% get next item:  <array> <index> lfiggetnextitem <array> <index> 0
  747. X%                                              or <array> <index> <array> 1
  748. X%                                              or <array> <index> <point> 2
  749. X/lfiggetnextitem
  750. X{   lfiggetnext
  751. X    {    lfigisarraytype
  752. X    {   1
  753. X    }
  754. X    {   lfigisnumbertype
  755. X        {    3 1 roll
  756. X        lfiggetnext
  757. X        {   lfigisnumbertype
  758. X            {    4 3 roll exch  2
  759. X            }
  760. X            {    pop 3 2 roll pop  0
  761. X            } ifelse
  762. X        }
  763. X        {   3 2 roll pop  0
  764. X        } ifelse
  765. X        }
  766. X        {    pop 0
  767. X        } ifelse
  768. X    } ifelse
  769. X    }
  770. X    {    0
  771. X    } ifelse
  772. X} def
  773. X
  774. X% set arc path:  bool x1 y1  x2 y2  x0 y0  lfigsetarc  <angle> <angle> <dist>
  775. X% the path goes from x1 y1 to x2 y2 about centre x0 y0,
  776. X% anticlockwise if bool is true else clockwise.
  777. X% The orientations of backwards pointing and forwards pointing
  778. X% arrowheads are returned in the two angles, and
  779. X% the length of the arc is returned in <dist>.
  780. X/lfigsetarc
  781. X{
  782. X  20 dict begin
  783. X     matrix currentmatrix 8 1 roll
  784. X     2 copy translate 2 copy 8 2 roll
  785. X     4 2 roll lfigpsub 6 2 roll lfigpsub
  786. X     dup /y1 exch def dup mul /y1s exch def
  787. X     dup /x1 exch def dup mul /x1s exch def
  788. X     dup /y2 exch def dup mul /y2s exch def
  789. X     dup /x2 exch def dup mul /x2s exch def
  790. X
  791. X     y1s y2s eq
  792. X     {    -1
  793. X     }
  794. X     {    y1s x2s mul y2s x1s mul sub y1s y2s sub div
  795. X     } ifelse
  796. X     /da exch def
  797. X
  798. X     x1s x2s eq
  799. X     {    -1
  800. X     }
  801. X     {    x1s y2s mul x2s y1s mul sub x1s x2s sub div
  802. X     } ifelse
  803. X     /db exch def
  804. X
  805. X     da 0 gt db 0 gt and
  806. X     {    /LMax da sqrt db sqrt lfigmax def
  807. X    /scalex da sqrt LMax div def
  808. X    /scaley db sqrt LMax div def
  809. X    scalex scaley scale
  810. X    0 0 LMax
  811. X    0 0 x1 scalex mul y1 scaley mul lfigangle
  812. X    0 0 x2 scalex mul y2 scaley mul lfigangle
  813. X    2 copy eq { 360 add } if
  814. X    2 copy 8 2 roll
  815. X    5 index { arc } { arcn } ifelse
  816. X    2 index 1 index
  817. X    { 90 sub } { 90 add } ifelse
  818. X    dup sin scaley mul exch cos scalex mul atan
  819. X    2 index 2 index
  820. X    { 90 add } { 90 sub } ifelse
  821. X    dup sin scaley mul exch cos scalex mul atan
  822. X    5 2 roll  % res1 res2 ang1 ang2 anticlockwise
  823. X    { exch sub } { sub } ifelse
  824. X    dup 0 le { 360 add } if  lfigpi mul LMax mul 180 div
  825. X     }
  826. X     {    0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq
  827. X    0 0 x1 y1 lfigdistance 0 gt and
  828. X    {    0 0
  829. X        0 0 x1 y1 lfigdistance
  830. X        0 0 x1 y1 lfigangle
  831. X        0 0 x2 y2 lfigangle
  832. X        2 copy eq { 360 add } if
  833. X        2 copy 8 2 roll
  834. X        5 index { arc } { arcn } ifelse
  835. X        2 index 1 index
  836. X        { 90 sub } { 90 add } ifelse
  837. X        2 index 2 index
  838. X        { 90 add } { 90 sub } ifelse
  839. X        5 2 roll % res1 res2 ang1 ang2 clockwise
  840. X        { exch sub } { sub } ifelse
  841. X        dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div
  842. X    }
  843. X    {    x2 y2 lineto pop
  844. X        x2 y2 x1 y1 lfigangle
  845. X        x1 y1 x2 y2 lfigangle
  846. X        x1 y1 x2 y2 lfigdistance
  847. X    } ifelse
  848. X     } ifelse
  849. X     4 -1 roll setmatrix
  850. X   end
  851. X} def
  852. X
  853. X% lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3
  854. X% and return arrowhead angles and length of curve (actually 0)
  855. X% x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length>
  856. X/lfigsetcurve
  857. X{ 8 copy curveto pop pop
  858. X  lfigangle
  859. X  5 1 roll
  860. X  4 2 roll lfigangle
  861. X  exch
  862. X  0
  863. X} def
  864. X
  865. X% lfigpaintpath: paint a path of the given shape
  866. X% /paint [ shape ] lfigpaintpath -
  867. X/lfigpaintpath
  868. X{
  869. X  10 dict begin
  870. X    0 newpath
  871. X    /prevseen false def
  872. X    /curveseen false def
  873. X    { lfiggetnextitem
  874. X      dup 0 eq { pop exit }
  875. X      { 1 eq
  876. X        { /curveseen true def
  877. X      /curve exch def
  878. X      curve length 0 eq { /curveseen false def } if
  879. X        }
  880. X        { /ycurr exch def
  881. X      /xcurr exch def
  882. X      prevseen
  883. X      { curveseen
  884. X        { curve length 4 eq
  885. X          { xprev yprev
  886. X        curve 0 get curve 1 get
  887. X        curve 2 get curve 3 get
  888. X        xcurr ycurr
  889. X        lfigsetcurve pop pop pop
  890. X          }
  891. X          { xprev yprev xcurr ycurr
  892. X            curve length 1 ge { curve 0 get } { 0 } ifelse
  893. X            curve length 2 ge { curve 1 get } { 0 } ifelse
  894. X            curve length 3 ge { curve 2 get } { true } ifelse
  895. X            7 1 roll
  896. X            lfigsetarc pop pop pop
  897. X          } ifelse
  898. X        }
  899. X        { xcurr ycurr lineto
  900. X        } ifelse
  901. X      }
  902. X      { xcurr ycurr moveto
  903. X      } ifelse
  904. X      /xprev xcurr def
  905. X      /yprev ycurr def
  906. X      /prevseen true def
  907. X      /curveseen false def
  908. X        } ifelse
  909. X      } ifelse
  910. X    } loop pop pop cvx exec
  911. X  end
  912. X} def
  913. X
  914. X% stroke a path of the given shape in the given linestyle and dash length.
  915. X% Return the origin and angle of the backward and forward arrow heads.
  916. X% dashlength /linestyle [shape] lfigdopath  [<point> <angle>] [<point> <angle>] 
  917. X/lfigdopath
  918. X{
  919. X  10 dict begin
  920. X    0
  921. X    /prevseen  false def
  922. X    /curveseen false def
  923. X    /backarrow []    def
  924. X    /fwdarrow  []    def
  925. X    {
  926. X    lfiggetnextitem
  927. X    dup 0 eq { pop exit }
  928. X    {
  929. X        1 eq
  930. X        {    /curveseen true def
  931. X        /curve exch def
  932. X        curve length 0 eq { /prevseen false def } if
  933. X        }
  934. X        {    /ycurr exch def
  935. X        /xcurr exch def
  936. X        prevseen
  937. X        {   newpath xprev yprev moveto
  938. X            curveseen
  939. X            {    curve length 4 eq
  940. X            {   xprev yprev
  941. X                curve 0 get curve 1 get
  942. X                curve 2 get curve 3 get
  943. X                xcurr ycurr lfigsetcurve
  944. X            }
  945. X            {   xprev yprev xcurr ycurr
  946. X                curve length 1 ge { curve 0 get } { 0 } ifelse
  947. X                curve length 2 ge { curve 1 get } { 0 } ifelse
  948. X                curve length 3 ge { curve 2 get } { true } ifelse
  949. X                7 1 roll
  950. X                lfigsetarc
  951. X            } ifelse
  952. X            }
  953. X            {    xcurr ycurr lineto
  954. X            xcurr ycurr xprev yprev lfigangle dup 180 sub
  955. X            xprev yprev xcurr ycurr lfigdistance
  956. X            } ifelse
  957. X            6 index 6 index cvx exec
  958. X            [ xprev yprev 5 -1 roll ]
  959. X            backarrow length 0 eq
  960. X            { /backarrow exch def }
  961. X            { pop } ifelse
  962. X            [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
  963. X        } if
  964. X        /xprev xcurr def
  965. X        /yprev ycurr def
  966. X        /prevseen true def
  967. X        /curveseen false def
  968. X        } ifelse
  969. X    } ifelse
  970. X    } loop
  971. X    pop pop pop pop
  972. X    backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
  973. X    fwdarrow  length 0 eq { [ 0 0 0 ] } { fwdarrow  } ifelse
  974. X  end
  975. X} def
  976. X
  977. X% lfigdoarrow: draw an arrow head of given form
  978. X% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow -
  979. X/lfigdoarrow
  980. X{  matrix currentmatrix 8 1 roll
  981. X   dup 0 get 1 index 1 get translate
  982. X   2 get rotate
  983. X   [ 2 index neg 2 index 0 0
  984. X     3 index 3 index neg
  985. X     1 index 10 index mul 0
  986. X     7 index 7 index ]
  987. X   4 1 roll pop pop pop
  988. X   dup 3 1 roll
  989. X   gsave lfigpaintpath grestore lfigdopath pop pop
  990. X   setmatrix
  991. X} def
  992. X
  993. X% arrow head styles
  994. X/lfigopen     0.0 def
  995. X/lfighalfopen 0.5 def
  996. X/lfigclosed   1.0 def
  997. X
  998. X% stroke no arrows, forward, back, and both
  999. X/lfignoarrow { pop pop pop pop pop pop pop pop                        } def
  1000. X/lfigforward { 7 -1 roll lfigdoarrow pop                              } def
  1001. X/lfigback    { 8 -2 roll pop lfigdoarrow                              } def
  1002. X/lfigboth    { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def
  1003. X
  1004. X% lfigprevious: return previous point on path
  1005. X/lfigprevious
  1006. X{ lfigisnumbertype
  1007. X  { 2 copy }
  1008. X  { lfigisarraytype
  1009. X    { 2 index 2 index }
  1010. X    { 0 0 }
  1011. X    ifelse
  1012. X  } ifelse
  1013. X} def
  1014. X
  1015. X% label a point in 2nd top dictionary:  <point> /name lfigpointdef -
  1016. X/lfigpointdef
  1017. X{
  1018. X  % (Entering lfigpointdef) lfigdebugprint
  1019. X  [ 4 2 roll transform
  1020. X    /itransform cvx ] cvx
  1021. X    currentdict end
  1022. X    3 1 roll
  1023. X    % currentdict length currentdict maxlength lt
  1024. X    % { def }
  1025. X    % { exec moveto (too many labels) show stop }
  1026. X    % ifelse
  1027. X    def
  1028. X    begin
  1029. X  % (Leaving lfigpointdef) lfigdebugprint
  1030. X} def
  1031. X
  1032. X% promote labels from second top to third top dictionary
  1033. X% <string> lfigpromotelabels -
  1034. X/lfigpromotelabels
  1035. X{
  1036. X  % (Entering lfigpromotelabels) lfigdebugprint
  1037. X  currentdict end exch currentdict end
  1038. X  { exch 20 string cvs 2 index
  1039. X    (@) lfigconcat exch lfigconcat cvn exch def
  1040. X  } forall pop begin
  1041. X  % (Leaving lfigpromotelabels) lfigdebugprint
  1042. X} def
  1043. X
  1044. X% show labels (except CIRCUM): - lfigshowlabels -
  1045. X/lfigshowlabels
  1046. X{
  1047. X  % (Entering lfigshowlabels) lfigdebugprint
  1048. X  currentdict end
  1049. X    currentdict
  1050. X    { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key
  1051. X      { pop pop pop pop pop }
  1052. X      { pop cvx exec 2 copy
  1053. X        newpath 1.5 pt 0 360 arc
  1054. X        0 setgray fill
  1055. X        /Times-Roman findfont 8 pt scalefont setfont
  1056. X        moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show
  1057. X      }
  1058. X      ifelse
  1059. X    } forall
  1060. X  begin
  1061. X  % (Leaving lfigshowlabels) lfigdebugprint
  1062. X} def
  1063. X
  1064. X% fix an angle to between 0 and 360 degrees:  <angle> lfigfixangle <angle>
  1065. X/lfigfixangle
  1066. X{
  1067. X  % (Entering lfigfixangle) lfigdebugprint
  1068. X  { dup 0 ge { exit } if
  1069. X    360 add
  1070. X  } loop
  1071. X  { dup 360 lt { exit } if
  1072. X    360 sub
  1073. X  } loop
  1074. X  % (Leaving lfigfixangle) lfigdebugprint
  1075. X} def
  1076. X
  1077. X% find point on circumference of box:  alpha a b lfigboxcircum x y
  1078. X/lfigboxcircum
  1079. X{
  1080. X  % (Entering lfigboxcircum) lfigdebugprint
  1081. X  4 dict begin
  1082. X    /b exch def
  1083. X    /a exch def
  1084. X    lfigfixangle /alpha exch def
  1085. X    0 0 a b lfigangle /theta exch def
  1086. X
  1087. X    % if alpha <= theta, return (a, a*tan(alpha))
  1088. X    alpha theta le
  1089. X    { a  a alpha sin mul alpha cos div }
  1090. X    {
  1091. X      % else if alpha <= 180 - theta, return (b*cot(alpha), b)
  1092. X      alpha 180 theta sub le
  1093. X      { b alpha cos mul alpha sin div  b }
  1094. X      {
  1095. X        % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
  1096. X        alpha 180 theta add le
  1097. X        { a neg  a neg alpha sin mul alpha cos div }
  1098. X        {
  1099. X      % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
  1100. X      alpha 360 theta sub le
  1101. X          { b neg alpha cos mul alpha sin div  b neg }
  1102. X      {
  1103. X        % else 360 - theta <= alpha, return (a, a*tan(alpha))
  1104. X        a  a alpha sin mul alpha cos div
  1105. X      } ifelse
  1106. X        } ifelse
  1107. X      } ifelse
  1108. X    } ifelse
  1109. X  end
  1110. X  % (Leaving lfigboxcircum) lfigdebugprint
  1111. X} def
  1112. X
  1113. X% find point on circumference of diamond:  alpha a b lfigdiamondcircum x y
  1114. X/lfigdiamondcircum
  1115. X{
  1116. X  % (Entering lfigdiamondcircum) lfigdebugprint
  1117. X  4 dict begin
  1118. X    /b exch def
  1119. X    /a exch def
  1120. X    lfigfixangle /alpha exch def
  1121. X    b alpha cos abs mul  a alpha sin abs mul  add  /denom exch def
  1122. X    a b mul alpha cos mul denom div
  1123. X    a b mul alpha sin mul denom div
  1124. X  end
  1125. X  % (Leaving lfigdiamondcircum) lfigdebugprint
  1126. X} def
  1127. X
  1128. X% find point on circumference of ellipse:  alpha a b lfigellipsecircum x y
  1129. X/lfigellipsecircum
  1130. X{
  1131. X  % (Entering lfigellipsecircum) lfigdebugprint
  1132. X  4 dict begin
  1133. X    /b exch def
  1134. X    /a exch def
  1135. X    lfigfixangle /alpha exch def
  1136. X    b alpha cos mul dup mul  a alpha sin mul dup mul  add sqrt /denom exch def
  1137. X    a b mul alpha cos mul denom div
  1138. X    a b mul alpha sin mul denom div
  1139. X  end
  1140. X  % (Leaving lfigellipsecircum) lfigdebugprint
  1141. X} def
  1142. X
  1143. X% find point of intersection of two lines each defined by two points
  1144. X% x1 y1 x2 y2  x3 y3 x4 y4  lfiglineintersect x y
  1145. X/lfiglineintersect
  1146. X{
  1147. X  % (Entering lfiglineintersect) lfigdebugprint
  1148. X  13 dict begin
  1149. X    /y4 exch def
  1150. X    /x4 exch def
  1151. X    /y3 exch def
  1152. X    /x3 exch def
  1153. X    /y2 exch def
  1154. X    /x2 exch def
  1155. X    /y1 exch def
  1156. X    /x1 exch def
  1157. X    x2 x1 sub /x21 exch def
  1158. X    x4 x3 sub /x43 exch def
  1159. X    y2 y1 sub /y21 exch def
  1160. X    y4 y3 sub /y43 exch def
  1161. X    y21 x43 mul y43 x21 mul sub /det exch def
  1162. X  
  1163. X    % calculate x 
  1164. X    y21 x43 mul x1 mul
  1165. X    y43 x21 mul x3 mul sub
  1166. X    y3 y1 sub x21 mul x43 mul add
  1167. X    det div
  1168. X
  1169. X    % calculate y
  1170. X    x21 y43 mul y1 mul
  1171. X    x43 y21 mul y3 mul sub
  1172. X    x3 x1 sub y21 mul y43 mul add
  1173. X    det neg div
  1174. X
  1175. X  end
  1176. X  % (Leaving lfiglineintersect) lfigdebugprint
  1177. X} def
  1178. X
  1179. X% find point on circumference of polygon
  1180. X% alpha radius num theta lfigpolycircum x y
  1181. X/lfigpolycircum
  1182. X{
  1183. X  % (Entering lfigpolycircum) lfigdebugprint
  1184. X  13 dict begin
  1185. X    /theta exch def
  1186. X    /num exch def
  1187. X    /radius exch def
  1188. X    /alpha exch def
  1189. X
  1190. X    % calculate delta, the angle from theta to alpha
  1191. X    alpha theta sub lfigfixangle
  1192. X
  1193. X    % calculate the angle which is the multiple of 360/num closest to delta
  1194. X    360 num div div truncate 360 num div mul theta add /anglea exch def
  1195. X
  1196. X    % calculate the next multiple of 360/num after anglea
  1197. X    anglea 360 num div add /angleb exch def
  1198. X
  1199. X    % intersect the line through these two points with the alpha line
  1200. X    anglea cos anglea sin  angleb cos angleb sin
  1201. X    0 0  alpha cos 2 mul alpha sin 2 mul
  1202. X    lfiglineintersect radius lfigpmul
  1203. X
  1204. X  end
  1205. X  % (Leaving lfigpolycircum) lfigdebugprint
  1206. X} def
  1207. X
  1208. X% add CIRCUM operator with this body:  <array> lfigcircumdef -
  1209. X/lfigcircumdef
  1210. X{   % (Entering lfigcircumdef) lfigdebugprint
  1211. X    /CIRCUM exch cvx
  1212. X    currentdict end
  1213. X    3 1 roll
  1214. X    % currentdict length currentdict maxlength lt
  1215. X    % { def }
  1216. X    % { exec moveto (too many labels) show stop }
  1217. X    % ifelse
  1218. X    def
  1219. X    begin
  1220. X    % (Leaving lfigcircumdef) lfigdebugprint
  1221. X} def
  1222. X
  1223. Xend
  1224. X%%EndResource
  1225. X
  1226. X%%EndProlog
  1227. X
  1228. X%%Page: ? 1
  1229. X%%BeginPageSetup
  1230. X/pgsave save def
  1231. X0.0500 dup scale 10 setlinewidth
  1232. X%%EndPageSetup
  1233. X
  1234. X240 fnt36
  1235. X3365 13817 moveto(Eq)s 3718 x(\211)s 3898 x(A)s 4131 x(Lout)s 4683 x(Package)s
  1236. X5594 x(for)s 5959 x(Typesetting)s 7214 x(Mathematics)s 
  1237. X240 fnt35
  1238. X5020 13243 moveto(Jeffrey)s 5729 x(H.)s
  1239. X6022 x(Kingston)s 
  1240. X240 fnt34
  1241. X4001 12671 moveto(Basser)s 4698 x(Department)s 5886 x(of)s 6145 x(Computer)s
  1242. X7162 x(Science)s 4659 12383 moveto(University)s 5728 x(of)s 5987 x(Sydney)s 6766 x(2006)s
  1243. X5515 12095 moveto(Australia)s 
  1244. X240 fnt35
  1245. X5388 11211 moveto(ABSTRACT)s 
  1246. X240 fnt34
  1247. X2137 10755 moveto(This)s 2660 x(report)s 3328 x(describes)s
  1248. X4315 x(the)s 4705 x(use)s 5122 x(of)s 5419 x(Eq,)s 5843 x(a)s
  1249. X6047 x(package)s 6929 x(of)s 7226 x(de\207nitions)s 8334 x(for)s 8710 x(typesetting)s
  1250. X2137 10467 moveto(mathematics)s 3404 x(with)s 3889 x(the)s 4241 x(Lout)s 4753 x(document)s
  1251. X5757 x(formatter.)s 6824 x(For)s 7216 x(example,)s 
  1252. X220 fnt13
  1253. X2617 9966 moveto(@Eq { big int supp 1 on 0 ` dx over sqrt {1 - x sup 2} = pi over 2 })s 
  1254. X240 fnt34
  1255. X2137 9467 moveto(produces)s
  1256. X3061 x(the)s 3413 x(output)s gsave
  1257. X2617 8851 translate
  1258. X-180.0000 rotate
  1259. Xgsave
  1260. X0 -206 translate
  1261. X180.0000 rotate
  1262. X
  1263. X404 fnt33
  1264. X0 -370 moveto(\362)s 
  1265. Xgrestore
  1266. X
  1267. Xgrestore
  1268. X
  1269. X404 fnt33
  1270. X2617 8688 moveto(\362)s 
  1271. X167 fnt33
  1272. X2727 9016 moveto(1)s
  1273. X2727 8604 moveto(0)s 
  1274. X240 fnt35
  1275. X3104 8902 moveto(dx)s gsave
  1276. X2853 8851 translate
  1277. X728 0 0 0 240 288 0 LoutGraphic
  1278. Xgsave
  1279. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  1280. Xgrestore
  1281. X
  1282. Xgrestore
  1283. Xgsave
  1284. X0 8584 translate
  1285. X1.0000 1.3712 scale
  1286. X
  1287. X240 fnt33
  1288. X2853 -60 moveto(\326)s 
  1289. Xgrestore
  1290. Xgsave
  1291. X2984 8803 translate
  1292. X597 0 0 0 240 288 0 LoutGraphic
  1293. Xgsave
  1294. X0 0 moveto xsize 0 lineto 0.03 ft setlinewidth 2 setlinecap stroke
  1295. Xgrestore
  1296. X
  1297. Xgrestore
  1298. X
  1299. X240 fnt33
  1300. X3027 8532 moveto(1)s 3204 x(-)s
  1301. X
  1302. X167 fnt33
  1303. X3498 8647 moveto(2)s 
  1304. X240 fnt35
  1305. X3392 8539 moveto(x)s 
  1306. X240 fnt33
  1307. X3653 8791 moveto(=)s 3856 8903 moveto(p)s gsave
  1308. X3856 8851 translate
  1309. X131 0 0 0 240 288 0 LoutGraphic
  1310. Xgsave
  1311. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  1312. Xgrestore
  1313. X
  1314. Xgrestore
  1315. X
  1316. X240 fnt33
  1317. X3861 8639 moveto(2)s
  1318. X
  1319. X240 fnt34
  1320. X2137 8039 moveto(The)s 2568 x(advantages)s 3690 x(of)s 3948 x(Eq)s 4273 x(include)s
  1321. X5036 x(careful)s 5757 x(attention)s 6652 x(to)s 6897 x(details)s 7579 x(of)s
  1322. X7837 x(spacing,)s 8687 x(a)s 8852 x(repertoire)s 2137 7751 moveto(of)s 2382 x(several)s
  1323. X3104 x(hundred)s 3935 x(mathematical)s 5267 x(symbols,)s 6171 x(a)s 6323 x(simple)s
  1324. X7006 x(syntax)s 7677 x(extensible)s 8692 x(by)s 8978 x(the)s 9316 x(user,)s
  1325. X2137 7463 moveto(and)s 2543 x(complete)s 3479 x(integration)s 4574 x(with)s 5059 x(the)s
  1326. X5411 x(rest)s 5815 x(of)s 6074 x(Lout.)s 2617 7089 moveto(In)s 2898 x(addition,)s
  1327. X3824 x(this)s 4251 x(report)s 4903 x(contains)s 5782 x(an)s 6090 x(appendix)s
  1328. X7050 x(describing)s 8128 x(the)s 8502 x(use)s 8903 x(of)s 9184 x(Pas,)s
  1329. X9658 x(a)s 2137 6801 moveto(package)s 2981 x(of)s 3240 x(de\207nitions)s 4310 x(for)s
  1330. X4648 x(printing)s 5465 x(Pascal)s 6135 x(programs.)s 1417 5147 moveto(22)s 1717 x(December,)s
  1331. X2819 x(1992)s 
  1332. Xpgsave restore
  1333. Xshowpage
  1334. X
  1335. X%%Page: ? 2
  1336. X%%BeginPageSetup
  1337. X/pgsave save def
  1338. X0.0500 dup scale 10 setlinewidth
  1339. X%%EndPageSetup
  1340. X
  1341. X240 fnt36
  1342. X3365 14537 moveto(Eq)s 3718 x(\211)s 3898 x(A)s 4131 x(Lout)s 4683 x(Package)s
  1343. X5594 x(for)s 5959 x(Typesetting)s 7214 x(Mathematics)s 
  1344. X240 fnt35
  1345. X5020 13963 moveto(Jeffrey)s 5729 x(H.)s
  1346. X6022 x(Kingston)s 
  1347. X240 fnt34
  1348. X4001 13391 moveto(Basser)s 4698 x(Department)s 5886 x(of)s 6145 x(Computer)s
  1349. X7162 x(Science)s 4659 13103 moveto(University)s 5728 x(of)s 5987 x(Sydney)s 6766 x(2006)s
  1350. X5515 12815 moveto(Australia)s 
  1351. X240 fnt36
  1352. X1417 12222 moveto(1.)s 1717 x(Introduction)s 
  1353. X240 fnt34
  1354. X1897 11791 moveto(Eq)s 2205 x(is)s
  1355. X2406 x(a)s 2554 x(package)s 3380 x(of)s 3621 x(de\207nitions)s 4673 x(for)s
  1356. X4993 x(typesetting)s 6084 x(mathematics)s 7333 x(with)s 7800 x(the)s 8134 x(Lout)s
  1357. X8628 x(document)s 9614 x(formatter)s 1417 11503 moveto([)s 1496 x(4)s 1616 x(].)s
  1358. X1874 x(It)s 2078 x(includes)s 2934 x(several)s 3669 x(hundred)s 4513 x(mathematical)s
  1359. X5858 x(and)s 6263 x(other)s 6813 x(special)s 7535 x(characters)s 8561 x(\(including)s
  1360. X9603 x(the)s 9954 x(entire)s 1417 11215 moveto(PostScript)s 
  1361. X153 fnt34
  1362. X2399 11320 moveto(1)s 
  1363. X240 fnt34
  1364. X2545 11215 moveto(Symbol)s
  1365. X3360 x(font)s 3815 x([)s 3894 x(1)s 4014 x(]\),)s 4302 x(and)s
  1366. X4718 x(a)s 4894 x(smaller)s 5666 x(number)s 6467 x(of)s 6736 x(symbols)s
  1367. X7604 x(for)s 7952 x(joining)s 8700 x(objects)s 9447 x(together)s 10300 x(in)s
  1368. X1417 10927 moveto(mathematical)s 2753 x(ways.)s 3415 x(Eq)s 3731 x(is)s 3940 x(based)s
  1369. X4535 x(on)s 4825 x(the)s 5167 x(eqn)s 5563 x(language)s 6477 x(of)s
  1370. X6726 x(Kernighan)s 7786 x(and)s 8182 x(Cherry)s 8896 x([)s 8975 x(3)s
  1371. X9095 x(],)s 9284 x(with)s 9759 x(spacing)s 1417 10639 moveto(rules)s 1941 x(similar)s
  1372. X2663 x(to)s 2909 x(Knuth's)s 3740 x(T)s 3886 10591 moveto(E)s 4032 10639 moveto(X)s
  1373. X4265 x(formatter)s 5212 x([)s 5291 x(6)s 5411 x(].)s 1897 10265 moveto(To)s
  1374. X2226 x(use)s 2608 x(Eq)s 2937 x(in)s 3186 x(a)s 3355 x(Lout)s
  1375. X3870 x(document,)s 4937 x(\207rst)s 5371 x(ensure)s 6058 x(that)s 6479 x(its)s
  1376. X6767 x(de\207nition)s 7747 x(is)s 7969 x(included,)s 8916 x(either)s 9522 x(by)s
  1377. X9825 x(having)s 
  1378. X220 fnt13
  1379. X1417 9973 moveto(@SysInclude { eq })s 
  1380. X240 fnt34
  1381. X3367 9977 moveto(in)s 3634 x(the)s 4007 x(setup)s
  1382. X4593 x(\207le,)s 5039 x(or)s 
  1383. X220 fnt13
  1384. X5319 9973 moveto(-ieq)s 
  1385. X240 fnt34
  1386. X5765 9977 moveto(on)s 6086 x(the)s
  1387. X6459 x(command)s 7484 x(line.)s 8043 x(Then,)s 8676 x(at)s 8929 x(any)s
  1388. X9356 x(point)s 9929 x(in)s 10196 x(the)s 1417 9689 moveto(document,)s 2479 x(write)s
  1389. X
  1390. X220 fnt13
  1391. X3027 9685 moveto(@Eq  {  ...  })s 
  1392. X240 fnt34
  1393. X4271 9689 moveto(and)s 4675 x(the)s 5025 x(symbols)s 5881 x(of)s
  1394. X6138 x(Eq)s 6462 x(will)s 6891 x(be)s 7175 x(available)s 8095 x(between)s
  1395. X8950 x(the)s 9300 x(braces.)s 10088 x(Any)s 1417 9401 moveto(symbols)s 2290 x(available)s
  1396. X3227 x(outside)s 3993 x(continue)s 4892 x(to)s 5153 x(be)s 5454 x(available)s
  1397. X6391 x(inside,)s 7097 x(which)s 7757 x(means)s 8443 x(that)s 8876 x(Eq)s
  1398. X9217 x(can)s 9624 x(be)s 9925 x(freely)s 1417 9113 moveto(mixed)s 2075 x(with)s
  1399. X2560 x(standard)s 3430 x(Lout)s 3942 x(and)s 4348 x(with)s 4833 x(symbols)s
  1400. X5691 x(from)s 6215 x(other)s 6766 x(packages,)s 7763 x(without)s 8554 x(restriction.)s
  1401. X1897 8739 moveto(In)s 2156 x(this)s 2561 x(report)s 3191 x(we)s 3530 x(show)s
  1402. X4096 x(the)s 4448 x(Lout)s 4960 x(input)s 5512 x(at)s 5744 x(the)s
  1403. X6096 x(left,)s 6533 x(and)s 6939 x(its)s 7224 x(result)s 7814 x(at)s
  1404. X8046 x(the)s 8398 x(right:)s 
  1405. X220 fnt13
  1406. X1897 8023 moveto(@Eq { {x sup 2 + y sup 2} over 2 })s 
  1407. X167 fnt33
  1408. X5972 8286 moveto(2)s 
  1409. X240 fnt35
  1410. X5866 8178 moveto(x)s
  1411. X
  1412. X240 fnt33
  1413. X6112 8171 moveto(+)s 
  1414. X167 fnt33
  1415. X6406 8286 moveto(2)s 
  1416. X240 fnt35
  1417. X6300 8178 moveto(y)s gsave
  1418. X5866 8080 translate
  1419. X623 0 0 0 240 288 0 LoutGraphic
  1420. Xgsave
  1421. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  1422. Xgrestore
  1423. X
  1424. Xgrestore
  1425. X
  1426. X240 fnt33
  1427. X6117 7868 moveto(2)s 
  1428. X240 fnt34
  1429. X1417 7418 moveto(Subsequent)s
  1430. X2581 x(examples)s 3544 x(will)s 3975 x(omit)s 4473 x(the)s 4825 x(enclosing)s
  1431. X
  1432. X220 fnt13
  1433. X5802 7414 moveto(@Eq { ... })s 
  1434. X240 fnt34
  1435. X6805 7418 moveto(.)s 
  1436. X240 fnt36
  1437. X1417 6625 moveto(2.)s 1717 x(Symbols)s 
  1438. X240 fnt34
  1439. X1897 6147 moveto(Eq)s
  1440. X2223 x(prints)s 2827 x(characters)s 3854 x(in)s 4100 x(the)s 4452 x(fonts)s
  1441. X4990 x(appropriate)s 6138 x(for)s 6476 x(mathematics:)s 
  1442. X220 fnt13
  1443. X1897 5646 moveto(x - 2)s 
  1444. X240 fnt35
  1445. X5866 5650 moveto(x)s
  1446. X
  1447. X240 fnt33
  1448. X6029 5643 moveto(-)s 6217 x(2)s 
  1449. X240 fnt34
  1450. X1417 5192 moveto(Here)s 
  1451. X240 fnt35
  1452. X1923 x(x)s 
  1453. X240 fnt34
  1454. X2071 x(is)s
  1455. X2272 x(in)s 2500 x(Italic,)s 
  1456. X240 fnt33
  1457. X3091 5185 moveto(2)s 
  1458. X240 fnt34
  1459. X3253 5192 moveto(is)s 3454 x(in)s
  1460. X3682 x(Roman,)s 4476 x(and)s 
  1461. X240 fnt33
  1462. X4864 5185 moveto(-)s 
  1463. X240 fnt34
  1464. X5037 5192 moveto(is)s 5238 x(from)s
  1465. X5744 x(the)s 6078 x(Symbol)s 6865 x(font.)s 7412 x(The)s 7826 x(character)s
  1466. X
  1467. X220 fnt13
  1468. X8742 5188 moveto(-)s 
  1469. X240 fnt34
  1470. X8857 5192 moveto(is)s 9058 x(a)s 
  1471. X240 fnt35
  1472. X9206 x(symbol)s 
  1473. X240 fnt34
  1474. X9926 x(which)s
  1475. X1417 4904 moveto(stands)s 2075 x(for)s 
  1476. X240 fnt33
  1477. X2413 4897 moveto(-)s 
  1478. X240 fnt34
  1479. X2544 4904 moveto(,)s 2664 x(and)s
  1480. X
  1481. X220 fnt13
  1482. X3070 4900 moveto(2)s 
  1483. X240 fnt34
  1484. X3252 4904 moveto(is)s 3471 x(also)s 3916 x(a)s 4082 x(symbol,)s
  1485. X4907 x(standing)s 5778 x(for)s 
  1486. X240 fnt33
  1487. X6116 4897 moveto(2)s 
  1488. X240 fnt34
  1489. X6236 4904 moveto(.)s 6416 x(Eq)s
  1490. X6742 x(includes)s 7599 x(a)s 7765 x(vast)s 8210 x(number)s 9001 x(of)s
  1491. X9260 x(symbols:)s 
  1492. X220 fnt13
  1493. X1897 4348 moveto(Omega delta int partial club)s 
  1494. X240 fnt33
  1495. X5866 4345 moveto(W)s 6050 x(d)s gsave
  1496. X6168 4405 translate
  1497. X-180.0000 rotate
  1498. Xgsave
  1499. X0 -159 translate
  1500. X180.0000 rotate
  1501. X
  1502. X311 fnt33
  1503. X0 -284 moveto(\362)s
  1504. X
  1505. Xgrestore
  1506. X
  1507. Xgrestore
  1508. X
  1509. X311 fnt33
  1510. X6168 4280 moveto(\362)s 
  1511. X240 fnt33
  1512. X6253 4345 moveto(\266)s 6371 x(\247)s 
  1513. X240 fnt34
  1514. X1417 3796 moveto(The)s 1849 x(summary)s
  1515. X2799 x(at)s 3031 x(the)s 3383 x(end)s 3789 x(of)s 4048 x(this)s
  1516. X4453 x(report)s 5083 x(has)s 5462 x(the)s 5814 x(complete)s 6750 x(list.)s
  1517. X1897 3422 moveto(Symbols)s 2813 x(whose)s 3503 x(names)s 4192 x(are)s 4561 x(made)s
  1518. X5157 x(from)s 5699 x(letters)s 6359 x(should)s 7076 x(be)s 7380 x(separated)s
  1519. X8360 x(from)s 8902 x(each)s 9418 x(other)s 9987 x(by)s 10305 x(at)s
  1520. X1417 3134 moveto(least)s 1914 x(one)s 2320 x(space)s 2911 x(or)s 3170 x(end)s
  1521. X3576 x(of)s 3835 x(line,)s 4313 x(as)s 4572 x(was)s 5004 x(done)s
  1522. X5530 x(above,)s 6222 x(or)s 6481 x(else)s 6912 x(Eq)s 7238 x(will)s
  1523. X7669 x(become)s 8473 x(confused:)s 
  1524. X220 fnt13
  1525. X1897 2627 moveto(Omegadelta)s 
  1526. X240 fnt35
  1527. X5866 2631 moveto(Omegadelta)s gsave
  1528. X1417 1752 translate
  1529. X680 0 0 0 240 288 60 LoutGraphic
  1530. Xgsave
  1531. X0 0 moveto xsize 0 lineto stroke
  1532. Xgrestore
  1533. X
  1534. Xgrestore
  1535. X
  1536. X153 fnt34
  1537. X1417 1536 moveto(1)s
  1538. X
  1539. X192 fnt34
  1540. X1493 1458 moveto(PostScript)s 2326 x(is)s 2501 x(a)s 2634 x(trademark)s 3457 x(of)s
  1541. X3664 x(Adobe)s 4223 x(Systems,)s 4956 x(Incorporated.)s 
  1542. Xpgsave restore
  1543. Xshowpage
  1544. X
  1545. X%%Page: ? 3
  1546. X%%BeginPageSetup
  1547. X/pgsave save def
  1548. X0.0500 dup scale 10 setlinewidth
  1549. X%%EndPageSetup
  1550. X
  1551. X240 fnt34
  1552. X5754 15261 moveto(-)s 5893 x(2)s 6073 x(-)s 1417 14674 moveto(Symbols)s 2327 x(whose)s
  1553. X3011 x(names)s 3694 x(are)s 4057 x(made)s 4647 x(from)s 5183 x(digits)s
  1554. X5786 x(and)s 6204 x(punctuation)s 7406 x(characters)s 8445 x(can,)s 8909 x(however,)s
  1555. X9865 x(be)s 10163 x(run)s 1417 14386 moveto(together)s 2260 x(with)s 2745 x(each)s
  1556. X3243 x(other)s 3794 x(and)s 4200 x(with)s 4685 x(symbols)s 5543 x(made)s
  1557. X6121 x(from)s 6645 x(letters:)s 
  1558. X220 fnt13
  1559. X1897 13872 moveto(Omega-delta<=2)s 
  1560. X240 fnt33
  1561. X5866 13869 moveto(W)s 6107 x(-)s
  1562. X6295 x(d)s 6485 x(\243)s 6688 x(2)s 
  1563. X240 fnt34
  1564. X1417 13373 moveto(This)s 1902 x(rule)s
  1565. X2333 x(applies)s 3070 x(throughout)s 4181 x(the)s 4533 x(Lout)s 5045 x(world.)s
  1566. X1897 12999 moveto(Some)s 2502 x(symbols)s 3360 x(join)s 3792 x(objects)s 4529 x(together)s
  1567. X5372 x(in)s 5618 x(mathematical)s 6964 x(ways:)s 
  1568. X220 fnt13
  1569. X1897 12500 moveto(x sub 2)s 
  1570. X240 fnt35
  1571. X5866 12504 moveto(x)s
  1572. X
  1573. X167 fnt33
  1574. X5972 12420 moveto(2)s 
  1575. X240 fnt34
  1576. X1417 11970 moveto(Here)s 1930 x(the)s 
  1577. X220 fnt13
  1578. X2271 11966 moveto(sub)s 
  1579. X240 fnt34
  1580. X2674 11970 moveto(symbol)s
  1581. X3428 x(has)s 3796 x(taken)s 4363 x(the)s 4704 x(object)s 5337 x(just)s
  1582. X5731 x(to)s 5966 x(its)s 6240 x(left,)s 6666 x(and)s 7061 x(the)s
  1583. X7402 x(object)s 8035 x(just)s 8429 x(to)s 8664 x(its)s 8938 x(right,)s
  1584. X9498 x(and)s 9893 x(joined)s 1417 11682 moveto(them)s 1972 x(into)s 2421 x(one)s
  1585. X2844 x(object)s 3505 x(in)s 3768 x(the)s 4137 x(form)s 4678 x(of)s
  1586. X4954 x(a)s 5137 x(subscript.)s 6197 x(The)s 6646 x(two)s 7082 x(objects)s
  1587. X7836 x(are)s 8204 x(called)s 8851 x(the)s 9220 x(left)s 9614 x(and)s
  1588. X10037 x(right)s 1417 11394 moveto(parameters)s 2524 x(of)s 
  1589. X220 fnt13
  1590. X2783 11390 moveto(sub)s 
  1591. X240 fnt34
  1592. X3137 11394 moveto(,)s
  1593. X3257 x(and)s 3663 x(they)s 4135 x(may)s 4607 x(be)s 4893 x(arbitrary)s
  1594. X5774 x(Lout)s 6286 x(objects.)s 1897 11020 moveto(Other)s 2499 x(symbols)s 3355 x(of)s
  1595. X3612 x(a)s 3776 x(similar)s 4496 x(kind)s 4980 x(include)s 
  1596. X220 fnt13
  1597. X5742 11016 moveto(sup)s
  1598. X
  1599. X240 fnt34
  1600. X6154 11020 moveto(for)s 6490 x(superscripting,)s 
  1601. X220 fnt13
  1602. X7962 11016 moveto(over)s 
  1603. X240 fnt34
  1604. X8447 11020 moveto(for)s 8783 x(built-up)s
  1605. X9598 x(fractions,)s 1417 10732 moveto(and)s 
  1606. X220 fnt13
  1607. X1831 10728 moveto(from)s 
  1608. X240 fnt34
  1609. X2338 10732 moveto(and)s 
  1610. X220 fnt13
  1611. X2752 10728 moveto(to)s
  1612. X
  1613. X240 fnt34
  1614. X3003 10732 moveto(for)s 3349 x(the)s 3709 x(lower)s 4321 x(and)s 4735 x(upper)s
  1615. X5348 x(limits)s 5959 x(of)s 6226 x(sums,)s 6846 x(products,)s 7798 x(etc.)s
  1616. X8264 x(These)s 8903 x(symbols)s 9769 x(may)s 10249 x(be)s 1417 10444 moveto(used)s
  1617. X1916 x(together)s 2759 x(to)s 3005 x(produce)s 3836 x(complicated)s 5064 x(equations)s
  1618. X6041 x(with)s 6526 x(astonishing)s 7676 x(ease:)s 
  1619. X220 fnt13
  1620. X1897 9944 moveto(big sum from i=0 to n r sup i)s 1897 9656 moveto(= {r sup n+1 - 1} over r-1)s
  1621. X
  1622. X167 fnt35
  1623. X5942 10030 moveto(n)s 
  1624. X311 fnt33
  1625. X5873 9753 moveto(\345)s 
  1626. X167 fnt35
  1627. X5866 9567 moveto(i)s 
  1628. X167 fnt33
  1629. X5920 9563 moveto(=)s 6019 x(0)s
  1630. X
  1631. X167 fnt35
  1632. X6195 9889 moveto(i)s 
  1633. X240 fnt35
  1634. X6102 9777 moveto(r)s 
  1635. X240 fnt33
  1636. X6313 9770 moveto(=)s 
  1637. X167 fnt35
  1638. X6609 9997 moveto(n)s 
  1639. X167 fnt33
  1640. X6698 9993 moveto(+)s
  1641. X6795 x(1)s 
  1642. X240 fnt35
  1643. X6516 9885 moveto(r)s 
  1644. X240 fnt33
  1645. X6935 9878 moveto(-)s 7123 x(1)s gsave
  1646. X6516 9830 translate
  1647. X727 0 0 0 240 288 0 LoutGraphic
  1648. Xgsave
  1649. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  1650. Xgrestore
  1651. X
  1652. Xgrestore
  1653. X
  1654. X240 fnt35
  1655. X6650 9628 moveto(r)s
  1656. X
  1657. X240 fnt33
  1658. X6800 9621 moveto(-)s 6988 x(1)s 
  1659. X240 fnt34
  1660. X1417 9099 moveto(Here)s 
  1661. X220 fnt13
  1662. X1937 9095 moveto(sum)s 
  1663. X240 fnt34
  1664. X2408 9099 moveto(is)s
  1665. X2623 x(just)s 3024 x(the)s 
  1666. X240 fnt33
  1667. X3372 9092 moveto(\345)s 
  1668. X240 fnt34
  1669. X3599 9099 moveto(symbol;)s 
  1670. X220 fnt13
  1671. X4426 9095 moveto(from)s
  1672. X
  1673. X240 fnt34
  1674. X4921 9099 moveto(and)s 
  1675. X220 fnt13
  1676. X5323 9095 moveto(to)s 
  1677. X240 fnt34
  1678. X5562 9099 moveto(do)s 5858 x(all)s 6152 x(the)s
  1679. X6500 x(work)s 7048 x(of)s 7303 x(placing)s 8063 x(the)s 8411 x(limits.)s
  1680. X9130 x(They)s 9678 x(are)s 10025 x(quite)s 1417 8811 moveto(independent,)s 2718 x(so)s
  1681. X3002 x(either)s 3616 x(or)s 3886 x(both)s 4383 x(may)s 4866 x(be)s
  1682. X5163 x(omitted.)s 6084 x(To)s 6421 x(get)s 6784 x(a)s 6961 x(superscript)s
  1683. X8080 x(directly)s 8880 x(over)s 9376 x(a)s 9553 x(subscript,)s 1417 8523 moveto(use)s
  1684. X1796 x(the)s 
  1685. X220 fnt13
  1686. X2148 8519 moveto(supp)s 
  1687. X240 fnt34
  1688. X2684 8523 moveto(and)s 
  1689. X220 fnt13
  1690. X3090 8519 moveto(on)s 
  1691. X240 fnt34
  1692. X3394 8523 moveto(symbols:)s
  1693. X
  1694. X220 fnt13
  1695. X1897 7947 moveto(A supp 2 on 1)s 
  1696. X240 fnt35
  1697. X5866 7951 moveto(A)s 
  1698. X167 fnt33
  1699. X6012 8070 moveto(2)s 6012 7867 moveto(1)s 
  1700. X240 fnt34
  1701. X1417 7417 moveto(These)s
  1702. X2048 x(two)s 2467 x(symbols)s 3325 x(should)s 4024 x(always)s 4748 x(be)s
  1703. X5034 x(used)s 5533 x(together)s 6376 x(as)s 6635 x(shown.)s 1897 7043 moveto(As)s
  1704. X2230 x(usual)s 2802 x(in)s 3055 x(Lout,)s 3634 x(braces)s 4311 x(are)s
  1705. X4669 x(used)s 5175 x(to)s 5428 x(group)s 6054 x(something)s 7118 x(into)s
  1706. X7557 x(an)s 7850 x(indivisible)s 8926 x(object.)s 9697 x(Leaving)s 1417 6755 moveto(them)s
  1707. X1955 x(out)s 2321 x(creates)s 3043 x(ambiguities:)s 
  1708. X220 fnt13
  1709. X1897 6256 moveto(a  sup  b  over  c)s 
  1710. X240 fnt34
  1711. X1417 5758 moveto(There)s
  1712. X2034 x(are)s 2385 x(two)s 2804 x(possible)s 3648 x(interpretations)s 5087 x(for)s
  1713. X5425 x(this:)s 
  1714. X220 fnt13
  1715. X1897 5085 moveto({a  sup  b}  over  c)s 
  1716. X167 fnt35
  1717. X5986 5305 moveto(b)s 
  1718. X240 fnt35
  1719. X5866 5193 moveto(a)s gsave
  1720. X5866 5142 translate
  1721. X203 0 0 0 240 288 0 LoutGraphic
  1722. Xgsave
  1723. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  1724. Xgrestore
  1725. X
  1726. Xgrestore
  1727. X
  1728. X240 fnt35
  1729. X5914 4988 moveto(c)s
  1730. X
  1731. X220 fnt13
  1732. X1897 4383 moveto(a  sup  {b  over  c})s 
  1733. X167 fnt35
  1734. X5986 4584 moveto(b)s gsave
  1735. X5986 4549 translate
  1736. X83 0 0 0 167 33 0 LoutGraphic
  1737. Xgsave
  1738. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  1739. Xgrestore
  1740. X
  1741. Xgrestore
  1742. X
  1743. X167 fnt35
  1744. X5990 4442 moveto(c)s 
  1745. X240 fnt35
  1746. X5866 4387 moveto(a)s 
  1747. X240 fnt34
  1748. X1417 3885 moveto(Eq)s
  1749. X1746 x(chooses)s 2567 x(between)s 3427 x(them)s 3968 x(in)s 4217 x(the)s
  1750. X4572 x(following)s 5565 x(way.)s 6147 x(Every)s 6781 x(symbol)s 7549 x(that)s
  1751. X7970 x(takes)s 8524 x(a)s 8693 x(parameter)s 9710 x(also)s 10158 x(has)s
  1752. X1417 3597 moveto(a)s 
  1753. X240 fnt35
  1754. X1574 x(precedence)s 
  1755. X240 fnt34
  1756. X2663 x(,)s 2774 x(which)s 3410 x(is)s
  1757. X3620 x(a)s 3777 x(number.)s 4679 x(For)s 5062 x(example,)s 
  1758. X220 fnt13
  1759. X5983 3593 moveto(sup)s
  1760. X
  1761. X240 fnt34
  1762. X6388 3597 moveto(has)s 6758 x(precedence)s 7884 x(60)s 8175 x(and)s 
  1763. X220 fnt13
  1764. X8572 3593 moveto(over)s
  1765. X
  1766. X240 fnt34
  1767. X9050 3597 moveto(has)s 9420 x(precedence)s 1417 3309 moveto(54.)s 1823 x(The)s 2241 x(symbol)s
  1768. X2992 x(with)s 3463 x(the)s 3801 x(highest)s 4538 x(precedence)s 5659 x(wins)s
  1769. X6157 x(the)s 6495 x(object)s 7125 x(lying)s 7663 x(between)s 8506 x(them,)s
  1770. X9090 x(so)s 9349 x(in)s 9581 x(the)s 9919 x(above)s 1417 3021 moveto(case)s
  1771. X1875 x(the)s 2214 x(\207rst)s 2632 x(interpretation)s 3965 x(is)s 4171 x(chosen.)s
  1772. X5003 x(If)s 5208 x(two)s 5614 x(symbols)s 6459 x(of)s 6705 x(equal)s
  1773. X7270 x(precedence)s 8392 x(compete)s 9249 x(for)s 9574 x(an)s 9847 x(object,)s
  1774. X1417 2733 moveto(the)s 1769 x(association)s 2891 x(is)s 3110 x(towards)s 3927 x(the)s
  1775. X4279 x(left:)s 
  1776. X220 fnt13
  1777. X1897 2212 moveto(a sup b sub 2)s 
  1778. X167 fnt35
  1779. X5986 2328 moveto(b)s 
  1780. X240 fnt35
  1781. X5866 2216 moveto(a)s 
  1782. X167 fnt33
  1783. X6069 2132 moveto(2)s
  1784. X
  1785. X240 fnt34
  1786. X1417 1682 moveto(In)s 1676 x(this)s 2081 x(case)s 2552 x(it)s 2744 x(is)s
  1787. X2963 x(more)s 3514 x(probable)s 4411 x(that)s 4829 x(the)s 5181 x(following)s
  1788. X6171 x(right)s 6682 x(association)s 7804 x(was)s 8236 x(actually)s 9052 x(wanted:)s
  1789. X
  1790. Xpgsave restore
  1791. Xshowpage
  1792. X
  1793. X%%Page: ? 4
  1794. X%%BeginPageSetup
  1795. X/pgsave save def
  1796. X0.0500 dup scale 10 setlinewidth
  1797. X%%EndPageSetup
  1798. X
  1799. X240 fnt34
  1800. X5754 15261 moveto(-)s 5893 x(3)s 6073 x(-)s 
  1801. X220 fnt13
  1802. X1897 14603 moveto(a sup { b sub 2 })s 
  1803. X167 fnt35
  1804. X5986 14719 moveto(b)s
  1805. X
  1806. X116 fnt33
  1807. X6069 14661 moveto(2)s 
  1808. X240 fnt35
  1809. X5866 14607 moveto(a)s 
  1810. X240 fnt34
  1811. X1897 13840 moveto(White)s 2549 x(space)s 3148 x(between)s
  1812. X4013 x(two)s 4440 x(objects)s 5185 x(is)s 5412 x(considered)s 6516 x(to)s
  1813. X6770 x(be)s 7064 x(a)s 7238 x(symbol)s 8011 x(with)s 8504 x(precedence)s
  1814. X9647 x(7,)s 9895 x(which)s 1417 13552 moveto(is)s 1636 x(lower)s 2240 x(than)s
  1815. X2712 x(the)s 3064 x(precedence)s 4199 x(of)s 4458 x(any)s 4864 x(Eq)s
  1816. X5190 x(symbol;)s 6021 x(but)s 6387 x(if)s 6592 x(the)s 6944 x(two)s
  1817. X7363 x(objects)s 8100 x(are)s 8451 x(immediately)s 9705 x(adjacent)s 1417 13264 moveto(the)s
  1818. X1774 x(precedence)s 2914 x(is)s 3138 x(102,)s 3623 x(which)s 4273 x(is)s
  1819. X4497 x(higher)s 5173 x(than)s 5650 x(the)s 6007 x(precedence)s 7147 x(of)s
  1820. X7411 x(any)s 7822 x(Eq)s 8153 x(symbol.)s 9043 x(Compare)s 9985 x(these)s
  1821. X1417 12976 moveto(three)s 1954 x(examples:)s 
  1822. X220 fnt13
  1823. X1897 12305 moveto(big sum from i=0 to n)s 
  1824. X167 fnt35
  1825. X5942 12562 moveto(n)s 
  1826. X311 fnt33
  1827. X5873 12285 moveto(\345)s
  1828. X
  1829. X167 fnt35
  1830. X5866 12099 moveto(i)s 
  1831. X167 fnt33
  1832. X5920 12095 moveto(=)s 6019 x(0)s 
  1833. X220 fnt13
  1834. X1897 11473 moveto(big sum from {i = 0} to n)s 
  1835. X167 fnt35
  1836. X5942 11730 moveto(n)s
  1837. X
  1838. X311 fnt33
  1839. X5873 11453 moveto(\345)s 
  1840. X167 fnt35
  1841. X5866 11267 moveto(i)s 
  1842. X167 fnt33
  1843. X5920 11263 moveto(=)s 6019 x(0)s 
  1844. X220 fnt13
  1845. X1897 10693 moveto(big sum from i = 0 to n)s
  1846. X
  1847. X311 fnt33
  1848. X5866 10673 moveto(\345)s 
  1849. X167 fnt35
  1850. X5953 10487 moveto(i)s 
  1851. X240 fnt33
  1852. X6159 10690 moveto(=)s 
  1853. X167 fnt35
  1854. X6380 10898 moveto(n)s 
  1855. X240 fnt33
  1856. X6362 10690 moveto(0)s
  1857. X
  1858. X240 fnt34
  1859. X1417 10036 moveto(and)s 1824 x(you)s 2245 x(will)s 2677 x(see)s 3043 x(that)s
  1860. X3462 x(some)s 4028 x(care)s 4486 x(is)s 4706 x(needed)s 5445 x(on)s
  1861. X5746 x(this)s 6152 x(point.)s 6825 x(Braces)s 7536 x(can)s 7929 x(always)s
  1862. X8654 x(be)s 8941 x(used)s 9441 x(to)s 9688 x(override)s 1417 9748 moveto(precedence)s
  1863. X2554 x(and)s 2962 x(associativity,)s 4278 x(and)s 4686 x(when)s 5267 x(in)s
  1864. X5515 x(doubt)s 6123 x(the)s 6477 x(easiest)s 7175 x(course)s 7861 x(is)s
  1865. X8082 x(to)s 8330 x(insert)s 8922 x(them.)s 9582 x(Although)s 1417 9460 moveto(Lout)s
  1866. X1980 x(allows)s 2715 x(symbols)s 3624 x(to)s 3921 x(as)s 4120 x(so)s
  1867. X4333 x(ciate)s 4894 x(towards)s 5762 x(the)s 6165 x(left)s 6593 x(or)s
  1868. X6903 x(right,)s 7525 x(Eq)s 7902 x(chooses)s 8771 x(to)s 9068 x(have)s
  1869. X9631 x(only)s 10168 x(left)s 1417 9172 moveto(associative)s 2559 x(symbols.)s 3571 x(The)s
  1870. X4037 x(summary)s 5021 x(at)s 5287 x(the)s 5673 x(end)s 6113 x(of)s
  1871. X6406 x(this)s 6845 x(report)s 7509 x(gives)s 8108 x(the)s 8494 x(precedence)s
  1872. X9663 x(of)s 9956 x(every)s 1417 8884 moveto(symbol.)s 1897 8510 moveto(The)s 
  1873. X240 fnt35
  1874. X2329 x(matrix)s
  1875. X
  1876. X240 fnt34
  1877. X3013 x(symbol)s 3778 x(builds)s 4423 x(an)s 4709 x(array)s 5259 x(of)s
  1878. X5518 x(objects:)s 
  1879. X220 fnt13
  1880. X1897 8011 moveto(matrix)s 1897 7723 moveto(   atleft { blpar })s 1897 7435 moveto(   atright { brpar })s 1897 7147 moveto({ x sup 2 above x above 1)s
  1881. X1897 6859 moveto(  nextcol)s 1897 6571 moveto(  y sup 2 above y above 1)s 1897 6283 moveto(  nextcol)s 1897 5995 moveto(  z sup 2 above z above 1)s 1897 5707 moveto(})s
  1882. Xgsave
  1883. X5866 7699 translate
  1884. X-180.0000 rotate
  1885. Xgsave
  1886. X0 -471 translate
  1887. X180.0000 rotate
  1888. Xgsave
  1889. X0 -517 translate
  1890. X1.0000 1.1404 scale
  1891. X
  1892. X240 fnt33
  1893. X0 232 moveto(\346)s 0 -60 moveto(\347)s 0 -302 moveto(\350)s 
  1894. Xgrestore
  1895. X
  1896. X167 fnt33
  1897. X241 -170 moveto(2)s 
  1898. X240 fnt35
  1899. X135 -278 moveto(x)s
  1900. X193 -554 moveto(x)s 
  1901. X240 fnt33
  1902. X186 -885 moveto(1)s 
  1903. X167 fnt33
  1904. X622 -170 moveto(2)s 
  1905. X240 fnt35
  1906. X516 -278 moveto(y)s 574 -554 moveto(y)s
  1907. X
  1908. X240 fnt33
  1909. X567 -885 moveto(1)s 
  1910. X167 fnt33
  1911. X990 -170 moveto(2)s 
  1912. X240 fnt35
  1913. X897 -278 moveto(z)s 952 -554 moveto(z)s 
  1914. X240 fnt33
  1915. X939 -885 moveto(1)s
  1916. Xgsave
  1917. X0 -517 translate
  1918. X1.0000 1.1404 scale
  1919. X
  1920. X240 fnt33
  1921. X1116 232 moveto(\366)s 1116 -60 moveto(\367)s 1116 -302 moveto(\370)s 
  1922. Xgrestore
  1923. X
  1924. Xgrestore
  1925. X
  1926. Xgrestore
  1927. Xgsave
  1928. X0 7653 translate
  1929. X1.0000 1.1404 scale
  1930. X
  1931. X240 fnt33
  1932. X5866 232 moveto(\346)s 5866 -60 moveto(\347)s
  1933. X5866 -302 moveto(\350)s 
  1934. Xgrestore
  1935. X
  1936. X167 fnt33
  1937. X6107 8000 moveto(2)s 
  1938. X240 fnt35
  1939. X6001 7892 moveto(x)s 6059 7616 moveto(x)s 
  1940. X240 fnt33
  1941. X6052 7285 moveto(1)s
  1942. X
  1943. X167 fnt33
  1944. X6488 8000 moveto(2)s 
  1945. X240 fnt35
  1946. X6382 7892 moveto(y)s 6440 7616 moveto(y)s 
  1947. X240 fnt33
  1948. X6433 7285 moveto(1)s 
  1949. X167 fnt33
  1950. X6856 8000 moveto(2)s
  1951. X
  1952. X240 fnt35
  1953. X6763 7892 moveto(z)s 6818 7616 moveto(z)s 
  1954. X240 fnt33
  1955. X6805 7285 moveto(1)s gsave
  1956. X0 7653 translate
  1957. X1.0000 1.1404 scale
  1958. X
  1959. X240 fnt33
  1960. X6982 232 moveto(\366)s 6982 -60 moveto(\367)s
  1961. X6982 -302 moveto(\370)s 
  1962. Xgrestore
  1963. X
  1964. X240 fnt34
  1965. X1417 5210 moveto(The)s 
  1966. X220 fnt13
  1967. X1876 5206 moveto(atleft)s 
  1968. X240 fnt34
  1969. X2438 5210 moveto(and)s 
  1970. X220 fnt13
  1971. X2871 5206 moveto(atright)s
  1972. X
  1973. X240 fnt34
  1974. X3567 5210 moveto(options)s 4359 x(place)s 4950 x(vertically)s 5938 x(scaled)s 6622 x(versions)s
  1975. X7506 x(of)s 7792 x(their)s 8316 x(values)s 9014 x(at)s 9273 x(each)s
  1976. X9798 x(side;)s 10336 x(if)s 1417 4922 moveto(either)s 2034 x(is)s 2267 x(omitted)s
  1977. X3071 x(the)s 3437 x(value)s 4029 x(is)s 4262 x(taken)s 4854 x(to)s
  1978. X5114 x(be)s 5414 x(an)s 5714 x(empty)s 6386 x(object)s 7044 x(of)s
  1979. X7317 x(zero)s 7802 x(width)s 8421 x(by)s 8735 x(default.)s 9592 x(The)s
  1980. X10038 x(right)s 1417 4634 moveto(parameter)s 2421 x(of)s 
  1981. X220 fnt13
  1982. X2670 4630 moveto(matrix)s 
  1983. X240 fnt34
  1984. X3317 4634 moveto(is)s
  1985. X3526 x(the)s 3868 x(array)s 4408 x(itself.)s 5054 x(It)s 5249 x(is)s
  1986. X5458 x(a)s 5614 x(sequence)s 6541 x(of)s 6790 x(columns)s 7651 x(separated)s
  1987. X8603 x(by)s 
  1988. X220 fnt13
  1989. X8893 4630 moveto(nextcol)s 
  1990. X240 fnt34
  1991. X9638 4634 moveto(symbols;)s 1417 4346 moveto(each)s 1915 x(column)s
  1992. X2693 x(is)s 2912 x(a)s 3078 x(sequence)s 4015 x(of)s 4274 x(objects)s
  1993. X5011 x(separated)s 5973 x(by)s 
  1994. X220 fnt13
  1995. X6273 4342 moveto(above)s 
  1996. X240 fnt34
  1997. X6931 4346 moveto(symbols.)s 1897 3972 moveto(The)s
  1998. X
  1999. X220 fnt13
  2000. X2310 3968 moveto(nextcol)s 
  2001. X240 fnt34
  2002. X3046 3972 moveto(and)s 
  2003. X220 fnt13
  2004. X3433 3968 moveto(above)s 
  2005. X240 fnt34
  2006. X4072 3972 moveto(symbols)s 4911 x(have)s
  2007. X5404 x(low)s 5804 x(precedence,)s 6980 x(but)s 7327 x(not)s 7674 x(as)s
  2008. X7914 x(low)s 8314 x(as)s 8554 x(white)s 9126 x(space)s 9698 x(between)s
  2009. X1417 3684 moveto(two)s 1826 x(objects.)s 2673 x(Therefore,)s 3724 x(unless)s 4372 x(the)s
  2010. X4714 x(entries)s 5400 x(in)s 5636 x(the)s 5978 x(array)s 6518 x(are)s
  2011. X6859 x(very)s 7334 x(simple,)s 8081 x(it)s 8263 x(is)s 8472 x(safest)s
  2012. X9065 x(to)s 9301 x(enclose)s 10068 x(each)s 1417 3396 moveto(of)s 1676 x(them)s
  2013. X2214 x(in)s 2460 x(braces.)s 1897 3022 moveto(Columns)s 2856 x(built)s 3388 x(with)s
  2014. X3907 x(the)s 
  2015. X220 fnt13
  2016. X4293 3018 moveto(above)s 
  2017. X240 fnt34
  2018. X4985 3022 moveto(symbol)s 5784 x(have)s 6330 x(their)s
  2019. X6861 x(objects)s 7632 x(centred)s 8429 x(in)s 8709 x(the)s 9095 x(column.)s
  2020. X10027 x(Also)s 1417 2734 moveto(available)s 2343 x(are)s 
  2021. X220 fnt13
  2022. X2698 2730 moveto(labove)s 
  2023. X240 fnt34
  2024. X3408 2734 moveto(for)s
  2025. X3750 x(left-justi\207ed)s 4980 x(columns,)s 
  2026. X220 fnt13
  2027. X5915 2730 moveto(cabove)s 
  2028. X240 fnt34
  2029. X6687 2734 moveto(meaning)s 7575 x(the)s
  2030. X7931 x(same)s 8486 x(as)s 
  2031. X220 fnt13
  2032. X8749 2730 moveto(above)s 
  2033. X240 fnt34
  2034. X9347 2734 moveto(,)s 
  2035. X220 fnt13
  2036. X9471 2730 moveto(rabove)s
  2037. X
  2038. X240 fnt34
  2039. X10206 2734 moveto(for)s 1417 2446 moveto(right-justi\207ed)s 2785 x(columns,)s 3724 x(and)s 
  2040. X220 fnt13
  2041. X4138 2442 moveto(mabove)s
  2042. X
  2043. X240 fnt34
  2044. X4987 2446 moveto(for)s 5333 x(alignment)s 6357 x(along)s 6957 x(column)s 7743 x(marks.)s
  2045. X8515 x(Each)s 9061 x(column)s 9847 x(should)s 1417 2158 moveto(contain)s 2182 x(only)s
  2046. X2669 x(one)s 3076 x(kind)s 3563 x(of)s 
  2047. X220 fnt13
  2048. X3823 2154 moveto(above)s 
  2049. X240 fnt34
  2050. X4482 2158 moveto(symbol)s
  2051. X5248 x(\(although)s 6226 x(adventurous)s 7457 x(users)s 8009 x(might)s 8628 x(be)s
  2052. X8915 x(able)s 9374 x(to)s 9621 x(get)s 9974 x(some)s 1417 1870 moveto(mixtures)s
  2053. X2313 x(to)s 2559 x(work\),)s 3250 x(but)s 3616 x(different)s 4497 x(columns)s
  2054. X5368 x(may)s 5840 x(differ.)s 6549 x(For)s 6941 x(example,)s 
  2055. Xpgsave restore
  2056. Xshowpage
  2057. X
  2058. X%%Page: ? 5
  2059. X%%BeginPageSetup
  2060. X/pgsave save def
  2061. X0.0500 dup scale 10 setlinewidth
  2062. X%%EndPageSetup
  2063. X
  2064. X240 fnt34
  2065. X5754 15261 moveto(-)s 5893 x(4)s 6073 x(-)s 
  2066. X220 fnt13
  2067. X1897 14674 moveto(@R "Chain rule:"  labove  @R "Product rule:")s 1897 14386 moveto(nextcol)s
  2068. X1897 14098 moveto({df over dx ^= df over dy cdot dy over dx})s 1897 13810 moveto(mabove)s 1897 13522 moveto({dfg over dy ^= f ` dg over dx + g df over dx})s 
  2069. X240 fnt34
  2070. X1417 13023 moveto(has)s 1796 x(result)s
  2071. X1897 12418 moveto(Chain rule:)s 1897 11776 moveto(Product rule:)s 
  2072. X240 fnt35
  2073. X3430 12569 moveto(df)s gsave
  2074. X3410 12471 translate
  2075. X226 0 0 0 240 288 0 LoutGraphic
  2076. Xgsave
  2077. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  2078. Xgrestore
  2079. X
  2080. Xgrestore
  2081. X
  2082. X240 fnt35
  2083. X3410 12260 moveto(dx)s 
  2084. X240 fnt33
  2085. X3708 12411 moveto(=)s
  2086. X
  2087. X240 fnt35
  2088. X3931 12569 moveto(df)s gsave
  2089. X3911 12471 translate
  2090. X226 0 0 0 240 288 0 LoutGraphic
  2091. Xgsave
  2092. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  2093. Xgrestore
  2094. X
  2095. Xgrestore
  2096. X
  2097. X240 fnt35
  2098. X3911 12260 moveto(dy)s 
  2099. X240 fnt33
  2100. X4194 12411 moveto(\327)s 
  2101. X240 fnt35
  2102. X4311 12569 moveto(dy)s gsave
  2103. X4311 12471 translate
  2104. X226 0 0 0 240 288 0 LoutGraphic
  2105. Xgsave
  2106. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  2107. Xgrestore
  2108. X
  2109. Xgrestore
  2110. X
  2111. X240 fnt35
  2112. X4311 12260 moveto(dx)s
  2113. X3330 11927 moveto(dfg)s gsave
  2114. X3330 11829 translate
  2115. X306 0 0 0 240 288 0 LoutGraphic
  2116. Xgsave
  2117. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  2118. Xgrestore
  2119. X
  2120. Xgrestore
  2121. X
  2122. X240 fnt35
  2123. X3370 11618 moveto(dy)s 
  2124. X240 fnt33
  2125. X3708 11769 moveto(=)s 
  2126. X240 fnt35
  2127. X3911 11776 moveto(f)s 4020 11927 moveto(dg)s
  2128. Xgsave
  2129. X4020 11829 translate
  2130. X240 0 0 0 240 288 0 LoutGraphic
  2131. Xgsave
  2132. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  2133. Xgrestore
  2134. X
  2135. Xgrestore
  2136. X
  2137. X240 fnt35
  2138. X4027 11618 moveto(dx)s 
  2139. X240 fnt33
  2140. X4317 11769 moveto(+)s 
  2141. X240 fnt35
  2142. X4505 11776 moveto(g)s 4645 11927 moveto(df)s gsave
  2143. X4625 11829 translate
  2144. X226 0 0 0 240 288 0 LoutGraphic
  2145. Xgsave
  2146. X0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
  2147. Xgrestore
  2148. X
  2149. Xgrestore
  2150. X
  2151. X240 fnt35
  2152. X4625 11618 moveto(dx)s
  2153. X
  2154. X240 fnt34
  2155. END_OF_FILE
  2156.   if test 59623 -ne `wc -c <'doc/tr.eq/outfile.ps.A'`; then
  2157.     echo shar: \"'doc/tr.eq/outfile.ps.A'\" unpacked with wrong size!
  2158.   elif test -f 'doc/tr.eq/outfile.ps.B' && test -f 'doc/tr.eq/outfile.ps.C'; then
  2159.     echo shar: Combining  \"'doc/tr.eq/outfile.ps'\" \(148033 characters\)
  2160.     cat 'doc/tr.eq/outfile.ps.A' 'doc/tr.eq/outfile.ps.B' 'doc/tr.eq/outfile.ps.C' > 'doc/tr.eq/outfile.ps'
  2161.     if test 148033 -ne `wc -c <'doc/tr.eq/outfile.ps'`; then
  2162.       echo shar: \"'doc/tr.eq/outfile.ps'\" combined with wrong size!
  2163.     else
  2164.       rm doc/tr.eq/outfile.ps.A doc/tr.eq/outfile.ps.B doc/tr.eq/outfile.ps.C
  2165.     fi
  2166.   fi
  2167.   # end of 'doc/tr.eq/outfile.ps.A'
  2168. fi
  2169. if test ! -d 'doc/tr.fig' ; then
  2170.     echo shar: Creating directory \"'doc/tr.fig'\"
  2171.     mkdir 'doc/tr.fig'
  2172. fi
  2173. if test ! -d 'doc/tr.impl' ; then
  2174.     echo shar: Creating directory \"'doc/tr.impl'\"
  2175.     mkdir 'doc/tr.impl'
  2176. fi
  2177. if test ! -d 'doc/tr.lout' ; then
  2178.     echo shar: Creating directory \"'doc/tr.lout'\"
  2179.     mkdir 'doc/tr.lout'
  2180. fi
  2181. if test ! -d 'doc/tr.over' ; then
  2182.     echo shar: Creating directory \"'doc/tr.over'\"
  2183.     mkdir 'doc/tr.over'
  2184. fi
  2185. if test ! -d 'doc/tr.tab' ; then
  2186.     echo shar: Creating directory \"'doc/tr.tab'\"
  2187.     mkdir 'doc/tr.tab'
  2188. fi
  2189. if test ! -d 'evec' ; then
  2190.     echo shar: Creating directory \"'evec'\"
  2191.     mkdir 'evec'
  2192. fi
  2193. if test ! -d 'font' ; then
  2194.     echo shar: Creating directory \"'font'\"
  2195.     mkdir 'font'
  2196. fi
  2197. if test ! -d 'include' ; then
  2198.     echo shar: Creating directory \"'include'\"
  2199.     mkdir 'include'
  2200. fi
  2201. if test ! -d 'man' ; then
  2202.     echo shar: Creating directory \"'man'\"
  2203.     mkdir 'man'
  2204. fi
  2205. if test -f 'z34.c' -a "${1}" != "-c" ; then 
  2206.   echo shar: Will not clobber existing file \"'z34.c'\"
  2207. else
  2208.   echo shar: Extracting \"'z34.c'\" \(5690 characters\)
  2209.   sed "s/^X//" >'z34.c' <<'END_OF_FILE'
  2210. X/*@z34.c:Rotation Service:Declarations@***************************************/
  2211. X/*                                                                           */
  2212. X/*  LOUT: A HIGH-LEVEL LANGUAGE FOR DOCUMENT FORMATTING (VERSION 2.05)       */
  2213. X/*  COPYRIGHT (C) 1993 Jeffrey H. Kingston                                   */
  2214. X/*                                                                           */
  2215. X/*  Jeffrey H. Kingston (jeff@cs.su.oz.au)                                   */
  2216. X/*  Basser Department of Computer Science                                    */
  2217. X/*  The University of Sydney 2006                                            */
  2218. X/*  AUSTRALIA                                                                */
  2219. X/*                                                                           */
  2220. X/*  This program is free software; you can redistribute it and/or modify     */
  2221. X/*  it under the terms of the GNU General Public License as published by     */
  2222. X/*  the Free Software Foundation; either version 1, or (at your option)      */
  2223. X/*  any later version.                                                       */
  2224. X/*                                                                           */
  2225. X/*  This program is distributed in the hope that it will be useful,          */
  2226. X/*  but WITHOUT ANY WARRANTY; without even the implied warranty of           */
  2227. X/*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            */
  2228. X/*  GNU General Public License for more details.                             */
  2229. X/*                                                                           */
  2230. X/*  You should have received a copy of the GNU General Public License        */
  2231. X/*  along with this program; if not, write to the Free Software              */
  2232. X/*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                */
  2233. X/*                                                                           */
  2234. X/*  FILE:         z34.c                                                      */
  2235. X/*  MODULE:       Rotation Service                                           */
  2236. X/*  EXTERNS:      RotateSize()                                               */
  2237. X/*                                                                           */
  2238. X/*****************************************************************************/
  2239. X#include <math.h>
  2240. X#ifndef M_PI
  2241. X#define M_PI       3.1415926535897931160E0
  2242. X#endif
  2243. X#include "externs"
  2244. X
  2245. Xtypedef struct { double x, y;          } rect_coord;
  2246. Xtypedef struct { double angle, radius; } polar_coord;
  2247. X
  2248. X#define rect_to_polar(rect, polar)                \
  2249. Xpolar.angle = atan2(rect.y, rect.x),                \
  2250. Xpolar.radius = sqrt(rect.x*rect.x + rect.y*rect.y)
  2251. X
  2252. X#define polar_to_rect(polar, rect)                \
  2253. Xrect.x = polar.radius * cos(polar.angle),            \
  2254. Xrect.y = polar.radius * sin(polar.angle)
  2255. X
  2256. X
  2257. X/*@::RotateSize()@************************************************************/
  2258. X/*                                                                           */
  2259. X/*  RotateSize(xcb, xcf, xrb, xrf, y, theta)                                 */
  2260. X/*                                                                           */
  2261. X/*  Calculate the size of x, assuming that it is y rotated by theta degrees. */
  2262. X/*                                                                           */
  2263. X/*****************************************************************************/
  2264. X
  2265. XRotateSize(xcb, xcf, xrb, xrf, y, theta)
  2266. XLENGTH *xcb, *xcf, *xrb, *xrf;  OBJECT y;  LENGTH theta;
  2267. X{ rect_coord ycorners[4], xcorner;  polar_coord pol;
  2268. X  double maxx, maxy, minx, miny, ang;  int i;
  2269. X  char buff1[20], buff2[20];
  2270. X
  2271. X  /* calculate theta in radians */
  2272. X  ang = (double) theta * 2 * M_PI / (double) (DG * 360);
  2273. X  ifdebug(DRS, D, sprintf(buff2, "%.1f", ang));
  2274. X  debug2(DRS, D, "RotateSize( %s, %s )", EchoObject(y), buff2);
  2275. X  debug4(DRS, DD, "  ycb %s, ycf %s, yrb %s, yrf %s",
  2276. X    EchoLength(back(y, COL)), EchoLength(fwd(y, COL)),
  2277. X    EchoLength(back(y, ROW)), EchoLength(fwd(y, ROW)));
  2278. X
  2279. X  /* set up coordinates of the four corners of y */
  2280. X  ycorners[0].x =   (float) fwd(y, COL);
  2281. X  ycorners[0].y =   (float) back(y, ROW);
  2282. X  ycorners[1].x = - (float) back(y, COL);
  2283. X  ycorners[1].y =   (float) back(y, ROW);
  2284. X  ycorners[2].x = - (float) back(y, COL);
  2285. X  ycorners[2].y = - (float) fwd(y, ROW);
  2286. X  ycorners[3].x =   (float) fwd(y, COL);
  2287. X  ycorners[3].y = - (float) fwd(y, ROW);
  2288. X
  2289. X  /* rotate these four corners by theta and store their extremes */
  2290. X  maxx = maxy = (float) - MAX_LEN;
  2291. X  minx = miny = (float) MAX_LEN;
  2292. X  for( i = 0;  i < 4;  i++ )
  2293. X  {    
  2294. X    if( ycorners[i].x == 0 && ycorners[i].y == 0 )
  2295. X    {    pol.radius = 0; pol.angle  = 0; }
  2296. X    else rect_to_polar(ycorners[i], pol);
  2297. X    ifdebug(DRS, DD, sprintf(buff1, "%.1f", pol.angle));
  2298. X    ifdebug(DRS, DD, sprintf(buff2, "%.1f", ang));
  2299. X    debug5(DRS, DD, "  transforming (%s, %s) -> (%s, %s) + %s",
  2300. X      EchoLength( (int) ycorners[i].x), EchoLength( (int) ycorners[i].y),
  2301. X      EchoLength( (int) pol.radius), buff1, buff2);
  2302. X    pol.angle += ang;
  2303. X    polar_to_rect(pol, xcorner);
  2304. X    ifdebug(DRS, DD, sprintf(buff1, "%.1f", pol.angle));
  2305. X    debug4(DRS, DD, "    transforming (%s, %s) -> (%s, %s)",
  2306. X      EchoLength( (int) pol.radius), buff1,
  2307. X      EchoLength( (int) xcorner.x), EchoLength( (int) xcorner.y) );
  2308. X    maxx = max(maxx, xcorner.x);    minx = min(minx, xcorner.x);
  2309. X    maxy = max(maxy, xcorner.y);    miny = min(miny, xcorner.y);
  2310. X  }
  2311. X
  2312. X  /* store sizes back into x and return */
  2313. X  *xcb = - (int) minx;    *xcf  =   (int) maxx;
  2314. X  *xrb =   (int) maxy;    *xrf  = - (int) miny;
  2315. X  debug0(DRS, D, "RotateSize returning.");
  2316. X  debug4(DRS, DD, "  xcb %s, xcf %s, xrb %s, xrf %s",
  2317. X    EchoLength(*xcb), EchoLength(*xcf),
  2318. X    EchoLength(*xrb), EchoLength(*xrf));
  2319. X} /* end RotateSize */
  2320. END_OF_FILE
  2321.   if test 5690 -ne `wc -c <'z34.c'`; then
  2322.     echo shar: \"'z34.c'\" unpacked with wrong size!
  2323.   fi
  2324.   # end of 'z34.c'
  2325. fi
  2326. echo shar: End of archive 1 \(of 35\).
  2327. cp /dev/null ark1isdone
  2328. MISSING=""
  2329. for I in 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 ; do
  2330.     if test ! -f ark${I}isdone ; then
  2331.     MISSING="${MISSING} ${I}"
  2332.     fi
  2333. done
  2334. if test "${MISSING}" = "" ; then
  2335.     echo You have unpacked all 35 archives.
  2336.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2337. else
  2338.     echo You still must unpack the following archives:
  2339.     echo "        " ${MISSING}
  2340. fi
  2341. exit 0
  2342. exit 0 # Just in case...
  2343.