%!PS-Adobe-3.1


% New Meowrrr Puss De Resistance meow1a.psl
% ==============================================================

%  Copyright c 2019 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

%  All commercial rights and all electronic media rights ~fully~ reserved.
%  Linking usually welcome. Reposting expressly forbidden. Version 1.1 


%  A revision of our older Meowwr Puss De Resistance that shows how to
%  use a triple JPEG-Grid-New Code layering to trace a document into
% "raw" PostScript to create ultra compact, clean, sharp, colorized, and 
%  simple text-searchible new code.
 
%  A gonzo tutorial is found at https://www.tinaja.com/glib/gonzotut.pdf
%  A PostScript Reference Manual at %  %  https://www.adobe.com/content/dam/acom/en/devnet/actionscript/articles/PLRM.pdf  
%  A PostScript Video at https://www.youtube.com/watch?v=C_tWW560tAE  

% Please verify applicability and suitability to Google Drive ( as well,
% as "real" Distiller and GhostScript )for any new insertions.
% Fancy apps may require Distiller command line run as //acrodist /F .

% At present, your output code is easily made triple Distiller-GoogleDrive-GhostScript
% compatible. But the tracing program itself is not yet Google Drive compatible.

% IMPORTANT: Change these two lines to switch betweeen tracing code and any result!

/want_to_trace { false } store
/want_to_see_grid {false} store


%%//////  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



% 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





% insert image proc 

/jpegimageprocwithlink {  % hoffset voffset hres vres urlfrom urlto

save /snap2 exch def   


/inurllink exch store   % grab link filename
/infilename exch store  % grab passed pix file
/photoscale exch store  
/vpixels exch store
/hpixels exch store

     % (\nvpixels = )print vpixels ==
     % (\nhpixels = )print hpixels ==
     % (\photoscale = ) print photoscale ==
     % (\ninurllink = ) print inurllink ==
     % (\ninfilemane = ) print infilename ==

 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 /URI /URI cururlname>>
           /Subtype /Link
           /ANN                            % annotation type
           pdfmark                        % call pdf operators  
 
} 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


% ///////////// DEMO



/ypos 0 store


% //////////////////////


 

