% candy cane lettering, CandyCane.JaM
% Rick Beach, June 22, 1982 11:32 am

(candycane) {.pushdc 50 200 .translate .8 .8 .scale (borderpattern) (border2).cvx .def candy .popdc}.cvx .def

(candy) {candyC candyA candyN candyD candyY}.cvx .def

% the letter C
(candyC) {.newoutline 
0 0  .omoveto 19.53651 0  31.8338 24.99396  31.47971 45.02295 .ocurveto
31.00426 80.1452  58.23015 116.6332  92.23893 90.13776 .ocurveto
105.7132 79.64014  63.64215 102.7454  55.85108 87.73694 .ocurveto
30.68143 64.64636  29.47169 0  101 0 .ocurveto
30 20 outlineborder 100 0 .translate}.cvx .def

% the letter A
(candyA) {.newoutline 
-1 0  .omoveto 37.59671 0  61.04228 106.7766  102 98  .ocurveto
136.7254 90.55884  90.6846 -32.95081  99 26  .ocurveto
120.5983 85.29236  97.14027 116.1927  57.99998 51 .ocurveto
33.74081 -2.699402  79.85745 0  124 0 .ocurveto
30 20 outlineborder 124 0 .translate}.cvx .def

% the letter N
(candyN) {.newoutline
0 0  .omoveto  47.3667 0  51.39708 110.9868  79 87 .ocurveto
76.20679 76.61865  47.80486 -29.96118  67.00001 20 .ocurveto
79.45522 51.26538  71.13297 89.39398  109 96 .ocurveto
182.0348 101.9358  75.94755 0  158 0 .ocurveto
30 20 outlineborder 157 0 .translate}.cvx .def

% the letter D
(candyD) {.newoutline
0 0 .omoveto 43.55275 0  23.49652 87.71338  73.88702 99 .ocurveto
109.8771 106.9354  128.9642 68.28247  100.7595 89.08636 .ocurveto
65.45583 113.7225  33.37993 57.17767  45.78958 28 .ocurveto
92.94615 -82.87119  158.8459 135.5607  157.4715 162.6174 .ocurveto
152.9077 258.9257  77.61393 0  157 0 .ocurveto
30 20 outlineborder 156 0 .translate}.cvx .def

% the letter Y
(candyY) {.newoutline
-1 0 .omoveto 28.95868 0  29.32411 94.73407  37.99628 94.14777 .ocurveto
54.52634 93.03015  12.75839 1.530762e-1  43.12253 0.802063 .ocurveto
83.38051 1.662476  77.82333 53.49048  88.94458 89.2691 .ocurveto
103.4402 135.9034  92.34982 -74.18329  53.5445 -78.85016 .ocurveto
-39.22055 -90.00647  -27.31945 0  115 0 .ocurveto
30 20 outlineborder 115 0 .translate}.cvx .def

% draw a border given the Bezier control points
% <x0 y0 x1 y1 x2 y2 x3 y3> <border-width> <border-height> outlineborder
(outlineborder) {(!bh) .exch .def (!bw) .exch .def (bx) 0 .def conformal (!al) .olength .def
(!n) !al !bw .div .cvi .def
(!bw) !al !n .div .def !bw !bh .cubicscale
!n (borderpattern (bx) bx 1 .add .def).cvx .rept}.cvx .def

% draw a border given the Bezier control points
% <x0 y0 x1 y1 x2 y2 x3 y3> <border-width> <border-height> outlineborder
(eoutlineborder) {(!bh) .exch .def (!bw) .exch .def (bx) 0 .def conformal (!al) .olength .def
(!n) !al !bw .div .cvi .def
(!bw) !al !n .div .def !bw !bh .cubicscale
!n 1 .sub(borderpattern (bx) bx 1 .add .def).cvx .rept}.cvx .def