From cde021b3da09f823c3ae65b010a1cd5230a3d2bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Tue, 22 Jul 1997 18:58:41 -0700 Subject: [PATCH] big cleanup Rev: tutorial/.cvsignore:1.2 Rev: tutorial/Makefile:1.2 Rev: tutorial/array.gif:1.2(DEAD) Rev: tutorial/function.gif:1.2(DEAD) Rev: tutorial/inherit.gif:1.2(DEAD) Rev: tutorial/mapping.gif:1.2(DEAD) Rev: tutorial/multiset.gif:1.2(DEAD) Rev: tutorial/object.gif:1.2(DEAD) Rev: tutorial/program.gif:1.2(DEAD) Rev: tutorial/tutorial.wmml:1.12 Rev: tutorial/wmml_to_html:1.4 --- tutorial/.cvsignore | 8 +-- tutorial/.gitignore | 8 +-- tutorial/Makefile | 3 +- tutorial/array.gif | Bin 2307 -> 0 bytes tutorial/function.gif | Bin 6614 -> 0 bytes tutorial/inherit.gif | Bin 11915 -> 0 bytes tutorial/mapping.gif | Bin 4485 -> 0 bytes tutorial/multiset.gif | Bin 3467 -> 0 bytes tutorial/object.gif | Bin 7171 -> 0 bytes tutorial/program.gif | Bin 6341 -> 0 bytes tutorial/tutorial.wmml | 42 ++++++------- tutorial/wmml_to_html | 131 ++++++++++++++++++++++++++++++++++++++--- 12 files changed, 150 insertions(+), 42 deletions(-) delete mode 100644 tutorial/array.gif delete mode 100644 tutorial/function.gif delete mode 100644 tutorial/inherit.gif delete mode 100644 tutorial/mapping.gif delete mode 100644 tutorial/multiset.gif delete mode 100644 tutorial/object.gif delete mode 100644 tutorial/program.gif diff --git a/tutorial/.cvsignore b/tutorial/.cvsignore index f13913f1fb..b68dc9afd0 100644 --- a/tutorial/.cvsignore +++ b/tutorial/.cvsignore @@ -1,7 +1,3 @@ -lenna-mirrorx.gif -lenna-mirrory.gif -lenna-rotate.gif -lenna-skewx.gif -lenna-skewy.gif -lenna.gif tutorial.html +illustration*.gif +___tmp.* diff --git a/tutorial/.gitignore b/tutorial/.gitignore index 81025c1afc..6e7c17b67a 100644 --- a/tutorial/.gitignore +++ b/tutorial/.gitignore @@ -1,7 +1,3 @@ -/lenna-mirrorx.gif -/lenna-mirrory.gif -/lenna-rotate.gif -/lenna-skewx.gif -/lenna-skewy.gif -/lenna.gif /tutorial.html +/illustration*.gif +/___tmp.* diff --git a/tutorial/Makefile b/tutorial/Makefile index 8729d2041e..ac3ecb7e00 100644 --- a/tutorial/Makefile +++ b/tutorial/Makefile @@ -1,4 +1,5 @@ -all: tutorial.html lenna.gif lenna-mirrorx.gif lenna-mirrory.gif lenna-rotate.gif lenna-skewx.gif lenna-skewy.gif +all: tutorial.html +# lenna.gif lenna-mirrorx.gif lenna-mirrory.gif lenna-rotate.gif lenna-skewx.gif lenna-skewy.gif tutorial.html: tutorial.wmml wmml_to_html ./wmml_to_html <tutorial.wmml >tutorial.html diff --git a/tutorial/array.gif b/tutorial/array.gif deleted file mode 100644 index d21670f8f8b78dc9e41d08604791b2443df431bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2307 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 diff --git a/tutorial/function.gif b/tutorial/function.gif deleted file mode 100644 index 7acf06ec2d92873e0171a54a303b5b6053ce4e5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6614 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 diff --git a/tutorial/inherit.gif b/tutorial/inherit.gif deleted file mode 100644 index c0d8bf7d440f9716e3c3dc7fe4eba7903eb3ec2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11915 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 diff --git a/tutorial/mapping.gif b/tutorial/mapping.gif deleted file mode 100644 index 3d246fef085cc635fdf9f332177a70dcf2ed2fa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4485 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 diff --git a/tutorial/multiset.gif b/tutorial/multiset.gif deleted file mode 100644 index fe6b0477c7d4ddcde86d03b1d3686ce1b9e372cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3467 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 A;s5{u diff --git a/tutorial/object.gif b/tutorial/object.gif deleted file mode 100644 index 0b461d5938b9a068832eb43e2cd9e3d3267278b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7171 zcmZ?wbh9u|bYs$I`py6XKmPpq&%n5!!6Bc4VQT>+qX2^g2Lr<k;evMz0{<B}_A@Y; zGVb5RAi&7L;lQxRXG29*g@Awn2M0$*#uS5hZ#n+|ci6w5kEP@Q!&^p%{|*fM11j<v z4Yo3HFfuqe7%(tY78L9+*gr*N%lrKm{{;m0b8r|+Klr<?f{8)Efq_Ghg`tvRzW{>( z2Ls0qhIz&XdpQIcIXE12C9HYhGw}XraM;hVhlO_u1A{OFg9FID77PUp3<3-+91IIo zzJ$K7;Q24Wv!7#u>4nfuZ+RI1b2#kxXOS~u5aM89_F$M-S+G|?fYE@(x)P*`frEje zf`QkdfPq7RVS|mu`}Yk0|1<30&){PEXY-~C7DfRF2M(4K7Z@tuLOs7HpyHj7z<*|r z{Tx0l3``Ka88|8`nhgvXI5-YCI53}KV0d4!zl6bhZvg{~00V=Fz=Hh@0s;&i91IN7 zmKEC=d{~5-7#J9G?o_;gEAan6$Nv2irvE-{lKjueyx)PN_D{mk3V&t+{yT3N9p5o< z{AXZbS<b+)jDdltr{c{AgSY=V{_l6#&%p4Mp@2tIfVqP~=0kz+e*yj;5sMG|KmQl_ zzaJDyZx|RpXfpigVA$`$F#kgV<9`9h0tQ~4{S3?k;DD=Q&=g=`sIXu#_zbecVZR%n z1=E4g42=KvgJPH%KQJ)-XJFXRaD;(@1C$yjI52#8&(LGY@Zm4Re<p_g4h$Z<EIw3y zUbDee=lv$;|BM{_9T>Q37#ONG83f$k*f24?)6ZjJIKaTb%)qd_g5kXZ*ewngTnwKX z3jQ+)>}TL$2w`D(54DE@oZ1+msSOmb1A=uxwu15k1IIrGW)2yT4GRu7a|mn2oY=7N zaJzuA*Bp<Hi;i|n7-!u%v2pS7eg)?)8P82iPEOVcUKMk4)6&z^4U$jI@!Y)Z>}-qT zS9eZsUVeVQLo=7G*OnC*7kf<BiaoVu<>lo8i@oN0ZC!PBb;RbZyQj9UzP>);aF?w2 zwlz05XIx$tdwSd2+uI8spPK8vecj#N6`x<-J-vPX{rwHh+;ToUHatAsA*>yDX2-_I z$0sOz&-2;2>FMbi#@YAI>{M(x&%jovC$XzI;KBmm)ypib9I~&k?wwX<YrQSEb!+<d zwjICAPTkqpEd3_d$~5=l&TeV(x}fhbuC32p-WK<#qU2d~C-)k@-PYyrZp{9-_};(T z-9I1SJKxMNA5mTP{#g0<H2F(^e}6jh@%-}h;yZr*XE}L1-t$}S_gQ%i>&z44uXIjJ zDE*-uale4CEPY|?ues_A;~zf_Us!U2b;tcSF<o}0N~N}KcZx5sv{34dTd4N9$K+bZ z<6etrD<1dRe0%Y@FZr*=lL;<jnNKEqsI7c5$@JToBsc#<qEADE*?uVYScblwG)=hh z<h1EQjhRZ*EE-o%n%T4P=ag9~pN^<CuG)KY%ADM3JB8=AJ)AjZUg@<X%iZg_#4-Y# zzi|dHlu|sEIH7Ib%+xtOX1As+5)Zr;zhu(6%;lNW{$0sjrctXkaYe<%D)kkU@1?AY zU2WI(D(K%@BazoJn{S1@UfpnuYh}dtN2dbUixhROT<^h{y>!DKq1971hUXo7v+$Ij z_vOvmfxA<;RQv7Dj<}X|`>9Wwk><M{kLzZy+3s#A{Vw+PyzX^5Mq8t&?@1{At(X6C zmi795U+>M%^Z9b=)cf#nzg`P$U_3pwAe>eDjpUZao2(0Z_=LF%U3jf64G)V(*W?~q zlXoWcn5=rq>q9|ZdqhvFDu-yF%0IY9^t3Mf=}BkQPOr#ap>_UFYRPq5o`kd9XS+6^ zRP4J`9F}p5-RL6w_L429kG~3eaV5+&xA<bTv+nD&-pao7x;361Pr8{Be_ipG)}rf* zB`<7y*YB2CKEveZrL7&?|J}}GugzZ*!T-Ii?SrbtmWSVYa}!(}gO{2<YS};C;=Z`m zovg>9^&S;P6P@4vyuo!%*Zkm`&=oRwCN-DudS&8YR(T_2a@wyOv+C`BKM~|QVeuw% zdf$(?97!u4ekd&8qxI}8*ZMtevrqT^eqXS;vu0PFeVu$umvR5LPix)FY~C+ntW|if z9(6tGqgs%8T(d%-<@OgL=Vt6le|-44(mkvBe$_Q~(f_1>sLs0o`;qH9CaD0Asn$0b z#ZNdCdG@3)X7>D0w%zzgs&Czq?paB@maqEn8qoB&y5qN9+QC&l1yxI{5{elr#6+xK zHMcxmF#p^Ur_DPqXqw-d&ZijR)OyuG>!0P4ZXWF&P7=r7v<Gl5I#3pIMDCbt=Ov>> z3ufFn!l-w#(`#~4^@<E3jUu1!h>uC9T6PE-uH)&{Kay0ogG1dQjJwyu<?(VSk12{w zJUMwG-I5Qdx*rTRj1K>@K<e%$_kLcX%tf0P->8XjvnV<}an`Hk>uZke+m!2HEB8oQ zIaA}Ln3GUg(GlOz>(X~yu?0;CyOW}|zry3r4xy4Gr{`9Q%-pH`XyerUHz_lmc6!`p zd|x)rWT{r5rjzJ8qwXC&bBz|K?>@)dIxVPsncnFjk3_ZL0%4u|U6Y)xMeeSTIIOaa zN!sIF(WSzPDu(Hn;>>5=yfzzm+FUgW{^252q&6??-|rNQ{VD$Ge*?omo1{hiZChJ% z>hrAWQje|Q|2!|rW|G3SSJioU#f9W7gUp><o;v;Yyja6#lJPc2SyA6CaAF?U!iTe$ zeD+v=u{Vot{yL|X%^ipBc)IkL#AL5@vCO)}cW!g;x$Zf}mn{M&eY&zhZtBV>b)CER zuoh2OHhtwS?R6xnFDtig_Jf*poF^7}nHn3|u5@iJ(|Ml3SIyaz91`CYEF2^nQ?O)Z z{kt~L<1b5=2fxkmIX+86dfn8utg@cRR%tp+`}Dc*#4AmQsal7&{d=|k@0ry}vZo>% zmmQ7ho9h)(8x`4+_GR^qn{SdT7oWQ{OUymaRmbN3to7}iF0Nl2`)_UB(X6XSQo@=F ze074pM@1jGV-~)1>f4mnRe|^A%(kiC)y?g$o^ikIN#r@zRSDX+Za<R?-+FRxUeHgj z885y~-I0*0Tef=k^7DP+n@&B|DgXZ{RwK}Cx02)<yVom^e>b~k>3>Vh+}1Ms>!k8I z5}E6besafcO53oD>D%3c=G}3#RV8+0Y@9Z0ljSb<-P;c8nSQ7_91;I}U;h5@#@XhE zOYRGFzc?cCbxMWf>|m}_?{Z37dBYb=JiO?3#{SgLImYgmUZUTxA3GDO+|SQ`<n*uY zd7m=1>J-h@78tHyxq+oC!*<QXjnDW>7f#lT+@)%(zTEFP`@U$+%d0lZ2mj3Wmj3iF zs5>TEVS2!{^V)Y>uk5if(l2+q{a1h1NuTEi%U7LESJUridwW*+qy9;6zQ8`?mycPM z!_T``&%T>r^WrP#jYD&L-=Ft8{Zch|$I<e8n+rK*UWD82Iy3W_LEP#X37^%o+Sm8J z@8Rajdi%-j#9FqJl@}|$Vji2F-xsHx(|_hwhm+Kyh3iTy+ux=Ie&2ONe&YMq`FGc+ z%%0VAneW@mg|@C~@2d`62{W6QfA+0zknoMC``&Gw?;V>vyZZEtvTt@zZS%4}SKa)e zX1=%g?Yra0qVE`f`L><^QC7<O+xLI5?by)n`lj~2>0RlGWvdSN`cyYp-{Uf`*lheS zZ<pzu$FJU%ANhBi_oM4m>xb8u{n-2Z@5d>Re@|2?w@7jQ7dvIW%>$nNpJ(Ouip&1r ze!BDA&tr|}-cQ>7{kiq~ZO2RN3V->{c_#U;vb@#q%aY}0*Yvho9JD_B^>R?{11;TM zSKRx)EPE{T%#eL&<wCg!TZC&LW^CVivvS?HS=qL43f7n1<jjj)yuJ2)MR?Vn_xpl! z?C-vRXS3%<r00*Qq(5(^*sC9|t^RaOyzE&Azrq9c|DO(q*S?z}zx(dYbKiNn=3JYw z|JT8jdfzYI{`Q3@uC`q?{`-pSb_=Ke-}8FuGLJ)S|Mtw3FMJtq^4eqG?N4=WUo-9I zR*9M4|N8r4&_Qmw8sqMJ*PK4uK3DzszCy?Ae)<OXe_u6szDRKMuRm12`>J4HjkWmi znrdx%v!gY^o$~SD_n()X@zmzZwdeD{zP)auC}Q(hJe{?pO2oP9KYQ&*!H`?Z>Ah{G zTw)DVH~Az_OUl|->Eqn^>yh^bW1FMTYhJTAaP6o)?$WS-bE%bB)3)X192`~4j`<Xt zHRnAtQZ`D}-%-6)w08fNG+T~z(-qkpkC*jq^VLXexi8Wvv7~v{vc~D^ULxD9rm%%P zWKIh9FuLO2a;?02-j!1GMRf)mss0*GZKf?(&2_wYG`K&nSNq|U%n{*stTx}GT2r)5 zrK3LghqTq^Oh=8DN5@+qey>^F-hQ{dtd67o-xl_|PK&0ArET*{J9;hZmZ(){pJ-g~ z-d?ZKQMjX{Oro=4hIph#<NjlvA%|*uZZs|LsGdEebEQRR)QnQqh>ptVUGr9SPWaI& zEYV$jLSa>S_gaaL{T$sbJGxix=<3ku@_yd2#G>O=M#YR5-E%W~*3alZJflYTd(UdM z&I1y?^~c*bX;j>pQE}o$<ynu;n;qS??%j_v`d)SP-8@!wc}Cyc6*V7c^xV?uDaz;# z7O#2~(#N@@r}9MCogLx}fAq~_pHP-M;oXajgC72Wb|m?{D0yr#@y7AKs=x_cKb<9R z_KHOI^JF&1NlfD1QX#OiZF@$y=!=$LC*p*5_Q}0$66^feZ<#TP<>sV0EfZ#?b}?5@ zmd%`;eZBwtjB0(!$zNXd+x?uZDmg(heTw7EDfcUS_eM<d&FtsCIeBr$)DrdHpvbAI z9#gC;+kIwEjoR6&v9njOa_X)flhn$m$X8BF+Bw-Mvn}{%l*i3!CYjU9C8ysun|{t? zl5fZ40M;4r)F<Tqtcz5W%k-QoYB}Y9$JA8LDK9J<sw;cyIQtV<cJ$qx;OE&>8Zo1p zb6SeUwC>88(laK`@|?!&*(zdWr}i!BX}g_3Q{AWbu7?)0YHm*L@tpO>eafnr4U-o) zu~~SFznGLSnHzu8dKu^R=$|v%J-u36<GGm9*L%*)$(*_U=8U+Ra~Ayj*;y^2qj1f8 zvie*Nx4Ba#E3codxT!hg%8L$ji#h&ja<*j+r*}@-c5>>CnX{jFPWw8;_tRv%qR^JG zj4)4$SzA}m|DrsJgG=Ss%;}$3&iV9X!m*XnUoB_$znq{YzVOi0xT`;AHeH=-={fyc zrKE+%^ly=KOMg!PAi7ATYL-IPBCRM%<z0*Tesw(UT&S6~z<A{poyvt4T8n0%oc!|U zbb+o#?xqV{PA=frnk6L_x59IQ)vjqre=eFLxY+&Il06xV+^m+`bIlZ;wWLCG>AKBJ zd0)-^EwMB~OETou6933$fhU(5Xf2E0HSx&GCB9P2O1XMdb}eSUs$KL-IMZw1&&*{8 zm3{xFeOzAAwZz10c|lfHx!3GUuBEJ2%QAMYD9c=Wv|>`;s-?YND=a53n5U(eYqi{N z*UCk=mUjMHI+aVZ?bV8oTZ^8YSar{NrMJ`y=dRfeR;yM<t<uq2@?Cv#*{szLUGtl| zX700ExkPHsu9u6pRjqE-S{?aoMffczA+ZRTT?=bxt$Y!=W@FWw8@E>N`L!zRm&EE* zD~(^R5}m$y)vGmEtJ;*OB)vNowxnq7G_94lxz^mZT3>vk`NgS;@#5?H4A<>iH79h@ z`g^<PrAN)`oT>JzYC|^Hq=1e<B{PeVV9yPl^EYL#m%mlVb$acWTN{3v*Zgj8I^dZu z*tD^6=7u+0HrQsZsxkZL9dWH8@L7Vv?Pj|j>%PzI?`7O@!fN_2sks}!v;@AGt#o>0 z&a>V}t2UWQO}@-&lcCx?Wpj{`Mo8Alo}0TCN@s7nqtzgiCi^=$yf!$Ap{nKU;?3%- zH)?usiLBoCVAuNpU0a?-E;8+!qcwAL-s|F5kxFu}+WxLu`?71>H?8%ht3A_BuZZ}) zJ!|*&GryMAS+6dzUXz!)C3p9Z^HCf6!?)H{Z<&<6xi@-sddsGk(>tbHZ=JqsMtjuy z1<_08q}Q&H+EG=t>))w`6K<_u=)HaB=?!x#Cr*^wu>aMr&ggabyLNoPwY~N9?kU|% zo1=Ce^4_yy)~?0cyZ7$iJ$d(@?c7}pcWvJBZ`GbBTx-wn-nC77=V9r+XQC%xy}fb9 z@4d55Z`yx)uV;7MgVno_N^j4;?K<CT|J-A{LZmal%--+Hv_Ed~^cA=FU*bMczIy>v z&3@LJ3C-09Zmd3VGV1`(pFR9{4osCenB#r$htwXinB81C^^!KbWzQUx{j*<@=a3@L zK~<ey@2U?;@f=WDbBHnLpzfPPnl^_LG!B2uwlU2)tnFiBxaP2g&q3Qaho49vbksRw z{zl(5=g2c|Q_nR=xX&E$eRJgP?t_*(N1y*b7@BkRZuEh`HAkb*9EyB%^mX*1Se;|Z zJx7bPkL~t6oVn&0-=71iZ;q9DA4}9ZUfgqRLiX|7E8D*c?>jc@_`j+@$6kiiHDvp8 z%ADZP>5JB06PI<UqvrUdmb%(AW;z^GEq<R6_UW$;+q{MQ#EdiR|8KE0?mo1+;^h1} zle+#iKU}$TUd^e_o*9LU<$b+RJ;>O)uIE&ZkDb3-lK<6{?KP+Qm+n8b$IqJQ<bgj& zF3+C%yz1!s>N9H;ZO@$9zdq;GxjPXH&MfiXv*~J#W<}76wKfMHtT{flXWx|RXVdqb zJ^yFh*{CzwJ?HEfpIy^)#`(>;$Cc+^=bU@xb6#HhY`xBT_ch1f&N~0m=BWLiv&$Zx z-GAo9u{G!C{ye|q^ttLa=O52GdE?D_f!w2vz2~R#obP*cio<zr{F@7AHW!(A_x|~F zsBF%^i`S~pi><wA=W|JY?j9D~^JzSnjca$9*IrDKIbLaeW?t1Cai7Z)y;-MXx>(*E zXMKA#g5wIO<_w#)S85}!6lq^|)V*X7b9}?<6}P%i&$GT#+<n0-`>K!c@k*X+>piwP z@m@{6d*c1>o!oCPX4kITvTL>F+H0Me*ABK{OFDZY{p_{S+AA?{&wMko&Af5u-|O9u zQP<0QH(yJ>+%)?J*WGi+&!l>ogx{Cxsakv4$mgd0Q$>;4_TAIWI?`H=wpmS2u?^|H zlF57F+OIQzHaGoVe#$r^U25m`hc#Dwe0!CmHyOO%d~l}KVjJI?Z!fv|=xT&0=tWzb z{J8Dlar(0L9o@6HME~{N;y*Ee(^~7<XUs3~+&K3)=IY_=k-0m<m!95WxnOFVU72(E zG`EwRJ4-L{s(N=^-^du7y!XV)UPHUTmp|FwSMfSm{Y~wd?X|mqwLkLSd+2+iIOVcd z?1lHT3HNg!%us#cT793{?~b3$!#lPQC+Hr$?sHy#?n6(NhyH(0$k*LAaeK(V@6wAi z%Z20~N!mS9`M2x$**V*KA36C1D6C7BnRmwY-64y-N3pGs4Ej#$Uw&j|cfCXQ^5ot< zHh#N2_dUMMbI&dLN!HUV5w)j-=RFS9dlKIF^yckrN2G2>uYDx+_i4TCe*eBFf@d$R zU;MN_?P>0trzv*N&T&80oOi|h+=IHcxBi9jJyEuOeq+jgPOV4fN-x^#UUaNmU>mn{ zQtpEpRu{b9y)c)K>ehRiq_J>f-pjeO7j~_E>07(_+nbjed6yJ*U-h4UIWzB7aO{$m z>t4-2_iE|8S5oKpt<`(IIqu@zyw}IrU#YHr?biEh<Ga_p`CiNDzFB_mb$;#}nYNb) z*S&dg<jv7{Z?^lroTdA=u&z@q?``bAojcdPy~%#*;=8wp{a&Bddv}`s?ZUiw(SC1U zu6y^m@AcMq@1FC$d8qfk-}l|uy!UNq-tArY{yX3Mr|;gUo}Kkb&8~mnGp7IVrOXo3 z?cTnf_u==y#Lk`zynG+GoteMU@}%~sb#EWf|N7=egWpB5|8JHy|4Y7o_>O(|r~NON zPqq8RZ@)40M?>2;g{<UHcTH}6mb<IxfA-~MTdn-&jj<0k?moAce|;nN?gra*MeRA| zc3<-1zWh8_`TXxK&x#B~{hITMbqf1$nely{Iq!v%=ZiT1PqFW>aoqcqeE(tE`S$62 z&olEqQvW}T`S-10|HIQc&yDq7-unJ3iSJp7{POC1PwM`CXWRX4^}X-B{y&U$ejH!@ ztZw~}bp7jX^M6dRKVQi|T{QmZquh1<{?BLSKdX87WS;+*`TBPn^}m$G|B9~pSu*eE zD*3N#=1*Vu|JPr+UyJYk+~NN_>;3&{)<3tc{~cfd%h&(cf%9_@+5bMO|7qX+jm7i- zT>e-4C*%De582=1J%29M-&m~wYv=#p*ZV)*KL2Os`QLZtZ<M`zlxP3Xr|;L~eSco{ z{|h|#k5B*Khxh+x@c+H)_kTw2|C@dPP4s?#`v0Fn(BXkY6DzNr%Zz}BPHnuhb}bTt zk6gM$b>oiA2vlz9lrarsdGPVEN1Kx3ER{@wRIh2evHMyigP-}#(g`=)6B(S~H&>)m z>yM{VhW{ehUOCrUAuCVyd9~}={+RO8XJx?JxTCW|Ute6svYYRTMA353jS04Gw$Ww| zC)UTz4!SE9{w`)$so}QR*Pq|`?W_E|?CtLB`muW|YHzvDiTIebww1qMw>xOViIZ); zR&A#vKBt|V8=UlSn#axsPYxvf?%T?3wJi1g+SvW;R{vTOxo@)feK8-2g|}83MIL68 zi}~?%yWq`POMT38KkYdlT%CHl+T`s0!)xP@+Xa=CEzDkA&n_SLr{dG&o%7x2-%Bg} zD!tI%KVt9SnqOb-^R~-Znfw3z`S(BjhV3_*uB>-p;&(AP_~S;ffCig%i-FVc50fvL zFl!$%IQ&NA$OLCzdzM0DepMMm7h(S?t6exkT{gOkPfiLvC=tJ8quYJCD+O-S<xf7^ z$rxYR=&smq^6ofauZoeUD!b07BMQ@7icYFC&oT1Su3qzLzs~w6pN{H&{=LcD(3xlR zKBMC<n-3X3k2dx-7tRUZYjJ<czhG|_&pn&{Y>UqnAGQ0=a^*a?;~e7vXY)V7$6WYR zuk3d^U%e&JGqzjgqNDmzkpo^EZ<_@B3%<UxE5KgWbX{Pp_12KkwO*n-!opjxuJ!&o z$22TDvHI)QnEa=uTU`b3Yz<GmzWVElq;}VDJCi@gm_?><=eo8zWB$@@p4lh=Y>mq8 zoHcE8-gZ{=RXLo0%wmfDlZ9@lolm`f{lckc^SH|AOSi{WKaAcUTiZEx%l_K`r6=yI zu(IuVaMwWfMnbFZoASi=t<FCZJKuLzBy}HuYxJ=D>s5)<z4m-Nk|wy@Rb1-xy!Y*i zY^dAJsA<_XJD;W`e+x>RomnQBKD+X&<k5NM|N6eB3%9aGg)ZXMo%Lj~eT>yhpV@4e zGAArF3wzbQGVJoJ-i>KtuRC}43FNH*Dzf|FrsH*=b1W`Si^xs5S$E?t^V7E3-n&+= zseZWI^lbFQy>H*_ez0GbH>O}B_wyeGM{df>oH_bEx8~4sVe`sQWy<E4i;jt2kBL6> z^7o!%bxZNTH!s|_-dnQFGhFuOmCMz8zpl}qemC`6_Vb@*cXE4WFWsH{cJA&6_4A|4 zAN893s|ad;9#WY&b3b3zbJgXwRre-u-}lRH>3O-*H@nlPREHdF5B>AtjQagcZI|`G v#(lrvZeREFIe&lc@At>;>;Ha#zQ6wefA$0hRtpCvu?r3CE*=hy3=Gx)5I!d~ diff --git a/tutorial/program.gif b/tutorial/program.gif deleted file mode 100644 index e111ef462f7b7ae9688e072ee5fafa2c04df1a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6341 zcmZ?wbh9u|RAw?~`py6XKmPpq&%n5!!6Bc4VQT>+qX2^g2Lr<&;evMz0{<B}_A@Y; zGVb5RAi&7L;lQwG!iI{f3IPED4i1irniU4`-g5l^@34PAA4|sphPR9i{~Z|i2UO%U z8f<0YU}SJ`FkoP)EGXDtuz!WfmiPNB{tF1~=io4ue)xA=1rvjS0|SR13qvKtegOsn z4hD`J4D*Z&_Hqa?a&S24>Ui?LXW;$M;IN-z4-4-S1_ogU1_zLP-53fO7z7wtI2aaK z{0Mzt!Si2$XFtaR(<h;u-tsX1=Wy8X&mw2SAjHAI?7=XvvS6=(0HXnmXC+7z0|x^` z1p}`^0Rx8s!;t{D_wO10|7Y00pTWhHVe_U+7DfRF2M(4KPZ%oRLOp*WpyHj7z<*|r z{Tx0l3``Ka88|8`nhgvXI5-*{9GD+4FuX6=U&7$Iw}62~fPq0oV8MO{0RaXM4h9Bk z_lj){J}g2^3=9knA1dCz75M+3WB+~~(|;c}N&aVK-tWLs`zPUNg+H?Z{~ZQK$M*~z z{}~uqRxmIuV_@J}P{HuQ;N5?Y|N9;GGcY_oP{0!?z&wXR=0kz+e*yjlB0eAXfBrA< ze?Q0m0}LMn8UAxH?2loX|Dk~KzW`$a1Fz1024(>Uh8BhcRSbaw3=9=M3<jS;7C7uz z=JR1X@R@<}zj;sr6XOR4hW`u<`$3^o4N3}2LKr^0XINm!@Zm4Re<p_g4h%8>d_Git zUUP&&=ly=>{{jqLCk`-F1TqLHzo}qiFkoPCFwf&-VmQFiz{tStz;Hf@;XNb7NFOer z&kU9S83aJ4XRt85XJ7!QGX`in1I6e7VjYm(puE7q@sEL-L&jsnf`iQ*!dfvWHY_~c zE}-l+$7AE7qumn5S$9rsTztG=!MRJubJLQOlQn`@#hl!<^z?Lt<WqAzH!nLo+oJf@ zos*lFpP%p0%q8o!WyQtC9+S0VPi<Lwd3nHMuen}ZS6y8lu{rDRsjaVF84?ax$$D>F z6FHxOt;zQEwzapnt6W~y>b-s4-QC<z*#vf%t&iJZ^YokV?rr+_4tEGM^IAu2a5!Eq z?>z5M#KxzmXC(hyduC=)%GPG<bUEK$B`40#x92unbKN-Q@`mKobsf7*pI=!Sdw<^9 z-QROIE{Oimt0QCZ@bSLM+VOE0%sxNAuvorCZ||<srw7(&-#@o^_xJY?4*%<x_useY z=jRufSI3{<xA*t=506jJ_us$o@9!U<U*A8!fB*mg3~U+?8d$_K9yD^Ot$5JHWA@@f zvw)k%!xoXSjEAifX)7MK$&|f#*sjo~@u)*(TE?SJjb$qyb?Iz-@u>T(<g@86=N5jG zi|0CdLN3{=$!%iq?pzj?kgcI6PkL8B6^$>vTw0=%<Z33ewDzzjXZ%#(qAw{f(L$a9 zWeZJ@NhBD1h0UDtm{(JIMr_^o$Vrn_PfE?6xG*zqZmZ(+#f8Q5Za(uj?OJv#cm2+1 zkrfWF%vMz8>#cf`-6VGF=He!+sLY^7De;#vJC8=bn14xi*UDu*X6{-`cSPQLxoFj- zovRl8^Gdy?v3k<7Uur8ZBzC^)i)Z_p(Z4~iYt@?RN~)`q4+&MNC(e2FD<*mIp_gk) zecCLuR$Vk(y=K+cLs>cVSIaI}?_af$Go~za(QdWP>lPh<Tu?Sk^4;_&Vs80!Ql4q9 zUw-LT_siW3>^dI~u!!e;ILM*=C*%;1`I`@i1^D*_9}x-9`FK<y+e9~7+TSPYxLRXQ z)`YyyGnr{>_or+M*Pg#DwO=*+&&NZ?udfs(Y2V*7^_<biIaAL^#Z50h>&sX>^`cSm zY?D(a{cR;~{)bJsT=q52-F(42S?sG<wD;Am6C<2`O@iaAE4N-s3Vs`MGxYJ1ZIQwL zS4_{?ZvT7nw&p|Li~qK~NUGj`&vCi$<LeE^Av;cIJ>O#Zpq=~Q)H`*}S1Oz)SBF#v zPFLPi;XU*J4AbdTrtf^Wx8hOuuCy}imOC$uUwLjjKH>iBs+q-(+3WYe?b5TlJEwkM zdEa5bS-E$!tIxgNy77?TV#nQl@-;h;9uoQfX<_xN?4^@S@9liQDp_7?^~w3Zwd?!7 z{oS+h{$;<*UlxStzdmtyQeV}_jq~HTe0n>%UgOU><^0v(?!2D&drj${hiCION^Zw6 zes9<O^Y>ikgiY~3&n;Q|mGwfwnuXH~W^B<Zc<NU*L;3p2Z_D&=@Aa-dR<z*NtD}c5 zKlS!&%)Gnn$Wy0Bi7C~NiZaJI#4I&deu(@hZo~6%j*8PHO}6$YtNDKG7$2FQnU|x* zeVcco#w4{U-@>4pm`9I_gjASbwV#Q6B)Hq-n68^(ZZOO2KWma)^=4gEi~ABK@YzV! zY}!VZ!Z)6BpEI_ZoLbu#8RaGIe#qV6+>!}jJ}bY-V%D`gxU#Kn%N^ORVke(;1bW@L zHFbN1(Fv`fjcOfx=0DDGHafK=-$&!hV-?Pyp4^K9yJMVES#NG#C83)(bzY6K#^wyc z39g;ZSDED13p;mc@9LeNWipR#@{NO)ca2hx9Ent|Ek1eR>&4!RoTrKtSNfdvT{`*b zk|jT!OpmW`*))4i%QC&#l}CzhvCg>{^V}@{rgyGa(A;DHY?7@PZaZA}>+}3QyVK2{ zW;z%3P3pY3XSOZB$DyjFMrrJ_%61zy{dA7ynLkhQG;N&`&=~e*hIs0|ShFti3au#% zcxn?~7G2i3ww5pM^qGa$uakoM<I?)=ot~<x?(htC3z;SCn{M}Th0m9>S<M%%!rj~> z{HH`sUSvM^neb0>%Xxn3D^+AO-REuz5NI<A5_}{7<yDHy%A`vxoo=lPJMJlM_OhgH z_vI=3r|h~S_w4;*r&cYeo3mEWG}2$dbYxD{<*u;lS4>;&w@!*(9TdDyY+LykA2qA3 zmu@U~o4Ve?Cnur0b@z^Qe7enFS6?~vOZsA0$ts~gNdd){S7P1DHZ586@80q%uPE1N zUpI-}U7nk)9lbGa%choGU2EQ5w>O7f-JW`OZQS9`=n1dHrt$jT=eDhOI<Tv3!HuKZ zf$_gX)tF2Y7B1!X+i7k0*6hPZsi$e>s#;zT&wbwMTe?1w?|0mDA@N;jMN`7#o$mjf zCAR3T>HC7kldqO9>)ZQH^+WybOYz@1ckJW3mgC9K6Y|t;#}3gt*{Yq(?tOY@Uh~N} zGhTJiHHP{hyT13nZ~nVGajMA-4c29vt+gFD4fJLt8$ZkFoi3dG@ma+o>tpA7&wqO4 zurA`r%%cXqzI(#C`y)<Tr5QDSotboUp2SAQZ(23IU+(Hv?@YAU+jx7Q&oiU%#U~25 zH~(vl4@o(^D)Ly)z4ZaNcp}9wTJG(%De8Q8=Alizq-#yt$Jw<q&&7V5oL1o~xyNRE z%SpNFT#?wsMS+W6c($9nbaQJg`FAQwGku0@P4cQ0vOJmg<~v=Lgs-M~zkR8?IO^!> zJ+gbQTv<LfDu3(q+AT|pS1pTl<KKB`k8a1;IT?TEt*Okekz2RX=Z)afs#V-9ax6E) zUV0?|TC}RKY?_H?MzDXS>&#{6mK;mjz4}neE_so%b+h+o3%tH?hCllK@`G#dKe<)1 zyZrCxPOb7o_S16r{IoM&vG(rshWcpNX>n#P;kpG?(z7moD*JjszV2n<dFh8N@3$S) zpSP$befp_Aso%H$(_HsKCiRZ9T>QHR$+{1H^JN~%<yjo_{8u=wSmuKM`W<^4bDqzc zKIe*2x#ii=brBPrHJ-kT+gaHAPjSg+vx8>ScN{M5ectO``z%C%hu6%$qKfLfXSVX5 zyMFv%tc2y<oj>mF+UHyHt-`AEW%m8e=d<~~FL+$@!c)KMPIvG3<?S`^&&{*G=zFi6 zd+XmN`Q~#T7?%8~Ui{;I+5PX2{>pvT*uU#TUU>DBn|!ZrMbGUzR#)?MZHdYS?rUiV z#($Gmo=ja3Zu?n5e(&prXJ1_Je`6#2`0nIq)4n%3#eEZ#H@nhoUwzGa-SuLj@QG5D z%TwR-t(@lj`@P`~tFK>mm+hMU@ad0#9Xc<p=ie#Wy5xCP?19xxzpHs#j3$Zp=Q0O{ z-h7?@{O6>tzt;ShT61R4UcdYH-t!q_J~y`JR5Ru5TkgNV$gAa2MYoy7^>WQiOY66n z>k2M0{%>CUW_j)`W1Ussi`iRpW*Rl@dFZ|Os@C$UwQMfYbJeR##T(u&w^!GwWt$Nq z(qe1vUi2s|c1?3_$)ifSD-8>mmx$l6v)G|uUz%q)B`>e7%H)cZzKgTbk_M~e2_M7? zTgo$Tn;WJ~Z;gs@v9BoIz+R(j;bSV%YOp<ZgKK6CN0dxPikOGXCK2zM!HxdcTBlvF zJ{sN{6W$hD))v=M!64Dn5T0J`(Q0E}QC`vUFG;N0)2+QVqkYTuwqB0r?io$y&np@@ z+FGVn*tDgkGR7owbarZVnz<!qyOmGh(KJ<}-pQ@2Ag!yay|Z^&=js)83p>hI{OHo% zUJx{??Z|c4`BPiAM0B<N=-BW>tVp7va7*Ta6CGQBv~KTcZ_KDxWY<#CXxZh_arQ;~ zf)j1Cm#6-`?6IjVJModvqYP!qkoxQ&Jrgs!m*42CjcCv=(MvLQJoKeecSp~ZAANnP zr5A4W{xOX_wXOc_beB^a{V!g0{n^oX?nU3<8QmWu${8gaHB$PYKJWb*(LSZTo0p^Y zplOYOWj{+uzvz=}cFUfl90_VaJEc^-WlnZ#N-Fmp`KSNbNdMvSO#Z3rdo+6YY-_dg zGz@%Upqkl}$S!Rw)~zquuVY#HW=H3m8J+GsyPvI?!hLee!5dxvl@qxtdqYn49D30q zE7==Wo*0ukHSXo4<ieiC5mWslr}<`1>Dtk>>bjbAMMm<@X_A&xB~~^?oNPBpo2KL3 zcH_p>MH#8DB&H;-n3h*L{nm^AA3L13Ez`T(KDmF2_3z^~HA3M_nZxUDPRfm(-k~|g z(XHaMd$Wp1|Nf%7c+VNRp;gZ$+PPXL{GQRCvZ9gWM9_=l^`Bp8wF%9x_Uzf0IU`4N zVpnG8uZ)QspEfF2hU|#6yK>Q{_~wMhlfC<A=5k9Edwb5Q<ZOBKuY6X@Q(NN|bJiO< z9SNE^k8|!7cAEo7nx~zNocuEA{PF2~Eayc2oKV72=k6i1%d_vBkj!%C@Dipve~H=; zp6)AL8&18bxm7m%;?0?RJ*PEG&SF_PmGfrb&E`5bPc2oA2`Z8~>MLheSk7Oi(JkOH zU%0D#>CVhYVji0}Eo6_Hv9fZmLe`u)BGb=n&c9s|#i?R*S8@{njE4J~jma8w<+T>9 z)L5JuIqy%T*PEvKZ-w-&BC^juQC>K$kLOf^bEcGQX3xj8xz1WMs&-E0&6=*aYLdaM zUKOpn&{L+CD<|`GcIZbf`R@^@`f5S4)|}K=OK(|rdt@z*$y(I?a)M%3&HT<u|ID+N z$9gTV>{`}*YI$+iih8c)y_TJFQFEMLEx#eTxG<}Yd)AE7S@mXJ%Y|00sP0Ox&6+no zYgywh=}4~?vadRmX02$lTII5B<z9~^Q>0e9OD&soYuWyvE4FKOB&}S%;O2^XRm(f1 zR&CT;v*y;yt-qG-Kea5uYURz$m3gnG$2Ly8XtiKL)~c(smTl%*xGHOHjN#HFTB|eJ z)+uVNvvywX_-gHQtwkrb*3R%+w&&HF%T>!h?wV}7bA3YCs=K>ZEa6)J&`SPE)zqF> z6K~#<W0jtBxNAdImFgR<^((TLaGuuwm$mx)tW__)HVCd>d%SBsv$j0<@0IeaH!eN8 zQ9OJ7XRbBH9RD_Iu3k5#bm`KAGu;h09s9NFgw!VQOB-!|ujA8Rr5C;KRMm$3$c?WP zH@A0fR@l8!>GozP?=AdXTg)GAssFJi@#d!B-<#gu>NL`xTJ&rEvr}7NRBiHIy_Mnj zTBg%mth2WzdW+rowITBN7P-}1)U>5dZfAy8ueu$zePiMF<?7o*s;9+vSH|C7T@}4a zgnRqD#x471ZS2(E+AY09R%(O&?DbsQJJ0M|vtiX{$JyIIa<1sl-YLetBWLwa%hlWF zMz2VJz1em3j_J|6gm!OVczS2y>zxw2H(hwOYjO5&E$fXltvYtE-j%DpBRPBfmxDXn zy|-`f-nCVGkF)pAwcI<`d+)mPdRz0q?D|KId**Ym)X`o!k$ZRX?$yh^w`E7~J;%K@ ze${UG?wwz|cI=m4bJlw2zhmpatTyn9*#G0V|MAoNuDsf9;Iw<D^zL`R_n(nI@bLBq zmY%I_XZ9P;K5*dl+U>9R^Z88S;n}v#`XK9_ebL!_CEo0n+OsR^_CdGogG_7oDA{Zl z&DpV|`cT5nb=|iXXZ+Zw<FoI1^?|cov)QZ<_eHNf`Fe%kpFMk5AC7sxYT2Y3i74y0 znJw=*J$bZ`So^H+)t>dw*=n)pJj*vnnBN?}y?ZXRXWjBmb8Z%Iji@PddDAq{+(F2* z{yE!><emecW;X^#+6UL<ocPqVwDM?f%|Vr(d7dX5e5@w?`^&l1`;L{zjU$yh`)b~# z9^l;Dt}|Od*rhJ|P;btm!iiNaTb5N=pVW<++qdSV%$#jg-ki*vvrk*+R7Uj9P1&aw z@7Wo-=G1bTy+UtJt&!fkQRnpho>OacP9Nbu)v@MukI$*CZ%#k1+Phun%-%hF7UrBe z9J6Qjnlqbu&a8ZM=Jc7<XLZi*?m2xj=d8Q)nd@uLo<DQy=9{x2AGa;lIahS#OjXXg z2*+~=*POe~a{A(%bN7#&t=Bw%*XQ)dob&H{&hK1ve(km`58s^s>UQ>}&V}DRXaDA0 zc+Ga6bL|CF@AKDRU9e}qcv<ISkL$(PSr^M%&b?TDaqIHJxo<9Jd0ddyy(Hy!X@AbY zOX|I6kFU8j^UQh1x0jU9Ub?DtS-<y!VeVy#yN6BJUgp?xS@`W`?Xwpwb+5S0-TgG@ ziV5$f*=w%2>mIxF`ijijc3<7A4|=Y=&AA%Rdo^tJRg2!MKi^!9KYP_*=b8cUHQwB7 zMmE=2*IvsxdouLxwT!!a19h*Tu(__Ad!3>8y6xKQ)xOs}-(D}My;iGxBYW@F+}s-_ zw)-mA-l#cyrRU|1hT7|`x;H2My{4Iav;FLiscUcM^c+rnd$WS)R;KQ)K%bkPxwjVY zz4d*~t$y1Z3trz^viC-+?rrnmw`S(v4(YnRe$DL-y*E_f-d^Lo$yN7`!=Br7bMH9z ztd3oKN5STf;M+SP|9o$()V+H?_r%WJyU~BHUtN25lFiM9Z|`dExpP$a9(T{3ySewC zdEe<>d+#ytX2-YpmhZi}Rrmg$(|5k+-p{wW{dVpB-@JE4-`<z*xw}{Q!SS>APv$-l z@VVc(_CZw7t%GkLnEttWROjJ)+Xr8B9^S9LS-SQi|G5W|Zy$F1JY1{$=y~shm${GL z$lTN7yYf2ck$Bx*NxsLzefI?Y9tWJcYu@+xDA%2vXCK?1yQ!)7NIUM9RNRxNx(_|> z-8b3ygp=>FpWPEVxu@2APn7c>+vhzE?|T%=_atQA)3AR}S=T+4&x`n3{fx=^*<bEQ zI(|>|_MOezcU;BpabeuEEq5Qd|9d7K`~08fx$Qyoo(J1LE7f~;-{wVC-Nl-F&jt9N z#o6sx`Fxh=>BlW~F?RnBTG+k3BKd@6-?PMfTdhw7J^kS_?d80WkD4F6eiob?`hEF= zJDp9-?VcJ%FWfY*!BVR)Va?(Xx%cDGIcVJK*5sP^En>0FnrD+YPduiqo9yasAmekV z?6?`v(^(humG{l}+0`tac_ent{4+_f*4I7B@bgxj`(l#v+lhbPJc>J6sAD_B=kD{q z`xW=zU6#H5;ob9CyZ7(p9(}WWesS)54c!-i{NDHcdoOeE4%7LkjPW0S$vxoU|L||$ zhX=V&`1ap@FZc1u*(W0MFa7I2+WdVk)&KDKy^nihUnt~%;I;qv>CN1aYWk1m=YQgy ze^E#Nz3jhFhrOR0?SH8l^O@n@CyV^gqWeC7=KW}w|58T&%ba;nT=btS)qgSG|H&)< zqsIL&+<adG@}G;@e+|t4688VF^Zc(-@$X~mzlQ$*8uI^3(*3XO@!z`cJ<Hht)OP>3 z|FMtq^uNT(e@~15R5Jft(D|=V<sRGZ|9&^_TiyP9RqwY3%m4UZ``x_fYh?Zp)4p## z|G&lm|Dn$JqlN$LB>nG&^*>$vf8_9gpVR-nEC1^({%;-jzdYXmn0o)qvh|1N&;OCQ z|J!Q&H*4d+d)oh=>;HM1{kLfQA1%>8R<8fDk^k2m`9Hh-zaLrua%cUYb@9LU*MB*+ z-~acD`@g5%|Ksxi&-U}bZ_NIAMgGgR{J(8?|L*kvwR``M+xNde-T(Q4{J%Bpzg?XF zH*fyGSNeZa{C{3r|Lb}G=MVD#PxQa<`~UXe`L_&$4i6lfSb61KW&}KRYU7o)Ymo?i z<kBUo8+T+z;A6KwS=%}m$)G15lT>}@xy%fD>NQO_c3+ER@H3xTrn&cy%nW|+H_x{A zAB$ATi-1M0y>hOzLS6<f^POwgDi!)FWL4<exTCW|Ux%%W-CM^h9rh+-lRGmLgEatI ClzoQ) diff --git a/tutorial/tutorial.wmml b/tutorial/tutorial.wmml index e691993a47..b06379f0eb 100644 --- a/tutorial/tutorial.wmml +++ b/tutorial/tutorial.wmml @@ -63,7 +63,7 @@ examples and explanations about some of the basics. <p> <h2> The history of Pike </h2> -<a name=uLPC> <!-- FIXME replace uLPC with (micro)LPC --> +<a name=uLPC> In the beginning, there was Zork. Then a bunch of people decided to make multiplayer adventure games. One of those people was Lars Pensj� at the Chalmers university in Gothenburg, Sweden. For his game he needed a simple, @@ -75,15 +75,15 @@ dialect called LPC4. LPC4 was still geared towards writing adventure games, but was quite useful for writing other things with as well. A major problem with LPC4 was the copyright. Since it was based on Lars Pensj�'s code, it came with a license that did not allow it to be used for commercial gain. -So, in 1994 I started writing uLPC, which was a new but similar LPC interpreter. -I got financial backing from Signum Support AB for writing uLPC. Signum +So, in 1994 I started writing �LPC, which was a new but similar LPC interpreter. +I got financial backing from Signum Support AB for writing �LPC. Signum is a company dedicated to supporting GNU and GPL software and they wanted to create more GPL software. <p> -When uLPC became usable, Informationsv�varna AB started using it for +When �LPC became usable, Informationsv�varna AB started using it for their webserver. Before then, Roxen (then called Spinner) was non-commercial and written in LPC4. Then in 1996 I started working for Informationsv�varna -developing uLPC for them. We also changed the name of uLPC to Pike to +developing �LPC for them. We also changed the name of �LPC to Pike to get a more commercially viable name. <p> </a> @@ -1029,7 +1029,7 @@ it could look something like this: <pre> do { modem->write("ATDT441-9109\n"); // Dial 441-9109 - } while(modem->gets()[..6]] == "CONNECT"); + } while(modem->gets()[..6]] != "CONNECT"); </pre> This example assumes you have written something that can communicate with the modem by using the functions <tt>write</tt> and <tt>gets</tt>. @@ -1262,7 +1262,7 @@ Also, these functions operates on floats: <dt><tt>float floor(float <i>x</i>)</tt> <dd>This function computes the highest integer value lower or equal to <i>x</i>. -<dt><tt>float ciel(float <i>x</i>)</tt>, +<dt><tt>float ceil(float <i>x</i>)</tt>, <dd>This function computes the lowest integer value higher or equal to <i>x</i>. </dl> </section> @@ -1401,7 +1401,7 @@ which creates a new array. Figure 4.1 shows how the schematics of an array. As you can see, it is a very simple memory structure. <p> <center> -<img src=array.gif><br> +<image xfig=array><br> fig 4.1 </center> <p> @@ -1521,7 +1521,7 @@ What makes mappings special is that they can be indexed on other things than integers. We can imagine that a mapping looks like this: <p> <center> -<img src=mapping.gif><br> +<image xfig=mapping><br> fig 4.2 </center> <p> @@ -1613,7 +1613,7 @@ A multiset is almost the same thing as a mapping. The differance is that there are no values: <p> <center> -<img src=multiset.gif><br> +<image xfig=multiset><br> fig 4.3 </center> <p> @@ -1648,7 +1648,7 @@ space needed to execute the code in the program is stored in an <tt>object</tt> which is the next data type we will discuss. <p> <center> - <img src=program.gif><br> + <image xfig=program><br> fig 4.4 </center> Writing a <tt>program</tt> is easy, in fact, every example we have tried so @@ -1767,7 +1767,7 @@ with a reference to the program from which it was cloned. Many objects can be made from one program. The <tt>program</tt> outlines where in the object different variables are stored. <center> - <img src=object.gif><br> + <image xfig=object><br> fig 4.5 </center> Each object has its own set of variables, and when calling a function in that @@ -1861,7 +1861,7 @@ When indexing an object on a string, and that string is the name of a function in the object a <tt>function</tt> is returned. Despite is name, a <tt>function</tt> is really a <b>function pointer</b>. <center> - <img src=function.gif><br> + <image xfig=function><br> fig 4.6 </center> @@ -2745,7 +2745,9 @@ in front of the function name. The argument to inherit can be one of the followi Let's look at an example. We'll split up an eariler example into three parts and let each inherit the previous part. It would look something like this: -<img src=inherit.gif> +<center> +<image xfig=inherit><br> +</center> Note that the actual code is not copied, only the list of references. Also note that the list of inherits is copied when you inherit a program this does not mean you can access those copied inherit with the <tt>::</tt> @@ -9228,7 +9230,7 @@ prints. </chapter> -<a name=#Image> +<a name=Image> <chapter title="The Image module"> The Image module is used to manipulate bit-mapped color images. It can read PPM images and do various manipulations, or it can be @@ -10562,7 +10564,7 @@ the new image object <dt><encaps>DESCRIPTION</encaps><dd> mirrors an image: <center> -<img align=center src=lenna.gif> -> <img align=center src=lenna-mirrorx.gif><br> +<image src=lenna.rs dpi=225 align=center> -> <illustration align=center src=lenna.rs dpi=225>return src->mirrorx();</illustration><br> </center> </p> <dt><encaps>RETURNS</encaps><dd> @@ -10582,7 +10584,7 @@ the new image object <dt><encaps>DESCRIPTION</encaps><dd> mirrors an image: <center> -<img align=center src=lenna.gif> -> <img align=center src=lenna-mirrory.gif><br> +<image src=lenna.rs dpi=225 align=center> -> ;<illustration align=center src=lenna.rs dpi=225>return src->mirrory();</illustration><br> </center> </p> </dl> @@ -10818,7 +10820,7 @@ object rotate_expand(int|float angle, int r, int g, int b)</ Rotates an image a certain amount of degrees (360� is a complete rotation) counter-clockwise: <center> -<img align=center src=lenna.gif> -> <img align=center src=lenna-rotate.gif><br> +<image src=lenna.rs dpi=225 align=center> -> <illustration align=center src=lenna.rs dpi=225>return src->rotate(45)</illustration><br> </center> The "expand" variant of functions stretches the image border pixels rather then filling with @@ -11011,7 +11013,7 @@ object skewx_expand(int yfactor, int r, int g, int b)</tt> Skews an image an amount of pixels or a factor; a skew-x is a transformation: <center> -<img align=center src=lenna.gif> -> <img align=center src=lenna-skewx.gif><br> +<image src=lenna.rs dpi=225 align=center> -> <illustration align=center src=lenna.rs dpi=225>return src->skewx(0.3)</illustration><br> </center> </p> <dt><encaps>ARGUMENTS</encaps><dd><dl> @@ -11055,7 +11057,7 @@ object skewy_expand(int xfactor, int r, int g, int b)</tt> Skews an image an amount of pixels or a factor; a skew-y is a transformation: <center> -<img align=center src=lenna.gif> -> <img align=center src=lenna-skewy.gif><br> +<image src=lenna.rs dpi=225 align=center> -> <illustration align=center src=lenna.rs dpi=225>return src->skewy(0.3)</illustration><br> </center> The "expand" variant of functions stretches the image border pixels rather then filling with diff --git a/tutorial/wmml_to_html b/tutorial/wmml_to_html index 31bdc6ebca..eb5717c171 100755 --- a/tutorial/wmml_to_html +++ b/tutorial/wmml_to_html @@ -15,11 +15,30 @@ string *srt(string *foo) return foo; } +string quote_param(string s) +{ + string ret=""; + while(sscanf(s,"%[-a-zA-Z0-9/()*,.]%c%s",string a, int c,s)==3) + ret+=sprintf("%s%%02x",a,c); + + return ret+s; +} + +string unquote_param(string s) +{ + string *tmp=s/"%"; + for(int e=1;e<sizeof(tmp);e++) + if(sscanf(tmp[e],"%2x%s",int x, string rest)) + tmp[e]=sprintf("%c%s",x,rest); + + return tmp*""; +} + string code_params(mapping s) { string ret=""; foreach(indices(s), string data) - ret+=" "+data+"=\""+s[data]+"\""; + ret+=" "+data+"="+quote_param(s[data]); return ret; } @@ -45,7 +64,7 @@ void _add_to(mapping foo, string bar, string full) void add_to(string bar, string full) { - sscanf(lower_case(bar),"%*[_ ]%c",int c); + sscanf(lower_case(unquote_param(bar)),"%*[_ ]%c",int c); mapping m; if(!(m=links[c])) m=links[c]=([]); _add_to(m, bar, full); @@ -68,7 +87,7 @@ string anchor(mixed a, mixed b, mixed c) return 0; } -string mklink(string lnk) { return "<a href=#"+lnk+">"+lnk+"</a>"; } +string mklink(string lnk) { return "<a href=#"+lnk+">"+unquote_param(lnk)+"</a>"; } string genindex(mapping m, string prefix) { @@ -81,13 +100,15 @@ string genindex(mapping m, string prefix) m_delete(m,0); foreach(srt(indices(m)), string ind) { - if(m[ind][0] && sizeof(m[ind])==1 && sizeof(m[ind][0])==1 && + if(m[ind][0] && + sizeof(m[ind])==1 && + sizeof(m[ind][0])==1 && m[ind][0][0]==prefix+ind) { foreach(srt(m[ind][0]), string lnk) ret+="<dt>"+mklink(lnk)+"\n"; }else{ - ret+="<dt>"+prefix+ind+"\n"+ + ret+="<dt>"+unquote_param(prefix+ind)+"\n"+ "<dd>\n"+ genindex(m[ind], prefix+ind+"."); } @@ -269,23 +290,113 @@ string box(string tag, mapping params, string data) "</table></center>\n"; } +string do_include(string tag, mapping params, string data) +{ + return Stdio.read_file(params->file); +} + +string end_img_tag(string ret, mapping params) +{ + if(params->align) ret+=" align="+quote_param(params->align); + if(params->alt) ret+=" alt="+quote_param(params->align); + + return ret+">"; +} + +int gifnum; +mapping gifcache=([]); + +string mkgif(object o) +{ + string g=o->togif(); + if(gifcache[g]) return gifcache[g]; + + gifnum++; + string gifname="illustration"+gifnum+".gif"; + rm(gifname); + write_file(gifname,g); + + gifcache[g]=gifname; + return gifname; +} + +mapping gifcache2=([]); + +string illustration(string tag, mapping params, string data) +{ + string src=params->src; + object img=Image.image(); + + float dpi=75.0; + if(params->dpi) dpi=(float)params->dpi; + if(params->scale) dpi/=(float)params->scale; + float scale=75.0/dpi; + + string key=encode_value(({src,scale,data})); + + string file; + if(!(file=gifcache2[key])) + { + if(params->src) img=img->fromppm(Process.popen("anytopnm "+src)); + if(scale!=1.0) img=img->scale(scale); + img=compile_string("object `()(object src){ "+data+" ; }")()(img); + file=mkgif(img); + gifcache2[key]=file; + } + + return end_img_tag("<img src="+file,params); +} + +string image(string tag, mapping params, string data) +{ + string ret; + if(params->xfig) + { + Process.system("fig2dev -L ps "+params->xfig+".fig ___tmp.ps;echo showpage >>___tmp.ps"); + object o=Image.image()->fromppm( + Process.popen("gs -q -sDEVICE=pbmraw -r225 -g2500x2500 -sOutputFile=- ___tmp.ps")); + + o=o->autocrop()->scale(1.0/3)->rotate(-90); + o=Image.image(o->xsize()+40, o->ysize()+40, 255,255,255)->paste(o,20,20); + string gifname=mkgif(o); + rm("___tmp.ps"); + ret="<img src="+quote_param(gifname); + } + else if(params->src) + { + return illustration(tag,params,"return src"); + } + else + { + return ""; + werror("Unknown image type\n"); + } + + return end_img_tag(ret,params); +} + int main() { - string data=stdin->read(0x7fffffff); + string data=Stdio.stdin.read(0x7fffffff); data+="\n<!--END-->"; + /* Preprocess */ + data=parse_html(data,(["include":do_include]),([])); + /* Pass 1, find links for the index */ - string data=parse_html(data, ([]) , (["a":anchor])); + data=parse_html(data, ([]) , (["a":anchor])); /* Pass 2, parse chapters and sections */ - string data=parse_html(data, ([]) , TAGS); + data=parse_html(data, ([]) , TAGS); /* Build index */ string index="<dl>\n"; foreach(sort(indices(links)), int letter) { - index+="<dt><font size=+2>"+upper_case(sprintf("%c",letter))+"</font>\n"+ + index+="<dt><font size=+2>"+ + (letter=='`'?"Operators": upper_case(sprintf("%c",letter)))+ + "</font>\n"+ "<dd>\n"+ genindex(links[letter],""); } @@ -303,10 +414,12 @@ int main() "index":do_replace, "table-of-contents":do_replace, "link":link, + "image":image, ]), ([ "box":box, "encaps":encaps, + "illustration":illustration, ]))); } -- GitLab