%!PS % Prehistoric Hanging Mountain Canals of the Safford Basin ( Revised ) % =================================== % by Don Lancaster GG #122 HANGCAN1.PSL % Revision date: September, 2012 % Copyright c 2010,2012 by Don Lancaster & Synergetics, Box 809, Thatcher, AZ, 85552 % (928) 428-4073 Email: don@tinaja.com Website: http://www.tinaja.com % Consulting services available http://www.tinaja.com/info01.html % Linking welcome. Reposting expressly forbidden. % All commercial rights and all electronic media rights ~fully~ reserved. % Linking usually welcome. Reposting expressly forbidden. Version 2.1 % IMPORTANT NOTE: Don Lancaster's file gonzo.ps is required for this program. % After obvious location mods, uncomment ONE of the following two lines: % (C:\\gonzo\\gonzo.ps) run % use internal gonzo modified for root %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%% FILE FREE GONZO NEEDED BY ACROBAT X AND HIGHER %%%%%%%%%%%%%%%%% % GONZO20A Guru Gonzo PostScript power tools (Interim release) % Includes gonzo justification and layout utilities. % Copyright c 1990,1996 by Don Lancaster and Synergetics, Box 809, % Thatcher Arizona, 5552 (520) 428-4073 don@tinaja.com support % via http://www.tinaja.com All commercial rights and all electronic % media rights **FULLY** reserved. Reposting is expressly forbidden. % this is a combined pagemaking and illustration package that is % extremely device independent, powerful, and flexible. But not wysiwyg %%%%%%%%%%%%%%%%%%%%%%%%%% % name of textfile: powertool.util % .... % last revision: September 1996 added cr/lf substitution /ps.util.1 {gutil} def % substitute old name /gutility {gutil} def % substitute old name /guru { gonzo begin ps.util.1 begin printerror nuisance begin} def % jumpstart 200 dict /gutil exch def gutil begin % A series of Don Lancaster Gonzo PostScript utilities that include: % (1) stepnrepeat - addressible step and repeat routines % (2) curvetrace - a powerful curve tracing routine % (3) rubbergrid - dropout-free gray layout/graphing grids % (4) line drawing - line drawing utilities % (5) electronics - electronic schematic icons for rubbergrid % (6) arcjustify - improved circletext routine with kerning % (7) fone elim - eliminates any need for end user fonts % (8) nuisances - single command replacements for complex stuff % (9) errortrap - printing error trapping routine % (10) gonzojust - gonzo justify package % ///// % (1) step and repeat % % Horizontal and vertical are defined AFTER selecting portrait or % landscape. Parameters (in points or true/false) are as follows... % % #horizrpts - times proc repeats in horizontal direction % #vertrpts - times proc repeats in vertical direction % hspacing - horizontal proc repeat spacing % vspacing - vertical proc repeat spacing % hstart - horizontal offset of first proc % vstart - vertical offset of first proc % ticklen - length of cropping ticks when and if used % useticks? - show the ticks true/false boolean % landscape - landscape orientation true/false boolean /stepnrptparams 40 dict def stepnrptparams begin /admitonetick [5 9 150 60 25 25 10 true true] def % 45 tickets /babybumper [2 10 270 72 40 30 20 true false] def % 20 stickers /badgeaminit [2 3 220 220 90 60 250 false false] def % 6 badges /bigbumpstick [1 3 792 205 0 0 40 true true] def % 3 bumperstickers /buscard [3 4 256 143 12 20 20 true true] def % 12 buscards /busenvelope [1 1 685 305 0 150 20 true true] def % 1 envelope /eightlabel [2 4 306 198 0 0 50 true false] def % 1/8 page /fulllandpage [1 1 0 0 20 20 50 false true] def % entire landscape page /fullportpage [1 1 0 0 20 20 50 false false] def % entire portrait page /lilbumpstick [1 5 610 150 0 20 60 true false] def % 5 blumperstickers /quadsplit [2 2 396 306 0 0 50 true true] def % 1/4 page /readerserv [12 25 25 -15 120 450 0 false false] def % 300 RS numabers /shiplabel [1 4 290 180 160 65 40 true false] def % 4 custom labels /sixlabel [2 3 306 264 0 0 50 true false] def % 1/6 page /stdplabel [1 11 254 74 185 5 20 true false] def % 11 stock dp labels /tenlabel [2 5 305 144 0 45 50 true false] def % 1/10 page /videospline [1 13 424 60.3 80 34 0 false false] def % 13 VHS splines /3.5disklabel [2 3 216 226 100 60 20 false false] def % 6 disk labels 3.5 /5.25disklabel [1 7 316 110 275 35 0 false false] def % 7 disk labels 5.25 end % /setrepeatparams is a working tool that extracts the selected repeat % values from an entry in stepnrptparams. /setrepeatparams {cvn stepnrptparams exch get aload pop /landscape1 exch def /ticktrue exch def /ticklen exch def /vertstart exch def /horstart exch def /incvert exch def /inchoriz exch def /numvert exch def /numhoriz exch def} def % /onetick optionally draws a single tick or crop mark, while /drawticks % puts one at each corner of each form /onetick { 0 ticklen 2 div rmoveto 0 ticklen neg rlineto ticklen 2 div neg dup neg rmoveto ticklen 0 rlineto 0 setlinewidth stroke} def /drawticks {gsave ticktrue {0 0 moveto onetick inchoriz 0 moveto onetick 0 incvert moveto onetick inchoriz incvert moveto onetick} if grestore}def % default variables used by stepnrpt /srexitproc {} def % default short exit - don't do it. /numpages 1 def % default number of sheets to print /startnum 0 def % initial ticket number /runnum startnum def % running pointer advances one per repeat /repeatproc {} def % artwork to get repeated default /customdata false def % autopaginate custom data? % /srfile gets used for custom entries. Each entry can be a string or a % proc, but ONLY ONE ENTRY is allowed per final repeat. /srfile [(You) (forgot) (to) (define) (srfile!)] def % default srfile % /calcpages is an optional routine that decides how many pages are % needed ONLY when you are using a custom srfile. This allows early % exits when or if you run out of data. /calcpages {dup cvn stepnrptparams exch get dup 0 get exch 1 get mul cvi srfile length exch div ceiling cvi /numpages exch def} def % This is the main stepandrepeat tool... /stepandrepeat { save /srsnap exch def mark exch /quickexit false def customdata {calcpages} if setrepeatparams numpages {gsave landscape1 {-90 rotate -792 0 translate} if horstart vertstart translate gsave numhoriz {gsave numvert {drawticks save /rptsave1 exch def repeatproc rptsave1 restore /runnum runnum 1 add def 0 incvert translate srexitproc} repeat quickexit {exit} if grestore inchoriz 0 translate} repeat quickexit {exit} if grestore showpage grestore} repeat quickexit {showpage} if cleartomark srsnap restore} def % To force an early exit when you run out of names or reach a given % ticket number, test suitably. Then conditionally make /quickexit % true and exit repeatproc. % Note that an ending showpage is NOT required and should NOT be used. % ////// % (2) curvetrace % . . . . . % curvetrace - creates a smooth curved path from a data point list. % enter with currentpoint set and absolute array. % 0 0 as initial data appends path; any other values % creates new path /curvetrace {/curvelist exch def tension 0 eq {/tension .000001 def} if curvelist length 3 div 1 sub cvi /#triads exch def /ptr 0 def firstpoint morepoint} def /tension 2.83 def % default value for best fit /showtick false def % don't show points /ticklen 15 def % length of ticks /tickhead ticklen 4 div def /prvx { curvelist ptr 3 sub get } def /curx { curvelist ptr get } def /prvy { curvelist ptr 2 sub get } def /cury { curvelist ptr 1 add get } def /prva { curvelist ptr 1 sub get } def /cura { curvelist ptr 2 add get 180 sub} def /showtic1 { showtick true eq {gsave currentpoint newpath translate cura 180 add rotate ticklen neg 2 div 0 moveto ticklen 0 rlineto tickhead neg dup rlineto tickhead dup rlineto tickhead dup neg exch rlineto 0 setlinewidth stroke 0 ticklen neg 2 div moveto 0 ticklen rlineto stroke grestore} if }def /firstpoint { curx cury 2 copy abs exch abs add 0 eq {pop pop currentpoint curvelist exch 1 exch put curvelist exch 0 exch put}{moveto} ifelse showtic1 /ptr ptr 3 add def}def /morepoint {#triads { curx prvx sub dup mul cury prvy sub dup mul add sqrt tension div /zdist exch def prva cos zdist mul prvx add prva sin zdist mul prvy add cura cos zdist mul curx add cura sin zdist mul cury add curx cury curveto showtic1 /ptr ptr 3 add def} repeat} def /showtick false def % ////////////////////////////////// % (3) Finegray Rubbergrid % . . . . . . % Creates fine gray grids without dropouts or rattiness. % The code shown is device specific for 300 dpi printers. % To create a grid, use -hpos- -vpos- -gridsize- setgrid % Until restored, all further images will be "locked" to % the grid and will expand and contract with it. Note that % optimum linewidths and font sizes will usually be much % less than 1.0 after locking. % To show a grid, use -#hlines- -#vlines- showgrid. % The seegrid command displays the grid when true. % The fat5 command emphasizes every fifth line when true. % the fatter10 command emphasizes every tenth line when true. % Here are the graphing grays. For most users most of the time, % select ggray4 or ggray5 as your default ggray. /ggray1 {/ggray{0 setgray} def}def /ggray2 {/ggray {150 0 {eq {1}{0} ifelse} setscreen 0.500 setgray} def} def /ggray3 {/ggray {100 0 {eq {1}{0} ifelse} setscreen 0.667 setgray} def} def /ggray4 {/ggray { 75 0 {eq {1}{0} ifelse} setscreen 0.750 setgray} def} def /ggray5 {/ggray { 60 0 {eq {1}{0} ifelse} setscreen 0.800 setgray} def} def /ggray6 {/ggray { 50 0 {eq {1}{0} ifelse} setscreen 0.833 setgray} def} def /ggray10 {/ggray { 30 0 {eq {1}{0} ifelse} setscreen 0.900 setgray} def} def /ggray15 {/ggray { 20 0 {eq {1}{0} ifelse} setscreen 0.933 setgray} def} def /ggray20 {/ggray { 15 0 {eq {1}{0} ifelse} setscreen 0.950 setgray} def} def /ggray30 {/ggray { 10 0 {eq {1}{0} ifelse} setscreen 0.966 setgray} def} def % pick a default working ggray /ggray {60 0 {eq {1}{0} ifelse} setscreen 0.800 setgray} def % keep grids unlocked except for Golly Gee Mr. Science!! uses requiring not % less than two exclamation points... /lockggrid false def % Don't unless really needed % gridlockcheck checks to see if an exact pixel lock is wanted for single % dot crossings. See note above. 51.7 = QMS PS820. Your machine may also % need "exception tuning" if it does not give you perfect one dot crossings. /gridlockcheck {lockggrid {gsave ggray currentscreen grestore pop pop /ggraynum exch def ggraynum 150 eq {3 1 roll transform 2 div round 2 mul exch 2 div round 2 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 2 div cvi 2 mul idtransform exch pop} if ggraynum 100 eq {3 1 roll transform 3 div round 3 mul exch 3 div round 3 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 3 div cvi 3 mul idtransform exch pop} if ggraynum 75 eq {3 1 roll transform 4 div round 4 mul exch 4 div round 4 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 4 div cvi 4 mul idtransform exch pop} if ggraynum 60 eq {3 1 roll transform 5 div round 5 mul exch 5 div round 5 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 5 div cvi 5 mul idtransform exch pop} if ggraynum 50 eq {3 1 roll transform 6 div round 6 mul exch 6 div round 6 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 6 div cvi 6 mul idtransform exch pop} if ggraynum 30 eq {3 1 roll transform 10 div round 10 mul exch 10 div round 10 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 10 div cvi 10 mul idtransform exch pop} if ggraynum 20 eq {3 1 roll transform 15 div round 15 mul exch 15 div round 15 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 15 div cvi 15 mul idtransform exch pop} if ggraynum 15 eq {3 1 roll transform 20 div round 20 mul exch 20 div round 20 mul version (51.7) eq {0.5 add } if exch itransform 3 -1 roll 0 exch dtransform 20 div cvi 20 mul idtransform exch pop} if }if} def /setgrid { gsave gridlockcheck /blocksize exch def translate blocksize dup scale setfontssmaller} def /thingridlines {0} def % can alter if you must magnify; but best 0 /showgrid {gsave ggray /vblocks exch def /hblocks exch def thingridlines setlinewidth [{0 0 moveto 0 vblocks rlineto stroke} 1 hblocks 1 add] xrpt [{0 0 moveto hblocks 0 rlineto stroke} 1 vblocks 1 add] yrpt fatterborder { gsave newpath 0 0.96 blocksize div dtransform round idtransform setlinewidth pop 2 setlinecap 0 0 moveto hblocks 0 rlineto 0 vblocks rlineto hblocks neg 0 rlineto closepath stroke grestore} if fat5 { gsave newpath 0 0.48 blocksize div dtransform round idtransform setlinewidth pop mark {5 0 moveto 0 vblocks rlineto stroke} 5 hblocks 5 div cvi] xrpt mark {0 5 moveto hblocks 0 rlineto stroke} 5 vblocks 5 div cvi] yrpt grestore} if fatter10 { gsave newpath 0 0.96 blocksize div dtransform round idtransform setlinewidth pop mark {10 0 moveto 0 vblocks rlineto stroke} 10 hblocks 10 div cvi] xrpt mark {0 10 moveto hblocks 0 rlineto stroke} 10 vblocks 10 div cvi] yrpt grestore} if grestore} def % Here are our rubbergrid controls... /lockrubbergrid false def % Don't unless really needed /fat5 true def % 3 pixels wide every fifth line? /fatter10 true def % 5 pixels wide every tenth line? /fatterborder true def % 5 pixel gray outline border? % rubbergrid utilities - drawing aides for the rubbergrid % line drawing stuff /line1 {.06 dup setlinewidth 5 mul /erase exch def} def /line2 {.12 dup setlinewidth 5 mul /erase exch def} def /line3 {.18 dup setlinewidth 5 mul /erase exch def} def % deferred font setting TEMPORARY - will be moved to gonzo /setfontssmaller { /yinc 1 def /pmrun 0 def /charstretch 0.033 def /spacestretch 0.05 def /ybot -9999 def /lastlinestretch lastlinestretch 0.1 mul def /font1 /Helvetica [0.7 0 0 0.8 0 0] gonzofont /font2 /Helvetica-Bold [0.7 0 0 0.8 0 0] gonzofont /font3 /Symbol [0.7 0 0 0.8 0 0] gonzofont /font4 /Helvetica [0.5 0 0 0.4 0 0] gonzofont /font5 /Helvetica-Bold [1.6 0 0 1 0 0] gonzofont } def % An improved graygrid routine that works BOTH at 300 and 600 DPI... /ggray {60 0 {sub abs 0.21 lt {1}{0} ifelse} setscreen gsave 0 60 0 {pop pop 1 add 1} setscreen grestore dup 25 eq {pop 0.8}{100 eq {0.72}{0.765} ifelse} ifelse setgray} def % ////////////////////////////////// % (4) Line drawing utilities % . . . . . . /mt {moveto} def /rm {rmoveto} def /rl {rlineto} def % these draw individual lines /x {rlineto currentpoint stroke moveto} def /r {0 x} def /r+ {dup x} def /r- {dup neg x} def /l {neg 0 x} def /l+ {neg dup neg x} def /l- {neg dup x} def /u {0 exch x} def /d {0 exch neg x} def % these create a path /pl {neg 0 rl} def /pl+ {neg dup neg rl} def /pl- {neg dup rl} def /pr { 0 rl} def /pr+ {dup rl} def /pr- {dup neg rl} def /pu {0 exch rl} def /pd {0 exch neg rl} def % these draw a line and "erase" across the background /ux {0 exch 2 copy gsave 1 setgray erase setlinewidth currentpoint .18 add moveto 0 setlinecap x grestore x } def /dx {neg 0 exch 2 copy gsave 1 setgray erase setlinewidth currentpoint .18 sub moveto 0 setlinecap x grestore x } def /rx {0 2 copy gsave 1 setgray erase setlinewidth currentpoint exch .18 add exch moveto 0 setlinecap x grestore x } def /lx {neg 0 2 copy gsave 1 setgray erase setlinewidth currentpoint exch .18 sub exch moveto 0 setlinecap x grestore x } def /dot { currentpoint newpath 0.150 0 360 arc fill } def /mdot { m dot} def % some small default circles /circ1 {gsave currentpoint newpath 0.20 0 360 arc whitefill line1 stroke grestore} def %for circle /circ2 {gsave currentpoint newpath 0.200 0 360 arc whitefill line2 stroke grestore} def %for complement /circ3 {gsave currentpoint newpath 0.8 0 360 arc line2 stroke grestore} def %for led /circ4 {gsave currentpoint newpath 0.33 0 360 arc whitefill line2 stroke grestore} def %for test point and switches % repeats [ proc distance trips] xrpt /xrpt{gsave aload pop /trips exch def /dist exch def /rproc exch def trips { gsave rproc grestore dist 0 translate } repeat grestore} def /yrpt{gsave aload pop /trips exch def /dist exch def /rproc exch def trips { gsave rproc grestore 0 dist translate } repeat grestore} def % some arrows . . . /uarrow {-.15 -.8 rlineto .3 0 rlineto closepath fill} def /darrow {gsave 180 rotate 0 0.8 rmoveto uarrow grestore} def /rarrow {gsave -90 rotate uarrow grestore} def /larrow { gsave 90 rotate uarrow grestore} def /whitefill { gsave 1 setgray fill grestore} def % ////////////////////////////////// % (5) electronics % . . . . . . % This section is being revised and improved % Opaque icons for use with the rubbergrid system. % This is older code that still needs rework. % In general, use -xpos- -ypos- iconname /electronics 200 dict def electronics begin /micro {font3 (m) show font1} def /ohms {font3 (W) show font1} def /tstpt {mt circ4 currentpoint 0.15 0 360 arc fill} def /xinv {0 1.25 rlineto 2.5 -1.25 rlineto -2.5 -1.25 rlineto closepath whitefill line2 stroke} def /rinverter{ mt gsave xinv grestore 2.7 0 rm circ2} def /linverter {mt gsave 180 rotate xinv grestore -2.7 0 rm circ2 } def /res {-0.8 0 rmoveto gsave 1.6 0 rlineto line1 1 setgray stroke grestore 0.10 0.3 rlineto 3 { .20 -.6 rlineto .20 .6 rlineto} repeat .20 -.6 rlineto 0.10 0.3 rlineto stroke} def /hresistor {mt res} def /vresistor { mt gsave 90 rotate res grestore} def /lpot { gsave translate gsave 0 -0.10 translate 0 0 vresistor grestore -.2 0 moveto rarrow grestore} def /cap {currentpoint 2 copy gsave 1 setgray 0 -.20 rlineto stroke grestore moveto -.6 0 rmoveto 1.2 0 rlineto stroke moveto 0 -1.2 rmoveto currentpoint newpath 1 55 125 arc stroke } def /vcap { mt cap } def /hcap { mt gsave 90 rotate cap grestore} def /uvcap { mt gsave 180 rotate cap grestore} def /schmitt {mt 0.3 0.3 rmoveto line1 -0.4 0 rlineto 0 -0.6 rlineto -.2 0 rlineto 0.4 0 rlineto 0 .6 rlineto stroke} def /dpdt {gsave translate 0 0 mt gsave newpath 0 0 mt 1 setgray 0.3 setlinewidth 0 2 rlineto 1.5 0 rlineto 0 -2 rlineto stroke grestore circ2 0 1 rm circ2 0 1 rm circ2 1.5 0 rm circ2 0 -1 rm circ2 0 -1 rm circ2 .2 setlinewidth 1 setlinecap -.35 .05 rm 1 u -.55 0 rm 1 d grestore} def /spdt { gsave translate 0 0 mt gsave newpath 0 0 mt 1 setgray 0.3 setlinewidth 0 2 rlineto 1.5 0 rlineto 0 -2 rlineto stroke grestore circ2 0 1 rm circ2 0 1 rm circ2 0.2 setlinewidth 1 setlinecap .45 0.05 mt 1 u grestore} def /diode{ currentpoint newpath moveto -.3 0 rmoveto gsave .7 -.4 rlineto 0 .8 rlineto closepath fill grestore -0.05 -.4 rmoveto 0 .8 rlineto 0.1 setlinewidth stroke } def /udiode { gsave moveto -90 rotate diode grestore } def /ddiode { gsave moveto 90 rotate diode grestore} def /led { mt currentpoint circ3 ddiode } def /negpulse { moveto -.35 .5 rmoveto .2 0 rlineto 0 -.5 rlineto 0.3 0 rlineto 0 .5 rlineto .2 0 rlineto stroke} def /pospulse { gsave 180 rotate negpulse grestore} def /5vdc {gsave 0 .8 rlineto currentpoint stroke .2 add 0.2 0 360 arc gsave 0.1 setlinewidth stroke grestore } def /xend { gsave -.1 0 rmoveto 0 .3 rlineto .2 0 rlineto 0 -.6 rlineto -.2 0 rlineto closepath gsave white fill grestore line1 stroke grestore} def /hxtal { mt gsave -.33 0 rmoveto 0.66 0 rlineto 0.3 setlinewidth 1 setgray stroke grestore gsave currentpoint exch -.35 add exch moveto xend 0.7 0 rmoveto xend grestore gsave 0 0.5 rmoveto 0 -1 rlineto 0.2 setlinewidth stroke grestore} def /sensor { gsave 2 copy vresistor .1 setlinewidth .5 sub newpath .6 0 -180 arcn 0 1.1 rlineto currentpoint stroke exch 0.6 add exch .6 180 0 arcn 0 -1.1 rlineto stroke grestore} def /ground { -.4 0 rmoveto 0.8 0 rlineto -.65 -0.2 rmoveto .5 0 rlineto -0.35 -0.2 rmoveto .2 0 rlineto stroke} def /uground {gsave 180 rotate ground grestore} def /lground {gsave -90 rotate ground grestore} def /rground {gsave 90 rotate ground grestore} def /dground {rground} def % old bug saved for old files /edgecon { gsave line2 mt 0 1.7 rm currentpoint newpath 0.3 180 0 arcn 1.7 d 0.6 l 1.7 u closepath gsave 1 setgray fill grestore stroke grestore} def /whitefill { gsave 1 setgray fill grestore} def /cell { gsave translate newpath 1 setgray 0 setlinecap 0 .3 mt 2 setlinewidth 0 -.6 rlineto stroke 0 setgray -.6 0.2 mt 0.3 setlinewidth 1.2 r stroke -1 -.3 mt line2 2 r grestore} def % //// DIPDRAW PROC ///// % dipdraw - draws a dip integrated circuit. (old code to be improved) % Enter with currentpoint set to pin 1 and scale % set so that 1.0 = distance between pins. Then % do a numpins-(name)-(hipins)-(lopins) dipdraw % Pin callouts preceeded by / will be complemented. % main dipdraw entry: /dipdraw { save /dipsnap exch def /hipins exch def /lopins exch def /chipname exch def /numpins exch def mark 0 0 0 0 0 0 0 0 0 0 0 0 % temp patch /howlong {numpins 2 div cvi 1 add} def /howhigh {4 numpins 36 ge {1 add} if} def /stub {howhigh 1.4 sub 2 div} def % internal service subs start here: /pinproc {numpins 2 div cvi{newpath 0 cpos 0.37 0 360 arc gsave 1 setgray fill grestore 0.067 setlinewidth stroke pin# 5 string cvs dup stringwidth pop 2 div neg cpos 0.2 sub moveto show 1 0 translate /pin# pin# dir add def} repeat } def /stretchprint { dup stringwidth pop 2 div neg exch length 1 sub stretch mul 2 div sub 0 moveto callout (/) anchorsearch true eq {currentpoint exch stretch add exch moveto pop dup /callout exch def stringwidth pop callout length 1 sub stretch mul add /barwide exch def 0.033 setlinewidth gsave currentpoint 0.55 add moveto barwide 0 rlineto stroke grestore} if stretch 0 callout ashow pop} def /pincallouts{0 vpos translate {workstring ( ) search true eq {/callout exch def pop /workstring exch def callout stretchprint 1 0 translate}{dup /callout exch def stretchprint exit } ifelse}loop} def % actual dipdraw process starts here: % ........ the outline: gsave 1 setlinecap 1 setlinejoin currentpoint translate newpath -.55 .45 0.15 0 360 arc fill newpath -1 howhigh 2 div 0.7 -90 90 arc 0 stub rlineto howlong 0 rlineto 0 howhigh neg rlineto howlong neg 0 rlineto closepath 0.36 setlinewidth stroke % ........ pin circles and numbers: /Helvetica-Bold findfont [0.4 0 0 0.55 0 0] makefont setfont gsave /pin# 1 def /dir 1 def /cpos 0 def pinproc grestore gsave /pin# numpins def /dir -1 def /cpos howhigh def pinproc grestore % pin callouts: /Helvetica findfont [0.35 0 0 0.6 0 0] makefont setfont /stretch 0.033 def gsave /workstring hipins def /vpos 0.6 def pincallouts grestore gsave /workstring lopins def /vpos howhigh 1.05 sub def pincallouts grestore % device number: /Helvetica-Bold findfont [1.4 0 0 1 0 0] makefont setfont /stretch 0.05 def gsave numpins 2 div 1 sub 2 div howhigh 2 div 0.33 sub translate chipname dup /callout exch def stretchprint grestore % end cleanup: grestore grestore cleartomark dipsnap restore} def % inductor stuff /lloop { .5 1 -.5 1 0 0 rcurveto} def /ltie {.2 -.30 .4 -.30 .6 0 rcurveto} def /lexit{.2 -.40 .4 0 .6 0 rcurveto .4 r } def /lentry {.4 r .2 0 .4 -.4 .6 0 rcurveto} def /hcoil { /numloops exch def lentry numloops 1 sub {lloop ltie} repeat lloop lexit} def /winding {gsave /numloops exch def translate 0 0 moveto 0 rotate numloops hcoil grestore} def /vwinding {gsave /numloops exch def translate 0 0 moveto 90 rotate numloops hcoil grestore} def /vrwinding {gsave /numloops exch def translate 90 rotate 1 -1 scale 0 0 moveto numloops hcoil grestore} def /phonejack {gsave translate 1 setlinecap 0 0 mt 0.15 u 3.85 r 0.3 d 3.85 l 3.95 0.15 mt 0.15 r 0.1 -0.15 rlineto -0.1 -0.15 rlineto 0.15 l 0.3 u 0.4 setlinewidth 2 setlinecap 0 0 mt 2 r 1 setlinecap 0 0.2 mt 2 r 0 -0.2 mt 2 r grestore } def /lilphonejack{ gsave translate 0.8 dup scale 0 0 phonejack grestore} def /varistor {gsave translate gsave -.5 0 mt 0.6 setlinewidth 1 setgray 1 r grestore line2 0.6 0.3 mt 1.2 l 0.6 -0.3 mt 1.2 l -0.45 -0.25 mt 0.3 0.50 rlineto 0.3 -0.50 rlineto 0.3 0.50 rlineto stroke grestore} def /piezo { gsave translate 0 0 mt gsave 5 dup scale circ1 grestore gsave 2.5 dup scale circ1 grestore grestore } def /pctab {gsave 1 setlinecap 1 setlinejoin line2 1 u 2 r 1 d 2 l grestore} def /npn {gsave newpath exch 0.2 sub exch translate -.1 0 1.2 0 360 arc gsave 1 setgray fill grestore line2 stroke -0.2 0 translate line3 -.3 -.7 moveto 1.4 u line1 -.3 0 mt 1.3 l -.2 .4 mt 0.6 0.4 rlineto 1.2 u newpath -.2 -0.4 mt 0.6 -0.4 rlineto 1.2 d newpath 0.4 -0.75 mt -.2 .3 rlineto -.2 -.3 rlineto closepath fill grestore} def /npnl {gsave translate -1 1 scale 0 0 npn grestore} def /pnp {gsave newpath exch 0.2 sub exch translate -.1 0 1.2 0 360 arc gsave 1 setgray fill grestore line2 stroke -0.2 0 translate line3 -.3 -.7 moveto 1.4 u line1 -.3 0 mt 1.3 l -.2 .4 mt 0.6 0.4 rlineto 1.2 u newpath -.2 -0.4 mt 0.6 -0.4 rlineto 1.2 d newpath -.2 .4 mt .3 .4 rlineto .1 -.3 rlineto closepath fill grestore} def /pnpl {gsave translate -1 1 scale 0 0 pnp grestore} def end % -- the electronics dictionary % ////////////////////////// % (6) arc justify - sets kerned circular text. % . . . . . % To use, -xpos -ypos- -radius- (message) karcjustify % A positive radius creates upward curving arcs. % A negative radius creates downward curving arcs. % Use -arckern- to stretch or compress global message. % Use -customkern- to adjust individual characters /arckern 1 def % global extra stretch + = stretch /customkern -1 def % custom extra squash - = squash /customkernchar (~) def % marker character to request custom kern /str (X) def /karcjustify {gsave /msg exch def /radius exch def translate msg stringwidth pop 0 msg {customkernchar 0 get eq {1 add} if} forall dup 0 gt {customkernchar stringwidth pop neg customkern add mul} if add msg length 1 sub arckern mul add 2 div dup 57.29578 mul radius div msg {str exch 0 exch put gsave rotate 0 radius moveto str dup dup dup customkernchar eq not {stringwidth pop 2 div 57.29578 mul radius div neg rotate show stringwidth pop}{customkern 2 div 57.29578 mul radius div neg rotate pop pop pop customkern} ifelse arckern add sub dup 57.29578 mul radius div grestore} forall pop pop grestore} def % //////////////// % (7) font eliminator % Font elimination completely eliminates the need for any strange % end user, editor, or typesetter run time fonts by substituting paths. % When *elimininatefonts* is called, all unbound *awidthshow* % commands will return font paths to host for recording and later % substitution. Level II only for capture. Two way comm essential. /eliminatefonts{ % shorter routine names used by font path procs... /mt {moveto} def /li {lineto} def % Note that lt and ln are spoken for! /ct {curveto} def /cp {closepath} def % optional time delay for host recording... /stall1 {50 {37 sin pop} repeat} def % optional stall % host reporting utility procs (currently 2 decimal place .XX accuracy) /prnum {index 100 mul round cvi 100 div ( ) cvs print ( ) print} def /prproc {0 index ( ) cvs print (\r) print flush stall1} def % this awidthshow diversion does all the actual work, returning all % widthshown font paths to the host for recording... /awidthshow {/str exch def /cys exch def /cxs exch def /sch exch def /sys exch def /sxs exch def str {currentpoint moveto (X) dup dup 4 -1 roll 0 exch put false charpath mark {/mt cvx 2 prnum 1 prnum prproc} {/li cvx 2 prnum 1 prnum prproc} {/ct cvx 6 prnum 5 prnum 4 prnum 3 prnum 2 prnum 1 prnum prproc} {/cp cvx dup prproc} pathforall ] cvx exec currentpoint fill moveto 0 get sch eq {currentpoint exch sxs add exch sys add moveto} if currentpoint exch cxs add exch cys add newpath moveto} forall } def} def % ////////////////////////////////// % (6) nuisance solvers % . . . . . . % nuisance - a dictionary of commonly used PostScript sequences % . . . . . . . . . . % nuisancedict is usually persistently downloaded as a subdictionary. % it is activated when needed by -- nuisance begin -- . 200 dict /nuisance exch def nuisance begin /acos {2 copy dup mul exch dup mul sub sqrt exch pop exch atan} def % arccosine use - xside hypotenuse acos - /asin {2 copy dup mul exch dup mul sub sqrt exch pop atan} def % arcsine use - yside hypotenuse asin - /backwards { 612 0 translate -1 1 scale} def % print backwards /bestgray {106 45 {dup mul exch dup mul add 1.0 exch sub} setscreen} def /black {0 setgray} def % draw in black /blackflash {0 0 moveto 1000 0 rlineto 0 1000 rlineto -1000 0 rlineto closepath fill showpage } def % black pre-page for highest print quality /boxdraw {bl bb bw bh brad roundbox blw setlinewidth stroke grestore } def % for old version compatibility % ///////////////////OLD ROUTINES NOT NOW IN USE///// % (2) boxdraw % . . . . . % This section is obsolete and will be phased out. use roundbox for % all new work % Draws various fancy boxes and sidebars, with or without % rounded corners and double hairlines /boxpath {/strt br bl add 2 div def /br {bl bw add} def % attempted repair /bc {bl bw 2 div add} def /bb {bt bh sub } def newpath strt bt moveto br bt br bb brad arcto br bb bl bb brad arcto bl bb bl bt brad arcto bl bt strt bt brad arcto closepath blw setlinewidth} def /br {bl bw add} def /bc {bl bw 2 div add} def /bb {bt bh sub} def %/boxdraw {boxpath stroke} def /boxfill {boxpath gsave fill grestore} def /hairdraw {gsave /hd exch def 0.5 setlinewidth bl bt hd sub moveto bw 0 rlineto 0 2.5 rmoveto bw neg 0 rlineto stroke} def /grabbox {/blw exch def /brad exch def /bh exch def /bt exch def /bw exch def /bl exch def} def /quickboxdraw {grabbox boxdraw} def /quickboxpath {grabbox boxpath} def /quickboxfill {grabbox boxfill} def % defaults /bl 200 def /bw 175 def /bt 500 def /bh 240 def /brad 7 def /blw 2 def /hd 25 def % use examples: boxdraw hd hairdraw -- draws the box and a title % boxpath -- generates only the path without stroking % gsave bl 10 add bb 15 add translate -- locks stuff % to inside of box; grestore exits % 200 175 500 240 7 2 quickboxdraw -- draws without % predefinition, but can't track inside height. /copies { /#copies exch def} def % as in -- 6 copies -- /feetfirst {180 rotate -612 -792 translate} def % eject print feet first /flushends {0 setlinecap} def % flush path ends /flushjoins {0 setlinejoin} def % flush path joins % GEniejul converts GEnie dates to Julian dates Enter with a six % digit integer; leave with date string on stack /GEniejul { ( ) cvs dup 2 2 getinterval cvi 1 sub [(January ) (February )(March )(April )(May )(June )(July )(August )(September ) (October )(November )(December )] exch get 1 index 4 2 getinterval (, ) mergestr mergestr exch 0 2 getinterval cvi dup 50 gt {1900} {2000}ifelse add ( )cvs mergestr} def % hrule does a fixed horizontal rule, given xstart ystart xend linewidth /hrule {gsave newpath setlinewidth 1 index 4 2 roll moveto lineto stroke grestore} def % vrule does a fixed vertical rule, given xstart ystart yend linewidth /vrule {gsave newpath setlinewidth 2 index 4 2 roll moveto exch lineto stroke grestore} def /inch {72 mul} def % inches /indiagray {135 35 {dup mul exch dup mul add 1.0 exch sub} setscreen} def /landscape {-90 rotate -792 0 translate} def % pick landscape printing /lightgray {0.99 setgray} def /listfonts {FontDirectory {pop == flush 200 {37 sin pop} repeat } forall} def % send installed font list to host /longjob {statusdict /waittimeout 180 put} def % lengthen job timeout /manual {statusdict /manualfeed true put} def % start manual feed % mergestr merges the two top stack strings into one top stack string /mergestr {2 copy length exch length add string dup dup 4 3 roll 4 index length exch putinterval 3 1 roll exch 0 exch putinterval} def /negative {{1 sub abs} settransfer} def % negative printing /outline {false charpath} def % finds character outline path /pi 3.1415926 def % you wanted rhubarb instead? /pixel {72 mul 300 div} def % 300 dpi only /positive {{} settransfer} def % restore positive printing /printfonts {/Helvetica findfont [10 0 0 10 0 0] makefont setfont /xpos 150 def /ypos 600 def /yinc 12 def xpos 20 sub ypos 20 add moveto (CURRENTLY INSTALLED FONTS:) show FontDirectory {pop 100 string cvs xpos ypos moveto (/) show show /ypos ypos 12 sub def} forall showpage} def % on paper /putridgray {53 45 {dup mul exch dup mul add 1.0 exch sub} setscreen} def /random {rand 65536 div 32768 div mul cvi} def % as in -- 6 random -- /report {== flush 100 {37 sin pop} repeat } def % top of stack to host /reprogray {85 35 {dup mul exch dup mul add 1.0 exch sub} setscreen} def % Romnum routine converts any number from 0-99 into its equivalent Roman % numerals. Enter with stack integer. Leave with stack Roman string. /Romnum { dup 10 div cvi [() (x) (xx) (xxx) (xl) (l) (lx) (lxx) (lxxx) (xc)] exch get ( ) cvs exch 10 mod cvi [() (i)(ii)(iii) (iv)(v)(vi)(vii)(viii)(ix)] exch get mergestr} def /roundends {1 setlinecap} def % rounded path ends /roundjoins {1 setlinejoin} def % rounded path joins % This creates a rounded path from -radius- [x1 y1 x2 y2 ... xn yn] % roundpath. Does NOT round path ends. Use roundbox for boxes /roundpath {/rpdata exch def /rprad exch def rpdata length 1 sub cvi /rppoints exch def rpdata 0 get rpdata 1 get moveto 2 2 rppoints 2 sub {/rpvalue exch def 0 1 3 {rpdata exch rpvalue add get } for rprad arcto pop pop pop pop} for rpdata rppoints 1 sub get rpdata rppoints get lineto} def % roundbox draws a box path with rounded corners and locks you to the % lower lefthand box corner using this format ... % -xpos- -ypos- -xwidth- -yheight- -cornerrad- roundbox /roundbox {gsave /rad exch def /bt exch def /br exch def /bb exch def /bl exch def bl bb translate rad mark br 2 div 0 0 0 0 bt br bt br 0 br 2 div 0] roundpath /bc br bl sub 2 div def} def /snoop {1183615869 internaldict begin} def % activates superexec /stockends {2 setlinecap} def % default path ends /stockjoins {2 setlinejoin} def % default path joins /stall {{37 sin pop} repeat} def % delay as in -- 1500 stall -- % timing utilities. use stopwatchon and stopwatchoff for simple % one shot timing. For multiple time totals, use resettimer % starttimer stoptimer ... starttimer stoptimer reporttimer /stopwatchoff {stoptimer reporttimer} def % for single shots /stopwatchon {resettimer starttimer} def % for single shots /reporttimer {mytime 1000 div (\rElapsed time: ) print 20 string cvs print ( seconds.\r) print flush} def % to host /resettimer {/mytime 0 def} def % reset timer /starttimer {usertime /mytimenow exch def} def % add to time so far /stoptimer {usertime mytimenow sub /mytime exch mytime add def} def % for multiple timing intervals % stringdown, et al repeats a string of one or more characters to form % a fancy border. use -#repeats- -spacing- (char) stringdown, etc. /stringdown {/char exch def /vcharsp exch def {gsave char show currentpoint vcharsp sub moveto} repeat} def /stringleft {/char exch def /hcharsp exch def {gsave char show currentpoint exch hcharsp sub exch moveto} repeat} def /stringright {/char exch def /hcharsp exch def {gsave char show currentpoint exch hcharsp add exch moveto} repeat} def /stringup {/char exch def /vcharsp exch def {gsave char show currentpoint vcharsp add moveto} repeat} def % superstroke and superinsidestroke take a predefined path and a % top-of-stack array of [width1 gray1 width2 gray2 .... widthn grayn] % and do multiple strokes for wires, fancy borders, or braiding. % Note that the FIRST array value pair has to be the WIDEST, etc. % Use superstroke for wires; superinsidestroke for borders. /superstroke { save /sssnap exch def /sscmd exch def mark 0 2 sscmd length 2 div cvi 1 sub 2 mul {/aposn exch def gsave sscmd aposn get setlinewidth sscmd aposn 1 add get setgray stroke grestore} for cleartomark sssnap restore newpath} def /superinsidestroke {save clip /sssnap exch def /sscmd exch def mark 0 2 sscmd length 2 div cvi 1 sub 2 mul {/aposn exch def gsave sscmd aposn get 2 mul setlinewidth sscmd aposn 1 add get setgray stroke grestore} for cleartomark sssnap restore newpath} def /tan {dup sin exch cos dup 0 eq {pop 0.000001} if div} def % tangent /tray {statusdict /manualfeed false put} def % stop manual feed /white {1 setgray} def % print in white /width {stringwidth pop} def % finds x width of string end % the nuisance dictionary % ////////////////////////// % (9) switchable error trapper % . . . . . % Creates a printing error trapper that dumps the stack and prints what you % have accomplished so far. While EXTREMELY useful, this is definitely NOT % to be a replacement for true two-way comm. Adapted from EHANDLER.PS. % Use gutil begin printerror at the start of your file for time-of-error % printout and stack dump /printerror {/$brkpage 64 dict def $brkpage begin /prnt {dup type/stringtype ne{=string cvs}if dup length 6 mul /tx exch def/ty 10 def currentpoint/toy exch def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def /nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def /=={/cp 0 def typeprint nl}def /typeprint{dup type dup currentdict exch known {exec}{unknowntype}ifelse}readonly def /lmargin 72 def /rmargin 72 def /tprint {dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp exch def prnt}readonly def /cvsprint{=string cvs tprint( )tprint }readonly def/unknowntype{exch pop cvlit(??)tprint cvsprint}readonly def/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def /booleantype{cvsprint}readonly def/operatortype{(//)tprint cvsprint} readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop (-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def/filetype{pop(-filestream- )tprint}readonly def/savetype{pop (-savelevel- )tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup xcheck not{(/)tprint}if cvsprint}readonly def/stringtype {dup rcheck{(\()tprint tprint(\))tprint}{pop(-string- )tprint}ifelse }readonly def/arraytype{dup rcheck{dup xcheck{({)tprint{typeprint} forall(})tprint}{([)tprint{typeprint}forall(])tprint}ifelse}{pop (-array- )tprint}ifelse}readonly def/packedarraytype{dup rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def /courier/Courier findfont 10 scalefont def/OLDhandleerror errordict /handleerror get def end errordict /handleerror {systemdict begin $error begin $brkpage begin newerror{/newerror false store $error /errorname get (ioerror) ne $error /command get (exec) ne or {vmstatus pop pop 0 ne{grestoreall}if initgraphics courier setfont lmargin 720 moveto (ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt $error/ostack known {nl nl(STACK:)prnt nl nl $error/ostack get aload length{==}repeat}if systemdict/showpage get exec /newerror true store/OLDhandleerror load end end end exec}{end end end} ifelse} {end end end}ifelse} dup 0 systemdict put dup 4 $brkpage put bind readonly put} def % ////////////////////////////////// end % the entire utility dictionary, except for gonzo justification %%%%%%%///////// % X E % Z % (11) Gonzo justification tools ... % ************************************************************************ % ************************************************************************ % GONZO 13 JUSTIFICATION POWER TOOL % ************************************************************************ % % SUMMARY: Exceptionally high quality, fully device independent, and ultra % fast (but non-WYSIWYG) Don Lancaster text justification routines. % % Includes auto drop caps, hanging punctuation, global kerning, % supertabs, callout modes, overstrikes, menu justify, scads more. % % Gonzo can also dump plain old ASCII text and can custom % emulate nearly anything. % % Gonzo is fully open, unlocked, documented, and reprogrammable. % % Reprinted from Don Lancaster's POSTSCRIPT BEGINNER STUFF. % % Copyright c 1991 by Don Lancaster. All rights fully reserved. % Free help line and additional info: (602) 428-4073. % % ************************************************************************ % Name of textfile: GONZO15A.PTL % Source: SYNERGETICS % Author: Don Lancaster % Desc: Superb quality text justification % Date: September 15, 1992 % Release: 15a (GEnie alpha "B" release) % Approx length: 46K % Status: Copyright 1990 by Don Lancaster and Synergetics. % 3860 West First Street, Thatcher, AZ. (602) 428-4073. % All commercial rights reserved. Personal use permitted % so long as this status message stays present and intact. % Gonzo POSTSCRIPT BEGINNER STUFF package $39.50 VISA/MC. % % Keywords: PostScript, gonzo, justification, compile, text % Approximate NTX run time: 2.50 seconds per 1000 chars (uncompiled) % 0.33 seconds per 1000 chars (compiled) % X E Activate XON/XOFF if necessary. % Z Values are shown for Apple Super Serial Card %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % WARNING: This is the GEnie "alpha" release. The compile, supertab, % and menu justify features are not yet all there. % % KEEP A WRITTEN USER LOG AND EXPECT PROBLEMS. % % Report problems, corrections, questions, etc, to PSRT. % % For further documentation, see PSRT #220 GONZO13A.TXT. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % GONZOJST.PTL is a series of utilities that allow ultra high quality % text justification from within a word processor or editor environment. % The routines are fast, fully programmable, use minimum length files, and % use little VM. They are purposely not WYSIWYG for maximum flexibility, % speed, and total device independence. Advanced features include auto drop % caps, hanging punctuation, individual kerning, lastline stretch, simple % textdumper, callout modes, macros, overstrike, and much more. The routines % be used WITHOUT control characters. They can emulate nearly anything. % An internal compiler is included for extremely fast rerun times. % Full use instructions appear in the companion file GONZO13A.TXT. % Also see the internal notes and comments below. % Status: Copyright 1990 by Don Lancaster and Synergetics. % 3860 West First Street, Thatcher, AZ. (602) 428-4073. % All commercial rights reserved. Personal use permitted % so long as this status message stays present and intact. % Gonzo POSTSCRIPT BEGINNER STUFF package $39.50 VISA/MC. % create a working dictionary that remains closed until needed ... 1000 dict /gonzo exch def gonzo begin % USER ALTERABLE COMMANDS - all must remain here as defaults % ======================= /altescapechar 124 def % alternate "escape" key for commands (|) /cstretch 0.2 def % minimum character kerning /colcheck { } def % link to page or column maker /dropcount 3 def % lines indented for drop cap /dropindent 40 def % width reserved for drop cap /escapechar 27 def % "escape" key for commands - can be printable /gonzocompile false def % compile to host or disk flag /gonzojust true def % allow gonzo commands? (false for text dumper) /hangflag true def % hang center, right, or fill punctuation? /hangfract 0.6 def % amount that hung punctuation hangs /hostcompdelay 80 def % optional compiling character report delay /justifylastline false def % fill justify last paragraph line? /justx (justL) def % running justification mode /kern 1 def % default individual kern amount /lastlinestretch 0.12 def % stretch on last line of fill just paragraph /oktoadvance true def % don't advance to next line if false /oktoprint true def % print suppression flag /overstrikechar (\320) def % overstrike character /overstrikeht 5.5 def % vertical shift of overstrike character /pm 10 def % normal paragraph indent /rslashchar 92 def % "reverse slash" key -alterable- /rslashok true def % allow reverse slash processing? /stringmode false def % string or currentfile source? /spacecharratio 6 def % fill justify ratio of space to char stretch /sstretch -0.3 def % minimum space kerning - may be negative /tabs [50 100 150 200] def % default tab list /txtwide 350 def % width of column /txtwideadj {} def % custom proc for keystoning, etc. /xpos 70 def % horizontal start of text /yinc 11 def % line spacing /ypara 0 def % additional v space at paragraph end /ypos 400 def % vertical start of text /ytop 720 def % default top reference for template /ybot -9999 def % default bottom reference for template % GONZOFONT BUILDER % ================= % gonzo fontnames MUST be of form /fontx, where x is any printable ASCII % character that has also been "qualified" to be a font in the command list. % A later gonzofont command rapidly sets the font and defines the space width. % gonzofont accepts either % /font1 /Helvetica 12 gonzofont -- or else -- % /font1 /Helvetica [wide climb slant high xshift yshift] gonzofont /gonzofont {dup type cvlit /arraytype eq {exch findfont exch makefont} {exch findfont exch scalefont} ifelse setfont mark /spacewidth ( ) stringwidth pop /cstretch cvx /add cvx /sstretch cvx /add cvx /def cvx currentfont dup backcdict exch (F?) dup 1 14 index (xxxxx) cvs 4 get put put /setfont cvx ] cvx def} def 50 dict /backcdict exch def % used "backwards" during compiling to get % fontname given the "made" font dictionary % USER FONTS - all should remain here as defaults ... % ========== /font0 /Helvetica-Bold [36 0 0 40 0 0] gonzofont % for drop caps /font1 /Helvetica 9 gonzofont % regular text /font2 /Helvetica-BoldOblique 9 gonzofont % reg italic /font3 /Helvetica-Bold 9 gonzofont % reg bold /font4 /Helvetica 8 gonzofont % reg all caps or #s /font5 /Helvetica-BoldOblique 8 gonzofont % italic all caps or #s /font6 /Helvetica-Bold 8 gonzofont % bold all caps or #s /font7 /Helvetica-Bold [6 0 0 6 0 -2] gonzofont % subscript /font8 /Helvetica-Bold [6 0 0 6 0 4] gonzofont % superscript /font9 /Helvetica-Bold [9 0 0 9 0 4] gonzofont % lowered bold title /font- /ZapfDingbats 9 gonzofont % Dingbats /font= /Symbol 9 gonzofont % Greek & Math /font: /Courier 9 gonzofont % Spare /font; /Courier 10 gonzofont % Spare /font+ /Courier 11 gonzofont % Spare font1 % set default % SYSTEM CONSTANTS - not normally altered % ================ /maxcharsbeforecr 6000 def % maximum number of characters before a cr /linestring1 maxcharsbeforecr string def % main for normal use /linestring2 maxcharsbeforecr string def % aux to allow headers /linestring linestring1 def % default /templatestartup {} def % default /maxprocsperline 200 def % maximum number of procs per print line /printlist maxprocsperline array def /dropflag false def % dropcap flag % /exitcheck {} def % default exit (overwritten by dump template) /firstchar 0 def % first character pointer /numspaces 0 def % initial number of spaces in line /pmrun 0 def % running paragraph margin /templatestartup {} def % link to template initializer % stack conventions during gonzojustify: all procs must restore % top stack value = next available position in linestring % next stack value = next available position in printlist % COMMAND LIST: % ============ % This command list determines the action of each [esc] selection. % First, create the list . . . /commands 256 array def 0 1 255 {commands exch {} put} for % You can have as many fonts as you like, trading off room for other % commands. Note that font1 is ASCII 49 and so on. % Here are the current font character definitions. . . commands (0) 0 get {font0} put commands (1) 0 get {font1} put commands (2) 0 get {font2} put commands (3) 0 get {font3} put commands (4) 0 get {font4} put commands (5) 0 get {font5} put commands (6) 0 get {font6} put commands (7) 0 get {font7} put commands (8) 0 get {font8} put commands (9) 0 get {font9} put commands (:) 0 get {font:} put commands (;) 0 get {font;} put commands (=) 0 get {font=} put commands (-) 0 get {font-} put commands (+) 0 get {font+} put % justification modes for command list commands (C) 0 get {justx 4 (C) 0 get put} put % center justify commands (F) 0 get {justx 4 (F) 0 get put} put % fill justify commands (L) 0 get {justx 4 (L) 0 get put} put % left justify commands (R) 0 get {justx 4 (R) 0 get put} put % right justify commands (P) 0 get {justx 4 (P) 0 get put} put % programmable just #1 commands (Q) 0 get {justx 4 (Q) 0 get put} put % programmable just #2 % macros for command list commands (a) 0 get {amacro} put commands (b) 0 get {bmacro} put commands (c) 0 get {cmacro} put commands (d) 0 get {dmacro} put commands (e) 0 get {emacro} put commands (f) 0 get {fmacro} put commands (U) 0 get {Umacro} put commands (V) 0 get {Vmacro} put commands (W) 0 get {Wmacro} put commands (X) 0 get {Xmacro} put commands (Y) 0 get {Ymacro} put commands (Z) 0 get {Zmacro} put % service routines for command list commands (h) 0 get {halflinefeedup} put % half linefeed up commands (i) 0 get {initialcap} put % initial dropcap commands (j) 0 get {kern+} put % positive kerning commands (k) 0 get {kern-} put % negative kerning commands (l) 0 get {linefeeddown} put % linefeed down commands (n) 0 get {nobreak} put % conditional ff commands (o) 0 get {overstrike} put % overstrike char commands (p) 0 get {/pmrun pm def} put % normal para indent commands (s) 0 get {/ypos -10000 def} put % showpage formfeed template link commands (t) 0 get {plainoldtab} put % simple tabbing commands (x) 0 get {exitproc} put % exit to PostScript commands (y) 0 get {fulllinefeedup} put % negative linefeed commands (z) 0 get {/pmrun 0 def} put % zero para indent % EXPANDED SERVICE ROUTINE DEFINITIONS % ==================================== /halflinefeedup {/ypos ypos yinc 2 div add def} def /fulllinefeedup {/ypos ypos yinc add def} def /linefeeddown {/ypos ypos yinc sub def} def /nobreak {ypos yinc 6 mul sub ybot lt {/ypos ybot def} if} def /initialcap {/ypos ypos yinc add ypara add def /pmrun 0 def /indentcount dropcount def /dropflag true def} def % a simple tab routine for lj only. Tabs relative to xpos /plainoldtab {tabs tabcount get dup /roomleft exch txtwide exch sub def mark exch xpos add ypos /moveto cvx] cvx printlist exch 3 index exch put exch 1 add exch tabcount tabs length 1 sub lt {/tabcount tabcount 1 add def} if } def /kern- {mark kern neg 0 /rmoveto cvx ] cvx printlist exch 3 index exch put /roomleft roomleft kern add def exch 1 add exch} bind def /kern+ {mark kern 0 /rmoveto cvx ] cvx printlist exch 3 index exch put /roomleft roomleft kern sub def exch 1 add exch} bind def /overstrike {printlist 2 index 1 sub get aload pop pop pop add 1 sub linestring exch 1 getinterval stringwidth pop dup overstrikechar stringwidth pop sub 2 div sub mark exch /gsave cvx exch /cfix cvx /add cvx /neg cvx overstrikeht /rmoveto cvx overstrikechar /rshowchars cvx /grestore cvx] cvx printlist exch 3 index exch put exch 1 add exch} def % stringmacro lets you do a series of gonzolink commands with a single % macro keystroke. For instance, /amacro {(z3c) stringmacro} def picks % a centered font3 with no paragraph for an embedded [esc]-a. /stringmacro { {commands exch get exec} forall} def % This lets you use [esc]-g instead of startgonzo (\033g) cvn {startgonzo} def (|g) cvn {startgonzo} def % CHARACTER COMMAND ARRAY (fake CASE) % ======================= % create an executable array based on character to decide who does what /chararray 256 array def % decides action of each key 0 1 255 { /posn exch def chararray posn [posn /chartolinestring cvx ] cvx put} for % default 1:1 mapping chararray dup 0 {} put dup 10 {newlineproc} put % lf newline dup 13 {newlineproc.wcrlf} put % cr as newline dup 32 {spaceproc} put % spaceproc dup escapechar {gonzojust {escproc}{exitcheck} ifelse} put % escape key dup altescapechar {gonzojust {escproc}{exitcheck} ifelse} put % altesc key dup rslashchar {rslashok {rslashproc} {rslashchar chartolinestring} ifelse} put % rslash key - can alter pop %%%%% CR-LF ATTEMPTED PATCH %%%%% % This ignores a cr if the next character is a linefeed /newlineproc.wcrlf{ stringmode {getstringchar}{currentfile read} ifelse % read next w end check { % true-false on valid read dup 10 eq {pop newlineproc } % if cr-lf {/crlfhold exch store newlineproc chararray crlfhold get exec } % if not ifelse } % if a character followed cr {newlineproc exit} ifelse % if cr was the last character } def %%%%%%%%%%%%%% % Charproc simply piles up characters into linestring. % Other commands decide how these characters are to be used. /chartolinestring {linestring exch 2 index exch put 1 add } bind def % exitproc responds to [esc]-x and gets you out of gonzo after printing. /exitproc {exit} def % rslashproc takes care of the reverse slashes which are not active when % not reading strings. Modified to reject cr-lf pairs % create an action array /slashlist 256 array def 0 1 255 {slashlist exch {} put} for slashlist dup 48 {0 octalnum} put % process as octal number dup 49 {1 octalnum} put dup 50 {2 octalnum} put dup 51 {3 octalnum} put dup 40 {40 chartolinestring} put % left paren dup 41 {41 chartolinestring} put % right paren dup 92 {92 chartolinestring} put % reverse slash dup 114 {chararray 13 get exec} put % carriage return dup 108 {chararray 10 get exec} put % linefeed dup 116 {slashtab} put % tab someday dup 98 {slashbs} put % backspace someday dup 102 {slashformfeed} put % formfeed someday pop /slashtab {nogot} def /slashbs {nogot} def /slashformfeed {nogot} def /nogot {reverse_slash _feature_not_yet_defined} def /rslashproc { % modified to reject cr-lf pairs stringmode {getstringchar}{currentfile read} ifelse {dup 13 eq { pop stringmode {getstringchar}{currentfile read} ifelse % char after cr {dup 10 ne { chararray exch get exec}{pop} ifelse } {pop exit} ifelse % if out of chars } % if cr {slashlist exch get exec} % if not cr ifelse } {exit} ifelse } % if no more chars bind def % octalnum handles all reverse slashes followed by three octal nuambers. /octalproc { stringmode {getstringchar}{currentfile read} ifelse { 48 sub dup dup 0 lt exch 7 gt or {pop 0} if} {exit} ifelse} def /octalnum {8 mul octalproc add 8 mul octalproc add chararray exch get exec} bind def % TXTWIDE FITTING SERVICE UTILITIES % ================================= % longstringadj currently lets an all print string longer than % txtwide invade the margin, rather than forcing a break or error /longstringadj {dup txtwide ge {pop txtwide 10 div} if} bind def % doeswordfit attempts to add the length of the current trial word to % the present line. It returns a positive value if room remains and % a negative one if not. /doeswordfit {linestring wordstart dup 3 index exch sub getinterval dup dup length 0 gt {stringwidth pop exch length cstretch mul add /wordroom exch def} {pop pop /wordroom 0 def} ifelse roomleft wordroom longstringadj sub dup 0 gt} bind def % tryspacefit attempts to add a space to the end of the existing word. % if it fits, word is accepted. If not, line ends. /tryspacefit {roomleft spacewidth sub dup 0 ge {/roomleft exch def dup 1 add dup /oktohere exch def /wordstart exch def 1 add /numspaces numspaces 1 add def} {pop /wordroom 0 def /oktohere oktohere 1 add def substart dup oktohere sub neg wordtoplist exch /plistlength exch def 0 exch endtheline /wordstart oktohere def startnextline} ifelse } bind def % wordtoplist adds word to printlist if positive length. Start out with % -plistpoint- -charpoint- -startchar- -length- on stack. End with % new word grouip in print array and -newplist- -charpoint-. /wordtoplist {dup 0 gt {mark 3 1 roll dup numchars add /numchars exch def currentfont /showchars cvx ] cvx printlist exch 3 index exch put exch 1 add exch } {pop pop} ifelse } bind def % *** ESCPROC *** % On an escape (or substitute escape) command character ... % yes ------ previous word fit? -------- no % word to printlist closeline % do escape command word to next line always % word to new printlist % do escape command /escproc { doeswordfit {/roomleft exch def dup dup /oktohere exch def /wordstart exch def substart dup oktohere sub neg wordtoplist} {pop substart dup oktohere sub neg wordtoplist exch /plistlength exch def 0 exch endtheline startnextline dup dup /oktohere exch def /wordstart exch def substart dup oktohere sub neg wordtoplist /firstchar -1 def } ifelse /substart oktohere def commands stringmode {getstringchar}{currentfile read} ifelse {get exec}{exit} ifelse } bind def % *** NEWLINEPROC *** % On as carriage return or newline character ... % yes ------ previous word fit? -------- no % update word closeline % closeline word to next line always % closeline /newlineproc {doeswordfit {/roomleft exch def dup dup /oktohere exch def /wordstart exch def substart dup oktohere sub neg wordtoplist /lastparline true def exch /plistlength exch def 0 exch endtheline /wordroom 0 def /firstparline true def startnextline} % word did fit on line {pop substart dup oktohere sub neg wordtoplist exch /plistlength exch def 0 exch endtheline startnextline dup dup /oktohere exch def /wordstart exch def substart dup oktohere sub neg wordtoplist /lastparline true def exch /plistlength exch def 0 exch endtheline /firstparline true def /wordroom 0 def startnextline % word did not fit on line } ifelse pop 0 /substart 0 def /wordstart 0 def /oktohere 0 def /firstchar -1 def} bind def % *** SPACE PROC *** % Leading spaces are ignored in an ongoing paragraph with the firstchar test. % For speed, "words" may include internal spaces if there is enough room. % % yes ------ previous word fit? -------- no % update word closeline % yes --- word+space fit? -- no word to next line always % update word closeline yes -- word+space fit? --- no % update word closeline /spaceproc { dup firstchar ne {linestring 1 index 32 put doeswordfit {/roomleft exch def dup 1 sub /oktohere exch def tryspacefit} {pop substart dup oktohere sub neg wordtoplist exch /plistlength exch def 0 exch endtheline startnextline tryspacefit} ifelse} if} bind def % *** SWALLOW AND HANG *** % swallowandhang is a dual purpose proc that swallows any trailing spaces % and optionally hangs punctuation for center, right, and fill justification. % The swallowlist decides which characters get acted on for hanging. % The "1" before the hung character lets you individually customize overhang. % hangfract lets you adjust the overhang of all characters together. /swallowlist 256 array def 0 1 255 {swallowlist exch {exit} put} for swallowlist dup ( ) 0 get {swallow} put dup (-) 0 get {1 (-) hangpunct} put dup (.) 0 get {1 (.) hangpunct} put dup (,) 0 get {1 (,) hangpunct} put dup (;) 0 get {1 (;) hangpunct} put dup (:) 0 get {1 (:) hangpunct} put dup (") 0 get {1 (") hangpunct} put dup (') 0 get {1 (') hangpunct} put dup (}) 0 get {1 (}) hangpunct} put dup 41 {1 (\051) hangpunct} put % closing parenthesis dup 177 {1 (\261) hangpunct} put % em dash dup 208 {1 (\320) hangpunct} put % en dash dup 186 {1 (\272) hangpunct} put % closing double quote pop % hangpunct shortens roomleft if hanging is wanted. /hangpunct { hangflag { stringwidth pop mul hangfract mul roomleft exch add /roomleft exch def} {pop pop} ifelse exit } bind def % swallow removes one leading space /swallow {/lopspaces lopspaces 1 add def} bind def % swallowandhang first tests for a normal showchars ending. It then runs % sandh to do the actual swallowing or punctuation hanging. /swallowandhang { printlist plistlength 1 sub get dup dup length 4 eq {3 get cvlit /showchars eq {sandh}{pop pop} ifelse} {pop pop} ifelse } bind def % sandh grabs the last string of characters and works backwards through % them, providing a count of total trailing spaces, and hanging selected % punctuation. The roomleft is then adjusted accordingly. /sandh {/lopspaces 0 def dup 0 get exch 1 get linestring 3 1 roll getinterval /laststring exch def laststring length 1 sub -1 0 {laststring exch get swallowlist exch get exec} for /roomleft lopspaces spacewidth mul roomleft add def /numchars numchars lopspaces sub def /numspaces numspaces lopspaces sub def} bind def % *** LINE CONTROLS ****** % startnextline resets pointers, handles indents, sets up first move. /startnextline { oktoadvance {/ypos ypos yinc lastparline {ypara add} if sub def } if % move to next line colcheck % link to page template /lastparline false def % can't be the last line /substart wordstart def % point to start of current word /numspaces 0 def % character+space line count /numchars 0 def % space line count /tabcount 0 def % tab count 0 firstparline {pmrun add /firstparline false def} if % pm indent? dropflag {dropcount 0 ge {dropindent add /dropcount dropcount 1 sub def dropcount 0 eq {/dropflag false def} if} if} if % indent dropcap? dup wordroom add neg txtwide add txtwideadj /roomleft exch def printlist 0 [ 3 index /xymove cvx ] cvx put pop exch pop 1 exch dup /firstchar exch def} bind def % endtheline executes a justify proc to set xfix, yfix, cfix and sfix % and then conditionally prints the printlist ... /endtheline { justx cvx exec oktoprint {printline} if} bind def % *** JUSTIFY PROCS ******** % The justify procs take the character count, the space count, and roomleft % and convert these into xfix and yfix entire line offsets and % cfix and sfix character and space kerning. /justC {swallowandhang /sfix sstretch def /cfix cstretch def /xfix roomleft 2 div def /yfix 0 def} bind def /justF {lastparline {justifylastline {reallyjustF} {justL adjustlastline} ifelse }{reallyjustF} ifelse} bind def /justL {/sfix sstretch def /cfix cstretch def /xfix 0 def /yfix 0 def} bind def /justR {swallowandhang /sfix sstretch def /cfix cstretch def /xfix roomleft def /yfix 0 def} bind def /reallyjustF {swallowandhang roomleft numchars 1 sub numspaces spacecharratio mul add dup 0 eq {pop 0.001} if div dup cstretch add /cfix exch def spacecharratio mul sstretch add /sfix exch def /xfix 0 def /yfix 0 def} bind def % unconditional justF % optional additional final line stretch is used only if it uses up less % than 80 percent of the remaining room. Otherwise might look cramped /adjustlastline { numchars 1 sub numspaces spacecharratio mul add lastlinestretch mul roomleft 0.8 mul lt {/cfix cfix lastlinestretch add def /sfix sfix lastlinestretch spacecharratio mul add def} if} def % *** PRINT MODULE ******** % printline accepts a series of procs from the printlist and executes them % It expects a printlist of form [{proc1}{proc2}{proc3}...{procn] and % these variables predefined ... % plistlength % length of printlist % sfix % total space kerning for line % cfix % total character kerning for line % xfix % total x-shift for line (for centering, rj, etc.) % yfix % total y-shift for line (normally zero) % indent % first line or drop cap indent /sfix 0 def /cfix 0 def /xfix 0 def /yfix 0 def % defaults /printline {gsave 0 1 plistlength 1 sub {printlist exch get exec} for grestore} bind def % some often-used print-time macros . . . % -stringstart- -stringlength- -madefontdict- showchars --> images string at % the currentpoint. /showchars { setfont linestring 3 1 roll getinterval sfix 0 32 cfix 0 6 -1 roll awidthshow1} bind def /rshowchars {show1} def % overstrike to compile link % -indent- xymove ---> does absolute move to xpos + indent, ypos /xymove {xpos add xfix add ypos yfix add moveto} bind def % these two links have to stay unbound for Distillery or self-compiling /show1 {show} def /awidthshow1 {awidthshow} def % %%% MAIN GONZO JUSTIFY ROUTINE %%% % startgonzo reads the currentfile, either piling up printable characters % into linestring, or acting out escape or space commands. % and here's gonzo ... /initgonzostuff { /wordroom 0 def /firstparline true def /lastparline false def /wordstart 0 def /substart 0 def /roomleft txtwide def /oksofar 0 def /numchars 0 def /lopcount 0 def /firstchar -1 def /tabcount 0 def /gotcr false def } bind def /startgonzo {initgonzostuff 0 0 printlist 2 index [0 /xymove cvx] cvx put exch 1 add exch {currentfile read {chararray exch get exec}{exit} ifelse} loop pop pop % remove pointers from stack } bind def % stringgonzo is similar to startgonzo, except that it accepts an % input string instead of the currentfile. This is handy for deferred % or predefined uses. stringgonzo is significantly (25%) slower than % startgonzo. An extra carriage return is always added to the string end. % to make sure the last line prints. % Current bugs: can't embed printable \ with \\ or \134 and an extra % carriage return or double space MUST follow stringgonzo to stay error free. /stringgonzo {initgonzostuff dup length 1 add dup /gslen exch def string dup /gonzostring exch def exch 0 exch putinterval gonzostring gslen 1 sub 13 put /gsptr 0 def /stringmode true def 0 0 printlist 2 index [0 /xymove cvx] cvx put exch 1 add exch {getstringchar {chararray exch get exec}{exit} ifelse} loop pop pop /stringmode false def } bind def /getstringchar {gsptr gslen ge{ false } {gonzostring gsptr get true} ifelse /gsptr gsptr 1 add def} bind def % CALLOUT JUSTIFY MODES % cl accepts an input of form xpos ypos (message) cl and shows it % at xpos left and within xpos + textwide right. /cl {save /snapcl exch def /linestring linestring2 def /justx (justL) def 3 1 roll /ypos exch def /xpos exch def stringgonzo snapcl restore} def % cf accepts an input of form xpos ypos (message) cf and shows it % flush left at xpos and flush right at xpos + textwide. /cf {save /snapcf exch def /linestring linestring2 def /justx (justF) def 3 1 roll /ypos exch def /xpos exch def stringgonzo snapcf restore} def % cc accepts an input of form xpos ypos (message) cc and centers it % on xpos. txtwide IS IGNORED, AND ANY WIDTH WILL GET CENTERED. /cc {save /snapcc exch def /linestring linestring2 def /txtwide 5000 def /justx (justC) def /pmrun 0 def 3 1 roll /ypos exch def 2500 sub /xpos exch def stringgonzo snapcc restore} def % cr accepts an input of form xpos ypos (message) cr and sets it % flush right against xpos. txtwide IS IGNORED, AND ANY WIDTH % WILL SET FLUSH RIGHT. /cr {save /snapcm exch def /linestring linestring2 def /txtwide 5000 def /justx (justR) def /pmrun 0 def 3 1 roll /ypos exch def 5000 sub /xpos exch def stringgonzo snapcm restore} def % COMPILING ROUTINES % Compiling can be done either to the host (using a two way comm % channel or to hard disk. The compiled files are Adobe Distillery % compatible but slightly shorter and faster. They can be further % sped up and shortened with an add-on utility. % To compile, issue a compiletohost or a compiletodisk after beginning % gonzo. /compiletohost {/hostcompflag true def sendcompileheader} def /compiletohost {/diskcompflag true def sendcompileheader} def /send { dup hostcompflag { print flush hostcompdelay {37 sin pop} repeat}{pop} ifelse dup diskcompflag { writehere }{pop} ifelse pop } def % TEMPLATE LOADER % starttemplate opens a template whose name is on the top of the stack and % executes an internally defined template command templatestartup /starttemplate {begin templatestartup} def %%%%%%%%% % SIMPLE TEXT DUMPER % This default text dumper template is useful for "just dump the text" % applications. The | and \ characters are handled as ordinary text in % this example. The only gonzo commands used are for the carriage return % and the linefeed. A "double escape" | | exits you. % This template is also useful to list your gonzo programs while PRINTING % (rather than executing) all internal gonzo commands. (!!!) % Note that any template MUST have an internal proc named templatestartup % and that your template MUST NOT call gonzofont before run time. 300 dict /dumpasciitext exch def dumpasciitext begin /templatefonts{ /font1 /Helvetica 8 gonzofont % regular text (defer till run time) /font2 /Helvetica-Bold 7 gonzofont % header font (defer till run time) } def /txtwide 230 def % width of column /pm 0 def % no paragraph indents /lmpos 60 def % horizontal left margin /yinc 9.5 def % vertical line spacing /ytop 720 def % top column reference /ybot 50 def % bottom column reference /pagenum 1 def % initial pagenumber /numcolumns 2 def % number of columns /colspace 260 def % spacing between columns % colcheck does all the work in a pagemaker. It is automatically called % at the start of each new printable line. It can make room for figures, etc. /colcheck {ypos ybot lt {column# numcolumns ge {showpage /ypos ytop def /xpos lmpos def /column# 1 def header footer}{/ypos ytop def /xpos xpos colspace add def /column# column# 1 add def} ifelse} if} def % This particular header puts the pagenumber into a message string and % shows it at the right margin of the rightmost column. You can do % left-right and otherwise get as fancy as you care to here ... /header {gsave spacewidth font2 rpagenum (xxxxxx) cvs dup length 5 add string dup 0 (page ) putinterval dup 5 3 index putinterval exch pop lmpos numcolumns 1 sub colspace mul add txtwide add exch ytop yinc 2.5 mul add exch cr grestore /rpagenum rpagenum 1 add def /spacewidth exch def } def /footer {} def % none today /templatestartup { templatefonts font1 /column# 1 def /xpos lmpos def /ypos ytop def/gonzojust false def /rslashok false def /rpagenum pagenum def header footer} def % exitcheck lets you decide how to exit your ASCII text dumper, and can get % VERY sticky. This example uses a double | | as a "double escape". This % trick lets you use this template to print a gonzo LISTING that has all % of the gonzo commands in it (!), but acts improperly on none of them. /asciiexitchar (|) def % exit character reserved if preceeded by altescchar /exitcheck {currentfile read {dup asciiexitchar 0 get eq {pop exitproc} {/chold1 exch def altescapechar chartolinestring chold1 chartolinestring} ifelse}{exitproc} ifelse} def end % dumpasciitext template % Here is a PostScript "textonly" convenience operator that speeds up % text dumping... /textonly {dumpasciitext starttemplate startgonzo} def %%%%%%%%% % SIMPLE PAGE MAKING TEMPLATE % This default gonzo page making template is a useful starting point for % creating your own custom templates. It handles multiple columns and % left-right page numabered headers. All gonzo commands are supported. % Note that there is NO difference between a pagemaker and an emulator. % Everything is programmable, so just rearrange things to suit yourself. % Full document control (for figures etc) is done by extending colcheck. % Note that any template MUST have an internal proc named templatestartup % and that your template MUST NOT call gonzofont before run time. 300 dict /simplepages exch def simplepages begin /templatefonts { % Remember: all fonts MUST defer till run time! /font0 /Times-Bold [54 0 0 54.2 0 -32] gonzofont % drop cap /font1 /Times-Roman 9.75 gonzofont % main text /font2 /Times-Italic 9.75 gonzofont % main italic /font3 /Times-Bold 9.75 gonzofont % main bold /font4 /Times-Roman 9 gonzofont % capnum text /font5 /Times-Italic 9 gonzofont % capnum italic /font6 /Times-Bold 9 gonzofont % capnum bold /font7 /Times-Bold [9.75 0 0 9.5 0 -6] gonzofont % lowered subheader /font= /Symbol 9.75 gonzofont % its greek to me /font- /ZapfDingbats [9 0 0 9 0 4] gonzofont % dingbats } def % values used by gonzo justify ... /colspace 175 def % spacing between columns /cstretch 0.2 def % minimum character kerning /dropcount 4 def % number of lines drop cap drops /lastlinestretch 0.06 def % open last paragraph line slightly /pm 10 def % use paragraph indents /sstretch -0.3 def % minimum space kerning /txtwide 155 def % width of column /ybot 50 def % bottom column reference /yinc 10.5 def % vertical line spacing /ytop 715 def % BASE of top column reference /yinc 10.5 def % vertical line spacing % additional values used by this template /firstpagespecial false def % special treatment for first page? /lmpos 60 def % horizontal left margin /numcolumns 3 def % number of columns /oddpageright true def % are odd numbered pages on the right? /rightpage false def % start with righthand page? /pagenum 1 def % running pagenumber % These macros handle an initial drop cap and low center subheads ... /amacro {(zy0) stringmacro /ypos ypos ypara add def} def % start drop cap /bmacro {(iFy1) stringmacro /ypos ypos ypara add def} def % finish drop cap /cmacro {(znyC7) stringmacro /ypos ypos ypara 2 mul add def} def % centered title /dmacro {(pF1) stringmacro /ypos ypos ypara 2 mul add def} def % normal text after centered title % colcheck does all the work in a pagemaker. It is automatically called % at the start of each new printable line. It can make room for figures, etc. /colcheck {ypos ybot lt {column# numcolumns ge {showpage /ypos ytop def /xpos lmpos def /column# 1 def header footer}{/ypos ytop def /xpos xpos colspace add def /column# column# 1 add def} ifelse} if} def % This particular header picks different formats for left and right pages /header {pagenum cvi 2 mod 0 eq rightpage {not} if {leftheader} {rightheader} ifelse /pagenum pagenum 1 add def} def /headerstripe {gsave xpos ytop 19 add moveto colspace numcolumns 1 sub mul txtwide add 0 rlineto 0.5 setlinewidth stroke} def /leftheader {gsave spacewidth font2 pagenum (xxxxxx) cvs dup length 5 add string dup 0 (page ) putinterval dup 5 3 index putinterval exch pop lmpos exch ytop yinc 2.5 mul add exch cl grestore headerstripe /spacewidth exch def} def /rightheader {gsave spacewidth font2 pagenum (xxxxxx) cvs dup length 5 add string dup 0 (page ) putinterval dup 5 3 index putinterval exch pop lmpos numcolumns 1 sub colspace mul add txtwide add exch ytop 25 add exch cr grestore headerstripe /spacewidth exch def} def /firstpageheader {} def % nothing special today /footer {gsave xpos ybot 6 sub moveto colspace numcolumns 1 sub mul txtwide add 0 rlineto 1.5 setlinewidth stroke} def /templatestartup { templatefonts font1 /column# 1 def /xpos lmpos def /ypos ytop def /gonzojust true def /rslashok true def header footer} def end % simplepages template %%%%%%%%%%%%%%%% end % entire gonzo dictionary %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % END OF GURU'S GONZO JUSTIFY UTILITIES AND TEMPLATES % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% statusdict begin statusdict /setduplexmode known {true setduplexmode} if end systemdict /setstrokeadjust known {true setstrokeadjust} if /mastergray {0.96} def % sets overall light grade shade %%%%%%%%%%%%%%%%% % Here's some needed routines not yet in GUTILITY.PTL or GONZO13A.PTL %............... % roundbox draws a box path with rounded corners and locks you to the % lower lefthand box corner using this format ... % -xpos- -ypos- -yheight- -cornerrad- roundbox /roundbox {gsave /rad exch def /bt exch def /br exch def /bb exch def /bl exch def bl bb translate rad mark br 2 div 0 0 0 0 bt br bt br 0 br 2 div 0] roundpath} def % vrule gives a fixed vertical rule, inputting xpos ystart yend linewidth /vrule {gsave newpath setlinewidth 2 index 4 2 roll moveto exch lineto 0 setgray stroke grestore} def % hrule gives a fixed horizontal rule, inputting ypos xstart xend linewidth /hrule {gsave newpath setlinewidth 1 index 4 2 roll moveto lineto 0 setgray stroke grestore} def % mergestr is a tool useful for page numbers; evenutally it will go % into the nuisance dictionary /mergestr {2 copy length exch length add string dup dup 4 3 roll 4 index length exch putinterval 3 1 roll exch 0 exch putinterval} def % this is a repeat of the GONZO13B callout width proc ... gonzo begin /endtheline {/curwide txtwide roomleft sub def justx cvx exec oktoprint {printline} if} bind def /cw {save /snapc1 exch def /oktoadvance false def /oktoprint false def /linestring linestring2 def /justx (justL) def 3 1 roll /ypos exch def /xpos exch def stringgonzo curwide snapc1 restore} def end gonzo begin % This is the core keystone code routine. It works by taking an average % of the first two and last two string lengths to determine the keystone % slope, increment, and starting width. It then checks the length of % each line and extends the starting width as needed so everything fits. /keyproc {/kadj exch def /msg exch def /yy1 exch def /xx1 exch def mark {msg (\n) search {exch pop exch /msg exch def dup length 0 le {pop} if}{dup length 0 le {pop} if exit} ifelse} loop ] /karray exch def 0 0 karray 0 get cw 0 0 karray 1 get cw add 2 div dup 0 0 karray dup length 1 sub get cw 0 0 karray dup length 2 sub get cw add 2 div sub neg karray length 1 sub div dup /kinc exch def 2 div sub /kstart exch def /txtwide 10000 def 0 0 1 karray length 1 sub {/kpn exch def 0 0 karray kpn get cw kstart kinc kpn mul add sub 2 copy lt {exch} if pop} for kstart add 1.01 mul dup /kstart exch def /txtwide exch def /justifylastline true def 0 1 karray length 1 sub { /posn exch def yy1 xx1 kstart kadj exch posn karray exch get cf /txtwide txtwide kinc add def /xx1 xx1 kinc kadj def /yy1 yy1 yinc sub def} for} def % these are the three keystone routines. Use xpos ypos true (msg strings) % cck, etc. true for keystone; false for ordinary justify. /cck {save /keysnap exch def exch {{2 div sub} keyproc} {cc} ifelse keysnap restore} def % callout centered keystone /clk {save /keysnap exch def exch {{pop} keyproc} {cl} ifelse keysnap restore} def % callout left keystone /crk {save /keysnap exch def exch {{sub} keyproc} {cr} ifelse keysnap restore} def % callout right keystone end % close gonzo dictionary %%%%%% doembeddedproc executes |/name installdoembeddedproc links it /doembeddedproc {mark 50 {stringmode {getstringchar}{currentfile read} ifelse not {exit} if dup dup dup 32 eq exch 13 eq or exch 10 eq or {pop exit} if} repeat counttomark dup string /pstr1 exch def 1 sub -1 0 {pstr1 3 1 roll exch put} for pstr1 exch pop cvx exec} def /installdoembeddedproc {gonzo begin commands (/) 0 get {doembeddedproc} put end} def installdoembeddedproc %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% your gonzo code goes here. The usual way of starting it is with %% gonzo begin %% ps.util.1 begin %% printerror %% nuisance begin %% Additional use details appear in the POSTSCRIPT BEGINNER STUFF %% package from SYNERGETICS. % ============== end gonzo utilities ===================== % Gonzo character colorizer /blueon {mark /blue cvx 0.33 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /blueoff {mark /lime cvx 0 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton {mark 0.33 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tintoff {mark 0 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def %%%%%%%%%%%%%% COMPACT VERSION OF COLORIZER II %%%%%%%%%%%%%%%%%%%%%% /settint {dup /currenttint exch store 5.999 mul dup floor cvi /&cbar exch store dup floor sub /&cwt exch store [ {/setgray [ /dup cvx 0.3 &cwt 0.59 mul add /ge cvx [1 /exch cvx &cwt 0.59 mul 0.30 add /sub cvx 1 &cwt sub 0.59 mul 0.11 add /div cvx /dup cvx 1 &cwt sub /mul cvx &cwt /add cvx /exch cvx ] cvx [ &cwt 0.59 mul 0.3 add /div cvx /dup cvx &cwt /mul cvx 0] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.59 1 &cwt sub 0.3 mul add /ge cvx [1 &cwt sub 0.3 mul 0.59 add /sub cvx &cwt 0.3 mul 0.11 add /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx /exch cvx 1 /exch cvx] cvx [1 &cwt sub 0.3 mul 0.59 add /div cvx /dup cvx 1 &cwt sub /mul cvx /exch cvx 0] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.59 &cwt 0.11 mul add /ge cvx [&cwt 0.11 mul 0.59 add /sub cvx 1 &cwt sub 0.11 mul 0.30 add /div cvx /dup cvx 1 &cwt sub /mul cvx &cwt /add cvx 1 /exch cvx] cvx [0 /exch cvx &cwt 0.11 mul 0.59 add /div cvx /dup cvx &cwt /mul cvx] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.59 1 &cwt sub mul 0.11 add /ge cvx [1 &cwt sub 0.59 mul 0.11 add /sub cvx &cwt 0.59 mul 0.30 add /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx 1] cvx [0 /exch cvx 1 &cwt sub 0.59 mul 0.11 add /div cvx /dup cvx 1 &cwt sub /mul cvx /exch cvx] cvx /ifelse cvx /setrgbcolor cvx] cvx /def cvx} {/setgray [/dup cvx 0.11 &cwt 0.30 mul add /ge cvx[&cwt 0.30 mul 0.11 add /sub cvx 1 &cwt sub 0.30 mul 0.59 add /div cvx /dup cvx 1 &cwt sub /mul cvx &cwt /add cvx /exch cvx 1] cvx [ &cwt 0.30 mul 0.11 add /div cvx /dup cvx &cwt /mul cvx /exch cvx 0 /exch cvx ] cvx /ifelse cvx /setrgbcolor cvx ] cvx /def cvx} {/setgray [ /dup cvx 0.30 1 &cwt sub 0.11 mul add /ge cvx[ 1 /exch cvx 1 &cwt sub 0.11 mul 0.30 add /sub cvx &cwt 0.11 mul 0.59 add /div cvx /dup cvx &cwt /mul cvx 1 &cwt sub /add cvx ] cvx [ 1 &cwt sub 0.11 mul 0.30 add /div cvx /dup cvx 1 &cwt sub /mul cvx 0 /exch cvx] cvx /ifelse cvx /setrgbcolor cvx ] cvx /def cvx} ] &cbar get exec exec} bind def /beige {0.11 settint} def % examples of convenience operators /aqua {0.52 settint} def /blue {0.67 settint} def /lime {0.44 settint} def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% lime %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gonzo begin ps.util.1 begin printerror nuisance begin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % starttext % NOTE THAT ALL PS FILENAME STRINGS !!!DEMAND!!! DOUBLE REVERSE SLASHES. % GONZO20A Guru Gonzo PostScript power tools (Interim release) % Includes gonzo justification and layout utilities. % Copyright c 1990, 1996, 2001 by Don Lancaster and Synergetics, Box 809, % Thatcher Arizona, 5552 (928) 428-4073 don@tinaja.com support % via http://www.tinaja.com All commercial rights and all electronic % media rights **FULLY** reserved. Reposting is expressly forbidden. % Many routines removed and cleaned at #58 %%%%%%%%%%% links menu directory %%%%%%%%%%%% % This code locks pdfmark commands out of a PostScript printer. /pdfmark where {pop}{userdict /pdfmark /cleartomark load put} ifelse % /surl "start url" marks the beginning of a text sequence to be urled. % It also paints the text blue... /surl {mark /blue cvx 0.33 /setgray cvx % change text to blue /currentpoint cvx % remember box start /urly /exch cvx /store cvx /urlx /exch cvx /store cvx ] cvx % complete deferred command printlist exch 3 index exch put % stuff into gonzo printlist exch 1 add exch % increment gonzo list count } def % /eurl "end url" unmarks the end of a text sequence and sets up % the pdfmark needed to define the Acrobat web link. /eurl {mark % start deferred proc exch % position url string % /black cvx 0 /setgray cvx % turn blue marker off % maintextcolor /setrgbcolor cvx % reset to main text color??? /aqua cvx /black cvx /makeurl cvx % defer call of url builder ] cvx % complete deferred proc printlist exch 3 index exch % stuff into gonzo printlist put exch 1 add exch % increment gonzo list count } def % /makeurl generates the pdfmark, receiving a {(urlstring) makeurl}. % Note that it is not called until formatted printlist time... /urlover 0.2 def % fraction of hot area over bounds /makeurl { /cururlname exch store % save the url string mark % start pdfmark currentfont /ScaleMatrix get 3 get /fsize exch store % guess height /Rect [ urlx fsize urlover mul sub % set box left x urly fsize urlover mul sub % set box left y currentpoint exch fsize urlover mul add exch fsize add ] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ .7 0 0 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators } def % /makeurlx generates the box specific pdfmark, receiving % a {(urlstring) makeurl}. % Note that it is not called until formatted printlist time... /makeurlx { /cururlnamex exch store % save the url string mark % start pdfmark /Rect [ xpos % set box left x ypos 0.9 sub % set box left y xpos 2.8 add % box right x ypos 0.9 sub 2.8 add % box right y ] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ .7 0 0 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators } def /maintextcolor {0 0 0 } def % zzzz keep for search marker % dictionary method << % entered during gg108 and revision /adot (http://www.azdot.gov/) /cluff (http://www.azgfd.gov/outdoor_recreation/wildlife_area_cluff.shtml) /tramshow.pdf (http://www.tinaja.com/glib/tramshow.pdf) /gilahike.asp (http://www.tinaja.com/gilahike.asp) /usgsaz (http://waterdata.usgs.gov/az/nwis/rt) /bajada (http://www.britannica.com/EBchecked/topic/49396/bajada) /agave (http://en.wikipedia.org/wiki/Agave) /loess (http://en.wikipedia.org/wiki/Loess) /azland (http://www.land.state.az.us/) /aquaduct (http://en.wikipedia.org/wiki/Aqueduct) /quaternary (http://en.wikipedia.org/wiki/Quaternary) /mtgraham (http://en.wikipedia.org/wiki/Mount_Graham) /twinboobs (http://mapper.acme.com/?ll=32.76604,-109.73569&z=18&t=S&marker0=32.69806%2C-109.70694%2Cartesia\%2C%20az) /switch (http://mapper.acme.com/?ll=32.76158,-109.77983&z=16&t=S&marker0=32.69806%2C-109.70694%2Cartesia\%2C%20az) /emailneely (mailto:neely@mail.utexas.edu) /utexas (http://www.utexas.edu/) /neelypap (http://www.tinaja.com/glib/neely1.pdf) /draganfly (http://www.draganfly.com) /safgrid (http://www.amazon.com/exec/obidos/ISBN=0816524289/donlancastersgurA/) /bestgrid (http://www.tinaja.com/images/bestgrid.jpg) /ccc (http://en.wikipedia.org/wiki/Civilian_Conservation_Corps) /lbt (http://mgio.arizona.edu/) /fcx (http://www.fcx.com/operations/USA_Safford.htm) /acmemap (http://mapper.acme.com/) % entered during 122 revision of above %yyyy /safford (http://en.wikipedia.org/wiki/Safford,_Arizona) /gila (http://en.wikipedia.org/wiki/Gila_River) /mesa (http://en.wikipedia.org/wiki/Mesa) /frenchdrain (http://en.wikipedia.org/wiki/French_drain) /impremeable (http://en.wikipedia.org/wiki/Permeability) /waterlevel (http://en.wikipedia.org/wiki/Water_level) /stratigraphy (http://en.wikipedia.org/wiki/Stratigraphy_(archaeology)) /association (http://en.wikipedia.org/wiki/Archaeological_association) /scs (http://en.wikipedia.org/wiki/Natural_Resources_Conservation_Service) /allendam.pdf (http://www.tinaja.com/glib/allendam.pdf) /patina (http://en.wikipedia.org/wiki/Desert_varnish) /caliche (http://en.wikipedia.org/wiki/Caliche) /lichen (http://en.wikipedia.org/wiki/Lichen) /holocene (http://en.wikipedia.org/wiki/Holocene) /precambrian (http://en.wikipedia.org/wiki/Precambrian) /eac (http://www.eac.edu/) /ockham (http://en.wikipedia.org/wiki/Occam's_razor) /mceniry (http://www.google.com/url?sa=t&source=web&cd=1&ved=0CBgQFjAA&url=http%3A//uair.arizona.edu/system/files/usain/download/azu_m9791_t839p_w.pdf&rct=j&q=mceniry%20tunnel%20triumph&ei=ZasrTZnJAoGBlAf855zCAQ&usg=AFQjCNER5yISYTDV-ZUVIvntqfcoKzzntw&sig2=HhK2_76v6unM3__hfOigMQ&cad=rja) /boondoggle (http://en.wikipedia.org/wiki/Boondoggle_(project)) /csi (http://en.wikipedia.org/wiki/Crime_scene_investigator) /agf (http://www.azgfd.gov/) /Hangcan1 (http://www.tinaja.com/images/hangcan1.jpg) % earlier removed % earlier retained /gurgrm01 (http://www.tinaja.com/gurgrm01.shtml) /tinaja (http://www.tinaja.com) /maildon (mailto:don@tinaja.com) >> {mark exch /eurl cvx ] cvx def} forall %%%%%%%%%%%%%%%%%%%% end urls %%%%%%%%%%%%%% %%%%%%%%%%%%%%%% New colorizer defs %%%%%%%%%%%%%%%%%% /boxgrays 0.899 def /grayshade boxgrays def /mastergray boxgrays def /staytint {0.33 setgray} def /staytint1 {0.25 setgray} def /showadgrays true def /red {0 settint} def /Zmacro {staytint /ypos ypos 2 add def 72 300 div setlinewidth xpos ypos moveto txtwide 0 rlineto stroke /ypos ypos -2 add def tintoff} def % hair rule /amacro {(zy0) stringmacro /ypos ypos ypara add def 0.33 setgray } def % start drop cap /bmacro {(iFy1) stringmacro /ypos ypos ypara add def black} def % finish drop cap % Gonzo character colorizer /blueon {mark /blue cvx 0.33 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /blueoff {mark /beige cvx 0 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton {mark 0.33 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1 {mark 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1p {mark /burple cvx % try for aqua after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1r {mark /red cvx % try for aqua after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1a {mark /aqua cvx % try for aqua after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tinton1b {mark /beige cvx % try for beige after url??? 0.25 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def /tintoff {mark 0 /setgray cvx] cvx printlist exch 3 index exch put exch 1 add exch} def %%%%%%%%%%%% begin gonzo %%%%%%%%%%%% /guru { gonzo begin ps.util.1 begin printerror nuisance begin} def % guru % activate gonzo utilities 50 50 10 setgrid % create grid % 56 61 showgrid /setpagefonts { /cstretch 0.015 def /sstretch 0.015 def /font0 /StoneSans-Bold 1.6 gonzofont /font1 /StoneSans 0.95 gonzofont /font2 /StoneSans [0.95 0 0.25 0.95 0 0 ] gonzofont /font4 /StoneSans 0.85 gonzofont /font3 /StoneSans-Bold 0.85 gonzofont /font6 /StoneSans-Bold 0.85 gonzofont /font7 /StoneSans-Bold 1.05 gonzofont % subheaders /font8 /StoneSans-Bold [0.65 0 0 0.65 0 0.4] gonzofont /txtwide 36 store /yinc 1.2 store /kern 0.1 store /pm 1.5 store aqua 0.33 setgray font1 black /amacro { mark /aqua cvx 0.33 /setgray cvx ] cvx printlist exch 3 index exch % stuff into gonzo printlist put exch 1 add exch } def /bmacro { mark /black cvx ] cvx printlist exch 3 index exch % stuff into gonzo printlist put exch 1 add exch } def /shiftin {xpos /xposhold exch store /xpos xpos 3 add store} def /shiftout {/xpos xposhold store} def /texttop 51 store /textleft 3 store /cmacro {aqua 0.25 setgray (znhL7) stringmacro /xpos xpos 1.7 sub store /ypos ypos .1 sub def } def % left title /dmacro {black (pL1hz) stringmacro /xpos xpos 1.7 add store /ypos ypos .1 add def} def % normal text after centered title /fmacro % try and fake | {mark /gsave cvx /currentpoint cvx /moveto cvx 0.1 /setlinewidth cvx 0 0.65 /rlineto cvx /stroke cvx /grestore cvx ] cvx printlist exch 3 index exch put % stuff into gonzo printlist exch 1 add exch % increment gonzo list count } def } def setpagefonts % -2 50.5 (optional header here \274) cl %% Set document opening conventions. Note DOCVIEW limited. [/CropBox [0 0 520 620] % set the wierd size /PAGES pdfmark [ {Catalog} << /ViewerPreferences << /FitWindow true /CenterWindow true >> /PageLayout /OneColumn % continous /Pagemode /UseNone % no thumbs /View [/XYZ null null 1 ] % force 100% >> /PUT pdfmark %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% page manager /pagenum 1 store /startnewpage { black beige 0.35 setgray 21 -2.5 (|3\320|j|j) ggnum 10 string cvs mergestr (|j.|j) mergestr pagenum 10 string cvs mergestr (|j|j\320) mergestr cc aqua showpage %% start next page /pagenum pagenum 1 add store 50 50 10 setgrid % create grid setpagefonts font1 textleft texttop } def /su {surl font6} store /to {tinton1 font6} store /tx {tintoff font1} store /tabs [7 20] store %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Burplebox routines /burpwide 29.5 store /burpcom {save /burpx exch store /bht exch store save /burp1 exch store xpos ypos translate -1 .2 mt bht yinc mul .4 add pd burpwide pr bht yinc mul .4 add pu closepath 0.9 setgray fill burp1 restore} store /burpwidew 32 store /burpcomw {save /burpx exch store /bht exch store save /burp1 exch store xpos 1 sub ypos translate 0 .2 mt bht yinc mul .4 add pd burpwidew pr bht yinc mul .4 add pu closepath 0.9 setgray fill burp1 restore} store { /burplebox1 {1.5 burpcom} store /burplebox1.5 {2 burpcom} store /burplebox2 {2.5 burpcom} store /burplebox2.5 {3 burpcom} store /burplebox3 {3.5 burpcom} store /burplebox3.5 {4 burpcom} store /burplebox4 {4.5 burpcom} store /burplebox4.5 {5 burpcom} store /burplebox5 {5.5 burpcom} store /burplebox5.5 {6 burpcom} store /burplebox6 {6.5 burpcom} store /burplebox6.5 {7 burpcom} store /burplebox7 {7.5 burpcom} store /burplebox7.5 {8 burpcom} store /burplebox8 {8.5 burpcom} store /burplebox8.5 {9 burpcom} store /burplebox9 {9.5 burpcom} store /burplebox9.5 {10 burpcom} store /burplebox10 {10.5 burpcom} store /burplebox10.5 {11 burpcom} store /burplebox11 {11.5 burpcom} store /burplebox11.5 {12 burpcom} store /burplebox12 {12.5 burpcom} store /burplebox11w {11.5 burpcomw} store /burplebox12.5 {13 burpcom} store /burplebox13 {13.5 burpcom} store /burplebox13.5 {14 burpcom} store /burplebox14 {14.5 burpcom} store /burplebox14.5 {15 burpcom} store /burplebox15{15.5 burpcom} store /burplebox15.5{16 burpcom} store /burplebox16 {16.5 burpcom} store /burplebox16.5 {17 burpcom} store /burplebox17 {17.5 burpcom} store /burplebox17.5 {18 burpcom} store /burplebox18 {18.5 burpcom} store /burplebox18.5 {19 burpcom} store /burplebox19 {19.5 burpcom} store /burplebox19.5 {20 burpcom} store /burplebox20 {20.5 burpcom} store /burplebox21.5 {22 burpcom} store /burplebox22{22.5 burpcom} store /burplebox22.5 {23 burpcom} store /burplebox23 {23.5 burpcom} store /burplebox23.5 {24 burpcom} store /burplebox24{24.5 burpcom} store /burplebox25{25.5 burpcom} store /burplebox25.5{26 burpcom} store /burplebox27{27.5 burpcom} store /burplebox28 {28.5 burpcom} store /burplebox28.5 {29 burpcom} store /burplebox30 {30.5 burpcom} store /burplebox31 {31.5 burpcom} store /burplebox31.5 {32 burpcom} store /burplebox33.5 {34 burpcom} store /burplebox34 {34.5 burpcom} store /burplebox38 {38.5 burpcom} store /burplebox38.5{39 burpcom} store /burplebox40{40.5 burpcom} store /burplebox40.5{41 burpcom} store /burplebox41.5{42 burpcom} store /burplebox42 {42.5 burpcom} store /burplebox42.5{43 burpcom} store % nearly a full page /burplebox43 {43.5 burpcom} store } pop 1 1 50 {cvi /size exch store % make all the burpleboxes (burplebox) size 20 string cvs mergestr cvn mark size 0.5 add /burpcom cvx ] cvx store (burplebox) size 0.5 add 20 string cvs mergestr cvn mark size 1 add /burpcom cvx ] cvx store } for /burplebox34w{34.5 burpcomw} store /burplebox34.5w{35 burpcomw} store /burplebox38w{38.5 burpcomw} store /burplebox38.5w{39 burpcomw} store /burplebox40w{40.5 burpcomw} store %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % New sequence of auto positioning figures... % combined autopos jpeg conversion and hotlink: /autoimageandlink1 {save /af1 exch store xpos ypos yinc add translate 6.3 -14.1 684 384 .033 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/bargs/cabsvid1.jpg) % url first % (http://www.tinaja.com/images/bargs/ce47u25v.jpg) % url first (C:\\Documents and Settings\\don\\Desktop\\gurugrams\\78_ebayskill_VI\\cabsvid1.jpg) jpegimageprocwithlink af1 restore} store /autoimageandlink2 {save /af2 exch store xpos ypos yinc add translate 18 -11.8 684 487 .022 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/bargs/ce47u25v.jpg) % url first (C:\\Documents and Settings\\don\\Desktop\\gurugrams\\70_ebayskill_iv\\ce47u25v.jpg) jpegimageprocwithlink af2 restore} store /jpegimageprocwithlink { % hoffset voffset hres vres save /snap2 exch def /infilename exch store % grab passed pix file /inurllink exch store % grab link filename /photoscale exch store /vpixels exch store /hpixels exch store translate % adjust position for final figure ??? inurllink setareaurl % autolink sizing /DeviceRGB setcolorspace % pick color model 0 0 translate % set page position hpixels vpixels scale % magnify unit square photoscale dup scale /infile infilename (r) file def % establish input read file /Data {infile /DCTDecode filter} def % define a data source << % start image dicationary /ImageType 1 % always one /Width hpixels % JPEG width in pixels /Height vpixels % JPEG height in pixels /ImageMatrix [hpixels 0 0 vpixels neg 0 vpixels ] /DataSource Data % proc to get filtered JPEG /BitsPerComponent 8 % color resolution /Decode [0 1 0 1 0 1] % per red book 4.10 >> image % call the image operator ypos snap2 restore /ypos exch def } def /setareaurl { % for auto include routine /cururlname exch store mark % start pdfmark /Rect [ 0 0 hpixels photoscale mul vpixels photoscale mul ] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ .7 0 0 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators } def %%%%%%%%%%%%% ordinary tracking figures /autofig1 { /figadvance 23 store save /snap1 exch store xpos 2 add ypos figadvance sub translate figure1 snap1 restore /ypos ypos figadvance sub yinc sub store } store /autofig2 { /figadvance 13 store save /snap2 exch store xpos 2 add ypos figadvance sub translate figure2 snap2 restore /ypos ypos figadvance sub yinc sub store } store /autofig3 { /figadvance 13 store save /snap2 exch store xpos 2 add ypos figadvance sub translate figure3 snap2 restore /ypos ypos figadvance sub yinc sub store } store /autofig4 { /figadvance 13 store save /snap2 exch store xpos 2 add ypos figadvance sub translate figure4 snap2 restore /ypos ypos figadvance sub yinc sub store } store %%%%%%%%%%%%%%% fixed position figures originally here %%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % temp for first marijilda image needs redune with better addresses /font; /Helvetica [0.7 0 0 0.7 0 0.4] gonzofont font1 /font- /Symbol 0.85 gonzofont aqua 0.33 setgray font0 /narrowx {/txtwide txtwide 8.5 sub store} store /widenx {/txtwide txtwide 8.5 add store} store /burpon {mark /burple cvx 0.33 /setgray cvx ] cvx % additional internal gonzo printlist exch 3 index exch put exch 1 add exch} def /burpoff {mark /aqua cvx 0 /setgray cvx ] cvx printlist exch 3 index exch put exch 1 add exch} def /darkenheader {save /headsnap exch store xpos 1 sub ypos 0.2 add translate 0.3 1 1 setrgbcolor 0 0 mt 3.2 pd burpwide pr 3.2 pu closepath fill headsnap restore} store % /274 is ... % sssssssssssssssssssss % start marker /autoimageandlink1 {save /af1 exch store xpos ypos yinc add translate 0 -24.5 1068 712 .033 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/hangcan1.jpg) % url first % (http://www.tinaja.com/images/bargs/ce47u25v.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\gurugrams\\108_hanging_can\\hangcan1.jpg) jpegimageprocwithlink af1 restore} store /autoimageandlink2 {save /af1 exch store xpos ypos yinc add translate 9.2 -25 979 1305 .0185 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/hangcan4.jpg) % url first % (http://www.tinaja.com/images/bargs/ce47u25v.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\gurugrams\\108_hanging_can\\hangcan4.jpg) jpegimageprocwithlink af1 restore} store %%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Figures specific to the hanging canal paper % %%%%%%%%%%%%%%%%%%%%%%%%%%%%% /autofig1 { /figadvance 7 store save /snap1 exch store xpos 2 add ypos figadvance sub translate clickmap1 snap1 restore /ypos ypos figadvance sub yinc sub store } store %%%%%%%%%%%%%%%%%%%%%%%%%%%% /clickmap1 { % map clicking box 0 -3 translate % adjust page position /cstretch 0 store /sstretch 0 store /font0 /StoneSans-Bold 0.9 gonzofont font0 /yinc 1.5 store 6 3 30 6 1 roundbox gsave 0 1 1 setrgbcolor fill grestore 0.1 0.1 0.3 setrgbcolor 15 3.7 (Click for an interactive Google Earth hanging canal map.) cc 15 1.7 (Re-click for more detail on the individual canals.) cc /cururlname (http://www.tinaja.com/canal/mapimage2.kml) store mark % start pdfmark /Rect [ 0 0 30 6] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ 0 0.7 0.7 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators grestore } store %%%%%% shared code for field notes /sharefield {save /share1 exch store xpos ypos translate /blurb exch store /cururlname exch store -1 -5 translate % adjust page position /cstretch 0 store /sstretch 0 store /font0 /StoneSans-Bold 0.9 gonzofont font0 /yinc 1.5 store 6 3 24 3 1 roundbox gsave 0 1 1 setrgbcolor fill grestore 0.1 0.1 0.3 setrgbcolor 12 1.3 blurb cc mark % start pdfmark /Rect [ 0 0 24 3] /Border [ 0 0 0] % [0 0 0 ] = none; [0 0 2] = debug /Color [ 0 0.7 0.7 ] /Action <> /Subtype /Link /ANN % annotation type pdfmark % call pdf operators grestore share1 restore }store /clickpranch { (http://www.tinaja.com/canal/rework/fieldnotes/pranchnotes2.pdf) (Click for the P Ranch area field notes) sharefield } store /clickledford { (http://www.tinaja.com/canal/rework/fieldnotes/ledfordnotes2.pdf) (Click for the Ledford hanging canal field notes) sharefield } store /clickhenry { (http://www.tinaja.com/canal/rework/fieldnotes/henrynotes2.pdf) (Click for the Henry's hanging canal field notes) sharefield } store /clickmarijilda { (http://www.tinaja.com/canal/rework/fieldnotes/marynotes2.pdf) (Click for the Marijilda hanging canal field notes) sharefield } store /clickroper { (http://www.tinaja.com/canal/rework/fieldnotes/ropernotes2.pdf) (Click for the Roper hanging canal field notes) sharefield } store /clicktranquility { (http://www.tinaja.com/canal/rework/fieldnotes/tranqnotes2.pdf) (Click for the Tranquility hanging canal field notes) sharefield } store /clicktwineast { (http://www.tinaja.com/canal/rework/fieldnotes/twineastnotes2.pdf) (Click for the Twin East hanging canal field notes) sharefield } store /clicktwinwest { (http://www.tinaja.com/canal/rework/fieldnotes/twinwestnotes2.pdf) (Click for the Rincon hanging canal field notes) sharefield } store /clickdeadman { (http://www.tinaja.com/canal/rework/fieldnotes/deadmannotes2.pdf) (Click for the Deadman hanging canal field notes) sharefield } store /clicklongview { (http://www.tinaja.com/canal/rework/fieldnotes/longviewnotes2.pdf) (Click for the Longview Area field notes) sharefield } store /clickriggs { (http://www.tinaja.com/canal/rework/fieldnotes/riggsnotes2.pdf) (Click for the Riggs Area field notes) sharefield } store /clickfrye { (http://www.tinaja.com/canal/rework/fieldnotes/fryenotes2.pdf) (Click for the Frye Mesa field notes) sharefield } store /clickrobinson { (http://www.tinaja.com/canal/rework/fieldnotes/robinsonnotes2.pdf) (Click for the Robinson Canal field notes) sharefield } store /clickallen { (http://www.tinaja.com/canal/rework/fieldnotes/allennotes2.pdf) (Click for the Allen Canal field notes) sharefield } store /clickmud { % enteredclickmud (http://www.tinaja.com/canal/rework/fieldnotes/mudnotes2.pdf) (Click for the Mud Springs Canal field notes) sharefield } store /clickjernigan { (http://www.tinaja.com/canal/rework/fieldnotes/jernigannotes2.pdf) (Click for the Jernigan Canal field notes) sharefield } store /clickshingle { (http://www.tinaja.com/canal/rework/fieldnotes/shinglenotes2.pdf) (Click for the Shingle Mill Area field notes) sharefield } store /clicklefthand { (http://www.tinaja.com/canal/rework/fieldnotes/lefthandnotes2.pdf) (Click for the Lefthand Canal field notes) sharefield } store /clickbear { (http://www.tinaja.com/canal/rework/fieldnotes/bearnotes2.pdf) (Click for the Bear Springs Area field notes) sharefield } store /clickbandolier { (http://www.tinaja.com/canal/rework/fieldnotes/bandoliernotes2.pdf) (Click for the Bandolier Canal field notes) sharefield } store %%%%%%%%%%%%%%%%%%%%%%%%%%%% list of study canals /canallist { save /figsnap1 exch store xpos ypos translate 5 -16.0 translate % adjust page position /cstretch 0 store /sstretch 0 store /font0 /StoneSans-Bold 0.85 gonzofont font0 /font1 /StoneSans-Bold 1.3 gonzofont font0 /yinc 1.5 store 0 0 20 16 1 roundbox gsave clip gsave 0 1 1 setrgbcolor fill grestore gsave newpath 0 13 mt 3 pu 30 pr 3 pd closepath 0 0.7 0.7 setrgbcolor fill white 10 14.2 (SOME HANGING CANALS IN THE STUDY) cc grestore 0.1 0.1 0.3 setrgbcolor /yinc 1.1 store 3 11.5 (P Ranch Ledford|j* Henry's|j* Marijilda|j* Roper|j* Tranquility|j* Twin East|j* Rincon|j* Deadman|j* Longview) cl 11.7 11.5 (Riggs Area Frye Mesa|j* Robinson|j* Allen|j* Mud Springs|j* Jernigan|j* Shingle Mill Lefthand|j* Bear Springs Bandolier) cl grestore grestore figsnap1 restore } store %%%%%%%%%%%%%%%%%%%%%%%%%%%% image stash %%%%%%%%%%%%%%%%%% % images apparently have to be C: local /hang1_image {save /af1 exch store % xpos ypos yinc add translate 3 -0.6 1068 712 .033 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/hangcan1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\hangcan1.jpg) jpegimageprocwithlink af1 restore} store /Hang1 {hang1_image} store /rob1_image {save /af1 exch store % xpos ypos yinc add translate 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/rob1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\gurugrams\\112_hangslide\\rob1.jpg) jpegimageprocwithlink af1 restore} store /Rob1 {rob1_image}store % this needs updated when used /henry1_image {save /af1 exch store % xpos ypos yinc add translate 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/henry1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\henry1.jpg) jpegimageprocwithlink af1 restore} store /Henry1 {henry1_image}store /tranq1_image {save /af1 exch store % xpos ypos yinc add translate 7.5 -0.3 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/tranq1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\tranq1.jpg) jpegimageprocwithlink af1 restore} store /Tranq1 {tranq1_image}store /tranq2_image {save /af1 exch store xpos ypos yinc add translate -2.5 -21.5 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/tranq2.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\tranq2.jpg) jpegimageprocwithlink af1 restore} store /Tranq2 {tranq2_image}store /rinc1_image {save /af1 exch store xpos ypos yinc add translate -2.5 -20.6 translate % adjust page position 8 -0.6 625 528 0.037 % xpos ypos xres yres pixscale (http://mapper.acme.com/?ll=32.76622,-109.73477&z=18&t=S &marker0=32.76580%2C-109.73580%2C2.1%20km%20WxNW%20of%20Cactus%20Flat%20AZ) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rinc1.jpg) jpegimageprocwithlink af1 restore} store /Rinc1 {rinc1_image}store /rinc2_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.8 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/rinc2.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rinc2.jpg) jpegimageprocwithlink af1 restore} store /Rinc2 {rinc2_image}store /threeswitch1_image {save /af1 exch store xpos ypos yinc add translate -2.5 -20.0 translate % adjust page position 8 -0.6 435 327 0.057 % xpos ypos xres yres pixscale (http://mapper.acme.com/?ll=32.76073,-109.78131&z=20&t=S%0A&marker0=32.76073%2C-109.78131%2C6.2%20km%20W%20of%20Cactus%20Flat%20AZ) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\threeswitch.jpg) jpegimageprocwithlink af1 restore} store /Threeswitch1 {threeswitch1_image}store /frye1_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.8 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/frye1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\frye1.jpg) jpegimageprocwithlink af1 restore} store /Frye1 {frye1_image}store /rob1_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.5 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/rob1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rob1.jpg) jpegimageprocwithlink af1 restore} store /Frye1 {frye1_image}store /rob2_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.8 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/rob2.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rob2.jpg) jpegimageprocwithlink af1 restore} store /Rob2 {rob2_image}store /rob3_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.8 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/rob3.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rob3.jpg) jpegimageprocwithlink af1 restore} store /Rob3 {rob3_image}store /allen0_image {save /af1 exch store xpos ypos yinc add translate -2.5 -20.0 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/allen0.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\allen0.jpg) jpegimageprocwithlink af1 restore} store /Allen0 {allen0_image}store /allen1_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.2 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/allen1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\allen1.jpg) jpegimageprocwithlink af1 restore} store /Allen1 {allen1_image}store /mud1_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.2 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/mud1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\mud1.jpg) jpegimageprocwithlink af1 restore} store /Mud1 {mud1_image}store /mud2_image {save /af1 exch store xpos ypos yinc add translate -3.5 -21.2 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/mud2.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\mud2.jpg) jpegimageprocwithlink af1 restore} store /Mud2 {mud2_image}store /troll1_image {save /af1 exch store xpos ypos yinc add translate 4.5 -21.2 translate % adjust page position 0 0 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/troll1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\troll1.jpg) jpegimageprocwithlink af1 restore} store /Troll1 {troll1_image}store /jern1_image {save /af1 exch store xpos ypos yinc add translate -3.5 -20.9 translate % adjust page position 8 -0.6 1000 800 0.027 % xpos ypos xres yres pixscale (http://www.tinaja.com/images/jern1.jpg) % url first (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\jern1.jpg) jpegimageprocwithlink af1 restore} store /Jern1 {jern1_image}store %% much of the above is bypassed by Adobe's dropping Acrodist-F %%%%%%%%%%%%%%%%%%% PAGE DATA STARTS HERE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% xxxxxxxxxxxxxxxxx marker /startpage { 50 50 10 setgrid % create grid setpagefonts black beige 0.35 setgray 21 -2.5 (|3\320|j|j) ggnum 10 string cvs mergestr (|j.|j) mergestr pagenum 10 string cvs mergestr (|j|j\320) mergestr cc black aqua font1 textleft texttop } store /adj2 {/ypos ypos .2 add store} store %%%%%%%%%% PAGE 1 %%%%%%%%%%%%%%%% /dopage1 { /ggnum 123 store /pagenum 1 store /tabs [14] store startpage 0.3 0.5 0.2 setrgbcolor % glitch? 20 48.3 0.7 add % 1 sub (|0Prehistoric |jHanging |jCanals)cc 20 46.3 0.7 add % 1 sub (|0of |jthe |jSafford |jBasin |j(|jUpdate III|j)) cc black font2 textleft 43 (|/aqua |/staytint1 |3Don Lancaster Synergetics, Box 809, Thatcher, AZ 85552 copyright c2010 pub 06/10 rev 08/10 as |/surl |6GuruGram|1|/gurgrm01 |/tinton1 |6#108 revised c2013 pub 07/13 as |/surl |6GuruGram|1|/gurgrm01 |/tinton1 |6#123 |/surl http://www.tinaja.com|/tinaja |/surl don@tinaja.com|/maildon (928) 428-4073 |/aqua |/black |a|0S|b|1|jome recent studies have investigated the scale and scope of a remarkable series of late classic prehistoric (|jest. 1350 CE|j) water management structures found in the |/su Safford|1|/safford Basin of Arizona's upper |/su Gila Valley|1|/gila . These canal systems are uniquely characterized by their being literally "hung" on the edges of steep sided, gently sloping |/su mesas|1|/mesa formed from remnant |/su Quaternary|1|/quaternary age |/su bajadas|1|/bajada . The mesas today are characteristically rocky, sparsely vegetated, thinly soiled, mostly undeveloped, rather impermeable, and largely infertile. |h At places, the hanging structures can be located as much as 60 meters above their surrounding drainage basins. It is clear that |/to the highest feasible points on |/to mesas were carefully selected|/tx for canal routes "on purpose". In several cases, any more direct routes seem to have been clearly avoided. |h It is also quite clear that |/to extreme energy efficiency|/tx was a major goal during the canal construction. Owing largely to an absence of beasts of burden or means of transporting heavy materials significant distances. Two credible reasons for these unique hanging routes is that |/to their slope could be made largely independent of |/to their surrounding terrain|/tx . And that much of the construction effort could be efficiently made |/to across|/tx , rather than |/to along|/tx the canal routes. Thus minimizing any energy robbing cuts and fills. |h Twenty or more distinct hanging canal systems have recently been identified. Many of which trend from southwest to northeast. Eventually leading northward to the Gila River valley proper\274 |h |/clickmap1 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 2 %%%%%%%%%%%%%%%%%%% /dopage2 { /ggnum 123 store /pagenum 2 store /tabs [14] store startpage (|/aqua |1|/to The total system length is estimated at more than sixty kilometers.|/tx The canals seem to totally exploit adjacent |/su Mount Graham|1|/mtgraham perennial streams which include Jacobson, Marijilda, Deadman, Frye, Spring, Shingle Mill, Ash, and Lefthand. And whose present |/su stream flow rates|1|/usgsaz are often in the fractional CFS range. All these systems are clearly distinct from the Gila River bottomland canals. |h Associated with the hanging canals is at least one above-grade solid |/su aqueduct|1|/aquaduct of significant height and length. Along with some apparent elaborate methods of purposeful switching of the water routes between major delivery drainages. In sum, these systems appear to represent a major understanding and a very careful exploitation of both hydraulic fundamentals and extreme energy efficiency. |h Typical cross sections are one meter wide by twenty centimeters deep with maxima in the two meter range. Use seems to be primarily associated with long distance water delivery to conventional northerly fields. Most mesas reveal little other ag activity. |h Assisted by historic rebuilds, |/to several reaches of the canals still flow to this day|/tx . Other portions of most of the systems remain largely pristine. Although currently filled with fine grained and |/su loess-like|1|/loess or sedimentary depositional sands. |h Ownership is often |/su Arizona State Lands|1|/azland that remain undeveloped to date. While often of difficult access, |/to major canal portions are usually easily traced|/tx . There are few access roads and fewer mesa top trails. The canals often create the illusion of "water flowing uphill" in that |/to the mesa top slope is usually somewhat steeper |/to than the rate of fall of the canal system itself|/tx \274 |h ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 3 %%%%%%%%%%%%%%%%%%% /dopage3 { /ggnum 123 store /pagenum 3 store /tabs [14] store startpage (|1After reaching a mesa top through a long, gentle, and an apparently carefully calculated optimal grade and then continuing as far as seems possible along the characteristically flat but gently sloped mesa top, the canal systems will typically "fall off" the far end of their mesa in steep but apparently highly controlled and nondestructive cascades. Some are reminiscent of |/su French Drain|1|/frenchdrain constructs. |h The canals are known or presumed to eventually end up in areas characterized by habitation sites and ag structures such as |/su grids|1|/bestgrid , mulch rings, field houses, linear features, or field areas. One construction time estimate is fifty man years. |h Most systems seem to have a "breakaway" initial diversion point. At which major flood damage would appear to be easily and quickly repaired without significantly impacting the main structural portions of the canals themselves. |h |c Site |jConsiderations |d A reasonable question might be |/to "Why the apparent prehistoric manic obsession |/to with hanging canals purposely built on the edges of steep sided mesas?"|/tx |h Engineering can be defined as |/to a sense of the fitness of things|1|/tx . The following arguments, if accurate and relevant, suggest that "hung" canals could be a superbly energy optimal and engineeringly brilliant solution to reliable long distance water transport with minimal construction energy\274 |/shiftin |/to |/red \267 On a hanging canal, slope is largely independent of terrain.|/tx |/black This infers that optimal flow rates can be set over long distances without much in the way of local topographic restrictions. |h |/aqua |/to \267 On a hanging canal, cuts and fills can be minimized.|/tx Simply by following the contours or crossing them at an intentionally predetermined flow delivery rate. |h |/to \267 On a hanging canal, one canal wall is often "free"|/tx The rising portion of the mesa can form most, if not all, of the canal's inside wall. Which implies that significantly less effort, less construction, and less energy might end up being needed. |h |/to \267 On a hanging canal, long term catastrophic flood damage |/to can be minimal.|/tx Any washouts are likely to be both short and easily repaired. As verified by most portions of most hanging canals surviving to this day. |h |/to \267 Mesa Top Slopes are usually gentle and nearly optimal.|/tx They also often range for long distances at near constant slope. Thus maximizing delivery for minimum construction effort. The mesa tops often include usually |/su impermeable|1|/impremeable rocky soils which might minimize delivery losses. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 4 %%%%%%%%%%%%%%%%%%% /dopage4 { /ggnum 123 store /pagenum 4 store /tabs [14] store startpage (|/shiftin |y |1|/aqua |/to \267 Construction can be mostly across, rather than along the canal.|/tx Far less material often needs moved far shorter distances. This can allow spectacularly impressive energy efficiencies. |h |1|/to \267 Mesa Top use conflicts are less likely.|/tx Fields, grids, mulch rings, and habitation sites are often more favorably located elsewhere. |h|/shiftout |h |c Survey |jInstruments |d |h At present, there are no known surviving instruments that might have been used during the prehistoric canal construction. However; |/to a case can be made that the |/to canals themselves served as self-measuring |/su water levels|1|/waterlevel |/tx . A small, low energy, and a shallow "pilot route" could get extended from the end of any canal under construction and static filled with water just to the point of far end overflow. By noting the depth of the placid water surface below the entry point, the canal slope could be evaluated and then adjusted to be within acceptable bounds. |h Whether or not this was in fact done remains highly speculative. |h |c Evidence |jof |jAge |d |h Beyond the mainstays of |/su stratigraphy|1|/stratigraphy and |/su association|1|/association , few methods are known to accurately date a long range prehistoric delivery canal. Especially one with scant related artifacts. Or one that may have had significant pioneer, |/su CCC|/ccc |1, and/or modern rebuilds and adoptions. Instead, these combined factors all working in concert tend to establish a late classic (|j1350 BP|j) age for many portions of many of the canals in this study\274 |h|/shiftin |/to \267 Energy Efficiency \261 |/tx Prehistoric area cultures typically lacked beasts of burden, scrapers, or any other tools to ease the medium or longer distance transport of heavy materials. Thus, an |/to extreme energy |/to efficiency would likely be a major consideration for any longer |/to distance canal delivery project|/tx . A strong argument can be made that the primary purpose of a hanging canal routing is to make its slope independent of terrain. In many instances, the rock and dirt movement was primarily |/to across|/tx , rather than |/to along|/tx , the canal routing. There are numerous cases where a major "S" or "U" routing was used to studiously avoid a more extensive cut and/or fill. And instances where very long lengths of parallel canals were specifically used to gain only a very few meters of elevation. |h |/to \267 Purposefulness \261 |/tx The canals clearly met several prehistoric needs to transport mountain stream water to limited sized and sporadic fields. A major advantage of a small mountain canal over a large lowland one is that catastrophic flooding would be much faster and easier to repair. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 5 %%%%%%%%%%%%%%%%%%% /dopage5 { /ggnum 123 store /pagenum 5 store /tabs [14] store startpage (|/shiftin |y |1 Similar modern needs would appear to be lacking since most of the mesas chosen remain mostly unexploited and underused to this day. Thus, the canal routings appear far more attuned to prehistoric. |h |/to \267 Dam Overruns \261 |/tx There are at least two 1930's era |/su Soil Conservation|/scs |/su Service|1|/scs dams that ran roughshod over major canal routes without any accommodation. The most prominent of these was the spectacularly failed |/su Allen Reservoir|1|/allendam.pdf . A similar overrun did take place midway along the Mud Springs canal. Several other dam candidates exist, including Layton Reservoir. These dams seemed to make no attempt whatsoever to preserve the route, to add or remove water, or to respect in any manner any historic or pioneer memories of their constructors. There are also many instances of overruns by modern roads, tanks, fences, and even cemeteries without any accommodation whatsoever. |h |/to \267 Mid Channel Mature Plants \261 |/tx There are several examples of largeer Mesquite trees, mature barrel cactus, associated older parasitic brush, and similar plants mid channel in many of the canals. These would tend to exclude modern or |/su CCC|1|/ccc uses and might place much of any pioneer use or reuse into question. |h |/to \267 Patina, Caliche, and Lichens \261 |/tx When a long stable rock is moved, its surface defining line between |/su patina|1|/patina and |/su caliche|1|/caliche usually will become disoriented. Any |/su lichens|1|/lichen will also delineate to a non-horizontal border. Over centuries of time span, these markings tend to fade. Most locations of most of the canals surveyed do show a remarkably uniform patina and lichen distribution. Suggesting a long term lack of disturbance. |h |/to \267 Lack of any apparent use of pioneer tools \261 |/tx Historic pioneers would have ready access to mules or horses, concrete, picks, shovels, blasting powders, rebar, scrapers, block and tackle, heavy lifting aides, and such. All of these would leave distinctive construction signatures. There seems to be very little evidence of any use of such tools and resources over the majority of the canal reaches. |h |/to \267 Easier to "Steal the Plans" and "Dig out an Old Ditch"\261 |/tx There are numerous instances of apparent pioneer historic reuse of portions of these canals. It is significantly easier and cheaper to "steal the plans" and "dig out an old ditch" than it is to fully engineer and construct a properly functioning canal from scratch. And no point whatsoever in continuing the canal far beyond its intended end use area. |h |/to \267 High Prehistoric Population \261 |/tx Early historic pioneers to the Gila Valley likely numbered only a few hundred at most. For a number of reasons, the prehistoric population is assumed to be much higher and possibly as high as today. Thus, historic pioneers would simply not have the manpower available for such major area constructs. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 6 %%%%%%%%%%%%%%%%%%% /dopage6 { /ggnum 123 store /pagenum 6 store /tabs [14] store startpage (|/shiftin |y|1 |h |/to \267 Lack of characteristic |/su CCC|1|/ccc signatures\261 |/tx Despite its presumably noble cause, many local |/su CCC|1|/ccc (|jCivilian Conservation Core|j) projects did end up as totally worthless busywork |/su boondoggles|1|/boondoggle . The tendencies included long linear and precisely surveyed high rock alignments that usually went across rather than along drainages. There is also a more distinct "newness" and "completeness" and the aerial imagery tends to be much better defined and more obvious. Much of the rockwork ended up related to precision European origin stone masonry. Some is compass oriented. In short, the anal |/su CCC|1|/ccc and purposeful prehistoric styles are conspicuously different and often can be easily distinguished. |h |/to \267 Forensics \261 |/tx Fingerprints or glove fragments might still partially survive in some limited form on the rock undersides of |/su CCC|1|/ccc era construction projects. Such survival would be enormously unlikely on a prehistoric construct. To our knowledge, modern |/su "CSI"|1|/csi techniques have not yet been applied to this or similar problems. But we have located a deeply incised "Alberto Signature" on one of the known |/su CCC|1|/ccc projects at |/to <|jN 32 47.695' W 109 45.304'|j>|/tx |h And finally\274 |h |/to \267 Archaeologists say so \261 |/tx Some reasonable and competent studies done by presumably qualified individuals who supposedly know what they are doing have pronounced most of these canals to have a high probability of being late classic prehistoric. |h |c The |jHanging |jCanals |d At present, some twenty or more canal candidates have been investigated and somewhat arbitrarily named as\274 |h |/canallist ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 7 %%%%%%%%%%%%%%%%%%% /dopage7 { /ggnum 123 store /pagenum 7 store /tabs [14] store startpage (|1Those marked with asterisks (*) are presently deemed more significant. What follows is a review summary of some of the discoveries to date\274 |h |c The |jP Ranch |jArea |d |h |/clickpranch The P Ranch area would seem to be a suitable candidate for the Southernmost prehistoric hanging canal system. There are persistent local rumors of such canals, but several area studies to date have failed to reveal any obvious results. |h There is apparently a short run of a deep Vee ditch from |/to <|jN 32 37.004' W 109 |/to 43.669'|j>|/tx to |/to <|jN 32 37.096' W 109 43.621'|j>|/tx whose origins are suspect. There appears to be large diversion channels at |/to <|jN 32 39.244' W 109 43.123'|j>|/tx , again with presumed more modern origins but showing definite signs of older age. Stockton wash at |/to <|jN 32 35.701' W 109 44.338'|j>|/tx could be a likely source of perennial water, as could the seasonal sources in Veech and Spring Canyons. Rumored candidates suggest resources somewhere in the |/to <|jN 32 39.126' W 109 |/to 44.044'|j>|/tx area. |h The region deserves further study albeit at a somewhat lower priority. |h |c The |jLedford |jCanal |jSystem |d |h |/clickledford The Ledford system starts at the John's Dam in Jacobson Canyon |/to <|jN 32 41.090' |/to W 109 45.712'|j>|/tx and climbs "up" onto the remnant |/su bajada|1|/bajada mesa just north of Metate Peak. It splits |/to <|jN 32 40.954' W 109 45.519'|j>|/tx into several channels and then passes Goat Tank, Ledford Tank, and similar impoundments still apparently in use for modern stock raising. Several of the switching arrangements can be noted that provide steep cascading descents to valley floor tanks. |h Presently studied length exceeds 5 kilometers. |h There does appear to be considerable modern use of this resource. Some of the "dropoff" points (|jsuch as |/to <|jN 32 41.347' W 109 43.250'|j>|/tx |j) are quite obvious from US Route 191 owing to rather extensive parasitic vegetation. The Ledford canal system appears to be the least well explored and interpreted of the significant hanging canals and remains difficult of access. |h End usage has yet to be defined, but is believed to involve off mesa fields to the south and east. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 8 %%%%%%%%%%%%%%%%%%% /dopage8 { /ggnum 123 store /pagenum 8 store /tabs [14] store startpage (|1Primary access is quite difficult and mostly limited to smaller 4WD vehicles or foot. The hanging portion is relatively minor where the canal "climbs" up the mesa from Jacobson Canyon wash. This is one of the more complex canal routes and certainly deserves extensive further study. |h Associated Metate Peak to the South has been the site of numerous artifact discoveries. |h |c Henry's |jCanal |d |h |/clickhenry |h Henry's Canal appears to be the southernmost of the Marijilda Creek derived prehistoric canals. The present studied length is 1.6 kilometers or 1.0 mile. |h The study area begins at |/to < N 32 44.226' W 109 44.535' >|/tx where the well-defined canal suddenly appears, assumes a minor hanging portion, and leaves a wash. Some ambiguous evidence of the canal has been noted upstream and westerly from this point. Elsewhere, there are other "vanishes at a wash" situations at |/to < N |/to 32 45.774' W 109 44.053' >|/tx and |/to < N 32 50.525' W 109 48.884' >|/tx in which their respective canals ended up clearly making a sudden "U" turn. Presumably done to maintain a uniform wash-crossing grade. |h Once out of the wash at |/to < N 32 44.327' W 109 44.297' >|/tx , the canal assumes a somewhat wider and shallower stance than typical\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 9 %%%%%%%%%%%%%%%%%%% /dopage9 { /ggnum 123 store /pagenum 9 store /tabs [14] store startpage (|1The Henry's Canal then crosses a power line 4WD track at |/to < N 32 44.386' W 109 |/to 44.137' >|/tx , and then trends somewhat more northerly at |/to < N 32 44.563' W 109 |/to 43.702' >|/tx , and disappears under a cattle tank at |/to < N 32 44.689' W 109 43.717' >|/tx . |h The modern Roper Canal can be found just north of this now tank-buried canal portion. Suggesting that the almost certainly linked Henry's Canal is either the original routing or a secondary feeder to the present Roper Canal alignment. This also would strongly reinforce a prehistoric origin for at least some portion of the Roper Canal. |h Several smaller canal fragments of lower quality workmanship have been noted near |/to < N32 44.224' W 109 44.575 >|/tx . It is not yet clear what their relationship is to the Henry's source of supply. |h Many thanks to Henry Schneiker and Phyllis Farenga for their survey and ground truth assistance on this canal. |h |c The |jMarijilda |jCanal |d |h |/clickmarijilda |h The Marijilda Canal is perhaps the easiest to view and has the most spectacular hanging portion. One image was previously shown on page |/to 122.2|/tx and can be separately viewed at |/su < http://www.tinaja.com/images/hangcan1.jpg >|1|/Hangcan1 . The canal sources in Marijilda Canyon |/to < N 32 42.363' W 109 46.673' >|/tx at the lowest normal perennial water location of Marijilda Creek and its current study area is approximately 3.2 kilometers or 2 miles long. |h The initial reach along |/to < N 32 42.895' W 109 46.135' >|/tx is shared by the historic puddled concrete Lebanon Ditch, which serves both modern ag sites and as a primary feeder to Roper Lake. The Lebanon access road is an extremely rough 4WD track, making through trips problematic. Upcanal access is best done via the Marijilda road, and downcanal off of Cactus Road. This portion flows year round. |h A strong case can be made that both "Steal the plans" and "Dig out an old ditch" seem to end up as the defining hallmarks of many of the pioneer and modern adaptations of these prehistoric hanging canal systems. In many cases, very little technological improvement appears to have been made to most routings. |h There are numerous habitation sites, field houses, and ag related features in the area, perhaps suggesting the densest occupation in the region. The prehistoric and the historic canals separate near |/to < N 32 43.304' W 109 45.864' >|/tx with the historic Lebanon Canal briefly continuing down Rincon Wash and emptying into Lebanon Reservoir #1. The prehistoric Marijilda Canal begins its spectacular mesa "climb" at this point. There are numerous artifacts in this area. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 10 %%%%%%%%%%%%%%%%%%% /dopage10 { /ggnum 123 store /pagenum 10 store /tabs [14] store startpage (|1A unique feature of the Marijilda Canal is an apparently solid |/to aqueduct|/tx that starts at |/to < N 32 43.415' W 109 45.751' >|/tx and continues on to |/to < N 32 43.451' W 109 |/to 45.742' >|/tx The aqueduct is a meter high by over a hundred long and apparently provides some needed additional height to the canal base route. The aqueduct lies on a natural saddle. It seems to be solid with no ability or provision for cross flow. This feature is likely unique as additional aqueducts in the entire hanging canal system remain quite rare and largely unproven. |h The long linear "climb" up the western face of Lebanon Mesa is quite impressive, at times ending up over ninety meters above the base terrain. There seems to be no significant ag use of the mesa top itself, suggesting that the primary purpose of this canal reach was to deliver water to field sites further to the east. The fine grained loess or aeolian fill of this portion of the canal often makes hiking the route quite pleasant, despite its length. |h There is an apparent steep falloff from the mesa top itself that has not yet been fully studied. It ends at a more easily traced and viewable portion near |/to < N 32 |/to 44.554' W 109 44.719' >|/tx just above and south of the Lebanon Reservoir #2 spillway. There is a distinct possibility that the Marijilda Canal prehistorically continued as the separately studied Roper Canal. |h Occasional brush directly along the canal route suggests a minimum of fifty or more years of disuse. In many places, the mesa slope forms the upcanyon wall, while a constructed rock barrier takes care of the downcanyon side. Construction consistently shows an extreme economy of energy, with the fewest possible rocks and the least amount of dirt moved in a minimalist manner. Nonetheless, one credible estimate of total system construction time might be in the fifty man year range. |h |c The |jRoper |jCanal |d |h |/clickroper |h|/adj2 Roper Lake is currently supplied by a modern cement lined deep vee canal that sources from Lebanon Reservoir #2. Sourcing is literally a few meters from where the prehistoric Marijilda Canal drops off Lebanon Mesa to the east. The reservoir water is derived from a previous reach adaptation of the prehistoric Marijilda Canal. The Roper Canal follows a flat and rather highly obvious topographically favorable route. A reasonable assumption might be that the modern canal exactly follows that of the prehistoric original. And that Roper Lake itself once served as a fields area. This route also is near the center of the known hanging canals. |h The last visible evidence of the "high route" of Marijilda Canal "up" and along Lebanon Mesa is found at |/to < N 32 44.583' W 109 44.700' >|/tx and is adjacent to Lebanon Reservoir #2 and only a few meters above. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 11 %%%%%%%%%%%%%%%%%%% /dopage11 { /ggnum 123 store /pagenum 11 store /tabs [14] store startpage (|1The Roper Canal takein point is found nearby |/to < N 32 44.641' W 109 44.714 >|/tx at the base of the Lebanon Reservoir #2 retaining dam. The modern canal continues from |/to < N 32 44.744' W 109 44.451' >|/tx through |/to < N 32 44.837' W 109 43.366' >|/tx , crosses US 191 at |/to < N 32 44.882' W 109 43.005' >|/tx and delivers water to Roper Lake proper near |/to < N 32 45.338' W 109 42.529' >|/tx . |h |c The |jTranquility |jCanal |d |h |/clicktranquility |h|/adj2 The Tranquility Canal would seem somewhat atypical as it appears to be artesian sourced, is only 1.6 kilometers or one mile long, is "urban" subdivision located, and remains very much in need of stronger proof of verifiable prehistoric origins. The canal seems to start at an artesian source of |/to < N 32 45.599' W 109 43.964' >|/tx and ends in the Cooks Reservoir at |/to < N 32 46.445' W 109 43.678' >|/tx . |h There remains considerable evidence of historic artesian building/rebuilding at |/to < N 32 45.599' W 109 43.964' >|/tx , primarly in the form of iron or steel pipes, headgates, and diversionary channels. This is presently the presumed location of a prehistoric canal takein as well. All development seems to be presently long abandoned. Presumably because of a dropping water table. |h The canal shows a curious mix of prehistoric and historic features\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 12 %%%%%%%%%%%%%%%%%%% /dopage12 { /ggnum 123 store /pagenum 12 store /tabs [14] store startpage (|1The channel is modestly "hung" in the normal prehistoric manner and appears to be of minimum energy construction. But there also is an access trail and a thin puddled aggregate concrete lining remarkably similar to those Marijilda Canal historic improvements. Unlike virtually all of the prehistoric canals, the routing goes through a modern "urban" housing development and often crosses posted private property. |h At |/to < N 32 45.599' W 109 43.964' >|/tx , the Tranquility Canal comes amazingly close to the Twin East prehistoric hanging canal feeder. Approaching within 250 feet or 75 meters horizontally and perhaps only 25 feet or a mere 8 meters vertically. But the Twin East feeder is at a distinctly higher elevation and the two appear totally unrelated. There is a significant cliff between the two water channels. |h The Annes Ranch Road at |/to < N 32 45.881' W 109 43.769' >|/tx runs roughshod over the canal, completely obliterating it without any regard whatsoever for continued use. The road construction date is presumably in the 1960's. |h Just north of this point, the puddled large aggregate concrete lining appears to be taking a parallel "short cut"\274 Should this rerouting in fact be verifiable, it would strongly support a "steal the plans" historic modification of a prehistoric origin. Note also the "dead flowers" that seasonally tend to verify canal routes. A likely cause is improved water retention in any wind blown fill. |h The canal becomes indistinct where it crosses West Lebanon Road but shortly becomes obvious on |/su Acme Mapper|1|/acmemap further to the north. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 13 %%%%%%%%%%%%%%%%%%% /dopage13 { /ggnum 123 store /pagenum 13 store /tabs [14] store startpage (|1When the canal crosses the Schmoller property yet further north near |/to < N 32 |/to 45.599' W 109 43.964' >|/tx , it no longer has any concrete lining or access trail. And very much appears exactly like any of the other prehistoric hanging canals in the Safford Basin system. Locals in this area even call it "the old indian canal". This reach is rather obvious and fairly easily explored with landowner permission. |h The Tranquility Canal presumably ended in fields lying under the present Cooks Reservoir. This reservoir presently appears empty and unused. |h |c The |jTwin |jEast |jCanal |d |h |/clicktwineast |h|/adj2 There is a curious prehistoric water related alignment between |/to < N 32 45.862' W |/to 109 44.041' >|/tx and |/to < N 32 46.031' W 109 44.312' >|/tx . One interpretation of which is that it forms an end use ponding area that appears to be fed by |/to two|/tx distinct major hanging canals. Evidence for an end use area includes highly atypical single walled retaining structures\274 |h Note the mature cacti in the ponding area. Which gives reinforcing evidence of non-recent use. |h Other ponding area evidence includes multiple routes, and contour-following aerial imagery far beyond and considerably more distinctly obvious than any normal reach of any other hanging canal in the series\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 14 %%%%%%%%%%%%%%%%%%% /dopage14 { /ggnum 123 store /pagenum 14 store /tabs [14] store startpage (|1 |h Unlike most reaches of most of the long range delivery canals, there are also numerous cultural associations in the immediate area. These include field houses, grids, mulch rings, and various other apparently ag-related rock alignments. The slope of much of the ponding area also approaches zero and appears to be the lowest point in either feeder canal elevation. Very preliminary negative slope measurements on the feeder canals show them to in fact be feeders. But further careful measurements might be required for a more convincing proof. |h A possible eastern feeder water source might be the branch of the Marijilda Canal where is comes off the south end of Lebanon Mesa. Land in this area has been extensively modified by historic and modern agriculture. There presently is a 1.6 kilometer or 1.0 mile gap in this presumed and topographically favorable reach. While an artesian source might also be possible, this alternate is presently deemed unlikely. The adjacent and presumed artesian fed Tranquility Canal does lie at a significantly lower elevation. |h The first southern extreme definitive Twin East Canal evidence is presently located at |/to < N 32 45.633' W 109 44.091' >|/tx . The canal assumes a classic hanging construct that has a fairly strong "water flows uphill" illusion and is easily followed. As is often typical, the channel is one meter wide by 30 centimeters deep. The canal crosses the cemetery road and swings eastward. It is rather obvious and easy to follow at this point. Shortly afterward, the canal vanishes under the cemetery service dwellings. |h Once north of the cemetery at |/to < N 32 45.760' W 109 43.955' >|/tx , the canal briefly resumes a short but easily followed routing. At this point, the Twin East and the Tranquility canals end up amazingly close to each other. They approach within 75 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 15 %%%%%%%%%%%%%%%%%%% /dopage15 { /ggnum 123 store /pagenum 15 store /tabs [14] store startpage (|1meters or 250 feet horizontally and perhaps a scant 25 feet or a mere 8 meters vertically. However, the Twin East feeder is at a distinctly higher elevation and the two appear totally unrelated. A cliff literally separates the two. Once again, Twin East is felt to be mountain stream fed, while Tranquility may have had an artesian derived source. |h Once past an indistinct portion, the canal assumes a large sweeping "S" in an apparent attempt at maintaining grade with a minimum energy use. The canal crosses a rough 4WD track at |/to < N 32 45.794' W 109 44.022' >|/tx and briefly routes to the southwest. This is followed near |/to < N 32 45.776' W 109 44.051' >|/tx by a very sudden and a fairly easily traced |/to "U"|/tx turn that approaches the ponding area to the northwest. The canal is distinctly counterslope at this point. |h There are some curious rock alignments yet to be interpreted at |/to < N 32 45.854' W |/to 109 43.898' >|/tx . Their near constant width suggests a more modern origin, possibly by a bulldozer or scraper blade. Which may or may not overlay earlier constructs. |h |c The |jRincon|j (|jor |jTwin |jWest|j) |jCanal |d |h |/clicktwinwest |h As previously noted, the Twin East and Twin West canals do appear to share a common ponding destination. The source of the Twin West feeder is likely the Rincon Canal believed to route directly down Rincon Wash as a branch of the Marijilda Canal and appears to service numerous small habitation sites. Although an as yet undetermined contribution from the Deadman Canal cannot yet be completely ruled out. |h Sourcing from the Deadman Canal, possibly near the upcoming projected three way switch would clearly provide redundancy. Major effort obviously did go into the Deadman Canal construction, and a credible destination for this major energy expenditure has yet to be verified. No direct link has yet been found, although there are some curious rock alignments at |/to < N 32 45.564' W 109 45.864' >|/tx along a potential and reasonably viable route. |h The southernmost contiguous evidence of the Twin West Canal to date appears to be near |/to < N 32 45.913' W 109 44.519' >|/tx in the eastern canyon bottom south of the Rincon Access road. |h This area lies off mesa from an older habitation. There are a field house and other cultural artifacts nearby. From here, the canal begins its hanging "climb" towards the mesa top. There is a medium sized |/to "S"|/tx routing apparently used to maintain the slope with minimum construction energy. After its well defined climbing portion, the easily followed canal reaches the flat mesa top somewhere around |/to < N 32 46.031' W 109 44.312' >|/tx to become part of the Twin Ponding area. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 16 %%%%%%%%%%%%%%%%%%% /dopage16 { /ggnum 123 store /pagenum 16 store /tabs [14] store startpage (|y|c The |jDeadman |jCanal |d |h |/clickdeadman |h|/adj2 The Deadman Canal is presumed to be a 6.4 kilometer long partial historic rebuild and reuse of a prehistoric original. This routing is well marked on the topo maps and originates in Deadman Creek near its perennial flow limit. The reach of the canal from |/to < N 32 44.354' W 109 48.687' >|/tx to |/to < N 32 44.697' W 109 48.394' >|/tx seems consistent with significant hanging portions of nearby canals. This reach has been completely buried by a City of Safford water pipeline project. There is no present use of this resource, owing to a chlorinator issue. |h After its one kilometer "climb", the optimally graded system reaches a small modern collection pond at |/to < N 32 44.697' W 109 48.394' >|/tx which marks the diversion limit of extensive modern rework. The canal continues eastward along the |/to highest|/tx portions of Deadman Mesa still in its apparent original prehistoric form. The presumed prehistoric continuance seems absolutely devoid of modern materials and techniques. |h Along this reach, the canal largely consists of two rows of guide rocks half a meter to a meter apart. This portion of the canal flows year round to this day. Several diversions into modern cattle tanks seem to have been done. Some of these now appear to be in current disuse. No apparent use of modern tools and techniques can be found below the collection pond. |h Following a two kilometer run, at |/to < N 32 45.640' W 109 46.877'>|/tx , the mesa top is literally two meters wide, with a one meter canal centered on it\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 17 %%%%%%%%%%%%%%%%%%% /dopage17 { /ggnum 123 store /pagenum 17 store /tabs [14] store startpage (|1While centering a canal on the |/to highest|/tx point on a narrow mesa would appear unique, similar instances occur on Frye Mesa and elsewhere in this astonishing canal complex. |h At this "narrows" point, any diversion of the canal into three routes would seem to be easily done, thus forming a "three way switch". Switching water routes could consist of just moving rocks around. No headgates or diversion structures seem to be involved. Such switching remains speculative. |h One route could lead to Porter Springs tank and eventually to a well established Longview prehistoric habitation area. As we will see, only very limited hints of any canal structures have been found in this area, which is otherwise characterized by numerous apron enhanced check dams. |h The center diversion now routes to an apparently abandoned Lower Deadman Tank. It is usually dry and unused at present. Fields or prehistoric evidence in this area have yet to be extensively studied, although there are several hints of a few possible canal routes to the northwest. |h The southern Deadman switching currently routes water to Upper Deadman Tank. Significant prehistoric cultural resources are present in the Rincon Canyon area below this tank. |h Once again, as considerable time, energy, and engineering obviously went into the Deadman Canal, use questions arise if Twin West is not a credible destination. |h Some enigmatic constructs near |/to < N 32 45.564' W 109 45.864' >|/tx have yet to be field verified and evaluated. |h |c The |jLongview |jArea |d |h |/clicklongview |h|/adj2 The northwesterly area below the possible Deadman three way switch and the Porter Springs tank is rich in habitation sites, includes an astounding variety of tradeware shards, grids, checkdams with and without aprons, and has numerous other cultural artifacts. Plus quite a few |/su CCC|1|/ccc projects. |h While no major canal system has yet been observed serving this area, such a system would appear highly conspicuous by its absence. |h What seems to be a retaining wall of a smaller delivery canal can be located near |/to < N 32 47.377' W 109 45.596' >|/tx with the canal itself largely traceable from |/to < N 32 |/to 47.365' W 109 45.626' >|/tx to |/to < N 32 47.387' W 109 45.523' >|/tx . A series of highly visible sequential retainer rock alignments can be noted somewhat to the south and forms a credible field delivery area. A possible route for a proposed canal can be found at |/to < N 32 47.237' W 109 45.661' >|/tx . ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 18 %%%%%%%%%%%%%%%%%%% /dopage18 { /ggnum 123 store /pagenum 18 store /tabs [14] store startpage (|1|c The |jRiggs |jArea |d |h |/clickriggs |h|/adj2 There seems to be a minor assemblage of artifacts in a rocky area of Frye Canyon just south of Riggs Mesa that suggest braided prehistoric water channels. Their age remains somewhat indeterminate but they would appear to serve no obvious historic or more recent purpose. The workmanship and the quality of construction seems to be low. The terrain is extremely rocky |/su Holocene|1|/holocene valley fill. |h Channels at |/to < N 32 46.633' W 109 47.472' >|/tx , |/to < N 32 46.699' W 109 47.399' >|/tx , and |/to < N 32 46.760' W 109 47.290' >|/tx are typical. These seem to end in sudden drops into modern wash erosion. There are also a few minor |/su CCC|1|/ccc water spreader projects and several unknown age check dams in the area. No linkup with the Robinson Canal or Frey Mesa water further south and upcanyon by 0.3 kilometers or 0.5 a mile has yet been determined. |h |c Frye |jMesa |jRegion |d |h |/clickfrye |h|/adj2 No major canal development has been noted in upper Frye Creek, likely owing to its extreme topography. But significant artifacts definitely appear present at the southernmost and highest reaches of adjacent Frye Mesa. These include many large and complex braided water channels\274 |h ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 19 %%%%%%%%%%%%%%%%%%% /dopage19 { /ggnum 123 store /pagenum 19 store /tabs [14] store startpage (|1The apparent water source was the spring in Spring Canyon at |/to < N 32.73895 |/to W 109.85221 >|/tx . As noted below, this same source was also used much further downstream for the Allen Canal takein at |/to < N 32.78243 W 109.83566 >|/tx . |h A modern forest service PVC gravity water system appears to exactly follow the believed Frye Mesa route, in yet another apparent "borrow the blueprints" ploy. |h The mesa route likely started with a diversion dam and presently is believed to lie |/to underneath|/tx the Frye Falls road at |/to < N 32.75144 W 109.83826 >|/tx . Exact routing remains undetermined. |h The braided channels at |/to < N 32.75998 W 109.81532 >|/tx and elsewhere consistently follow the |/to highest|/tx mesa elevations at uniform and canal reasonable slopes. |h A possible reason for the braiding might be different delivery ages or use dates. As one channel silts up, an alternate might be chosen. |h Curiously, a few of the braided channels do appear to have modern |/su CCC|1|/ccc rework in the form of cross channel dams. Such dams are of distinctly diffrent architecture. They would clearly prevent any channel use. There are other more traditional |/su CCC|1|/ccc water spreader constructs in the area. |h The braided channels all seem to lead to a small ponding or switching area at |/to < N 32.76001 W 109.81109 >|/tx . At this point, two spectacularly large hanging canal segments can be noted. These are tentativly named the |/to HS canal|/tx to the west and the |/to Upper Robinson|/tx Canal to the east. |h The HS canal is clearly counterflow as it heads |/to upcanyon|/tx apparently to combine with the waters of Frye Creek\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 20 %%%%%%%%%%%%%%%%%%% /dopage20 { /ggnum 123 store /pagenum 20 store /tabs [14] store startpage (|1It is interesting to note the obvious interest in differences between prehistoric Spring Canyon water and modern Frye Creek water. Possibly the Spring Canyon flow rate was much higher and certainly more accessible at the time. |h Adding a dam and pipelines would dramatically affect the Frye Creek flow rates and its reliability. The pipelines also may have had a much lower end elevation delivery point. They were also somewhat less sensitive to strict elevation and terrain following rules. |h Frye Canyon proper widens and flattens below the HS canal delivery point, so one possible use might have been local field delivery. There are a few small checkdams and field structures in this area, which has not yet been fully explored. |h Although unproven, this combined water channel is also believed to deliver to the modern Blue Ponds area. Possibly via structures at |/to < N 32.77720 W 109.77527 >|/tx and a reworked modern headgate switch at |/to < N 32.77720 W 109.77527 >|/tx . |h The Upper Robinson canal is quite similar to the HS Canal, except for it heading in the normal downcanyon and downslope manner. Both canals appear built from the largest size rocks that can be hand carried. As with system examples found elsewhere, the Upper Robinson often trends its way along the |/to highest|/tx possible of mesa elevations. |h There is presently a mile wide gap between the known portions of the Upper Robinson channel and the Robinson Ditch. This obvious route is expected to be closed with further field work. Any connection to the Riggs Area braided channels has yet to be determined. |h |c The |jRobinson |jCanal |d |h |/clickrobinson |h|/adj2 This ag structure was named for a historic Mormon pioneer who apparently had restored, maintained, and improved the canal system. This is presumed to be a historic rebuild and reuse of a prehistoric original. |h This canal is believed to originate from the Upper Robinson canal dropping off Frye Mesa. Its possible original destination might have been to deliver water to fields in the Robinson Flat area. Partial modern use apparently delivered water to the Thorpe and Stowe stock tanks, as well as one or more top-of-mesa tanks. Long dead but still extant remnants of parasitic trees suggest fairly late continued use. This reach includes a quite convincing "water flows uphill" segment. |h |h The "lower" section of the Robinson Canal difficult access is largely by foot only. Via an obscure cattle trail that passes several |/su CCC|1|/ccc constructs. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 21 %%%%%%%%%%%%%%%%%%% /dopage21 { /ggnum 123 store /pagenum 21 store /tabs [14] store startpage (|1The route is well marked on the topo maps\274 |h Just north of the Sheep Canyon branch at |/to < N 32 45.996' W 109 47.919' >|/tx , the canal enters a significant hanging portion that includes a rather strong "water flows uphill" optical illusion\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 22 %%%%%%%%%%%%%%%%%%% /dopage22 { /ggnum 123 store /pagenum 22 store /tabs [14] store startpage (|1The canal appearance in the |/to < N 32 46.394' W 109 47.785'>|/tx area is fairly typical of similar canals in their higher hung areas\274 Once on the mesa top, appearance seems largely as expected\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 23 %%%%%%%%%%%%%%%%%%% /dopage23 { /ggnum 123 store /pagenum 23 store /tabs [14] store startpage (|1As in the other presumed rebuilds, there seems to be no obvious evidence of any modern tool use along the main delivery reaches of this canal. Thus supporting a "stole the plans and dug out an old ditch" premise. |h A catastrophic and apparently never repaired "sluffing off" failure occurred at the mesa edge near |/to < N 32 47.297' W 109 47.494' >|/tx . |h |h As we have seen, arguments that the structure was initially prehistoric include (A) Its astonishing similarities to known prehistory in adjacent canyons; (B) The mesa top |/su bajada|1|/bajada routing more consistent with prehistoric needs and goals; (C) A total absence of concrete, iron, headgates, or more modern techniques; (D) Much lower pioneer historic populations; and (E) The size, depth, rock relocations, and energy levels required appear totally consistent with stone age technology. |h |h Once north of and off the mesa, more recent cattle ranch related construction makes tracing the canal difficult. |h Once again, many thanks to Henry Schneiker and Phyllis Farenga for their survey and ground truth assistance. |h |c The |jAllen |jCanal |d |h |/clickallen |h|/adj2 The Allen Canal sources from Spring Canyon and presumably delivered water to fields under the present Layton flood control dam. It is potentially 9.6 kilometers or 6 miles long and has an average slope of 4.1 percent. However, this rather high figure includes a significant drop over a mesa edge. Most Allen slopes are comparable to the other hanging canals in the series. Canal portions have been converted into modern cattle tanks and |/su failed flood control dams|1|/allendam.pdf . |h There is a rather spectacular |/to Culebra Cut|/tx that is far and away the deepest and longest known excavation in the entire hanging canal series, approximating some two meters deep, three meters wide, and over a hundred meters long. Thus, this construct is felt to be world class. There are also more modest hanging portions and less deep cuts used to maintain grade independently of terrain. |h Almost all of the known portions of this canal lie on Arizona State lands. Access is generally difficult and often limited to foot or small recreational vehicles. |h The Allen Canal has apparently been historically modified to create the seemingly misnamed Hawk Hollow cattle tank and has also seen nearby |/su CCC|1|/ccc style water spreader construction features. Two segments of the canal remain unexplored and its ultimate destination remains presumed but unknown. Evidence of antiquity includes the spectacularly failed |/su SCS Allen Dam|1|/allendam.pdf running roughshod over the canal ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 24 %%%%%%%%%%%%%%%%%%% /dopage24 { /ggnum 123 store /pagenum 24 store /tabs [14] store startpage (|1without any apparent accommodation whatsoever. There are also quite a few mature barrel cacti midchannel on the mesa. Plus the fill and spoil areas all show highly consistent patina, desert varnish, lichens, and caliche. |h The canal Spring Canyon takein point is rather obvious at |/to < N 32 46.943' W 109 |/to 50.130' >|/tx . Erosion has rendered its present use nonfunctional. This takein point seems to correspond to a modern seasonal stream flow limit and is close to the expected contact between the |/su Precambrian|1|/precambrian Mountain Schist and the |/su Holocene|1|/holocene Valley Floor fill. While the canal has obviously been diverted to meet historic needs, the reaches themselves appear to be largely devoid of any evidence of modern tool use. |h This image near the takein shows the typical size and construction characteristic of most portions of most of the hanging canals. The image also exhibits a rather strong "water flows uphill" illusion\274 The Hawk Hollow tank (|jwhich is really in the Central Wash branch of Spring Canyon|j) represents a modern adaptation with obvious tool use and European style precision coursed masonry construction in its overflow channel. At present, the region south of the tank remains unexplored but is expected to yield no real surprises. Similarly, the reach north of the tank remains unexplored. The satellite imagery in this area reveals numerous |/su CCC|1|/ccc water spreader projects. Rock cobbles in this area are generally larger and less uniform, leading to apparently cruder construction methods. There is also a modest hanging portion where the canal "climbs" out of a wash. The canal tracing can be resumed further North where a rather long but fairly shallow cut was made to retain grade. |h ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 25 %%%%%%%%%%%%%%%%%%% /dopage25 { /ggnum 123 store /pagenum 25 store /tabs [14] store startpage (|1From here northward, the canal is usually quite easily followed. Especially near |/to < N 32 48.652' W 109 48.717' >|/tx Typical size might be a meter wide by 20 CM deep. There are numerous mature Barrel Cacti mid channel, suggesting a total lack of recent use beyond the Hawk Hollow tank. None of the mesa reach seems to show the slightest evidence of modern tool rework. |h Only scant hints of possible canal routes have been found between the mesa edge at |/to < N 32 49.732' W 109 48.094' >|/tx and the Allen Reservoir at |/to < N 32 50.022' W |/to 109 47.702' >|/tx to date. Leaving a definite gap still to be resolved. The Allen reservoir clearly ran over the canal routing without regard to any diversion or accommodation whatsoever. Giving yet another argument in support of the prototype canal being prehistoric. This reservoir was built by the Soil Conservation Service in the 1930's and its overflow was possibly intentionally blocked in the 1950's. Which resulted in its |/su spectacular failure|1|/allendam.pdf two decades later. |h The watershed of the Allen Reservoir is quite small and significantly lacking in any mountain runoff, major springs or artesian sources. It is possible that the Allen Canal itself served as an early primary or auxiliary water supply source. However, the midchannel Barrel Cacti would seem to pose contrary evidence. |h There are |/su anecdotal claims|1|/allendam.pdf that the reservoir once supported water ski recreation. |h The canal is easily traced below the dam, leading to this moderately hanging image just above the Culebra Cut at |/to < N 32 50.133' W 109 47.870' >|/tx \274 |h The white channel color is likely based on caliche related dissolved solids. The few washouts in this area seem suprisingly minor. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 26 %%%%%%%%%%%%%%%%%%% /dopage26 { /ggnum 123 store /pagenum 26 store /tabs [14] store startpage (|1The Culebra Cut near |/to < N 32 50.133' W 109 47.870' >|/tx represents an amazing commitment of both manual labor and transport resources. With the exceptions of the Marijilda aqueduct, the HS Canal, and the Upper Robinson Canal, no other known local hanging canal artifacts remotely approach its scope or grandeur. In retrospect, this Culebra Cut seems to be much larger than the rest of the Allen system and of different architecture from the higher mesa canal areas. Reasons for this discrepancy are not entirely clear. Although there seems to be no evidence whatsoever of any modern use of this essential canal reach. |h The canal continues westward beyond Culebra and remains fairly easily traced. There is a rather complex double |/to "S"|/tx where the canal crosses the dual tracked north south fence. The canal suddenly loops northward when it crosses Central Wash near |/to < N 32 50.133' W 109 47.870' >|/tx . Just north of here, the previously obvious canal track vanishes entirely. Possibly caused by sheet flooding, major wash rework, or other erosional activities. |h While the Mud Springs canal is a reasonable distance further west, the presence of a few minor hillocks and a somewhat rolling terrain largely seems to preclude any connection. Instead, the canal is presumed to continue northward. With a logical but unverified termination in fields presumed presently under the modern Layton Flood Control Dam. |h |c The |jMud |jSprings |jCanal |d |h |/clickmud |h|/adj2 The |/to Mud Springs Canal|/tx is one of the more significant features of the prehistoric mountain stream fed hanging canal systems. It sources in Ash Creek, crosses over into the Mud Springs |/su bajada|1|/bajada and ultimately delivers water both to the Jernigan Canal and to apparently fulfill yet unresolved needs in the Central Cemetery area or even within the Gila basin flatlands themselves. Total primary canal length is projected to be 9.6 kilometers or 6.0 miles. Of which two thirds have now been reasonably field verified. |h A case can be made that Mud Springs could have been the initial or prototype on which many of the other hanging canals were based. The reasoning being that from location |/to < N 32 47.492' W 109 51.228' >|/tx , the |/to entire length of the canal |/to can be viewed at once|/tx , planned, and possibly surveyed. No other known hanging canals seem to permit a one point total viewing. |h The Ash Creek takein is believed to be just within the Coronado National Forest near |/to < N 32 47.247' W 109 51.272' >|/tx . The takein is not yet explored and likely has been obliterated by long term flood damage. A significant hanging canal can be anticipated in heavy brush on the east canyon wall between the takein and the crossover saddle. This reach has not yet been located. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 27 %%%%%%%%%%%%%%%%%%% /dopage27 { /ggnum 123 store /pagenum 27 store /tabs [14] store startpage (|1The saddle point |/to < N 32 47.492' W 109 51.228 >|/tx at which the canal crosses from the Ash Creek drainage to the Mud Springs |/su bajada|1|/bajada watershed seems remarkably well chosen from both a minimum energy expenditure and from a hydraulic engineering standpoint. The crossover also appears to be topographically unique with no reasonable route alternative. The canal at this point is one meter wide by 30 centimeters deep. The channel is reasonably and uniquely defined by its rock borders but is not exceptionally obvious here. |h The 1.4 kilometer reach northward between the saddle point and the Mud Springs Corral at |/to < N 32 48.191' W 109 50.360' >|/tx has not yet been located. No significant surprises are expected. This routing is projected to be reasonably findable over much of its length and to include minor hanging portions. The route is presently expected to be largely along the western periphery of the Mud Springs |/su bajada|1|/bajada . A resumption of the well defined canal is easily viewed somewhat west of the corral access road, again at |/to < N 32 48.191' W 109 50.360' >|/tx and is easily traced a significant distance to the north. |h The canal crosses the Mud Springs access road at |/to <|jN 32 48.417' W 109 50.274'|j>|/tx . Which, coincidentally, was the initial rediscovery point of the Mud Springs Canal route. A west trending side diversion channel appears to be located at this point. Whose apparent goal may have been to dump excess water into a nearby wash, to adjust flow, or to aid in silt control. There are also hints of apparently not well developed grids, rock alignments, and possible smaller and poorly defined water channels somewhat north of this point and east of the access road. Perhaps in or around the |/to < N 32 48.836' W 109 50.350' >|/tx area. |h From the road crossing, the canal is easily traced northward, eventually ending up in association with some rather obvious |/su CCC|1|/ccc water spreading projects. The |/su CCC|1|/ccc architecture is distinctly unique and almost always is routed across, rather than along any canal or wash channels. There seem to be many dozens of |/su CCC|1|/ccc project examples in the area. |h Eventually, the canal ends up in a brushy wash bottom and becomes difficult to trace. But somewhere near |/to < N 32 48.793' W 109 49.969' >|/tx , the canal begins its rather significant, distinctly obvious, and superbly spectacular "climb" out of the eastern wash terrace face. The engineering involved in this task would seem most impressive. Once back "up" in the flats, the canal becomes indistinct and difficult to trace. At a significant east-west fence, the canal is believed to continue a short distance west of a unique triply "rock weighted" wire reach. Access to this point is a not overly difficult southwesterly hike from the end-of-track flood control barrier near |/to < N 32 49.049' W 109 49.664' >|/tx . Besides the GPS locations, a useful process would be to "find the fence" to the southwest, and then "find the weights". The significant hanging portion will then be a short distance to the southeast. |h North of the major east-west fence, the canal does become rather indistinct. But eventually makes a sweeping |/to "S"|/tx turn to maintain grade. The canal then resumes |h ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 28 %%%%%%%%%%%%%%%%%%% /dopage28 { /ggnum 123 store /pagenum 28 store /tabs [14] store startpage (|1obviousness near |/to < N 32 49.098' W 109 49.887' >|/tx . Here there is a 25 centimeter diameter mesquite tree squarely mid channel. The tree has not been cored, owing to augers being easily damaged by desert hardwoods. |h From the tree, the canal is easily traced northwards to the largest flood control dam in the area at |/to <|jN 32 49.415' W 109 49.459'|j> |/tx . There is a short meter deep cut where the canal exits a ridge. The canal goes through several architectural variations in this area, owing to topography and grade. There are also extensive |/su CCC|1|/ccc works present near here. Whose apparent purpose was to route flood waters into the dam. These are presumed modern and date from the 1930's. The canal itself routes somewhat west of the 4WD access trail. The canal at this point seems somewhat smaller than its other reaches. And might in fact end up diversionary to separate fields with the main channel buried or modified. |h |/to The dam ran roughshod over the canal|/tx , obliterating its route under itself and making no accommodation whatsoever to preservation or use. There is a major unrepaired blowout in the lower dam wall. Exploration of this blowout would appear to be extremely unsafe. |h The canal is easily traced from the dam face southward and eastward. It initially begins yet another hanging wall climb "up" the north wash wall. In reality, all of the "water flows uphill" portions strictly maintain an optimal |/to downward|/tx slope in the one percent range. The sheer brilliance of using a hanging canal for extreme energy efficiency and to force its slope to be largely independent of terrain can not be overemphasized. |h Here is an image near the mid point of the Mud Springs Canal... ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 29 %%%%%%%%%%%%%%%%%%% /dopage29 { /ggnum 123 store /pagenum 29 store /tabs [14] store startpage (|1This location is somewhat atypical in that it is wider and shallower than most portions. The |/su SCS|1|/scs flood control dam dating from the 1930's can be clearly seen in the background, along with its failure blowout. The dam does cross the Mud Springs canal somewhat north or right of the blowout. And does so without any regard or accommodation whatsoever. Neither adding to, removing from, or preserving any flow possibilities. Also viewable is the Mud Springs |/su bajada|1|/bajada , appearing as a large triangle "pointing" to the also visible upper Ash Creek drainage. About three miles or 4.8 kilometers of the canal are more or less visible. |h The scope and magnitude of the hydraulic engineering can be appreciated by noting that this is one half of one of something like twenty hanging canals in the total system. It seems that a consistent attempt was made to totally exploit every possible drop of Northeastern draining Mount Graham stream water. |h Note that the canal goes |/to uphill|/tx into the picture. Despite the illusion of climbing "up" out of the wash from the base of the dam. Such "water flows uphill" illusions are quite common elseware in the local hanging canal systems. For in reality, a carefully controlled slope often approximating one percent is consistently made. |h Note further that mid-channel brush strongly suggests no recent use. Note also the exceptionally uniform patina, desert varnish, and even the sometime lichen patterns. Strongly suggesting no recent canal wall or spoil bank modifications. At this point, the canal appears to have a moderate fill that could be water borne silt or aeolian dust based. |h A rare and curious structure that appears intimately associated with the canal lies just South of the 4WD track crossing at |/to < N 32 49.522' W 109 49.368' >|/tx \274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 30 %%%%%%%%%%%%%%%%%%% /dopage30 { /ggnum 123 store /pagenum 30 store /tabs [14] store startpage (|1The structure can be variously ascribed to being a field house or a "wading pool". It is circular, three meters in diameter, and presently half a meter deep. Its basal elevation is apparently flush with and one meter from the canal proper. Its use or purpose remains enigmatic. Tentative name is the "troll house". |h The Mud Springs Canal continues eastward, just north of the 4WD track until it reaches an apparent "Tee" junction that is possibly the initial diversion point for the Jernigan Canal. There are a few small rocks buried in the otherwise southern dirt sidewall at this point that suggest a headgate structure. "Dead flowers" are sometimes a fairly unique but highly seasonal marker for canal routes in this area. |h After crossing a larger 4WD track to the east, there is a split that appears to provide a short feeder to a more modern small cattle tank. This tank has a surprisingly dense brush content. The tank's origin and its actual water supply presently remains unexplained. The Mud Springs Canal tends northward and eastward from here and remains somewhat dim and rather small but reasonably traceable for the better part of a kilometer. |h In general, there are very few artifacts associated with any of the hanging canals. But in this area, very rare and quite sparse potsherds can occasionally be found. Although not in direct association. These are typically late classic tradeware, often corrugated or red slipped. As is typical for the entire Safford Basin, the varieties suggest exceptionally strong trading patterns between most of the dominant Southwestern cultures. |h The canal seems to totally disappear between |/to < N 32 49.826' W 109 48.955' >|/tx and |/to < N 32 50.296' W 109 48.597' >|/tx Possibly because of sheet flooding or simply looking in the wrong place. There also seems to be a possible short canal segment at a totally unreasonable |/to < N 32 49.735' W 109 48.932' >|/tx that presently has no explanation. Further east, the Allen Canal does approach within a kilometer but appears "blocked" by small rolling hillocks. No evidence of a more southerly direct canal route down Hawk Hollow has yet been observed and is presently deemed rather unlikely. |h Once relocated northerly, the canal remains fairly traceable, although a portion of it has clearly been trashed by an offroad bike track. Things get somewhat dim near the major east west fence but renew themselves nicely further north. Near |/to < N 32 50.556' W 109 48.631' >|/tx , the canal goes into a hanging mode and is remarkably white. Most likely owing to caliche deposits. The canal crossing of the main West Layton road is fairly obvious but heavily eroded. There is a distinctive ocotillo on a small slope to the east. |h Curiously. the Mud Springs canal and the Jernigan canal do remain quite close together in this region. Despite their apparent intentional separation a full two kilometers earlier. |h Near |/to < N 32 50.556' W 109 48.631' >|/tx , the Mud Springs canal becomes wider and quite easily traced\274 ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 31 %%%%%%%%%%%%%%%%%%% /dopage31 { /ggnum 123 store /pagenum 31 store /tabs [14] store startpage (|1 Nearly the entire route of the canal can also be viewed from this point. Patina and desert varnish here would seem to strongly support a prehistoric canal origin. |h Frustratingly, the canal seems to vanish directly to the north. With the most likely explanation being its lying |/to under|/tx the obvious 4WD tracks. Terrain further north is highly disturbed, including flood control structues, a cemetery, spread out trash dumps, offroading, and power lines. While there are no obvious field candidates, the canal route at this point is remarkably close to ultimately merging with the lowland Gila River based canal systems. |h Considering the stupendous effort that went into all the canal construction and maintenance, a well defined and obvious purpose must surely have existed. |h As noted, there is a distinct possibility that the Mud Springs canal was an early prototype, because nearly its entire route can be viewed from certain locations simultaneously. And thus would have significantly lower risk factors involved in its development and construction. |h |c The |jJernigan |jCanal |d |h |/clickjernigan |h|/adj2 The Jernigan Canal is a western branch of the Mud Springs Canal. It likely is 2 kilometers or 1.2 miles long It terminates in a French Drain cascade and routes to an apparent prehistoric field area in the vicinity of the old Central dump and near ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 32 %%%%%%%%%%%%%%%%%%% /dopage32 { /ggnum 123 store /pagenum 32 store /tabs [14] store startpage (|1|/to CC:1:38 (ASM)|/tx and other sites previously studied as |/su EAC|1|/eac field projects. The canal includes sweeping "double S" curves used to maintain a slope independent of terrain. It has two moderately hanging sections. A fairly deep (|j90 cm|j) and long (|j100 m|j) cut is present near its northern extreme. One 18 cm Mesquite tree is present mid channel. The canal mid route returns remarkably close to the Mud Springs Canal, with a kilometer or more of converging dual channels apparently were used to gain only a seemingly modest elevation difference. |h Two large gaps remain in the exploration, possibly explained by sheet flooding or alternate routes. An associated "solid aqueduct" structure has yet to be dated and remains possibly historic. Significant portions of the canal are well defined, while other areas are only suggestive or missing entirely. |h The Jernigan Canal apparently branches off of the Mud Springs Canal in a "T" structure near |/to < N 32 49.659' W 109 49.170' >|/tx . Several smaller rocks in the otherwise uniformly coarse |/su Holocene|1|/holocene valley fill soils do seem to suggest a possible but unexcavated "headgate" or similar diversionary structure. Both canals in this area are not well defined. However, seasonal dead wildflowers at times rather strongly reinforce this likely routing. |h The canal becomes better defined just west of the 4WD track at |/to < N 32 49.751' W |/to 109 49.132'>|/tx and may even have a second parallel channel at this point. Size is the typical one meter wide by 30 cm deep. After crossing the track near |/to < N 32 |/to 49.806' W 109 49.086' >|/tx , the canal route seems to vanish entirely without a trace. Considerable time and effort have been spent trying to find the projected missing 600 meters or 2000 feet of route without positive results. |h The most credible canal crossing of the West Layton Road would appear to be the modern waterbar at |/to < N 32 50.215' W 109 48.898' >|/tx . The potential canal route between here and |/to < N 32 50.347' W 109 48.926' >|/tx is rather vague but seems to be the only somewhat reasonable |/su Ockham's Razor|1|/ockham choice. |h There is a possible western canal branch at |/to < N 32 50.364' W 109 48.850' >|/tx leading to a potential aqueduct near |/to < N 32 50.347' W 109 48.926' >|/tx However, this structure is highly enigmatic and could in fact be a historic wash wagon crossing. |h At |/to < N 32 50.410' W 109 48.763' >|/tx , the canal is very close to West Layton Road and amazingly near the adjacent Mud Springs Canal. It is only slightly higher in elevation. Extreme measures were apparently taken to achieve this exceptionally modest height gain. |h The Jernigan canal continues north in a well defined manner and then suddenly disappears near |/to < N 32 50.574' W 109 48.760' >|/tx . A large "S" turn is anticipated at this point and sheet flooding is a possible reason for the dearth of on-ground evidence. There is no obvious connection between this point and the continuing northerly Mud Springs canal after its road crossing. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 33 %%%%%%%%%%%%%%%%%%% /dopage33 { /ggnum 123 store /pagenum 33 store /tabs [14] store startpage (|1The Jernigan Canal resumes at |/to < N 32 50.570' W 109 48.869' >|/tx in a distinctly counterslope segment. There is a possible west trending cutout at this point. This may go to minor fields, flow regulation or desilting, or may not exist at all. The main canal is well defined south of here and includes a large Mesquite tree mid channel. Finding this portion of the canal proved quite difficult because of a non-obvious and unexpected counterslope |/to "U"|/tx turn western wash crossing. |h The canal makes another |/to "U"|/tx turn in an obvious well hung portion that includes a fairly long and deep cut at |/to < N 32 50.564' W 109 48.927' >|/tx It then routes to the south and drops into an apparent French Drain type of structure that feeds some well defined prehistoric field candidates. |h This east viewing image\274 |h |h \274shows a hanging portion of the canal just above the fields with the tentative French Drain structure just off image to the right. This, along with the upcoming Lefthand Canal is one of few known examples of canal end delivery usage. |h |c The |jShingle |jMill |jArea |d |h |/clickshingle |h|/adj2 If the premise that virtually every drop of Northeastern Mount Graham stream water was totally exploited by the hanging canal systems is valid, then some prehistoric canal rather likely existed in the Shingle Mill Canyon or Merrill Wash ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 34 %%%%%%%%%%%%%%%%%%% /dopage34 { /ggnum 123 store /pagenum 34 store /tabs [14] store startpage (|1areas. And might otherwise be conspicuous by its absence. There is in fact a rather obvious abandoned historic canal called the |/to Minor Webster Ditch System|/tx present. Although of a somewhat deeper vee construction, having evidence of modern tool use, and having an atypical access road, a reasonable case can be made for adaptation from a prehistoric prototype. The total length would be approximately 3.2 kilometers or 2.0 miles. While presently largely unexplored, the canal could reasonably be expected to deliver water from the Shingle Mill and Merrill Wash transition area to fields near the present Cluff Ranch headquarters of |/su Arizona Game and Fish|1|/agf . Approximately one-half of the historic canal is obvious and easily traced and followed from the satellite images. |h Few hints of a canal, historic or prehistoric, have yet been found south and west of the |/su Mceniry Road|1|/mceniry crossing at |/to < N 32 47.869' W 109 52.384' >|/tx . But there are, however, numerous |/su CCC|1|/ccc diversion structures in the immediate area. This area is a floodplain and a case can be made for major and possible disruptive flooding over time. A reasonable input point might be at the transition between Shingle Mill Canyon and Merrill Wash, perhaps at |/to < N 32 47.327' W 109 53.401' >|/tx . |h The historic canal becomes rather obvious just east of the |/su Mceniry Road|1|/mceniry at |/to < N 32 |/to 47.869' W 109 52.384' >|/tx and is easily traced northward. The present exploration ended near |/to < N 32 47.869' W 109 52.384' >|/tx , with the canal continuing to be readily extended northward. A modest hanging portion of the canal can be reasonably expected further north, but this has not yet been field verified. The projected end use area was likely around |/to < N 32 48.769' W 109 51.988' >|/tx . Terrain in this area has been extensively and repeatedly modified by farming activities and |/su AGF|1|/agf projects. |h Many thanks to historian George Hayes of |/su Arizona Game and Fish|1|/agf for his highly useful research input to this topic. |h |c The |jLefthand |jCanal |d |h |/clicklefthand |h|/adj2 The |/to Goat Hill|j/|jLefthand|j/|jSpear Ranch|/tx area is well known archaeologically and has been studied in depth by |/su Neely|1|/neelypap and others. |h At present, the canal appears to directly source from an intermittent Lefthand Canyon stream. While clearly mountain based, any extended distance delivery channels or hanging portions have yet to be identified. Although quite culturally significant, the canal purpose thus presently appears to differ from others in this study. Many of the hanging mountain stream delivery canals in this study do not at present have clearly defined end use destinations. Assuming some reasonable comtemporaneity, the Lefthand studies clearly show potential end use solutions. ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 35 %%%%%%%%%%%%%%%%%%% /dopage35 { /ggnum 123 store /pagenum 35 store /tabs [14] store startpage (|1Possible canal delivery systems also apparently do exist in the Lamb Tank area somewhat to the West. These certainly also deserve further study. Area problems have been compounded by |/su CCC|1|/ccc overwork. |h |c Bear |jSprings |jArea |d |h |/clickbear |h|/adj2 The Bear Springs Canal was not originally included in this study, but deserves a possible |/to En Passant|/tx mention. Bear Springs and its nearby Bigler Ponds were once major artesian water sources that once hosted a long abandoned hippy commune and a few acres of leveled and irrigated fields. A long dry and now apparently abandoned and hugely oversized obviously modern canal routed from the Bear Springs area 3.2 kilometers or 2 miles north to a dirt distribution tank. Several additional smaller canals apparently delivered water even further north. |h Bear Springs is found at |/to < N 32 51.212' W 109 56.277' >|/tx and Bigler ponds near |/to |/to < N 32 51.116' W 109 56.900' >|/tx . The oversize modern canal is routed through |/to < N 32 51.828' W 109 55.819' >|/tx , |/to < N 32 52.367' W 109 55.190' >|/tx , and |/to < N 32 |/to 53.006' W 109 54.790' >|/tx to its small distribution tank near |/to < N 32 53.344' W 109 |/to 54.784' >|/tx . While there seem to be no obvious prehistoric cultural associations in the area, a water resource of this magnitude would be highly unlikely to remain ignored by a canal literate prehistoric culture. The overwhelming majority of Gila Valley pioneer and historic canals clearly show evidence of both "steal the plans" and "dig out an old ditch" as well. It is not yet clear if the Bear Springs canal was such a candidate. The Tranquility Canal was a likely known example of artesian sourcing. Further study is warranted. |h The artesian flow rates are sharply down from their historical values and the area appears to be under private and access restricted development. |h |c The |jBandolier |jCanal |d |h |/clickbandolier |h|/adj2 What appears to be a surviving prehistoric canal fragment can be found between |/to < N 32 56.692' W 109 54.709' >|/tx and |/to < N 32 56.735' W 109 54.691' >|/tx . This seems likely to be a river sourced lowland canal, owing to its larger size and its being on the "wrong" or Eastern side of the modern Dodge Nevada Canal. Were this to be related to other mountain stream or artesian fed canals in this study, a source would likely be required in the Bear Springs or the Tripp Canyon areas. After limited exploration, no credible evidence of such sourcing has yet been found. |h ) cl showpage } store %%%%%%%%%%%%%%%%%%%%%%%% page 36 %%%%%%%%%%%%%%%%%%% /dopage36 { /ggnum 123 store /pagenum 36 store /tabs [14] store startpage (|c Current |jwork |d As with most Southwestern Archaeology, any funding is sorely limited. As is the manpower needed for further study and interpretation. |/su Dr. James Neely|1|/emailneely , professor emeritus at the |/su University of Texas|1|/utexas at Austin, is a long term researcher here. One of his many earlier papers appears |/su here|1|/neelypap , and a second |/su here|1|/safgrid . Several additional publications are in process. Studies are ongoing. Additional champions and more support are urgently needed. |h A crucial present issue is |/to an accurate mapping of the entire area to acceptable |/to resolutions|/tx far better than what is readily web available. It is possible that one or more |/su Draganfly|1|/draganfly Drones might be suitable for this task. |h |/to A web published and open sourced detailed master index of all prehistoric ag |/to features in the area would also seem to be highly useful|/tx . There are serious problems, outrageous costs, poor maintenance, and sharply limited availability involving the existing directory systems. The web has fully guaranteed that their attempts at extreme secrecy simply no longer work and are clearly no longer applicable. It is also only a matter of time for useful web based general aerial photography to make the needed 10:1 further resolution increase required for nothing to remain either hidden or hideable. |h Needing addressing are successful methods of precisely dating and isolating differences between prehistoric, early pioneer, |/su CCC|1|/ccc (|jCivilian Conservation Core|j) and modern constructs. |h Perhaps CSI forensic techniques may emerge of use here. For instance, "would any |/su CCC|1|/ccc fingerprints survive on the undersides of rocks?" Resolution of that question should be a sure fire winner for a Master's Thesis in any of a dozen of fields. |h Many of these hanging canals appear endangered.|/tx Several recent water tank constructions have run roughshod over the Rincon area hanging canals. They also have totally trashed numerous grids and mulch rings. Without even the most cursory questioning that clearly could have dramatically eased their impact at minimal costs. |h Extensive |/su ADOT|1|/adot studies are also underway that would realign US 70 well south of its existing urban route. |/to This might clearly endanger virtually all of the hanging |/to canals!|/tx Present studies do not so much as even mention any prehistoric cultural considerations. With the apparent presumption that they do not exist. |h Today, the Gila Valley is well noted for its many examples of outstanding high technology. Most obviously involving |/su telescopes|1|/lbt , cotton drip irrigation, and new significantly "greener" energy efficient |/su mining|1|/fcx techniques. |h |/to When taken within the context of available stone age tools, techniques, and |/to energetics, these prehistoric grids and hanging canals clearly illustrate many |/to examples of comparably superb and exceptionally world class engineering|/tx . ) cl showpage } store %%%% end page by page listing %%%%%%%%%%%%%%%%%%% MAIN COMMANDS %%%%%%%%%%%%%%%%%%%%%%%%%%% % uncomment the pages to be processed initgraphics % state left from gonzo? dopage1 dopage2 dopage3 dopage4 dopage5 dopage6 dopage7 dopage8 dopage9 dopage10 dopage11 dopage12 dopage13 dopage14 dopage15 dopage16 dopage17 dopage18 dopage19 dopage20 dopage21 dopage22 dopage23 dopage24 dopage25 dopage26 dopage27 dopage28 dopage29 dopage30 dopage31 dopage32 dopage33 dopage34 dopage35 dopage36 %%%%%%%%%%%%%%%%%% IMAGE DATA TO BE ADDED %%%%%%%%%%%%%%%%%%%%%% % clickthroughs are presently in images, not canal/images % image data to cut and paste as watermarks, then as links ... % group one images go on pages 1 to 10 % /hang1 goes on page 2 marijilda hanging % (http://www.tinaja.com/images/hangcan1.jpg) % (% http://www.tinaja.com/canal/rework/level2/hangcan1.jpg % /henry1 goes on page 8 phyllis in henry canal % (http://www.tinaja.com/images/henry1.jpg) % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\henry1.jpg) % group two images go on pages 11 to 20 % /tranq1 goes on page 11 urban canal % (http://www.tinaja.com/images/tranq1.jpg) % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\tranq1.jpg) % http://www.tinaja.com/canal/rework/level2/tranq1.jpg % /tranq2 goes on page 12 tranquility puddled ditch % (http://www.tinaja.com/images/tranq2.jpg) % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\tranq2.jpg) % (http://www.tinaja.com/images/tranq2.jpg) % /rinc2 goes on page 13 me in ponding area % (http://www.tinaja.com/images/rinc2.jpg) % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rinc2.jpg) % /rinc1 goes on page 14 twin boobs image % (http://mapper.acme.com/?ll=32.76622,-109.73477&z=18&t=S % &marker0=32.76580%2C-109.73580%2C2.1%20km%20WxNW%20of%20Cactus%20Flat%20AZ) % http://www.tinaja.com/images/rinc1.jpg % dead1 goes on page 16 three way switch % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\dead1.jpg % http://mapper.acme.com/?ll=32.76062,-109.78143&z=19&t=S&marker0=32.76062%2C-109.78143%2C6.2%20km%20W%20of%20Cactus%20Flat%20AZ % fry3 goes on page 18 braided frye channels % (http://www.tinaja.com/images/frye3.jpg) % http://mapper.acme.com/?ll=32.75998,-109.81550&z=19&t=S&marker0=32.75998%2C-109.81550%2C8.3%20km%20NE%20of%20Mount%20Graham%20AZ % frye4 goes on page 19 HS Canal % (http://www.tinaja.com/images/frye3.jpg) % http://mapper.acme.com/?ll=32.75857,-109.81309&z=19&t=S&marker0=32.75883%2C-109.81385%2C8.3%20km%20NE%20of%20Mount%20Graham%20AZ % group 3 images... % /frye1 goes on page 21 topo of lower robinson route % http://mapper.acme.com/?ll=32.77714,-109.79020&z=15&t=T&marker0=32.78442%2C-109.79354%2C7.9%20km%20WxNW%20of%20Cactus%20Flat%20AZ % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\frye1.jpg) % /rob1 goes on page 21 robinson upslope and deadman peak % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rob1.jpg) % http://www.tinaja.com/images/rob1.jpg % /rob2 goes on page 22 route up robinson with brush % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rob2.jpg) % http://www.tinaja.com/images/rob2.jpg % /rob3 goes on page 22 bottom top of robinson flat % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\rob3.jpg) % http://www.tinaja.com/images/rob3.jpg % /allen0 goes on page 24 allen takein % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\allen0.jpg) % http://www.tinaja.com/images/allen0.jpg % /allen1 goes on page 25 low allen above culebra % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\allen1.jpg) % http://www.tinaja.com/images/allen1.jpg % needs stripe removed % group 4 images... % /mud1 goes on page 28 mid mud with me % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\mud1.jpg) % http://www.tinaja.com/images/mud1.jpg % /troll1 goes on page 29 low trollhouse pool and car % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\troll1.jpg) % http://www.tinaja.com/images/troll1.jpg % /mud2 goes on page 31 high lowest mud springs on layton % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\mud2.jpg) % http://www.tinaja.com/images/mud2.jpg % /jern1 goes on page 33 high jernigan viewing webstr % (C:\\Documents and Settings\\don 2\\Desktop\\Canal Rework\\images\\jern1.jpg) % http://www.tinaja.com/images/jern1.jpg % end image links % EOF