/MAX 89.5 def /DMAX MAX 2 mul 18 div def % ====================================================== /coasts [ (../psmaps/coasts.5.inc) run ] def /islands [ (../psmaps/islands.5.inc) run ] def % === grid =========================================== % meridians /mkgrid { -180 10 180 { /i exch def i //MAX neg moveto i //MAX lineto } for % parallels -9 1 9 { //DMAX mul /i exch def -180 i moveto 180 i lineto } for } def /mkaxes { % Greenwich meridian, equator -180 0 moveto 180 0 lineto 0 MAX neg moveto 0 MAX lineto } def % --- coasts ----------------------------------------- /mkcoasts { coasts { /prov exch def /n prov length def prov n 1 sub get /P exch def P aload pop moveto 1 1 n 1 sub { % for prov exch get /Q exch def /Delta [ Q 0 get P 0 get sub Q 1 get P 1 get sub ] def Delta 0 get abs 300 lt { Delta aload pop rlineto } { % |Delta| > 300 % (Jump\n) print % [P Q] == Delta 0 get 0 lt { Q 1 get -75 lt { % Antarctica 180 P 1 get lineto 180 -90 lineto -180 -90 lineto -180 Q 1 get lineto Q 0 get Q 1 get lineto } { Delta 0 get 360 add Delta 1 get rlineto } ifelse } { % Delta crosses -180=180 left to right Q 1 get -75 lt { % Antarctica -180 P 1 get lineto -180 //MAX neg lineto 180 //MAX neg lineto 180 Q 1 get lineto Q 0 get Q 1 get lineto } { Delta 0 get 360 sub Delta 1 get rlineto } ifelse } ifelse % Q 0 get } ifelse /P Q def } for } forall } def % --- islands ----------------------------------------- /mkislands { islands { /prov exch def /n prov length def prov n 1 sub get /P exch def P aload pop moveto 1 1 n 1 sub { % for prov exch get /Q exch def /Delta [ Q 0 get P 0 get sub Q 1 get P 1 get sub ] def Delta 0 get abs 300 lt { Delta aload pop rlineto } { % |Delta| > 300 Delta 0 get 0 lt { Q 1 get -75 lt { % Antarctica /t 180 P 0 get sub Q 0 get 360 add P 0 get sub div def /Y Q 1 get t mul P 1 get 1 t sub mul add def 180 Y lineto 180 //MAX neg lineto -180 //MAX neg lineto -180 Y lineto Q 0 get Q 1 get lineto } { Delta 0 get 360 add Delta 1 get rlineto } ifelse } { % Delta crosses < 180 => -180 left to right Q 1 get -75 lt { % Antarctica /t 180 P 0 get sub Q 0 get P 0 get sub 360 add div def /Y Q 1 get t mul P 1 get 1 t sub mul add def -180 Y lineto -180 MAX neg lineto 180 MAX neg lineto 180 Y lineto Q 0 get Q 1 get lineto } { Delta 0 get 360 sub Delta 1 get rlineto } ifelse } ifelse % Q 0 get } ifelse /P Q def } for } forall } def