want_to_trace { % code used by tracing program but not yet Google Drive compatible 

/imagelocaldirectory (C:/Users/don/Desktop/canal/images/) store       % sin fwd slashes for win
/imageremotedirectory (http://www.tinaja.com/canal/images/) store       % sin fwd slashes for chrome


/imageurl imageremotedirectory (prep1.jpg) mergestr store        % goto remote image
/imagelocalsource imagelocaldirectory (prep1.jpg) mergestr store

/imagelocalsource (C:/Users/don/Desktop/google_drive/Meowrrr/meowwr1a.jpg) store

gsave
60 20               % page translate     ( data for jpegimageprocwithlink )
1033 1453          % hpixels and vpixels
0.45                % photoscale
imagelocalsource   % local jpg source
imageurl           % image url on clickthru

jpegimageprocwithlink

 grestore

} if 

/black {0 setwebtint} store

/ypos 0 store

% //////////////////////


30 setwebtint   % this puts a grid between tracer and tracee
50 50 10 setgrid

want_to_see_grid {
   50 62 showgrid     % uncomment to show grid during tracing
                  } if

0 setwebtint


/bodycolor { 137 setwebtint  } store               % global color changes
/darkerbodycolor { 59 setwebtint} store
/stripecolor {45 setwebtint    } store
/debugcolor {5 setwebtint } store
/batcolor { 212 setwebtint } store
/batedgecolor { 192 setwebtint} store
/glovecolor { 215 setwebtint } store

/black {0 setwebtint} store
/white {215 setwebtint } store
/darkgrey { 86 setwebtint } store

/heavyline {0.24 setlinewidth} store
/lighterline {0.17 setlinewidth} store


1 setlinecap 1 setlinejoin


% //// back arm /////

gsave
[11.6 35 47   % main back arm outline
13.0 38 95    % cusp
13.0 38 60    % portions get overwritten below 
15.5 39.7 0
20.7 34 -90
20 32 180
18.5 33  115
15.5 36 180
12 34.7 -150
] curvetrace
      gsave darkerbodycolor fill grestore
stripecolor heavyline stroke 
grestore 

% rear arm stripes

[13.3 38.3 -55 % leftmost
13.8 36.2 -100 % cusp
13.8 36.2 60
14.5 39.5 115
] curvetrace
stripecolor fill 

[15.3 39.6 135    % center
15.5 36.8 -90   % cusp
15.5 36.8 65
16.8 39.5 100
] curvetrace
stripecolor fill 

[ 18 39 140    % right arm
17 36.7 -120   % cusp
17 36.7 60
18.4 37.2 45
] curvetrace
stripecolor fill

% //// rear ear ////

[28 44 41     % rear ear outline 
33 46 26 % cusp
33 46 -55
31.7 41 -120
] curvetrace

 gsave darkerbodycolor fill grestore
heavyline  stripecolor     stroke

[29.8 43.1 60  % white portion
32.6 45 45 % cusp
32.6 45 -90
31 41.8 -150]
curvetrace
gsave white fill grestore
stripecolor heavyline stroke




% ////////////// tail area //////////////  

% body colored tail portion

bodycolor

gsave
[ 31.3 20.0 10     
  34.7 26 98
  34.2 27.6 106   % cusp
  34.2 27.6 -10
  37.4 21.2 -102
  34.1 16.1 -150
] curvetrace 
         gsave bodycolor fill grestore  % comment until stripes are finished
stripecolor lighterline stroke
grestore

stripecolor  % set for group

% tail stripes, lowest first 

gsave  % lowest tail stripe
34.5 16.6 mt
[34.7 16.6 110
33.0 19.8 130 % cusp
33.0 19.8 16 
36.4 18.0 -120 ] curvetrace
f 
grestore 

gsave % next higher 
37.1 19.0 mt
[37.1 19.0 120
34.6 21.5 150 % cusp
34.6 21.5 35
37.7 21.7 -36
] curvetrace
 fill 
grestore 

gsave % third tail stripe from bottom 
37.5 23.3 mt
[37.5 23.1 150
35.6 23.7 150 % cusp
35.6 23.7 40
37.2 24.7 35
] curvetrace
 fill 
grestore 

gsave % top tail stripe 
36.7 25.4 mt
[36.8 25.2 175

35.5 25.2 175 % cusp
35.5 25.2 80
35.8 26.7 80
36.5 26 -55
] curvetrace
 fill 
grestore 





% tail edge overlay 

gsave
[ 31.3 20.0 9     % left main tail
  34.8 26 99
  30.4 29.3 185  % cusp
  30.4 29.3 62
  35.3 29.0 -43
  37.7 24.0 -86   % far right
  34.3 16.0 -150
  ] curvetrace
heavyline stroke

% main left leg

25.3 25.3 mt
[25.3 25.3 -47
31.1 20 -45
35.8 11 -87
33.5 6.5 180 
30.8 8 115
28.5 12 120 
27 15.7 90  % cusp
27 15.7 -90

27.3 14.1 -75 % cusp
27.3 14.1 160
21 23.2 96

] curvetrace

gsave bodycolor fill grestore
stripecolor heavyline stroke



% /// left leg stripes 

gsave  % lowest left leg stripe
35.3 8.2 mt
[35.3 8.2 200
31.8 9.2 130 % cusp
31.8 9.2 -14 
35.9 10.8 45

35.7 9 95

 ] curvetrace
f 
grestore 


gsave  % second up left leg stripe
35.8 11.8 mt
[35.8 11.8 200
30.4 12.8 150 % cusp
30.4 12.8 0 
35.2 14.0 30 ] curvetrace
f 
grestore 



gsave  % third up left leg stripe
34.8 15.2 mt

[34.8 15.2 -150 
28.3 15.7  170 % cusp
28.3 15.7  35
33.8 16.9 -20
 ] curvetrace
f 
grestore 

gsave % fourth up left leg stripe 
32.2 18.8 mt
[32.2 18.8 -160
26.8 17 -160  % cusp
26.8 17 65 
30.2 20.7 40 ] curvetrace
f grestore

gsave % fifth  up left leg stripe 
30 21 mt
[30 21  -160
24.3 18.7 -150 % cusp
24.3 18.7 70 
28.3 22.5 30  ] curvetrace
f grestore

gsave % top left leg stripe 

27.7 23 mt
[27.7 23 -155
22.8 20.7 -150 % cusp
22.8 20.7 65
26.3 24.4 40 ] curvetrace
f grestore




               




% left foot

heavyline
1 setlinejoin
1 setlinecap




gsave   % lowest 
31.6 6.8 mt
[ 31.6 6.8 -125
34 2.2 -25 
38.8 2.6 80
35.4 4.9 180
] curvetrace
stroke

38.9 2.7 mt    % middle left toe
[ 38.9 2.6 -17
40.4 3.7 90
38.3 5.7 155 0

] curvetrace stroke


40.6 3.4 mt  % top of left foot
[ 40.6 3.4 -10
41.8 4.3 90 
38 7 180 
35.2 7.3 170]
curvetrace stroke 
grestore

% //// right foot

gsave 

20 6.4 mt      % right toe, etc
[20 6.4 -155
17 6 -170
14.7 3.9 -90
15.8 2.1 18

] curvetrace stroke
   
        
17.6 5.1 mt   % middle toe
[17.6 5.1 -150
15.8 2.4 -90
17.4 1.5 20] curvetrace stroke


 19.1 4.7 mt      % left toe ( as seen from the cat ) 
[19.1 4.7 -160

17.3 2.2 -90
19 1 0

23 2.9 30

25.4 4.3 45

25.2 6.8 165] curvetrace 

stroke

 
grestore 


% //// right body main

gsave
15.8 23.9 mt   % right body patch 
[ 15.8 23.9 -20


17 23.6 -10 % cusp
17 23.6 -76

18 18 -75

17 20 110 
 
] curvetrace


 gsave bodycolor fill grestore
lighterline stripecolor stroke 
grestore


15.8 23.8 mt    % right body heavy line
[ 15.8 23.8 -80
17.9 18 -60    % cusp
19.7 15.2 -45
28.4 12 35 ]
curvetrace
heavyline stripecolor stroke


grestore

% ///////////// right leg /////////

gsave

19.7 15.2 mt
[ 19.7 15.2 -45
28.4 12 35       % cusp 
28.4 12 -145
23.1 8.6 -155   % cusp
23.1 8.6 23 
24.8 9.4 20 % cusp
24.8 9.4 -65
25.2 7 -90
23.4 5.5 180 
18 10 90
19.7 15.2 65
] curvetrace

    gsave bodycolor fill grestore  
heavyline stripecolor stroke


grestore 

    % right leg bottom stripe
    
21.8 5.8 mt
[21.8 5.8 60
22.6 7.8 82 % cusp
22.6 7.8 155
19.7 6.9 -135
 ]
curvetrace
stripecolor fill
 


18.5 8 mt       % right leg mid stripe 
[ 18.5 8 0
21.4 9.5 60 % cusp
21.4 9.5 150
18.2 10.8 135
18 9 -70

 ]
curvetrace
stripecolor fill

 18.3 12 mt    % right leg top stripe 
[ 18.3 12 -40
22 11 0 % cusp
22 11 150
19 13.8 150
 ]
curvetrace
stripecolor fill



15.7 28.1 mt   % upper right chest lightline and body fill
[15.7 28.1 85
18.5 32.8 15
19.8 33 20 % cusp
19.8 33 75  
20.3 34.8 80  % end heavy


21 34.2 -45 % cusp
21 34.2 -120

20.3 32.2 -135

18.0 30 -109

17.2 27.7 -87   % cusp
17.2 27.7 0
16.5 27.7 160

] curvetrace
   gsave bodycolor fill grestore
lighterline stroke

gsave
15.7 28.1 mt   % upper right chest heavyline
[15.7 28.1 85
18.5 32.8 15
19.8 33 20 % cusp
19.8 33 75  
20.3 34.8 80] curvetrace
heavyline stroke
grestore 

% bat bottom area

8.6 28.6 moveto % bat bottom
[ 8.6 28.6 170
6.9 27.5 -90
8.9 26.3 0
10.3 27.3 90
8.6 28.6 180] curvetrace
gsave batcolor fill grestore
batedgecolor stroke

%%%%%%%%%%%%%

7.6 30.8 mt    % lower bat shaft  
[7.8 30.8 -90
7.6 27.6 -90  % cusp
7.6 27.6 -50
9.6 27.6 75
10.1 29.9 75
9.8 30.6 110] curvetrace
gsave batcolor fill grestore
batedgecolor stroke

7 32.6 mt % hand bat overlay overwrites  lowest finger
[7 32.6 -180
6.6 31.8 -90
7.8 31 -30
9.9 30.4 -25] curvetrace
stripecolor 
heavyline stroke 


[ 7.4 38.7 -100    % second finger down
7.2 37.5 -90
8.7 36 0
10 36.5 20 ]
curvetrace
heavyline stroke

 
[7.3 32.2 125 % left second finger up
6.5 33.7 90
6.8 34.2 10] curvetrace
heavyline stroke



[7.2 33.7 150  % left third finger up
7.2 35.8 55] curvetrace
heavyline stroke

10.8 36 mt % left fourth finger up
[10.8 36 -105 
8.5 34.6 180
7.3 37 60] curvetrace
heavyline stroke


gsave
 11.7 12 moveto
[11.7 32.1 85   % left thumb
11.2 33.4 150 ]
curvetrace 
          stripecolor heavyline stroke 

[11.7 33 mt
11.7 33 75

12 34 90
10.5 35.4 185]
curvetrace 
stripecolor heavyline stroke 
grestore

gsave

8.6 39.6 mt       % top bat
[8.6 39.6 85
 9.7 58 85
12.5 60.3 0
14.9 57 -100
11.2 39 -100
] curvetrace
gsave batcolor fill grestore
batedgecolor stroke



   

10 39 mt     % top finger over bat 
[ 10 39.2 180
8.7 39.5 150] curvetrace stripecolor stroke

8.4 40.5 mt
[8.6 40.5 -205
7.3 39.1 -90
10 37.6 0 ] curvetrace stripecolor stroke




13 38 mt   % thumb bat overlay
[13 38 97
11 40.1 -175
10 38 -90
10.5 36 0
11.8 38 80] curvetrace
gsave glovecolor  fill grestore
stripecolor stroke


11 58 moveto      % top bat highlight 
[10.8 58 -30
14.1 57.8 35 ] curvetrace
batedgecolor stroke


% ///// left arm

9.7 30.6 mt  % body fill
[9.7 30.6 80
11.7 32 -10 % cusp
11.7 32 -45 
16.4 27.8 -12
20.8 27.7 0 % cusp
20.8 27.7 67
24 31.2 0
25.8 27.5 -90
23.5 23.8 -150
20.5 23.2 180
15 24.3 150
9.7 30.6 110
] curvetrace
                    bodycolor fill



% left arm stripes

gsave
10.1 29.6 mt   % leftmost arm stripe
[ 10.1 29.6 35 
12.8 30.1 0  % cusp
12.8 30.1 -145
10.6 28.7 -145 ] curvetrace
stripecolor fill
grestore

gsave
11.6 27.4 mt   % second leftmost arm stripe
[11.6 27.4 50
14.1 28.6 0 % cusp
14.1 28.6 -150
12.8 26 -100
] curvetrace
stripecolor fill
grestore


gsave
13.8 25.1 mt   % third leftmost arm stripe
[13.8 25.1 50
15.6 26.9 50 % cusp
15.6 26.9 -90
15 24.3 -120
] curvetrace
stripecolor fill
grestore

gsave
16 23.9 mt   % fourth leftmost arm stripe
[16.1 23.9 65
17.1 26.5 70 % cusp
17.1 26.5 -40
17.8 23.3 -90
] curvetrace
stripecolor fill
grestore

gsave
19.1 23.2 mt   % fifth leftmost arm stripe
[19.1 23.2 70
19.7 26.1 110 % cusp
19.7 26.1 -40
21 23.2 -90
] curvetrace
stripecolor fill
grestore

gsave
22.5 23.3 mt   % sixth leftmost arm stripe
[22.5 23.3 110
21.7 25.6 110 % cusp
21.7 25.6 -30
24 24 -90
] curvetrace
stripecolor fill
grestore

gsave
25 25 mt   % seventh  leftmost arm stripe
[25 25 150
23.0 27.0 100 % cusp
23.0 27.0 0
25.9 27.3 -60
] curvetrace
stripecolor fill
grestore


gsave
25.8 28.4 mt   % eighth leftmost arm stripe
[25.8 28.4 170
23.0 28.4 170 % cusp
23.0 28.7 50
25.3 30.2 10
] curvetrace
stripecolor fill
grestore


9.7 30.6 mt  % outline
[9.7 30.6 80
11.7 32 -10 % cusp
11.7 32 -45 
16.4 27.8 -12
20.8 27.7 0 % cusp
20.8 27.7 67
24 31.2 0
25.8 27.5 -90
23.5 23.8 -150
20.5 23.2 180
15 24.3 150
9.7 30.8 110
] curvetrace
heavyline stripecolor stroke 


%%%%%%%%%%% head outline %%%%%


% facefill has three parts. Code changes twice on edit!
[17 40.6 -77 % left outer code from main outer
19.1 36 -59                       
20.8 34.2 -50 % cusp

21 34.3 135   % nose divider from above
23.0 37.8 -5
26.8 34.5 0
29.2 35 0
30 34 0 
31.5 35 0
32.3 33.4 -90 % cusp

32.3 33.4 78 % and back to the facefill 
32.7 34.9 90
32 36 154   % cusp 
32 36 75
31 42 130
25 44.8 -180
22 43 -160 
18.2 40.9 -170 % cusp
18.2 40.9 170
17 40.6 150

] curvetrace
   true { bodycolor fill}{newpath} ifelse   % false if editing
 

 
[17 40.6 -77 % main outer head
19.1 36 -59                       
23 32.9 -40
26.6 31.1 0 % chin bottom
30.1 32 27
32.7 34.9 90
32 36 154   % cusp 
32 36 75
31 42 130
25 44.8 -180
22 43 -160 
18.2 40.9 190
17 40.6 -150

] curvetrace

heavyline stripecolor stroke 

[ 21 34.3 135   % nose divider
23.0 37.7 -5
26.8 34.6 0
29.2 35 0
30 34 0 
31.5 35 0
32.3 33.4 -90
] curvetrace
lighterline stripecolor stroke


%%%%%%%%%%%%%%

% eyes


[25.7 39.2 -47   % right eye group 
29.2 36.4 -20 % cusp
29.2 36.4 -155 
27.5 35.6 175
26.1 38.8 90]
curvetrace 
gsave white fill grestore
stripecolor stroke


[28 37 -110   % cat's right eye
27.5 36 -90 % cusp
27.5 36 20
28.8 36.5 45]
curvetrace stripecolor fill


[32.3 38.2 -145 % left eye group 
30.5 36.4 -95

31.3 36.3 0
32.1 37 60
] curvetrace
gsave white fill grestore
stripecolor stroke

[ 32.3 37.8 -150                     % left eye
31.5 37 -100   % cusp
31.5 37 -70
32.3 37.1 20 

] curvetrace
stripecolor fill 


%%%%%%%%%%%%

24.3 31.9 mt  % left neck detail
24 31.2 lineto
stripecolor stroke

26.3 40.6 mt % eyebrows
[26.3 40.6 25
28 39.5 -48
29.2 38.3 5 % cusp
29.2 38.3 -160
27.4 39 115
26.3 40.6 145
] curvetrace
stripecolor fill

32 40 moveto % right eyebrow
[32 40 -125
30.6 38 -135 % cusp
30.6 38 25
32 39.3 90

32 40 100
] curvetrace
stripecolor fill


% //////////// whiskers

21.7 31.3 mt  % bot left
[21.7 31.3 28
28 33.1 2] curvetrace
darkgrey  lighterline stroke

21.3 32.3 mt  % mid left
[21.3 32.3 26
28.3 33.4 -5] curvetrace
 lighterline stroke

21.3 33.3 mt   % top left  
[21.4 33.4 23
28.5 33.8 -12 ]
 curvetrace
 lighterline stroke


31.1 33.4 mt % bottom right
[31.1 33.4 -7
37.2 33.5 5 ]
 curvetrace
 lighterline stroke


31.5 34 mt % mid right whisker
[31.5 34 11
37 34.8 15]
 curvetrace
lighterline stroke

31.8 34.5 mt  % top right whisker
[31.8 34.5 20
36.9 35.8 28]
 curvetrace
lighterline stroke

% ////// grin and nose ////

21.9 36.2 mt    % upper left grin
[ 21.9 36.2 25
24.3 36 -25 ] curvetrace 
darkgrey heavyline stroke

[23.1 36.4 -70   % smile
26.4 32.1 -5
29.8 33.4 65     % cusp
29.8 33.4 -125
30.2 32.3 -10

 ] curvetrace     
darkgrey heavyline stroke

29.5 33.7 mt    % nose
[29.5 33.7 90
30 34.7 0
30.9 34.2 -90
29.8 33.3 180
29.5 33.7 90
 ] curvetrace 
darkgrey  fill 


% /// ears
 
[22.8 40.9 150 % near outline
26.2 47.9 37   % cusp
26.2 47.9 -63
 27.4 42.3 -85
] curvetrace 
    gsave darkerbodycolor fill grestore
stripecolor heavyline stroke

[23.6 41.1 90   % inside front
25.8 46.9 60 % cusp
25.8 46.9 -70
26.7 42.0 -70 % cusp
26.7 42.0 -150
23.6 41.1 183] curvetrace 
gsave white fill grestore
lighterline stripecolor stroke

[22.9 40.9 20  % near ear bottom left
23.5 41.1 20] curvetrace
lighterline stripecolor stroke

[26.8 42.0 20  % near ear bottom right
27.3 42.2 20] curvetrace
lighterline stripecolor stroke


% head stripes 

[ 18.2 41 -80     % leftmost head stripe
19.8 38 -65 % cusp
19.8 38 105
19.4 41.2 95
18.2 41 180] curvetrace
stripecolor fill

[19.8 41.8 -50     % second from left
21.3 39.2 -55 % cusp
21.3 39.2 85
21.3 42.7 100] curvetrace
stripecolor fill

[27.5 44.3 -80 % third from left
27.7 42.8 -90
27.8 41.3 -90 % cusp
27.8 41.3 60
28.5 44 -100
] curvetrace
stripecolor fill

[ 29.1 43.7 -80  % fourth from left 
29 40.7 -90 % cusp
29 40.7 70
30 43 100 ]
 curvetrace
stripecolor fill

[ 30.5 42.4 80  % fifth from left
30.6 40.4 -90 % cusp
30.6 40.4 45
31.3 42 90 ]
curvetrace
stripecolor fill

% ////////////
showpage  


%EOF