(jamimager.jam).run
(ImagerTester.jam) =
(February 20, 1984 12:50:14 pm PST) =
(ImagerJaM).callinit
(mercPath) (
.flushpath
192.0 413.353 .moveto
237.5415 425.809 255.3458 401.7666 288.0 399.5085 .curveto
297.9937 398.8174 308.0844 403.6591 318.0 404.5501 .curveto
331.9086 405.7998 448.1434 401.3464 450.8684 396.0001 .curveto
453.3393 391.1521 435.2951 383.4805 431.9999 383.0218 .curveto
428.5259 382.538 410.233 382.6307 409.5 378.0 .curveto
409.8045 379.9238 421.3876 370.5168 402.0001 363.6874 .curveto
386.3301 358.1678 345.4535 362.3779 345.5 359.9999 .curveto
345.4942 360.2959 368.3762 359.2238 372.0 358.0435 .curveto
389.1935 352.4433 364.4147 343.7253 364.875 336.0 .curveto
365.5193 325.1856 382.3762 294.0994 390.0 285.675 .curveto
408.286 265.4687 417.344 272.0564 438.0001 263.8696 .curveto
454.6547 257.2686 417.2523 242.3468 408.0 243.5193 .curveto
383.1711 246.6655 383.3985 232.3274 366.0 219.439 .curveto
352.0869 209.1325 366.6143 208.1149 372.0 208.9024 .curveto
374.2727 209.2348 386.2989 214.7218 380.8284 204.0 .curveto
378.6221 199.6753 364.5704 185.5353 360.0 184.8125 .curveto
351.8828 183.5287 332.7219 196.0891 329.1539 192.0 .curveto
321.1773 182.8585 343.6019 183.1676 340.0227 174.0 .curveto
335.0409 161.2398 311.5035 158.2857 310.4737 126.0 .curveto
310.1649 116.3195 313.5754 76.22575 312.75 72.0 .curveto
310.7936 61.98325 261.8854 53.60412 252.0 52.62712 .curveto
238.5165 51.29451 155.6176 53.91593 152.55 65.99998 .curveto
146.1258 91.30679 146.1964 75.57425 114.0 83.08163 .curveto
101.5249 85.9905 85.49357 98.83845 93.0 114.0 .curveto
96.9852 122.0493 101.4202 118.0211 96.0 128.775 .curveto
92.91811 134.8897 92.05819 140.964 90.00001 147.577 .curveto
85.48869 162.0718 88.40478 162.2188 86.83928 168.0 .curveto
84.31547 177.3202 68.65387 174.0181 70.27779 186.0 .curveto
71.84946 197.5966 93.93316 251.462 87.75 258.0 .curveto
83.8855 262.0863 74.20536 262.4716 73.98215 270.0 .curveto
73.80345 276.027 80.97349 281.9097 79.26 288.0 .curveto
76.91487 296.3353 44.77308 305.2533 60.08572 324.0 .curveto
64.14451 328.969 78.96831 335.1704 67.77274 342.0 .curveto
60.79922 346.254 -5.558746 358.62 30.00002 372.3488 .curveto
45.19923 378.2171 84.23178 361.5336 114.0 376.1087 .curveto
140.1327 388.9037 163.6664 405.2124 192.0 413.3529 .curveto
) .cvx .def
(xxx) {}.cvx .def
(grey3) 0.3 .makegray .def
(rotmerc) {
mercPath
xxx {
0.333 0.333 .scale
xxx {
5 {
.maskfill
{.black .setcolor .maskstrokeclosed}.cvx .dosave
-20 .rotate
{.black .setcolor .maskfill}.cvx .dosave
-20 .rotate
}.cvx .rept
}.cvx .dosaveall
xxx {
2 {
.clipxarea
-20 .rotate
}.cvx .rept
-160 .rotate
5 {
.maskfill
{.black .setcolor .maskstrokeclosed}.cvx .dosave
-20 .rotate
{.black .setcolor .maskfill}.cvx .dosave
-20 .rotate
}.cvx .rept
}.cvx .dosaveall
}.cvx .dosaveall
}.cvx .def
(resetmouse) ( (.track) ( .pop .pop ) .cvx .def (.reddown) ( .pop .pop ) .cvx .def (.bluedown) ( .pop .pop ) .cvx .def ) .cvx .def
(foxes) ( (.reddown) ((timesroman) 10 .setfont).cvx .def (.bluedown) ((helvetica) 10 .setfont).cvx .def (.track) (.setpos fox .drawtext) .cvx .def ) .cvx .def
(mfoxes) (
(.reddown) ((timesroman) 10 .setfont .setpos .move .black .setcolor fox .drawtext).cvx .def
(.bluedown) ((helvetica) 10 .setfont .setpos .move .black .setcolor fox .drawtext).cvx .def
(.track) (0 0 .setpos .white .setcolor fox .drawtext .setpos .move .black .setcolor fox .drawtext) .cvx .def
) .cvx .def
(cfoxes) (
(.reddown) ((.track) ( .pop .pop ) .cvx .def (timesroman) 10 .setfont .setpos .move .black .setcolor fox .drawtext).cvx .def
(.bluedown) ((.track) (.setcorrectmeasure (0 0 .setpos fox .drawtext).cvx .correct) .cvx .def .track).cvx .def
) .cvx .def
(boxes) ( (.track) (.translate -25 -25 25 25 .drawbox) .cvx .def ) .cvx .def
(e) (.erase) .cvx .def
(correctTest) (.initdc 5.0e-4 0 .setcorrecttolerance (timesroman) 18 .setfont 30 30 .translate 30 .rotate 0 0 .setxy fox .drawtext (0 0 .setxy .mouse 2 .copy 2 .copy .dup .mul .exch .dup .mul .add 10 .lt (.exit).cvx .if .setcorrectmeasure e (fox .drawtext).cvx .correct .pop .pop).cvx .loop).cvx .def
(fattext) {
(txt) .exch .def
1 0 .setcorrecttolerance
.true .setpriorityimportant
{.move .true .setnoimage txt .drawtext .getcp .setcorrectmeasure 0 0 .setxy}.cvx .dosave
{1.2 1 .scale txt .drawtext}.cvx .correct
}.cvx .def
(monkytext) {
(txt) .exch .def
.05 .05 .scale 30 .rotate (/indigo/ais/monk.ais) .setsampledcolor -30 .rotate 20 20 .scale
{5 -5 .setxyrel .black .setcolor txt fattext}.cvx .dosaveall
txt fattext
}.cvx .def
(CorrectRotatedText) {
2 .copy .setcorrectmeasure
.exch .atan 5 .div .round 5 .mul (angle) .exch .store
(txt) .exch .store
0 0 .setxy
{e angle .rotate txt .drawtext}.cvx .correct
}.cvx .def
(correctufox) {
.touch 20 .exch .setxy 20 .sub 0 .setcorrectmeasure
1 1 .setcorrecttolerance
{ufox}.cvx .correct
}.cvx .def
(correctufoxmouse) {
.mouse 20 .exch .setxy 20 .sub 0 .setcorrectmeasure
1 1 .setcorrecttolerance
{ufox}.cvx .correct
}.cvx .def
(correctufoxes) {
{correctufoxmouse}.cvx .loop
}.cvx .def
(rotFox) {
resetmouse
.initdc 1 0 .setcorrecttolerance (timesroman) 18 .setfont 100 200 .translate 0 0 .setxy fox .drawtext
{fox .mouse CorrectRotatedText}.cvx .loop
}.cvx .def
(spinFox) {
.initdc 1 0 .setcorrecttolerance (timesroman) 18 .setfont 200 300 .translate 0 0 .setxy fox .drawtext
.getcp .pop (radius) .exch .store
(theta) 0 .store
{fox theta .cos radius .mul theta .sin radius .mul CorrectRotatedText (theta) theta 1 .add .store}.cvx .loop
}.cvx .def
(mercmonk) {40 10 .translate .5 .5 .scale (/indigo/ais/monk.ais) .setsampledcolor 2 2 .scale -40 -10 .translate mercPath .maskfill .black .setcolor 7 .setstrokewidth .maskstrokeclosed}.cvx .def
(thisisafancyexample) {
.true .setpriorityimportant
(TimesRoman) 175 .setfont
10 472 .setxy (This is) monkytext
10 472 150 .sub .setxy (a fancy) monkytext
10 472 300 .sub .setxy (example) monkytext
}.cvx .def
(ufox) {
(The ) .drawtext
.startunderline
(quick brown fox) .drawtext
3 1 .maskunderline
( jumped over the ) .drawtext
.startunderline
(lazy) .drawtext
3 1 .maskunderline
( dogs.) .drawtext
}.cvx .def
(stip)
0 0 0 0 0
0 1 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 0 0 1
5 5 .makebitarray
.def
(setstip) {stip 0 .setsampledblack}.cvx .def
(paintchecks) {.initdc 2 .setstrokeend 4 .setstrokewidth 5 5 .scale 30 .rotate 1 0 0 1 2 2 .makebitarray 1 .setsampledblack 3 1 .scale .erase .touch .setcp {.mouse 2 .copy .getcp .maskvector .setcp}.cvx .loop}.cvx .def
(shade) {
2 .setstrokeend
20 .setstrokewidth
(.track) {.dup 700.0 .div .makegray .setcolor .drawto}.cvx .def
(.reddown) {.setcp} .cvx .def
}.cvx .def
(dist) {.exch 4 1 .roll .sub .dup .mul 3 1 .roll .sub .dup .mul .add .sqrt}.cvx .def
(max) {2 .copy .gt {.exch}.cvx .if .exch .pop}.cvx .def
(speedshade) {
(maxspeed) 1 .store
(findmaxspeed) {(maxspeed) maxspeed 0.95 .mul .store .dup maxspeed .exch .gt {.pop maxspeed}.cvx .if (maxspeed) .exch .store}.cvx .def
2 .setstrokeend
20 .setstrokewidth
(.track) {2 .copy .getcp dist .dup findmaxspeed maxspeed .div .makegray .setcolor .drawto}.cvx .def
(.reddown) {.setcp} .cvx .def
}.cvx .def
(bic) {
(tot) 700 .store
2 .setstrokeend
20 .setstrokewidth
(.track) {2 .copy .getcp dist tot .exch .sub (tot) .exch .store tot 0 max 700 .div .makegray .setcolor .drawto}.cvx .def
(.reddown) {.setcp (tot) 700 .store} .cvx .def
}.cvx .def
(aca) {(/ivy/plass/Fonts/TimesRoman10.ac) (a) .pixelarrayfromac t .maskpixel}.cvx .def
(acy) {(/ivy/plass/hacks/CMR30.ac) (y) .pixelarrayfromac t .maskpixel}.cvx .def
(rotatedStrike) {
(← ImagerJaM.deviceType ← $Screen).print
.touch .setxy
(Xerox/PressFonts/Tioga/MIR) 10 45 .nsrsetfont
(Hello) .show
}.cvx .def
(x) {100 100 .setxy (xerox/pressfonts/timesroman/mrr) 30 0 .nsrsetfont (X) .show}.cvx .def
(xxxx) {{
72.27 .dup .scale
(xerox/pressfonts/timesroman/mrr) 0.5 0 .nsrsetfont
0.1 0 .setcorrecttolerance
6.5 0 .setcorrectmeasure
1 1 .setxy
18 {{{(xxxxxxxxxxxxxxxx) .show}.cvx .correct}.cvx .dosaveall 0 0.5 .setxyrel}.cvx .rept
}.cvx .dosave}.cvx .def