%!PS-Adobe-3.1 % Copyright c 2019, 2022 by Don Lancaster & Synergetics, Box 640, Thatcher, AZ, 85552 % (928) 428-4073 Email: don@tinaja.com Website: http://www.tinaja.com % Consulting services available. % All commercial rights and all electronic media rights ~fully~ reserved. % Linking usually welcome. Reposting expressly forbidden. Version 10a. % This reads an array of [{imagefilename hresolution vresolution % Normally sent to Acrobat Distiller via command line //acrodist /F . % BE SURE TO CHANGE filenameprefix BELOW! % BE SURE TO ACTIVATE FILE READS WITH /F! %%////// Extracted Gonzo Utilities ////// /mt {moveto} def /li {lineto} def /rm {rmoveto} def /rl {rlineto} def /ct {curveto} def /cp {closepath} def /f {fill} def /pd {0 exch neg rl} def /pr { 0 rl} def /pu {0 exch rl} def /pl {neg 0 rl} def /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 /thingridlines {0} def /setgrid { /blocksize exch def translate % simplified blocksize dup scale} def /showgrid {gsave /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 18 setwebtint % emphasize here 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 /fatterborder {true } store /fat5 {true} store /fatter10 { true} store /showdots { false } store /dot { showdots { currentpoint newpath 0.150 0 360 arc fill }if} def /mdot { mt dot} def /random {rand 65536 div 32768 div mul cvi} def % as in -- 6 random -- /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 /cstretch 0 store /sstretch 0 store % 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 % timing utilities. use stopwatchon and stopwatchoff for simple % one shot timing. For multiple time totals, use resettimer % starttimer stoptimer ... starttimer stoptimer reporttimer /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 /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 % 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 % 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.83301 def % default value for best fit SLIGHTLY REVISED! /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 % ///////// (A) WEB FRIENDLY COLOR UTILITIES ///////////// % tintmat is a self-generating list of 216 triple color values /webtintmat [ 0 1 5 { /a exch store 0 1 5 { /b exch store 0 1 5 { 5 div b 5 div a 5 div }for } for } for ] def % setwebtint accepts a color number 0 to 215 and then % sets the PostScript color generator for later use... /setwebtint { abs cvi 216 cvi mod % restrict range webtintmat exch 3 mul 3 getinterval % get values from table aload pop setrgbcolor} def % and set them % The blocks are arranged as red to the right, green % up in order of increasing blue. % Some "pure color" sequences are % red: 0 1 2 3 4 5 % orange: 0 7 8 15 16 23 (sort of) % yellow: 0 7 14 21 28 35 % green: 0 6 12 18 24 30 % aqua: 0 42 84 126 168 210 % blue: 0 36 72 108 144 180 % magenta: 0 37 74 111 148 185 % purple 0 73 73 110 147 183 (sort of) % gray 0 43 86 129 172 215 % /makeurl generates the pdfmark Simplified non-gonzo only left justifiable! /makeurl1 { /cururlname exch store % save the url string mark % start pdfmark /Rect [x1 0.3 sub y1 0.3 sub x2 0.3 add y2 1.2 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 } store %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % attempt at string sorts... /bubsort3a {/curmat1 exch store % STRAIGHT SORT curmat1 length 1 sub -1 1 % start outer loop {/done true store % short exit marker /maxposition exch store 0 1 maxposition 1 sub {/posn exch store % inner loop curmat1 posn get % find current count curmat1 posn 1 add get % compare to next higher gt{curmat1 posn get % swap only if needed curmat1 posn 1 add get curmat1 exch posn exch put curmat1 exch posn 1 add exch put /done false store % a swap was needed }if } for % inner loop done {exit} if % stop on no swaps } for % outer loop curmat1 % update sorted array } bind store /bubsort3b {/curmat1 exch store % MATRIX SORT curmat1 length 1 sub -1 1 % start outer loop {/done true store % short exit marker /maxposition exch store 0 1 maxposition 1 sub {/posn exch store % inner loop curmat1 posn get 1 get % find current count curmat1 posn 1 add get 1 get % compare to next higher gt{curmat1 posn get % swap only if needed curmat1 posn 1 add get curmat1 exch posn exch put curmat1 exch posn 1 add exch put /done false store % a swap was needed }if } for % inner loop done {exit} if % stop on no swaps } for % outer loop curmat1 % update sorted array } bind store % ////////// xml clone procs ////////////////// /setupfileread { /readfile filenameprefix xmlfilename mergestr (r) file store } store % this creates an array of the filenames in the xml document /scanreadfile {mark % start array { readfile 400 string readline not {exit} if findloc % scan for } loop pop % flush ? ] /filearray exch store } store % reject all files that do not have in them /findloc { /curline exch store curline () search { pop pop findnotloc }{pop} ifelse } store /findnotloc {/zorch exch store zorch () search {exch pop exch pop}{ } ifelse } store %% ANN link %%%% % note that ANN uses absolute x2y2 while roundbox uses relative x2y2. /makeurl1 { /cururlname exch store % save the url string mark % start pdfmark /Rect [x1 y1 x1 x2 add y1 y2 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 } store /jpegimageprocwithlink { % hoffset voffset hres vres photoscale urlfrom urlto % stopwatchon save /snap2 exch def /inurllink exch store % grab link filename % inurllink == % for debug /infilename exch store % grab passed pix file /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 % stopwatchoff } def /jpegimageprocwithlinkxx { pop pop } store /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 %%%%%%% end gonzo includes start new general code %%%%%%%%%%%%%%%%%%% %%% Page Navigation Utilities %%%% % glyphlast can only be used if the number of pages is known! /numpagesknown false store /lastpagenum 4 store /kern 0.1 store /navpagenum 1 store /prevpage 1 store /lastpage false store /navvposn 74 store % baux draws and letters navigation boxes /baux { save /ssnap exch store /sym exch store translate 0 0 mt 2 pu 2 pr 2 pd closepath gsave 172 setwebtint fill grestore 129 setwebtint line2 stroke 196 setwebtint /font2 /StoneSans-Bold 1.3 gonzofont font2 1 sym stringwidth pop 2 div sub 0.7 % fake cj mt sym show ssnap restore} store % rest of nav routines /glyphone {navvposn (<<) baux } store /glyphprev {navvposn (<) baux } store /glyphnext {navvposn (>) baux } store /glyphlast {navvposn (>>) baux} store /aaaa { [ /Rect [0 74 2 76] /Page/Next /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark numpagesknown { [ /Rect [2.5 74 4.5 76] /Page lastpagenum /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark } if } store /bbbb { [ /Rect [0 74 2 76] /Page 1 /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark [ /Rect [2.5 74 4.5 76] /Page /Prev /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark [ /Rect [5 74 7 76] /Page /Next /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark numpagesknown { [ /Rect [7.5 74 9.5 76] /Page lastpagenum /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark } if } store /cccc { [ /Rect [0 74 2 76] /Page 1 /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark [ /Rect [2.5 74 4.5 76] /Page /Prev /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark numpagesknown { [ /Rect [5 74 7 76] /Page lastpagenum /View [/XYZ null null null] /Border [0 0 0 ] /Subtype /Link /ANN pdfmark } if } store % main nav /addpagenav {gsave 3 0 translate navpagenum 1 eq { 0 glyphnext numpagesknown {2.5 glyphlast} if aaaa} if navpagenum 1 ne lastpage not and {0 glyphone 2.5 glyphprev 5 glyphnext 7.5 glyphlast bbbb} if lastpage {0 glyphone 2.5 glyphprev cccc} if /prevpage pagenum store /navpagenum navpagenum 1 add store grestore} store /bubsort3c {/curmat1 exch store % MATRIX SORT on array zero curmat1 length 1 sub -1 1 % start outer loop {/done true store % short exit marker /maxposition exch store 0 1 maxposition 1 sub {/posn exch store % inner loop curmat1 posn get 0 get % find current count entry 0 curmat1 posn 1 add get 0 get % compare to next higher entry 0 gt{curmat1 posn get % swap only if needed curmat1 posn 1 add get curmat1 exch posn exch put curmat1 exch posn 1 add exch put /done false store % a swap was needed }if } for % inner loop done {exit} if % stop on no swaps } for % outer loop curmat1 % update sorted array } bind store /showbackground { gsave 0 0 mt 1000 0 rlineto 0 1000 rlineto -1000 0 rlineto closepath 213 setwebtint fill grestore} store %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % new sequence strts here [ (shortname) hpixels vpixels ] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % zzzz marker %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% image parameters %%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Prefixes are host system specific! [/CropBox [0 0 325 792] % set phone responsive cropbox /PAGES pdfmark /font1 /StoneSans-Bold 0.85 gonzofont font1 /urlfromprefix (C:/Users/don/Desktop/canal/images/) store /urltoprefix (https://www.tinaja.com/canal/images/) store /detailsprefix (https://www.tinaja.com/canal/images/details/) store /pagenum 1 store % present page number /harray [0 1 0 1 0 1 0 1 0 1 ]store /varray [4 4 3 3 2 2 1 1 0 0 ] store /posn1 0 store % present image position /hspace 15 store /vspace 14 store /leftmargin 1.4 store /topmargin 72 store /ypos topmargin store /botmargin 3 store /boxwide 13.5 1.6 add store /boxhigh 12.5 1.5 add store /border 0.6 store %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% image array %%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % imagearray form is [ [(imagename)hres vres)]... ] % will later be alphabetized % 300 repeats got 189 kb. % 30 x 10 got 1890 kb % 10 x 30 got % 15 x 20 got 3584 1960 penalty is still 3584 % 1 x 20 is 3243 48645 with 1960 /imagearray [ [(allen0)1000 800] [(allen1) 1000 800 ] [(allen_map1) 818 867 ] [(allentopo1) 736 687 ] [(allen1_topo_map) 925 789 ] [(aquad3) 1024 1008 ] [(artes1b) 1000 923 ] [(artes1c) 1000 1199 ] [(artes2a) 1000 1067 ] [(artes2b) 1000 1128 ] [(artes2c) 1000 720 ] [(ash_topo1) 1072 865 ] [(azgraham)809 809 ] [(azthatcher1960_topo) 530 615 ] [(azmap1) 849 1071 ] [(band2) 1000 602 ] [(band3) 1000 852 ] [(band4) 1000 852 ] [(bearsp_adj1) 662 666 ] [(bearsflat_topo) 798 674 ] [(bearflat2_topo) 834 746 ] [(bearflat_map) 770 656 ] [(bearsprings_map) 778 759 ] [(bearsprings_topo) 764 803 ] [(bearsprings1960) 626 644 ] [(bedford5ghcr) 1500 1124 ] [(bestgrid) 1200 778 ] [(bigler_map) 732 562 ] [(bigler_topo) 798 674 ] [(bluepond1) 1500 1316 ] [(bluepond2)1500 1395 ] [(bluepond3) 1500 1112 ] [(bluepond4)1500 1170 ] [(bluepond5) 1500 1041 ] [(bluep1) 1000 1014 ] [(bluepmulchrings) 1000 850 ] [(central_dump1) 1054 637 ] [(cluffnw1) 1000 1084 ] [(cluffnw2) 1000 1097 ] [(cluffnw3) 1000 789 ] [(cluffnw4) 1000 962 ] [(cluffnw5) 1000 761 ] [(cluffnw6) 1000 950 ] [(cluffnw7) 1000 749 ] [(cluffnw8)1000 728 ] [(cluffnw_map1) 596 719 ] [(cluffnw_topo) 646 561 ] [(culebra1)1000 750 ] [(culebra2) 1000 750 ] [(deadman3) 636 491 ] [(deadman4) 940 685 ] [(deadman5) 976 897 ] [(deadman_map1) 783 655 ] [(deadman_map2) 940 505 ] [(deadman10_topo) 976 601 ] [(deadman20_topo) 908 507 ] [(deadman_east_tilt1) 1574 811 ] [(dragan) 500 400] [(dump20) 931 693 ] [(dump21_map) 695 653] [(dump22)1000 718 ] [(dumpeast_map) 624 612 ] [(dump_dual_map) 560 568 ] [(fig4) 1024 768 ] [(freeman1)999 926] [(freeman2)1000 890] [(freeman3)0664 644] [(freeman4)1000 926 ] [(freeman5)1000 893 ] [(freeman6)1000 971 ] [(freeman7) 1000 971 ] [(freeman8) 1000 1086 ] [(freeman9) 1000 897 ] [(freeman_map) 682 508 ] [(frye1) 1000 800 ] [(frye2) 1000 800 ] [(frye100) 1000 577 ] [(frye101) 1000 847 ] [(frye102) 1000 836 ] [(frye103) 992 842 ] [(frye104) 999 808 ] [(frye105) 2592 1944 ] [(frye106) 756 510 ] [(frye107) 2592 1944 ] [(frye108) 989 709 ] [(frye109) 1000 757] [(frye_lead200) 1064 791 ] [(fryemesa_map) 868 545 ] [(fryemesa2_map) 989 581 ] [(gc1) 1200 926 ] [(gc2) 1200 964 ] [(goat4) 1000 1037 ] [(goat5) 696 540 ] [(golf_sat1) 664 552 ] [(golf_sat2) 915 529 ] [(golf_topo1) 575 580 ] [(golf_topo2) 684 549 ] [(golf1_map) 828 560 ] [(golf3) 1500 1098 ] [(golf4) 1232 515 ] [(golf51) 1000 898 ] [(golf52) 1000 1108 ] [(golf53) 1000 842 ] [(golf54) 1000 742 ] [(golf55) 1000 941 ] [(golf56) 1000 903 ] [(golf_sat2) 915 529 ] [(grids) 970 776 ] [(hangcan1) 1068 712 ] [(henry1) 1000 800 ] [(henry9) 1072 717 ] [(henry10) 1000 788 ] [(henry11) 1000 851 ] [(henry12) 1000 894 ] [(henry30) 999 674 ] [(henry31) 1000 915 ] [(henry33) 1000 903 ] [(henry34) 1000 1026 ] [(henry35) 1000 1133 ] [(henry_map1) 931 758 ] [(henry_topo1) 600 422 ] [(highleb1) 1328 875 ] [(highleb3d) 1121 878 ] [(high_lebanon_tilt3) 1574 811 ] [(hscan1_map)772 632 ] [(hscan2) 1417 1428 ] [(hscanal3) 1502 854 ] [(hs_canal_tilted) 1574 811 ] [(IMG_2411) 2592 1944 ] [(jenn1) 1000 920 ] [(jenn2) 1000 740 ] [(jenn3) 1000 1063 ] [(jenn4) 1000 1122 ] [(jern1)1000 800] [(jern20) 1240 1000 ] [(jern21) 1000 811 ] [(jern22) 1000 819 ] [(jern23) 1000 652 ] [(jern24)1000 1019 ] [(jern26)1000 1094 ] [(jern27) 1000 978 ] [(jern28) 1000 1169 ] [(jern29) 1000 879 ] [(jern30) 1000 1056 ] [(jern31) 1000 1142 ] [(jern40) 1000 930 ] [(jern_map1)672 614 ] [(jernigan_topo1) 544 649 ] [(jfa_map1) 1686 1305 ] [(jose5)1050 829 ] [(klon1) 1200 1080 ] [(klon2) 1137 725 ] [(klon3) 1200 1060 ] [(lebanon_route3) 1016 581 ] [(ledford6) 1000 1153 ] [(left1) 1000 1065 ] [(lefthandfig4) 688 1038 ] [(lefthandfig7) 1032 694 ] [(lefthandfig8) 682 1012 ] [(lefthandfig9) 1029 694 ] [(lefthandfig10) 1040 680 ] [(lefthandfig11) 1021 685 ] [(lefthcan1.map) 688 826 ] [(levada) 640 853 ] [(lidar2) 655 705 ] [(llll) 558 582] [(longview_map1) 578 408 ] [(longview_topo1) 638 553 ] [(Lower_Frye_construct1) 1574 811 ] [(lowerfrye_map1) 923 740 ] [(lowerfrye_map2) 713 531 ] [(lowerfryecon_topo1) 583 507] [(map1) 3300 2550 ] [(map2) 1000 800 ] [(mary2) 600 399 ] [(minor1)1000 869 ] [(minor2) 997 754 ] [(minor3) 1000 876 ] [(minor_map1)626 808 ] [(mud_map1)592 587 ] [(mudmaybe1) 680 739 ] [(mudmaybe2) 709 806 ] [(mud1) 1000 800 ] [(mud2) 1000 800 ] [(mud3) 1500 1468 ] [(mud4) 1500 987 ] [(mud10) 1000 913 ] [(mud11) 1000 1086 ] [(mud12) 1000 1046 ] [(mud13) 1000 874 ] [(mud14) 1000 982 ] [(mud20) 1000 800 ] [(mudjern1) 1000 924 ] [(mudsprings_topo1) 676 737 ] [(mystery1)999 710 ] [(mystery2) 1000 911 ] [(pico1) 1000 1108 ] [(pico2) 1000 1048 ] [(pico3) 1000 905 ] [(pico4) 1000 990 ] [(pico5) 1000 824 ] [(pico1_map) 576 444 ] % [(prep1) 1500 1636 ] % these produced some blank images %[(prep2) 1500 1828 ] % went away when resized with 40+ names %[(prep3) 1500 2019 ] %[(prep4) 1024 768 ] %[(prep4x) 1500 995 ] %[(prep5) 1500 1125 ] %[(prep6) 1500 992 ] %[(prep7) 1500 1204 ] %[(prep9) 1500 1125 ] %[(prep10) 1500 1125 ] [(prep11)1500 1124 ] [(prep12)1500 505 ] [(prep13) 1500 1774 ] [(prep14)1500 2253 ] [(prep15) 1500 1237 ] [(prep41) 1200 1300 ] [(prep42) 1000 1219 ] [(prep43) 1000 1413 ] [(prep44) 1000 750 ] [(prep44x) 999 643 ] [(prep45) 1000 750 ] [(prep46) 991 661 ] [(prep47) 1000 803 ] [(prep49) 1000 750 ] [(prep50) 1000 750 ] [(projfrye_topo1) 657 534 ] [(reay1) 1200 970 ] [(reay2) 1200 1223 ] [(reay2a) 1012 864 ] [(reay3) 1200 967 ] [(reay4) 1000 889] [(reay5) 999 670 ] [(reay_map1) 719 715 ] [(reay_topo1) 575 606] [(riggsmesa_map1) 690 711 ] [(rinc1) 625 528 ] [(rinc2) 1000 800 ] [(rob1) 1000 800 ] [(rob2) 1000 800 ] [(rob3) 1000 800 ] [(robinson5) 1499 787 ] [(robinson_map1) 534 635 ] [(robinson_topo1) 636 681 ] [(safcan1) 3300 2550 ] [(sand1) 1000 939 ] [(sand2) 1524 2313 ] [(sand3) 1000 925 ] [(sand4) 999 596 ] [(sand5) 1000 955 ] [(sand6) 1000 939 ] [(sand7) 1000 652 ] [(sand8) 1000 662 ] [(sand9) 1000 1261] [(sand10) 1000 818 ] [(sand11) 1000 940 ] [(sand12) 1000 1026 ] [(sand15) 1000 904 ] [(sand16) 1000 1068 ] [(sand17) 2463 2406 ] [(sand19) 1000 912 ] [(sand20) 1000 533 ] [(sand30) 977 863 ] [(sand31) 1000 1162 ] [(sand33) 1044 693 ] [(sand36) 1000 1180 ] [(sand37) 1000 1138] [(sand38) 1000 713 ] [(sand40) 1500 1090 ] [(sand41) 989 608 ] [(sandti1) 1090 684 ] [(sand_tree) 1000 1246 ] [(sand_map) 710 660 ] [(sanjo1) 1000 1110 ] [(sanjo2) 976 607 ] [(sanjo3)1574 935 ] [(sanjo4) 1000 1028 ] [(smith1) 714 700 ] [(smith2) 814 1000 ] [(smith3) 1000 904 ] [(smith4) 1000 761 ] [(smith5) 1000 834 ] [(smithxtn1) 1000 1021 ] [(smith1_map) 848 832] [(stock1) 996 908 ] [(sunnycantun)400 533] [(sunzia) 1232 874 ] [(tbponding_map1) 1190 828 ] [(threeswitch)435 327 ] [(thunder1)1000 1039 ] [(thunder2)1000 1039 ] [(thunder4)1000 1026 ] [(thunder10)683 501 ] [(thundrw1)4000 3000 ] [(thundrw2)4000 3000 ] [(tranq1) 1000 800 ] [(tranquility_topo1) 617 622 ] [(tranquility1_map) 591 563 ] [(tranquility_map1) 537 533] [(tree1) 1200 1030] [(triang1) 923 936 ] [(trinch1) 714 512 ] [(tripp1) 998 875 ] [(tripp2) 2040 1926 ] [(troll1) 1000 800 ] [(tugood_map) 859 864 ] [(tugood_topo1) 853 804 ] [(tugood1) 999 713 ] [(tugood2) 1000 1342 ] [(tugood2a) 996 786 ] [(twelve1) 1200 970 ] [(twelve2) 1200 1223 ] [(twelve3) 1200 967 ] [(twinb1) 500 400 ] [(ufo2) 1500 1244 ] [(ufo3) 1500 1410 ] [(ufoff) 712 502 ] [(ufofish1) 971 675 ] [(veech1) 942 804 ] [(veech1_map) 788 784 ] [(veech2) 728 598 ] [(veech3) 868 794 ] [(veech4) 771 596 ] [(veech5) 714 617 ] [(veech_topo1)600 527] [(watersd1) 1000 903 ] ] store % needs jpg versions % [(drone_test_1.bmp) 2038 3452] % [(drone_test_2.bmp) 2048 2460] % [(jern29.bmp) 1000 879 ] % [(lidar2.bmp) 655 705 ] % imagearray length == %%% end image data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% support routines %%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % guesspages presently assumes ten images for all pages /guesspages { imagearray length 10 div ceiling cvi % substitute as needed for other numbers of pages dup 4 ge { /lastpagenum exch store /numpagesknown true store} { pop numpagesknown false store} ifelse }store guesspages % addpagenum centers page number near bottom /addpagenum {gsave 9 setwebtint pagenum 10 string cvs stringwidth pop 2 div 15 exch sub -1 mt (page )pagenum 10 string cvs mergestr show /pagenum pagenum 1 add store} store % addheader lists present number of images and access links /addheader { gsave 10 75.3 mt imagearray length 10 string cvs ( images of the Safford Bajada Hanging canals ) mergestr show 180 setwebtint 11.5 74.2 mt (catalog tutorial video home email ) show % add links inside addheader per PDFMark reference manual [ /Rect [11.3 73.9 14.9 75.0] % catalog /Action << /Subtype /URI /URI (https://www.tinaja.com/menu1a.shtml) >> /Border [0 0 .1] /Color [.3 .3 .7 ] /Subtype /Link /ANN pdfmark [ /Rect [15.3 73.9 19.1 75.0] % tutorial /Action << /Subtype /URI /URI (https://www.tinaja.com/preprint-bcsb1.pdf) >> /Border [0 0 .1] /Color [ .3 .3 .7] /Subtype /Link /ANN pdfmark [/Rect [19.49 73.9 22.12 75.0] % video /Action << /Subtype /URI /URI (https://www.tinaja.com/canal/Reduced_Video/ARAvideo1.3gp) >> /Border [0 0 .1] /Color [ .3 .3 .7]/Subtype /Link /ANN pdfmark [ /Rect [22.60 73.9 25.45 75.0] % home /Action << /Subtype /URI /URI (https://www.tinaja.com/) >> /Border [0 0 .1] /Color [ .3 .3 .7] /Subtype /Link /ANN pdfmark [ /Rect[ 25.8 73.9 28.7 75.0] % email /Action << /Subtype /URI /URI (mailto:don@tinaja.com) >> /Border [0 0 .1] /Color [ .3 .3 .7] /Subtype /Link /ANN pdfmark grestore} store %%%%%%%%%%% % showimages and reallyshow sequentially places images /showimages { imagearray % stopwatchon % bubsort3c % comment to skip sort or dup == report % stopwatchoff {reallyshow} forall} store /reallyshow {dup 0 get /shortimagename exch store dup 1 get /hres exch store 2 get /vres exch store /comesfromurl urlfromprefix shortimagename mergestr(.jpg) mergestr store /goestourl urltoprefix shortimagename mergestr(.jpg) mergestr store /detailsurl detailsprefix shortimagename mergestr(.shtml) mergestr store /shortnamewidth shortimagename stringwidth pop store false {shortimagename == hres == vres == comesfromurl == goestourl == detailsurl == shortnamewidth == (\n) print} if findpageloc insertshell} store /insertshell { save /snap exch store translate % 0 0 mt 5 5 lineto stroke newinsertimage snap restore /posn1 posn1 1 add store posn1 10 ge {/posn1 0 store addpagenav showpage 1 20 10 setgrid showbackground addpagenum} if } store /newinsertimage {gsave % draw a blue box 0 0 moveto boxhigh pu boxwide pr boxhigh pd closepath 170 setwebtint closepath line3 stroke grestore hres vres gt { % image needs vertically spaced gsave hres dup vres sub 2 div exch div % center vertically boxhigh mul 0.1 exch translate 1 boxhigh boxwide div 1.01 mul scale % adjust for non square box % hoffset voffset hres vres photoscale urlfrom urlto 0 0 hres vres .000985 boxwide mul 1000 hres div mul % normalize scale horizontally comesfromurl goestourl jpegimageprocwithlink grestore} { % image needs horizontally spaced gsave vres dup hres sub 2 div exch div % center horizontally boxwide mul 0.1 translate boxwide boxhigh div 1.01 mul 1 scale 0 0 hres vres .000985 boxhigh mul 1000 vres div mul % normalize scale horizontally comesfromurl goestourl jpegimageprocwithlink grestore} ifelse addbox} store %%%%% findpageloc converts posn1 into image offsets /findpageloc {% (posn1 is ) posn1 10 string cvs mergestr (\n) mergestr == harray posn1 get boxwide border add mul border exch add varray posn1 get boxhigh border add mul border exch add} store %%%%%%%%%%%%%%% % addbox Note that roundbox close is relative and makeurl1 absolute! % -xpos- -ypos- -xwidth- -yheight- -cornerrad- roundbox /x1 {boxwide 2 div shortnamewidth 2 div sub 1.5 sub } store /x2 {shortnamewidth 2 add } store /y1 {boxhigh 2 div 1.25 sub} store /y2 {2.5} store /addbox {x1 y1 x2 y2 0.5 roundbox 172 setwebtint fill 15 setwebtint 0.5 0.5 add 1.5 mt shortimagename show x2 2 div (details) stringwidth pop 2 div sub .6 mt(details) 150 setwebtint show [ /Rect [0 0 x2 y2] /Action << /Subtype /URI /URI detailsurl >> /Border [0 0 0] /Color [.7 0 0] /Subtype /Link /ANN pdfmark grestore % exit box } store %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% main scanning loop %%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1 20 10 setgrid showbackground % 18 setwebtint % 20 20 showgrid 0 setwebtint addpagenum addheader showimages /lastpage true store addpagenav showpage %EOF (////) dup == length