1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
|
% This is a test file for MetaPost analogous to trap.mf
if not known inimp: .inimp.=.0. % next lines are skipped if format loaded
inimp; nonstopmode; tracingtitles:=day; showstopping:=year;
<< == >> ::: || `` '' -- !! ?? ## && @@ $$ [[ ]] {{ }} . (( 5.5.5 )) ++ "..";
begingroup save =; let=,; save,; newinternal $=,; let ):=, endgroup;
let year=month; showvariable errorstopmode,readstring,2,"2",,,(,),<<,year;
tracingrestores:=tracingcommands:=.00000762939453125; % that's 2^(-17)
if tracingcommands>0:tracingcommands:=if not cycle "":1.1 forever;fi;
tracingcommands:=2.1 exitif tracingcommands>2 endfor; showtoken |=:|>;
tracinglostchars:=1/.00001; tracingequations:=$+1; p~=tracinglostchars+.00001;
interim tracingspecs:=tracingchoices:=tracingstats:=
warningcheck:=tracingoutput:=tracingmacros:=1; $:=ASCII""; $:=x; p~:=p~;
delimiters (); delimiters begintext endtext; vardef foo(text t)=t enddef;
def lig(text t,|)=ligtable0::for *=1step1until60:0kern boundarychar+*,endfor
skipto0;ligtable t:t|0,skipto255;boundarychar:=boundarychar+51.29999enddef;
foo begintext interim tracinglostchars:=(.5;show urcorner("flubo"infont"trapf"
),2+2endtext; for n=tracingspecs step 1 until $:fi endfor showstats;
let!!=skipto; path p~; p~=(0,0)..controls (15,4) and (-15,-12)..(4,0);
everyjob /*\;; vardef /*\`'@#=message @ & str#@ &jobname&char ASCII'`&str@#!
enddef;let next=endinput;vardef `'='` enddef;def '`="\*/"enddef;
begingroup errorstopmode; endgroup;
elseif known"": `'pass[2.]; nonstopmode; outer\; let next=\; delimiters ^~7! fi
next\; % the second pass will now compute silently; the first pass will halt
batchmode; ^~7,endgroup pausing:=1; exitif p exitif boolean pen pencircle endfor
scantokens begingroup message char0&"watch this"; "pair p[],';"&char-1endgroup
path p[][]p,w,qw; qw=(1,-2)..(2,-1)..(2.5,0.5)..(1,2)..(turningnumber',2.5);
numeric p[][]; p[[ [$] ]]=10000000000000000; "this string constant is incomplete
string foo[]p,p~if true:[];
boolean p[]~,boolean fi.boolean; showvariable boolean;
inner \; def\\= =show enddef; outer \; picture e[]e[], e[], p~[]~[][];
pen p~[]~,q["a",qq; p~1~=q=pencircle scaled mexp(-3016.57654);
transform p,pp0; if p=p:qq=makepen((7,0)..cycle) xscaled hex "1000";show qq;fi
qq:=makepen((4,1)..(1,2)..(5,3)..(3,2)..(1,1)..(0,1)..(1,0)..cycle);show qq;
vardef p[][]p~ begintext suffix a,b endtext())suffix@=show #@; p.a.b() enddef;
expandafter let\endtext\\; outer endtext,\,;;
(6,12)-p7=(0,1)transformed p=(2/(x-x),3/0)transformed p;
p1\2p=p007=begintext if string p~[$]: p.1.2-p.1.199999,1 endtext transformed p;
showstopping:=0;showvariable p; p=p; let [[=begingroup; let ]]=endgroup;
(xxpart p+.002,yxpart p)=1[p1,p2]=(5,y+.00001)=(5,y)=(yypart p,xypart p);
reverse(p~..cycle) transformed p=p2. 3.p;
p[000000000001]2p~(,[2]3p~,-)=p~1~2[pausing];
vardef p~[]@# tertiary t:=if p@ @=@ @p fi; vardef p[][]p~[]=BAD; inner ;;
show p~[-2]~[3000,x]++4000>path p3; showvariable p,P;
numeric p[]~; p3~=2alpha; p[1/$]~=3beta;
begingroup save p; showvariable p; 3beta=1]]; showvariable p;
def//expr;=enddef;def!primary!false):!fi enddef;
def _aa__ secondary _a_=if(true enddef; qq:=makepen(qw..(qw scaled$)..cycle);
show qq; primarydef _**__=[[show _*__]] enddef;
secondarydef _***__=expandafter __ scantokens"**oct"_ enddef;
// //pencircle slanted length p~**makepen reverse subpath p7-p2 of
(p7{p2}..controls _aa__ not odd.1(15) and known p or !p2and-p2..{1,1}(-p2
{curl- +1)..tension atleast1..cycle sqrt2++sqrt2***[[]];
charcode:=-20.5;chardp:=-2048;shipout nullpicture;
if charexists -275.50002>known p0 0p=known p~: randomseed charcode; fi
randomseed:="goof"; a[($,18++1+-+18),(2,3)]=b[(3,2),(1,$);
show (^+1,~+2) slanted-1 yscaled-2 zscaled-(3,4), p transformed(pp xscaled 9),
pp shifted (1,2) transformed(p transformed p), -_[0][1,2]; show
floor sind mlog sqrt mexp200cosd angle(normaldeviate,uniformdeviate-chardp);
string s[]; s1=s2=s4; s3=s5; s1=s2; if s1<=s4<>(s1<>s3):show[[char34=s2:=s3]]fi;
substring penoffset point.1of.p~of[[pencircle]]rotated1080/2/1/3of decimal
directiontime postcontrol-1.5of(p~&cycle)-precontrol1/2of p~(p~)=s1:=s4:=s4;
path p~[]; p~1=p2{length" "}&cycle; p~1=p2=p~0; p2..controls-p2..cycle=p~2;(p7
..tension1.2..p~[length p~2]..p~2&{0,1}p2..tension1and atleast1..cycle)..tension
x..{curl1}-p7{curl hex "IsBad"}..tension.75and.74999..p2{0,1}&p2{_,'}..cycle:=p
~4; subpath(-9,9)of subpath(3.5001,7.00001)of p~4=p~6;
show p~6, directiontime(1,2) of p~6, directiontime(1,-1.00001) of p~6;
p~3=(0,0)..controls (1,1) and (0,1)..(1,0); show p2..p2{p7}&{$,$}cycle,
(directiontime(1,1) of subpath(.314159,1) of p~3)[.314159,1];
p~5=(subpath(0,.25)of p~3&subpath(.25,1)of p~3)shifted begintext1,0;
p~3:=2/3'zscaled'{p~3}..controls(2,2/3(3))and penoffset(1/2x,y)of(0,1)(1,0);
show p~3 intersectiontimes reverse p~3, point.17227 of p~3, point1-.28339of p~3;
show point xpart(p~5 intersectiontimes p~5 shifted (.01,0))of p~5-
point ypart(p~5 intersectiontimes p~5 shifted (.01,0))of p~5;
[[ e[-1+-+ -1.00001]=nullpicture; addto e1 also[[
addto e0 doublepath p~5 scaled 3 withpen q; e0=e1=e2;
nullpicture]];show e1, e2 shifted (-3,0) ]];
addto e1 also e2 shifted(-2,$); e1:=e1 shifted(-4,$);
addto e1 doublepath (0,9) withcolor(.4,turningnumber p~4,0)
withpen qq xscaled(oct"180"++1) rotated-angle(64,$) shifted (9,8);
show e1; chardp:=charcode:=5; xoffset:=-1.5; shipout e1; e3=nullpicture;
showstats; addto e3doublepath(.5,0)..(3.5,1.5)dashed e0;
q:=makepen((1,1)..cycle) yscaled 1.5;
chardx:=chardp:=charext:=-14.5;charcode:=6;shipout e2;
p~9=(0,0)..(1,.5)..(5,1.5)..(7,2.5)..(12,3.5)..(13,4);addto e3 doublepath p~9;
addto doublepath (-4095,0)..tension
3/4 and 999..(0,2); show e3 rotated-90;
if "a" if "ab">"b" elseif path reverse (3,4): >="aa":foo elseif fi "bar"
else if '-(1,yy)<': :fi else def dup text t=[[t;save enddef;def|suffix$=,$
enddef; def||tertiary p=show substring p of("a" enddef;||(2,$)&"bc");
tertiarydef x++y=[[dup showtoken x;]];def quote x expr z of y=z enddef;
texts(quote x=(y+0)y+y)("xx",foo(x))=0]] enddef; def texts(text t,tt)expr?=
for n:=,for n"yy":n,length if false:endfor tt,t,:if string n:forsuffixes n=
foo1,[foo(n)],':show t,tt|(n;exitif not('<='+(?,yy)) endfor for m= :+endfor
for m=alpha step-1.1 3$: +m endfor fi endfor enddef; show (0,0){curl2}..
subpath(23.3,4.5)of p~9{curl3}..($,$){curl4}..cycle;zzz=p~++2+3;[[
let?=if;save if,\;def if=endinput?enddef;def texts=input enddef;texts trap ]];
dup[[def texts secondary x=primarydef y++y=x@y enddef; showtoken++;x enddef]]\;
texts:="a"&"b";% strings "yy" and "ab" no longer appear in memory
texts-1.00001a1=-(a2+a3+a4+a5+a6);-(a3,a2)/.99999=-(a4+a5+[[showdependencies;
a6]],a3+a4+a5+a6)]]; 1.00001a4+1=a5+a6; alpha:=.9alpha+7; showdependencies;
a5=a6=2/3-a6; charcode:=chardp:=27; 3.1=aaz; show aaz; ligtable||:255|=:|>>0,
skipto0; show [[interim tracingcommands:=0; lig("g")(=:|); lig("h":"i")(|=:);
lig("j")(|=:>);lig("k")(=:|>); lig("l")(|=:|>)]];
b1:=c.a[ [[let c=++;vardef b=enddef;1]] ]; ligtable"m":0=:0,skipto5;
!!; errhelp 0; errmessage "Be like Jane";
errhelp "He%%%lp%"; errmessage""; errhelp ""; errmessage "Another";
headerbyte 0; headerbyte(48.5)substring(-9,9)of"long"; for\=0:\
headerbyte 9:2a6,"q"; fontdimen 9:2a6,"q"; fontdimen 1:2048;
fontmaking:=1; extensible 5 5,"c"255.5,"d"; charlist 0:5:"a":"d";
ligtable255:255::"a"=:"b","d" kern -2048,"c":0:99.5:"e"|=:|"f",0kern';
ligtable 5:0; def clear(text x)=interim x:=$ enddef; clear(hppp); vppp=0;
[[clear(tracingmacros); clear(tracingcommands); clear(tracingoutput\;
designsize:=.99999;charcode:=ASCII char-418.5;
def dp expr d = charcode:=charcode+1; chardp:=d; shipout nullpicture enddef;
dp 13; dp 12; dp 0; dp 21; dp -2; dp 17; dp 11; dp 3; charic:=-1000; dp -1;
dp 25; dp 31; dp 19; dp 7; charwd:=256; chardy:=6; dp 23; dp 30]];
def f(suffix@@)(expr a,b)(text t)=numeric w; show a; % wipes out the old w
addto @@ contour (0,0)..(2,0)..(1,$)..(1,1)..cycle withpen qq; % strange path
addto @@ doublepath (0,0){1,1}..{2,1}(2,1) withpen qq; % carefully chosen
addto @@ doublepath(($,$){1,0}..(1,1){1,0})scaled.5 withpen nullpen;
enddef; def g(suffix$)=show $ enddef;
addto e0 contour (0,0){1,0}..{1,0}(1,0){0,$}..{0,1}cycle withpen qq;
f(e[3,w); g(e3,transformed p,penoffset-(1,1.3)of(pencircle scaled20 yscaled-.5),
directiontime (0,1) of ((0,0)..controls(1,1)and($,1)..(3,0)),
point 3.14159 of p~9 intersectiontimes subpath (3.14159,4) of p~9,
(($,1.1)..(1,$)) intersectiontimes precontrol$ of (0,0);
addto e3 doublepath(-4094.99998,0)..(4094.99998,-.00001) withpen penoffset 0 of
pencircle; addto e3 also e3 shifted (0,257); ,"flushed with pride"; numeric xx;
def f(expr x,y,z)=showdependencies;tracingcapsules:=1;showdependencies;show
1/3(3,6)*((x+y)+(y-x)), (1,1)/sqrt2 zscaled (x+1,x+2) - (x+1,x+2) rotated 45,
(0,1) zscaled (1,y+2)-(1,y+2) rotated 90 enddef; f((xx+1)/.3,(yy-1)/.5,(xx,0));
'=(1000o3-4000(o1-o2)+4000o2+9,-.01o3+3ooo+
[[oo=9/10(o2+o4+o5-20);o4=o5=8/9(o1+.5o2); o6=-.0001o2;showdependencies;
numeric o[];xpart(alfa,[[pair alfa;0]])]])=-2/3[[save p;(p$,1-p$)]];
xoffset:=yoffset:=4000[[oo=.5ooo=2*-1/2(ooo+[[numeric ooo;1]]);oo]];
addto foo contour begingroup vardef foo=enddef; (0,0)..cycle endgroup;
p~7=p~8; p~8:=(0,0){-1,1}..(30,0); show p~8, directiontime (0,-1)of p~8;
show directiontime (1,0) of p~9, directiontime(1,-1)
of ((0,0){1,0}..(0,0){0,-1)..cycle);
e9=e4=nullpicture; addto e4 doublepath p~8;
addto e9 doublepath p~8 dashed e4; e9:=nullpicture;
e4:=nullpicture; addto e4 doublepath(1,1)..(4,1);
addto e9 doublepath p~8 dashed e4; e9:=nullpicture;
addto e4 doublepath makepath pencircle dashed e4 scaled -2; show e4;
e4:=e5=nullpicture; addto e4 doublepath (-4,-3)..tension 2..(-2,-2.7);
addto e5 doublepath p~5 shifted (0,4) scaled 3 dashed e4 withpen qq;
show llcorner e5; verbatimtex \font\tra=trapf at 10pt
\font\trb=trapf at 20pt % TeX comment only!" etex
e6:=nullpicture; addto e6 doublepath (0,0)..(30,0) dashed makepath pencircle
dashed e5 withpen pencircle scaled2 dashed e5shifted(0,-11)
withpen pencircle; show e6; def -- = {curl1}..{curl1}enddef;
p~7 := p~8 rotated 90 xscaled -1 .. cycle; linecap:=2; linejoin:=1;
e6=nullpicture; addto e6 doublepath p~8 dashed e5 withpen pencircle;
clip e6 to p~7; addto e6 also btex \tra Aqua \vrule\trb Brass etex
shifted(0,-2); addto e6 doublepath (1,0)..(2,1); addto e5 also
e6 withcolor .5*(1,1,1) dashed e4 withpen pencircle xscaled 2 rotated 45;
addto e5 also btex \tra mast etex shifted(0,10);
show e6, lrcorner e5, ulcorner e5; charcode:=200; shipout e5;
showstats; e5:=e6:="curb"infont"trapf" slanted-.5 scaled-1; showstats;
show penoffset(0,0)of pencircle, llcorner e5, urcorner e5;
e5:=e5 rotated 90 shifted "oops"; show llcorner e5, urcorner e5;
show urcorner (char220 infont "trapf"), makepath qq;
show subpath(-2,-1)of p~8, subpath(9,10)of makepath pencircle;
"hi" infont "qw99z"; special "ij"="ij"; show substring(-2,-1)of"abc";
addto e5 contour [[ ]]; addto e5 contour true; pausing:=0;prologues:=1;
charcode:=197; shipout e5; p~10=(0,0){1,1.01}..tension atleast 1..{1,0}
(1,1){-1,1}..(2,0){1,-1}; prologues:=0; for d=(-1,1),(1,-1),(0,0):
show directiontime d of p~10; endfor linejoin:=linecap:=1;
e5:=nullpicture; addto e5 contour makepath(pencircle scaled 10)
withpen pencircle shifted(2,0); addto e5 doublepath (0,0)..(12,0)
withpen pencircle yscaled 3; charcode:=148; shipout e5;
e5:=nullpicture; clip p~8 to; clip e5 to e4; clip e5 to p~8; clip e5 to p~7;
addto e5 doublepath makepath(pencircle scaled 50) withpen qq;
addto e5 doublepath p~8 withpen pencircle xscaled 2 dashed e4;
addto e5 doublepath p~8 withpen pencircle dashed e4;
addto e5 doublepath p~8 shifted (10,0) dashed e4 scaled 1 withpen pencircle;
charcode:=149; shipout e5; addto 3; addto p~8 contour p~7;
e5:=nullpicture; linecap:=2; linejoin:=0; miterlimit:=10;
addto e5 contour (10,5)..cycle withpen qq;
addto e5 doublepath (5,10)..(5,15) withpen qq;
addto e5 doublepath (0,0)..controls(10,10)..(10,10)..(0,20){curl1}..(30,10)
withpen makepen((0,-5)..(0,5)..cycle); charcode:=150; prologues:=1; shipout e5;
for @=angle(sqrt$,mlog$):charext:=uniformdeviate$;charht:=2048;
addto e3 contour (0,-100)..tension 500..(100,-99)..tension 3000..cycle;
tracingoutput:=@; special "bye"; charcode:=151; shipout e3;
interim char 99 = "c"; true=false; show penoffset (2,1) of qq;
showstats; let f=faz; showtoken f; showstats;
e17=nullpicture; addto e17 doublepath (-4,-5)..(6,5);
setbounds e17 to makepath(pencircle scaled 9); show llcorner e17, urcorner e17;
addto e5 also e17 shifted (-5,-5); show llcorner e5; truecorners:=2;
show llcorner e5; truecorners:=-1;
setbounds e17 to makepath(pencircle xscaled 19);
addto e5 also e17 shifted(-5,-10); show llcorner e5, e5, urcorner pencircle;
e5:=nullpicture; path ap[];
ap1=makepath(pencircle scaled 100);
ap2=(2,-14)..controls (14,-7) and (14,7)..(2,14);
ap3=(-50,0)..controls (-50,0) .. (50,0);
show arclength (ap2 scaled 1000), arclength(ap3 scaled 200);
show arclength ap1, arclength ap2;
show arctime 6.4 of ap3, arclength subpath(0,arctime 37 of ap3) of ap3;
show arctime -1000 of ap1, arctime -3 of ap2, arctime314 of (ap1 scaled .00001);
[[clear(tracingcommands); charcode:=ASCII char 269-13; shipout nullpicture;
"careful" quote for for = @ step 200 until 2*2600: &" METAFONT" endfor;]];
scrollmode; "hello again"&char31; save p;
def f expr x=let )=]; let [=(; show _ enddef; begingroup tracingonline:=1;
tracingonline:=1; f xx[1); showdependencies; qq:=q; showstats; bye endtext
% things not tested:
% interaction (error insertion/deletion, interrupts, \pausing, files not there)
% date, time; initialization of random number generator without randomseed
% system-dependent parsing of file names, areas, extensions
% certain error messages, especially fatal ones
% things that can't happen in INIMP
% unusual cases of fixed-point arithmetic
% certain other unusual cases, especially when something similar is tested
% most events that trigger string pool compaction
% features that have entered the language after 0.632
|