0707070000020066531006440001460001440000010723530360006431400000500000000004Size600 0707070000020066371006440001460001440000010574430360006414000000500000000027NameLOGO - from THE STORE! 0707070000020065061007550001460001440000010560160360011407300000700000000105Removeecho "Now removing LOGO..." rm -fr /usr/lib/logo rm -f /usr/bin/logo 0707070000020073301007550001460001440000010512550361053027000001000000001273Installecho "\nInstalling LOGO - Please wait ..." if [ ! -d /usr/lib/logo ] then mkdir /usr/lib/logo chown bin /usr/lib/logo chgrp bin /usr/lib/logo fi if [ ! -d /usr/lib/logo/help ] then mkdir /usr/lib/logo/help chown bin /usr/lib/logo/help chgrp bin /usr/lib/logo/help fi ln helpfile /usr/lib/logo ln logohead /usr/lib/logo ln help/* /usr/lib/logo/help ln logo /usr/bin/logo dir=`pwd` # Put stuff in user's Filecabinet cd cd Filecabinet if [ ! -d DOCS ] then mkdir DOCS fi cd DOCS if [ ! -d LOGO ] then mkdir LOGO fi cd LOGO ln $dir/applediff $dir/logoman $dir/logo.1 $dir/README . message -iu "Documentation on LOGO has been\nplaced in your DOCS folder.\n\nPlease press to continue." 0707070000020073311006440001460001440000010222210361052757500000600000003666Files./Size ./Name ./Remove ./Install ./Files ./logo ./MAKEcpio ./README ./applediff ./helpfile ./logo.1 ./logohead ./logoman ./help ./help/make ./help/local ./help/to ./help/edit ./help/show ./help/pots ./help/erase ./help/print ./help/type ./help/fprint ./help/ftype ./help/readlist ./help/request ./help/word ./help/sentence ./help/list ./help/fput ./help/lput ./help/first ./help/last ./help/butfirst ./help/butlast ./help/count ./help/emptyp ./help/wordp ./help/sentencep ./help/is ./help/memberp ./help/item ./help/turtle ./help/forward ./help/back ./help/left ./help/right ./help/penup ./help/pendown ./help/penerase ./help/px ./help/penmode ./help/lampon ./help/lampoff ./help/hitoot ./help/lotoot ./help/ftouch ./help/btouch ./help/ltouch ./help/rtouch ./help/cs ./help/wipeclean ./help/full ./help/split ./help/text ./help/ht ./help/st ./help/shownp ./help/pencolor ./help/setcolor ./help/setxy ./help/seth ./help/towardsxy ./help/xcor ./help/ycor ./help/heading ./help/getpen ./help/setscrun ./help/scrunch ./help/sum ./help/diff ./help/product ./help/quotient ./help/remainder ./help/maximum ./help/minimum ./help/greaterp ./help/lessp ./help/equalp ./help/numberp ./help/zerop ./help/random ./help/rnd ./help/sqrt ./help/pow ./help/sin ./help/cos ./help/arctan ./help/if ./help/test ./help/iftrue ./help/iffalse ./help/both ./help/either ./help/not ./help/openread ./help/fileread ./help/fileword ./help/openwrite ./help/fileprint ./help/filetype ./help/fifp ./help/fileftype ./help/close ./help/output ./help/stop ./help/toplevel ./help/pprop ./help/gprop ./help/remprop ./help/plist ./help/pps ./help/pause ./help/continue ./help/errpause ./help/errquit ./help/setqpause ./help/setipause ./help/goodbye ./help/thing ./help/namep ./help/wait ./help/trace ./help/untrace ./help/unix ./help/run ./help/repeat ./help/repcount ./help/cbreak ./help/readchar ./help/keyp ./help/oflush ./help/help ./help/describe ./help/go ./help/debquit ./help/memtrace ./help/yaccdebug 0707070000020072711007550001460001440000010724040360167220100000500000363740logoRt` ohs: .textoh .data st@.bss s s: OQ./HJf/H# sN$/N oP0<N@NVzH J zg pL N^NuJ f*  tg y  fr!A <`  zf  toB z < `  tf 9 R "y $1  f I# p#  9 R "y # z  g g g f. zNM @# z  f y # p# pfp` `  lfE`* .\fN,@` .%f|N,@HH./< 8N ^XJg xBHnNNX @.NM @# zB l`  lfE` .Am .Zn. N,@ am zo .Am .Zo .0m .9o xBB lHnNNX @.NM @# z <`  lf N @# zp# l <`|  lfB lN,# z`ZN,@ g gJ ~gB B ~ <`& .!fN,@g f .am .zod .0m .9oR ..gJ.HH# z ."fp# l .:fp# l .[fp# l.HH` .0m .9o ..f ..fp`p-@E`H ..fR .eg .EfRN,@ +g -fN,@ .0m .9o .Eg .eg ..g xBJg,Hn/< 8HnN 4 ./.NO2X`$Hn~/< 8HnN 4 .~NO @.NM @# z <`rE# z` .am .zo .0m .9nN,@` xBv`T ./9 zN ^*XJg "| ./9 zN ^*XJf# z "|  1`R "| JfHnNNX @.NM @# z < `NVJ gNvN^Nu. zN D:Jf$J gNBR NJ-@B `B  <09`NV fpN^Nup`NV g  g g fpN^Nup`NVHJ fJ fJ tfB J o<$9 `& y r~R r~r-`. rzp-/N ehXSm S rzm`S rzm y r~R r~r*`. rzp*/N ehXJ lp*. y hxN. rzN eLN^NuNVH<# z # B B B B B zp# &y (y $9 X e. 8N$ `~(X& z`H 9 z b@0; NJ. 8N$ `J g2p# "| '&1 ozJ lN# lB ֹ mV m`L "| J&1 "| .z 1 f(p# # z z$J zoS z` "| 1J&1pfJ lN # lB *| `P f -f`J @gNAp`HJ fN$. zN D:JfJ gNBR ./*N`. zN D:Jf`J gNBR ./*N `. zN D:Jf*J gNBR ./*N1`. zN D:JfJ gNBR ./*N`f. zN D:JfJ gNBR ./*N`0 fJ f. :T` . zN D:JfjJ gNBR p./NN X @# B .NL,p# z` . zN D:JfJ gNBR . /*NN X @# B .NL,R z`. :h/9 hN mX# z`. :j/9 hN mX`.`.NL,N#`p. R/(/< :l/< NFR @# h` p. R/(/< :p`p. R/(/< :s/9 hNFR @# h`# z.Nb`J f y  h./< :vN 1p`,. zN D:JfJ gNBR .NH`rN`p# p# z`xJ tgR J @gNAJ ?g y ? fp.N0# z`2J @f J gNJ gDJ fN$. zN D:Jf8J gNBR p.p/N?HXB .NL,`B ` U fb@0; NJg4F$p gp\fz  lgl y MSm y M"hRp` . MN >$p f. y MSm y M"hRp` . MN >$`  xt\J lfpAm pZn LN^NuJ gP y R HH$fJ ?fB `$p  y ?n ѹ ~p`N@p `J f`B ./< p/N mXP$ fF 9 g<./< p/N mXP f 9 f. ; N 1NBJm|JfJ fnp.NG$#   y R HH$p\f2  lg& y R HH$p g*  xt\J lfpAm pZn p fB `NVHNt$J @g6S rzm y r~R r~"`. rz 2/N ehX LN^NuNVH$.$n "|  .Bf .NM`  zl2 "| .NI. ;"N 1NB LN^Nu  zf j .NM`S z. /NfX @./*NMX @/ "|  qNX @`NVHN `$gp.N of`.p./< ;L/< ;I/< ;F/< ;>N _N oP | LN^NuNVJ tfJ ?g y ? fNBp# zN^NuNVp# pN\Nbp.NG$N^NuNVp.NG$N^NuNVp# N^NuNVB N^NuNVH $n&n J f`.NI./< ;hNIXS rzm y r~R r~.`. rzp./N ehX. ;zN 1R L N^NuNVH$.J f*N "| .NI. ;N 1R LN^NuNVH$.J f*Nb "| .NI. ;N 1R LN^NuNVH$.J f*N "| .NI. ;N 1R LN^NuNVH$.J f*N "| .NI. ;NIR LN^NuNVJ fNz. ;N 1R N^NuNVJ fNh. <#N 1R N^NuNVH. J fS rzm y r~R r~`. rz0/N ehX. g~ \gX ^fp^./ /< <`p+./ /< <{` p-./ /< <NP`dp*./ /< <`p/./ /< <`p\./ /< <`p<./ /< <`p>./ /< <`./< N 1N^NuNVB p# By zB lN^NuNVH $n&n .NI./< >?NIXNBL N^NuNVNTHn/< rzN BPHnN bX. .N ^"..N 3N iPH./< >\/< N D`P o n # ` . >hN 1p. rzN e`.NLNFrgNCJ l y .HN 1p y hhN. N oN^NuNV. >NN @.NM @ N^NuNV. >NN @.NM @ N^NuNVH$n g g pLN^Nu. /*N ^*X`NVH$n. >/ NXJg". >/ NXJg./< >N$X. >/ N|XJf.NL,pLN^Nu.NL,p`NVH $n  gf gp f. /*/< >/< sN D` p../< sN ^XJf. >/< sN mjX&| s`&j K L N^Nu./< >/< sN D`P`̑`NVH $n&n . >/ NXJg". >/ NxXJg./< >N$X. >/ NVXJg". >/ NDXJg./< >N$X. >/ N"XJf.NL, K L N^Nu.NL, J`NVH $n&n . >/ NXJg". >/ NXJg./< >N$X. >/ NXJg". >/ NXJg./< >N$X. >/ NtXJf.NL, J L N^Nu.NL, K`NVH$n g  f jJf pLN^Nup`NVH$n.NJg.NL,N` .NL,N @ LN^NuNVH$n. >/ NXJf.NL,N`. >/ NXJf.NL,NH @ LN^Nu./< ?N$X`NVH $n gD gJf&J`,Jg kJf.NL,N @ L N^Nu&k f.NL,N`NVH$n gJg.NL,N` .NL,N @ LN^NuNVH$n.NtJg./< ?N$X.NP @(H g4TB..NL,HnNNX @.NM @ LN^Nu&j.NM.NL, K`NVH$n.NJg./< ? N$X.N @(H g*R.NL,.NN @.NM @ LN^Nu&j .NM.NL, K`NVH$n.NzJg./< ?N$X.NV @(H g6.NL,.N iXSA.NN @.NM @ LN^Nu&J`&k J f&k.NM.NL, K`NVH<$n.NJg./< ?N$X.N @-Hgr.NL,.N iX.NK @.NNx @&H.N iXS././+N ^ZP.N iXS"kB1.NM @ L<N^NuJ f .NL,`p./NN X @*H(M&J`4.NM @)Hp./NN X @.NM @)H (H&k k J f.NM @)H.NM.NL, M`hNVH$n&n gJg. ?#N 1pNB./ NNVX @(H.NL,.NL, L LN^NuNVHJ g n Jg. ?IN 1pNBJ f,p./.NNVX @&H.NL, K LN^Nup./NNVX @$H(J&n `4.NM @%Hp./NN X @.NM @%H $H&k f.NM @%H.NL,. NL, L`zNVH p./. NN X @&H./.NNVX @$H.NL,. NL, J L N^NuNVH$n fp.`4.N @(H g .N iX$`t&J`R&k f.NL,.NO @.NM @ LN^NuNVH $n&n gJfL gJfR f gpL N^Nu g8./*NXJg. /* NXJfpp` g Jg gp`  g* f2. /+ *"* N SXJg*p` *gp`t./*N ^*XJfp`Zp`TNVH $n&n ./ N X$.NL,.NL,JgN @ L N^NuN @`NVH $n&n g g\ n.N iXrfN. n hHH/NX-@`^ nJm l. n (0`B`0B`*B&n `./+NXJgR`&k f.NL,. NL,.N @ L N^NuNVH . ?/.N{X @-H.g G f n-h` n ("( N X-@Jn./< ?N$XJ f. /< ?N$X. N @$H gt.N iX".o./. /< ?NIPNB .SrB..NL,. NL,HnNNX @.NM @ L N^Nu-n&n ` g &k Sf f./. /< ?NIPNB.NL,.NM @&H. NL, K`NVH $n g  b@0; NJ6BZL N^Nu&J g.NJ g p .NHx&k `.NI`./< ?HnN D`P`D. /*/< ?HnN D` p..HnN ^XJf. ?HnN mjXHnNIX`\NVH$n gJf$p[.NHx.Np].NHxLN^Nu.N`NVH$n.N.NL,LN^NuNV.NS rzm y r~R r~r `. rzp /N ehX | N^NuNV.N | N^NuNV.N0S rzm y r~R r~r `. rzp /N ehX.NL, | N^NuNV.N.NL, | N^NuNVH$n. ?/ N{X @$H g g./< @ N$X# .NL,LN^NuNVH $n&n .N.N. p /N .XB L N^NuNVH $n&n .NR.N.NL,. p /N .XB L N^NuNVH $n&n .N .NB L N^NuNV.N. N. NL,B N^NuNVH $n&n g g./< @N$X./*N bX @-H.f./< @ NIXNV.NL,.NO @.NM @ L N^NuNV. @5/.NlX @ N^NuNV. @7/.NPX @ N^NuNVH $n.NE @&H.N _.NL,.NL, | L N^NuNVH$n.N. N dB | LN^NuNV&H $n.N~. /<Hn0N /P y ( g(B J g L N^Nu. @9NN`.B J g0Hn0N iXXSC0B1Hn0NNX @.NM @`Hn0N iXXSC0]y x+B9 x-y ,A0# N @&H#, + x K`TNVp./.NX @ N^NuNVp./.NX @ N^NuNVH$n. @:/ N{X @$H g f-j` *"* N X-@.NL,.N C | LN^NuNVHJg.S rzm y r~R r~r?`. rzp?/N ehX. rzN e.Hnp/N mXP-@Jnp-@ .SC]y xB9 x-y A# N @$H#  x J LN^NuNVp.N0 @ N^NuNVp.N @ N^NuNVH. ?N b. ?N (v.HnN mXHnN iXXSC]y xB9 x-y A# N @$H#  x J LN^NuNVH p*.NK @&H'n B'y 'y z'y 'y 'y t 'y l$y x( f"'|& ?# ?NNL N^Nu.NE @$H.NL,. @?/*N mjX.NM @'H.NL,`NVp# B tB lB9 x y ?R y ?f B N^Nu y ? h# `NVH y ?# # z y ?# #  y ?# t#$ l y ?( x g y ?.NL$y ? J# ?.N\LN^NuNV. @A/.N{X @-H.g G f n-h` n ("( N X-@Jl./< @HN$XJf. NL,B R./. NX.NL,N^NuNVJ ?f. @ON 1N y ?.NO @.NM @ N^NuNVHJ tf J gp. @hN 1p$y MJ g y  *f y $h g$J pf j./9 /< @pN 1pP. @N 1pR J @gB @J tfJ gp./0.HЀ=@0n46.` 9 BJgX g fpJ.g00Z-@0HЀ"| 6E0HrЀ"| C$01F@R`,J.g:0Z-@0HЀ"| 6E0HrЀ"| C$01R`0Z-@0HЀ"| 6E0HrЀ"| C$01R`J.g:0Z-@0HЀ"| 6E0HrЀ"| C$01R`r0Z-@0HЀ"| 6E0HrЀ"| C$01R`80Z-@0HЀ"| 6E0HrЀ"| C$01F@RJBo RD0n@`GFEf\LN^NuNV. /<W/.N lPrf . F.N n BP n 1|  n 1| n 1|, n  . /<W/.N lPrf . FKNJp./< FsN 1pXN^NuNVN NN^NuNVHn/<W/9 t$N l rf . FyNBn=| =|h=|,nHn/<W/9 t$N l rf . FN. t(/9 t$NXN^NuNVHn/<W/9 tN l rf . FNf=|=|<=|h=|nHn/<W/9 tN l rf . FN. t/9 tNtXNlN^NuNVJg./< G/< rN 1Pp.N oPN^NuNVBJ Chgp-@-y sB`XR nJf .T.N @# Ch-H-y s`J-P`R n =f nB. n/N ^*XJg n= nX"n X nJf. /./< GHnN D` HnN:X @"nX" nB f . sN k # Ch sN^NuNV.N iXR.N @-H./N mX n N^NuNV.N it @-H.f. G/< rN 1Xp.N oP n N^NuNV. G./< HN$X&n`p./+NMX @/NX&k f` n.N @$H./< H"/ NPp./< H'/ HnNFR p./HnN mFP-@hlp./< H:/ /< H+HnNFRp./HnN mFP-@hlp./< H>/ HnNFR .HnN 0X-@hJl ./< HBN 1pX.NL,NB.h/<LNGXp./< HS/.hN o4P.N iX./ /.hN o4Pp./< HW/.hN o4P.hN lBp./< NGX. Hn/< H^HnlN D` HnlN _X.NL,J fN L N^NuNVHJ9 Gf. HkN bJ @# tl.g G` | Hr-H. Hu/< GN mX./< GN mjX. H{/< t:N mX./< t:N mjX./< tXN mXJ lpt. y hxNR Bt. rzN e.p/N `X.p/N `XN `-@ gJg`. HN 1pNBJ tlg"p./< /< tX/< tXN _ p./< /< tX/< GN _ p./< /< tX/< t:N _ . t:/< G/< HN 1pPp.N oPHnN oXf .g. HN 1pNB. H/< N bX @-Hf. HN 1pNB./<&NGX`T. H/ NX @/N ^*XJg. HN 1p.N&T`R  g  g.N @-H./< IN 1pX. I#/./< IHnN D` . I'HnN bX @-H.fHn/< I)N 1pP.N&Hn/< I9/.N 1 ./<HnN /P @ gRHn/< I`. rzp>/N ehX. rzN e$| tpp-@-@N,-@r g xVe\`HNVH$n f./< IN$X Jg f>(jp./< I/ HnNFR . IHnN bX @-HfRp./< I/ /< IHnNFR. IHnN bX @-Hf./< IN 1pXNB./<&NGX nSm n"hRp` .N >.NErf.N dp./< NG`^&J`D.NM @.NS rzm y r~R r~r `. rzp /N ehX&k f`./< IN$X.NL, | LN^NuNVH $n&jJg -g +g 0m 9o .f -g +g .fJ+g .fp..A/N ^XJg`pe.A/N ^XJfpE.A/N ^XJfp..A/N ^XJfp+ +g -f:R`6 .f0pe.A/N ^XJf>pE.A/N ^XJgV`$Rg> 0m 9o eg Eg .g pL N^Nu eg8 Ef`,p`NVH $n&jg .g eg EfpL N^Nup`NVH $n f./. N$X Jgl gp gf.N8Jf./. N$X.NpJgPHn/< J/*N 4 .NO @.NM @&H`T./. N$X J L N^NuHn/< J/*N 4 ./.NO2X @.NM @&H.NL, K`NVH$n g f J LN^Nu *N XZ-@-A.NL,./.NO2X @.NM @`NVH $n. J / NX @$H g f *D.NO` *"* @-@-A./NO2X @&H.NL,.NM @ L N^NuNVH$n&n . J/ NX @$H. J/ NX @&H g f g g.N @$H.N @&H g f *Ы-@.NO`,. /+ *"* N S@X-@-A./NO2X @(H.NL,.NL,.NM @ LN^NuNVH$n&n . J/ N:X @$H. J%/ N(X @&H g f g g.N @$H.N @&H g f *-@.NO`,. /+ *"* N SX-@-A./NO2X @(H.NL,.NL,.NM @ LN^NuNVH$n&n . J0/ N`X @$H. J8/ NNX @&H g f g g.N @$H.N @&H g$ f. *N ^-@.NO`,. /+ *"* N VX-@-A./NO2X @(H.NL,.NL,.NM @ LN^NuNV./< J@NIXNBN^NuNVH$n&n . JZ/ N`X @$H. Jc/ NNX @&H g f g g.N @$H.N @&H g4 f,Jf . JlNd. *N \-@.NO`V. I/9 I +"+ N SXJf . JuN. /+ *"* N U&X-@-A./NO2X @(H.NL,.NL,.NM @ LN^NuNVH$n&n . J~/ NFX @$H. J/ N4X @&H g g./< JN$X g g./< JN$XJf . JNJ. *N l-@.NO @(H.NL,.NL,.NM @ LN^NuNVJgN%`N% @ N^NuNVH $n&n . J/ NdX @$H. J/ NRX @&H g f g g.N @$H.N @&H g f *o p`. /+ *"* N SXJnp-@.NL,.NL,.N, @ L N^NuNVH $n&n . J/ NX @$H. J/ NX @&H g f g g.N\ @$H.NR @&H g f *l p`. /+ *"* N SXJmp-@.NL,.NL,.Nh @ L N^NuNVH $n&n . J/ NX @$H. J/ NX @&H g f g g.N @$H.N @&H g( f *o2.NL, J L N^Nu. /+ *"* N SXJn.NL, K`NVH $n&n . J/ N&X @$H. J/ NX @&H g f g g.N @$H.N @&H g( f *l2.NL, J L N^Nu. /+ *"* N SXJm.NL, K`NVH$n gD Jg6 g g .NJg.NL,N% @ LN^Nu.NL,N%`NVHN 3rd.N \r .N l.NO @$H.NM @ LN^NuNVH$n. J/ NX @$H.NJf./< JN$XJn./< JN$XN 3.N l$.NL,.NO @.NM @ LN^NuNVH$n. J/ NFX @$H.N, @$H. /*NdX-@-A.NL,./.NO2X @.NM @ LN^NuNVH$n. J/ NX @$H.N @$H. /* 9 I"9 IN VX-@-A./NX-@-A.NL,./.NO2X @.NM @ LN^NuNVH$n. K/ NBX @$H.N( @$H. /* 9 I"9 IN VX-@-A./NJX-@-A.NL,./.NO2X @.NM @ LN^NuNVH$n&n . K/ NX @$H. K / NX @&H.N @$H.Nv @&H. /+/* /*N -@-A".N X-@N XZ./ .".N SXJf .NO`./.NO2X @(H.NL,.NL,.NM @ LN^NuNVH$n. K/ NX @$H.N @$H. /*NX./ 9 I"9 IN VX-@-A.NL,./.NO2X @.NM @ LN^NuNVH$n. K/ NFX @$H g f Jf$p`". I/9 I *"* N SXJgp$.NL,.NX @ LN^NuNVH$n. K/ NX @$H g f J LN^Nu *"* N X$.NL,.NO @.NM @`NVH$n. K/ NhX @$H g f J LN^Nu. I/9 I *"* N SXJm. I/9 I *"* N S@`. J/9 I *"* N SXN X$.NL,.NO @.NM @`vNVH $n f./< K$N$X  bf@0; NJ6./< K*N$X&j`:./< K0HnN D`P`. /*/< K4HnN D` G.N iXrg./< K7N$X.NL,HH.NO @.NM @ L N^NuNVH$n. K=/ NX @$H g f$*` *"* N X$Jm o./< KBN$X.NL, @B.HnNNX @.NM @ LN^NuNVH $nJ Mf. KHN 1pNB. Kq/ N{X @$H g g./< KtN$X$*.NL, y M&h`$ f# # L N^Nu&k f./< KwN 1pXNB`NVH $n g g./< KN$X&j.N @ f .Nl @ g.NL,N%`.NL,N% @ L N^NuNVH<$n&n J Mf. KN 1pNB g g./< KN$X jPf. KN 1pNB .am .zo./< KN 1pXNBJf(p .NK @(H&B()|L<N^Nu(S`8. T/(N ^*XJf.NI. LN 1pNB*L(l fp .NK @+H(H`NV. M /.NMX @/NX.NL, | N^NuNVH $n&n `& S./ N ^*XJf K L N^Nu&k f֑`NVH$n. M / NX @(H f&y `(Jg ./ NX @(H g L LN^Nu&k& fԑ`NVH$n g g./< L:N$X(j.Nr @&H f.N`6 f.NI. L@N 1NB.NL,.NM @ LN^NuNVH.NK @$H$ L y L!J# Lp# MLN^NuNVH $n&y `( k./ N ^*XJf K L N^Nu&k fԑ`NVH $n&y M`(Jg S g. LON 1pL N^Nu&k f.NM @'H.NL,S f y !y z y !y Jy zfp# `NVH<$n&n g g./< LvN$X*j-M`: am n zo& n 0m 9o./< L{NIXNBR nJf.N @(H g< g .NL.NL,.NM @)H.NL,L<N^Nu.N @(H fUf. LN 1pNB .am .zo./< LN 1pXNBp .NK @(H.NM @()y xX# xX`bNVH$n g g./< LN$X(j.ND @&H f.NI. LN 1pNB.NL,.NM @ LN^NuNVH $n&y xX`& S./ N ^*XJf K L N^Nu&k f֑`NVH . $n gfpL N^Nup`NVH $n&| x\` Am Zn · xodg. NHH/NXJgB | x\ L N^NuNVJ @g./< NN 1pXJf. NN 1pN^Nu.N k `NVfH n$hp2.NK @&H'y &p'@p'@*'y LB L'y MB My 'y MB MB# R LB .N @-Hg..NL, n# LR n-h # M`. M/<&NGXp./< N/ HnxNFR . NHnxN bX @# Mfhp./< N/ /< NHnxNFR. NHnxN bX @# Mf(p./< NGX./< NN 1pXNBp.NK @-HB.NM @"n#H.NL,Ax-H` nR y MSm y M"hRp` . MN >@n f nR nBHnxNNX @.NM @-H n!y  nr!A n!n nBJ g y  # # M n-h`v .:nfAx-H` nRn nR@n g f nBS. MHnxNNX @/NMX @/NVXR  nR@n :gx gp` n f-y ttp# t-y lpB ly xoB9 x.NK @# LBp# M"y L#p -@` g fN.jNJg@ y z-hp.NK @(H()y L)y M n)h n!L 9 MR M"y L#j  MfN 9 MR M"y L# z.jNJg . zNM @# z. zNL,  MfN 9 M"y L#-njN-@jrf 9 M"y L# y LB#t t#p lo x. MN dp./< NGX`# L y LJf n!y LLN^NuNVB L y !y * y !y "B  y  M # M M B M y !y # L B L y !y  p# B Mp#  y !y t.p# t y y J gNN^NuNVH $nJ g.NJ Mg. y MS y MJf.NL y M. NL y MJg P"y M!i` y M#  y MJg h"y M y M-h` n-h .NF-nJf-y f`z-P nJft "n-q.NJg:p~f n# .N-y tR "n.NL`* f.N. MN&y # # # L-y M# M K#. t-y M # M +HH# # M# # z#* #" +HH# #& .N`@ n-hJg n.NL n g .NL.N-nJf`p~f n# .N-y t`Rp~f n# .N-y tR`\ n-hJg n.NL n g .NL.N>-nJfL N^NuNVH $n.N @&H.N iXr o./< O NIXNBp./< O=/ HnNFR p./HnN mFP$m".N lB.NI. OAN 1NB.HnN 0X$l./< OVN 1pXNB./<LNGX.NL,. N iX./< /N o4P.Nvp./< NGXL N^NuNV. O~/< OgN bX @-H.f. ON 1pN^Nu./<&NGX nSm n"hRp` .N >.NErf.N dp./< NGX`NVH Jg n g./< ON$X n.N @$H&| `. / N ^*XJf`Jg./ N ^*XJfJf./< ONIXNB.N iXr op./+ /< O` p.//< OHnNFR . OHnN bX @-Hf./< ON 1pXNB`N./<&NGX nSm n"hRp` .N >.NErf.N dp./< NGX.NL, | L N^NuNVH tNCB J Lg N&p.N$| M` Jg .NL,RpdmJ g. NLB J @fJ g6J g.J pf&J tfJ fB9 xNAL N^Nu&y MJ g y  *f y &h gJ pf k./9 /< PN 1pP`NV`N@bJ ?fJ g p.N`B9 xJ gp# B pB B lB tB zB ~p# B LB MB B B B M B MB B MB N^NuNVJ gNBR N^NuNVH$n.N dNBLN^NuNVH.N lBNBLN^NuNVHJ Mg 9 S.ND y M h.NIJ M g y M g y M ./< P3NIX y M $h` g&./< P:NIX$j f` LN^NuS rzm y r~R r~r ` . rzp /N ehX` . PBN 1R `NVH$nJ MgL  oS  9 S.NF y M h.NIg./< PKNIXLN^Nu. PXN 1`NVH$.`& y r~R r~r `. rzp /N ehX SJg S rzm`LN^NuNVH$y P``$./.N ^*XJf J LN^Nu$j fؑ`NVH$n`$./. N ^*XJf J LN^Nu$j fؑ`NVHJg n g./< PdN$XJ g n g. /< PjN$X n.N.N" @$H f^p .NK @$H n.N iXR.NK @-H n.N./.N mX$B%y P`# P`&j n ./ NX @(H gB.NL.NM @)H.NL,. NL,.NL,LN^Nup .NK @(H n .N iXR.NK @-H n .N./.N mX()K%L`rNVHJg n g./< PpN$XJ g n g. /< PxN$X n.N.N @$H f./< PNIXNB&j`R n .N./N ^*XJf. g)k`%k.N\.NL.N\` (K&k f f. /./< PNIPNB.NL,. NL,LN^NuNVHJg n g./< PN$XJ g n g. /< PN$X n.N.N~ @$H gP&j n .N./ NX @(H g,.NL,. NL,.NM @ LN^Nu.NL,. NL,`NVH$y P``.(R&j`.// /< PNI &k f$j fLN^NuNVHJg n g./< PN$X n.N.N~ @$H g&j f.NL, LN^Nup./NN X @(H-L`|.NN @.NM @)Hp./NN X @.NM @)H (H.NM @)HJg p./NN X @.NM @)H `B (l &k f.NL,.NM @`BNV. P/9 P .". N SXJl& .". @-@-A./NX@N^Nu. /.NX`NV. /. .". N VX-@-A./ 9 Q"9 QN VX. Q /9 QN S@X./.N VX. Q/9 QN S@X./.N VX. Q/9 QN S@X./.N VX. Q$/9 Q N S@X./.N VX. Q,/9 Q(N S@X-@-A./. 9 P"9 PN VX. P/9 PN S@X./.N VX. P/9 PN S@X./.N VX. P/9 PN S@X./.N VX. P/9 PN S@X./ .". N VX./.N U&XN^NuNV. Qd/9 Q` .". N SXJl. /.N&`f. Q\/9 QX .". N SXJoJ. /. 9 QH"9 QLN U&X-@-A./NX./ 9 QP"9 QTN SXN^Nu. Q4/9 Q0 .". N S@X-@-A. Q. Q|/9 Qx .". N SXJl 9 Qp"9 QtN^Nu 9 Qh"9 Ql`. Q/9 Q .".N SXJl. Q/9 Q .". N SXJlF./. .". N U&X-@-A./NX./ 9 Q"9 QN S@X`h .". @./.N U&X-@-A./NX./ 9 Q"9 QN SX`. Q/9 Q .". N SXJl6 .". @./.N U&X-@-A./NZX@`./. .". N U&X-@-A./N(X`NV. Q/9 Q .". N SXJl .". @N^Nu .". `NVH-| Q-n-n -n-n. Q/9 Q .". N SXJo. /.N X./ .".N VX-@-A. Q/9 Q".N SXJop-@-y Q-y Q`6. Q/9 Q .".N SXJl.p-@-y Q-y QHnNXJfp"`./.N8XLN^Nu. Q/9 Q .". N SXJf.. Q/9 Q .".N SXJo: 9 Q"9 Q` .".N X$ N XZ./.N SXJgPp-@-y Q-y QHnNXJfp./< Qp/N o4Pp!# s .".`. .". @-@-A./N X./ .".N VX-@-A./N8X-@-A j DD`g .". @` .". `NV. RL/9 RH .". N SXJlXp-@-| R-n-n HnNXJfp./< Rp/N o4P-y RP-y RT`t. R\/9 RX .". N SXJffp-@-| R-n-n HnNXJf.p./< Rp/N o4P-y R`-y Rdp!# s .".N^Nu-y Rh-y RlHn/. /.N @8 -@-A . Rt/9 Rp". N SXJlS-y Rx-y R|./. .". N S@X-@-A./. .". N SX./.N U&X-@-A ./". N S@X-@-A ./". N VX-@-A./ 9 R"9 RN VX. R/9 RN S@X./.N VX. R$/9 R N S@X-@-A./. 9 R("9 R,N VX. R4/9 R0N S@X./.N VX. RP-@-At`L./. .". N U&X./ .".N S@X./ 9 S"9 SN VX-@-ASl .".`NVH. S/9 S .". N SXJl,p-@-| TN-n-n -y S-y T`L. T /9 T .". N SXJoVp-@-| TR-n-n -y T-y THnNXJfp"# s .".LN^Nu. T"/9 T .". N SXJl .". @` .". -@-A. T/9 T".N SXJl 9 T&"9 T*`. T2/9 T. .".N VX. S/9 SN S@XN X$ N XZ-@-A .".N XN XZ-@-A./ .".N SX-@-A. T:/9 T6 .".N VX./ .".N SX-@-A./.".N S@X-@-A. TB/9 T> .".N VX./ .".N SX-@-A. TJ/9 TF .". N SXJl .".@-@-A D$./. .".N VX-@-A./ 9 S"9 SN VX. S/9 SN S@X./.N VX. S/9 SN S@X./ .".N VX-@-A./. 9 S"9 SN VX. S/9 SN S@X./.N VX. S/9 SN S@X./.N VX. S/9 SN S@X./.N SX./ .".N U&X./ 9 S"9 SN S@X-@-A R.//.N >P`NVpN^NuNVH-|A-H-H||A-HHn//.N D $ nBHn/./. /.NLN^NuNVH $nt-BVBRp). `  .VZ-@HJ fSHJ gp`p..MHH//.HN P-@DJmR. TV/.DNlXB@`Tp. .@R//.DNjP. T[/.DNVXp). .@N ^CZA./.DNVXR@ .@Vm .VT-@@p./.@/.DNjP. T^/.DNVXp. .@R//.DNjPJ g. T{` .VZ-@HJ fSHJ gp`p..MHH//.HN|P-@DJm@. T/.DNlXB@`Tp. .@R//.DNjP. T/.DNVXp). .@N ^CZA./.DNVXR@ .@Vm .VT-@@p./.@/.DNjP. T/.DNVXp. .@R//.DNjPJ gp. T/.DNVX`Z .V\-@HJ fSHJ gp`p..MHH//.HN^P-@DJm". T/.DNlXB@`Tp. .@R//.DNjP. T/.DNVXp). .@N ^CZA./.DNVXR@ .@Vm .VT-@@p./.@/.DNjP. T/.DNVXp. .@R//.DNjP. U/.DNVXp. .@T//.DNjPJ g(. U` .VT-@HJ gp`p..MHH//.HN,P-@DJmB@`Tp. .@R//.DNjP. U;/.DNVXp). .@N ^CZA./.DNVXR@ .@Vm .VT-@@`t .V\-@HJ fSHJ gp`p..MHH//.HNxP-@DJm<. U>/.DNlXB@`Tp. .@R//.DNjP. UF/.DNVXp). .@N ^CZA./.DNVXR@ .@Vm .VT-@@p./.@/.DNjP. UI/.DNVXp. .@R//.DNjP. Uf/.DNVXp. .@T//.DNjPJ gB. Uz` .VX-@HJ fSHJ gp`p..MHH//.HNp09 V./ N Xp./ N X9 HHgD "| q`:p # s.N k J9 gJ9 g.N lBpL N^Nu | rz%H@ "| #.N 0.N\NJgH `NVH<$n4.6.8.:.45B*g"0E5@0D5@A LpLN^NuS rlm y rpR rpp` . rlN >-@ g. 9 xf 0` y xR x`$j gb gg y xB# x x`\J*gzJ9 xg B x *f Vp*`>p*.N^ @# x *f.N iXR VJ9 VgS9 V y xR xHH`$j`NV xN^NuNVp. Ѐ"| g01"y iA N^NuNV|# \ xJ g. iHnN mX. iHnN mjXHn/9 N ^*PJg# V x# \ x3 xp./<N 0`X @# xrp./<N 0`X @# xzp./<N 0`X @# xv. iHnN mX. iHnN mjXHnNFXJf. N. xN k . xvN k . xrN k . xzN k N^NuNVT. i/.N bX @-Hf0pN^NuHnXHn\Hn|N Xf Hn\N(X./<Hn|N /P @ g .#|f`.N dJ xgp`p`NVR. i/.N bX @-HfFpN^NuHnXHn\Hn|N Xf .\N=@Vm0.VH./.`NpQ./ .N ^X"nCYA//. NPp"."n)XpN^NuNVNJgH=|Hn/<W0. H/N l -@JmpQ./. HnNP .N^Nu0. H.N -@JmpQ./. nAL/NPp`NV0. H"| -qJn m n lJfp # sp-@ .N^NuNVB`$ ."| 1".f .N^NuR mp`NV-| n-H-H||Hn/. /.N D nBN^NuNVA-HHn//. N Hn0. H/NVPN^NuNVA -HHn//.Nj Hn09 H/NVPN^NuNVH$n 0. H.N -@Jl pLN^NuJ9 g*J9 f./ N .ZX` n.@/ N .Z`JgHH./.NX`p`NV0. H.N -@JlpN^NuJ9 g:J9 f..HH/N .X` n.@.HH/N .X.HH./.NX.HH`NVNJg".W0. H/N lXJltpN^Nu0. y g`H.N -@Jm09 H.N -@Jmp./.N X.N.N hp./.N X3 0. H`NVHNJf09 HLN^Nut`< H"| Jg(Hn/<W/N l Jm .g `Rpmp`NVH $n J9 gHn/<W0. H/N l Jl pL N^Nup0.r..N m5@p0.r..N m4p0.r..N m5@p0.r..N m5@5n`B0. H.N -@Jmz&n45S0+ k5@0+k 5@5kp`JNVH $n 8*:<*J9 gHn/<W0. H/N l JmJp0r..N ^=@p0r..N ^=@0*Hr..N ^=@0*Hr..N ^=@=FHn/<W0. H/N l -@J9 gz8F0. H.N -@Jm&n0+ k40+k 6~0*Bf0*Cg~SfkgRp0rr2+gJg 6*4*p0fTCTBp0r2Ё29 Hbp0r2Ё29 Hc pL N^NuHHr€f.N .N (J9 f.NHHr€g.N 7F0*H.0*H/p0/p0// NHHr€g8.N 7k J7kLp09 V./ N Xp./ N X`.N .N 00. H.N\p`"NVJ9 xfNTNN^NuNVJ9 xg. yn/<Tp/N lPB9 xN^NuNV. N. NN^NuNVJ9 xf0p.N ljJg". yn/<Tp/N lPJmR9 xN^NuNVp.NJmR9 xN^NuNVJ9 xfpN^NuA"| yn 0nnNJgn`nBn||Hn/<T/.N l `NVHNJfJ9 xf $<%`p09 yrrS b(@0; NJ "&*2:BJRZbjt`Rt2`NtK`Jtn`F$<`>$<`6$<`.$<,`&$<X`$<`$<`$< ``$< LN^NuNVJ9 xgp09 yprfpN^Nup`NVHt. jvN bJ @$H f$| j{Jf$| jt.HnN *XrgRB. jHnN mXJy f. jN "3 y n 3 ` y0 o30 Jy f. jN "3 y n 3P ` y o3 . jN "3 lBy Np.//9 N $P @ OfB9 cB ` c.HnN X./< NN mX. Nv. Nl09 V@3 J3. LJ g$Jy fJ ng3 J L J`3* JJ f y lp`p JBg pLN^Nup`NVH&| j$| i.N #"ZTJf&| j-| x(| jHn/ N #rP @"\"TJfJ xg y xHH`p J fJ g# # LN^NuNVH. S rzm y r~R r~LN^Nu. rz0/N ehX`NV.|p//.N 'PN^NuNVJ9 jtgJ gJ zfN^NuB9 jt. zN`NVJ9 jtf jt. NN^NuNVBy 3 J g . NjJ ~g. ~`JJ fJ9 cgBJ g. `p.//9 N $P @.NJ rg<. rN N^NuS rzm y r~R r~r `. rzp /N ehXN=y ` y r~R r~r `r. rzp /N ehX`\=y `& y r~R r~r `. rzp /N ehX0.SnJ@g S rzm`J9 f . jN 10.SnJ@g"J vg. vN$S rzmh`NJ g. ` J9 cgp.//9 N $P @.N`(J g =y ` . N0.SnJ@fN`NVH$n=jf$ . m .~n.HH./ N`0.H b2@0; NJBn .f5|%| k\D5| LN^Nu.HH./ NjX` .[f5|%| lXD`.HH./ NX` .=f %| mTD` .;fRj 0* HЀC$Bq|0 .0m2 .9n*Rj 0* HЀC$A.HA005|`H.HH./ NX`2 .0m@ .9n80* HЀC$A2 00* HЀC$A.HA0P` .;f(Rj 0* @m.N0* HЀC$Bq`.HH./ NX`NVH$n0* R@5@"Bj .@m .~o.N*LN^Nu..HHr@"jD qNBj`NVH<$n6*J8*LA.p0/p0/NPJf`0R@5@Lj.HjN4p0*p0r2Ѐ"jP"QG0Bg<6Hp0"jTI Tf8`L`.NhL<`0R@>0E=@J@lD@=@n0H2HЁ2Hl. pp//9 N 'Pv4`PJ gH09 S@E=@0H2.HЁT2Hl$. pp//9 N 'Pt09 S@6<0D>J9 dgEl>0H2HRnDo,J9 bf$J ffp .NJ9 dg p .NRCtEl8RCp .NJy yl`. pp//9 fN 'P`p.NTDoJy ymSBJ fg`ĶEo&SC. pp//9 N 'PJy yl`Dl~0H-@0HЀ"y "Q=qp0.r29 f p0.r`$J g. pp//9 N 'P`p .NRBJy yl y yB09 yHLN^NuNVH4. Jy f>09 @6By 0F@C8gJ g. Nv`LN^Nup0 gJ g . Np0gJ g . Np0 gJ g . Np0 gJ jg . jN0F@@Cg0F@B8p0 gJ g. N`Bp0 gJ ng. nN`Bp0gJ g. N`Bp0 gJ g. N`By `NVH t n0("Hi6`0RBr2 n hP.N k Ce n.PN k n.TN k nBP nBTL N^NuNVH $n0*j6p.p0/N 0`X @%HPgp0.N it @(H%LTgl0*R4&jP`p0Ѐ.N it @&g88XX0SCJ@fA.A/NX L N^Nu.N k Pb.TN k .PN k p # sp`NVH<$n*f.HHgp09 J`Lp%f nRHH$  %g +gB .gH 2g 3g >g Bg Dg dg~ igp ngT rfp-@`LB9 y nRHH$fP. y/ N mX | y LN^Nu `p` JgL . `Jp m,pdm d0pd. N l&  0p . N l0` .&`` nRHHo nRHHր`:R`2 nRHHրJgpg p gp fJJfJ gnf6 m,mf$ lHnNX @$HR J LN^NuNVH$n$. p:m0 *j DD`g <m` <nmԀ Ъr.N l" LN^NuNVH n.Q N l-@ n.Q N \-@Jl QSp<. .N l# yp<. .N \&p<. N l# yp<. N \# y .pr.N l# yJmbvF`, j DD`g <m` <nR j DD`g <m` <n".l`:vF`0 SJj DD`g <m` <nѮSJm# y$.# y j DD`g <m` <n nfp# o$v` 刔R "| o lp# o$ R# y# yB y | y L N^NuNVH$| y&| o`Jf n ("ЀЁ"| ozG$| yR nI "ЀЁ"| oG./ NX @$H $d./ N~X @$H $d./ NhX @$H $d./ NRX @$H n dm |2|0T n (d./ NX @$H | y LN^NuNVH$nR m p . . N \r .N l0` p . . N l0 J LN^NuNVH . oN bJ @$H gJgt&y oHHgHH`p Sf -fp`p-@gRt` Ѐ"ЁHHЁr0$ 0m 9oJg D$ "逐"逐# oJgp`p# og &y otHHgHH`p SfL N^Nu0<)N@dN oFNuNVH$n Sm jR. 0LN^Nu.p. /N ehX`NVH$n t* HHrrf"Jg jf Jf* HHrD€f.N glJf`pg pLN^Nu* HH"| s(q&j &n.N frf `.p//./ N 3V @-Hg S&תJlp` (* HH"| s 1l.N iԃJg$* HHrD€g.N frgz `<׮`RNVH$. $n-nS` LN^NuJoJn".N >rf ng`SRl ` &.p //*/.N 3V @-Hg &׮תJlp` (* HH"| s 1l.N iJf`Z nB n`@NVH . .N ^-@.N it @$H f L N^Nu&J .V"$`BSl J`NV.N k N^Nu0<N@dN oFNuNVH $n N d @&H g4BB+ n 'H'HHH ag& rg wg* L N^Nu `p.p//.N m4P *+f + + K`NVHA -H. rz//.N DP$9 rg pLN^Nu `NVHA-H.//. N DP$ n( g pLN^Nu `NVH t9 rHHrrf.J rg& y r~ rf*J rzf"9 rHHrD€f. rzN glJf`pg pL N^Nu9 rHH"| s&q$y r~ &n. rzN frf `.p//./ N 3V @-Hg & rz׹ r~J rzlp` 9 rz(9 rHH"| s 1 r~l . rzN iԃJg6 y r~| 9 rHHrD€g. rzN frgT `׮`& /o("/ "o oSвWg fBNu Nu`NV# oN^NuNV.ANm 9 oN ^09# orN^NuNVA -H././< rlN 4hPN^NuNVA-H./. /.N 4hPN^NuNVH$nA-H|-J J-H.N iX-@|./. HnN 4hPLN^NuNVH $n&n Bp$g | qU0(gFSm jRp`.N >-@"| qU1f./.N nXrg`p%f p$p%f>Sm jRp`.N >-@谂gn./.N nXrgt`vp*f Bp$`p-@B` .Ѐ"ЁЂr0-@p$ | qU0(fJf-|-B rlg hfp$Jgp[f Hn/ NP @&H f pL N^Nu | qU0(gpl-@  $pcgHp[gBSm jRp`.N >-@"| qU1f./.N nXrgjpcg psgp[fHn/ Hn/.//.N>`Hn/ /././/.N:-@g .ѮJg Jf`Jg .`p`NVH $nGBBBBBB . d bZ@0; NJ.***JJJJJJJ2JJJJJ.JJ6Rv `v`vSm jRp`pL N^Nu.N >$  +g -f$RS` jRp`.N >$Sm | qU0(fpfj0(g` | qU0(gp0` | qU0(gp7`pW"-A lJgJf. N ^Ю-@R`zJgp.f .RJg^pegpEf^JgV .RJfH Sm jRp`.N >$ | qU0(f p+gp-f Sm`JgJgJgrBHnN ;2X-@-AJg".@-@-A lf nrӐ P h !n`` .".N X"nX"Q"i"`@Jg g .D-@ lg< hf2 nrӐ P h0./N nXrf nB .` nrӐ P h `NVH<$.&. (.$n&nJg nrӐ P h`(H-Lpcf fxSm kRp`.N >*pg0psf | qU0Xfp[fJ2XfJg RSnpgJo./N nXrf nBf pLP-@-AJl".@-@-A .".LN^NuNVH $nJf.N h(* f* g * HHrD€g&&| rl`+ g.N e se%j* gp`* HH"| s 1./** HH/N mXP$Sm jRpL N^Nu g ` * g* Bp`NVH$.g . p /9 p .". N SXJf .". LN^NuHn/. /.N @8 Jot Ю o>p.N iP/N \X`(. p/9 p .". N VX-@-A ppbpN XZ./ .". N V`p Ю l: 9 p"9 p`J. p$/9 p .". N VX-@-A pⴀep"DN XZ./ .". N U&X`NVH$n . fp.N iP/N \XB. p,/9 p( .". N SXJf .". LN^Nu. p4/9 p0 .". N SXJo* .". `,R. pD/9 p@ .".N VX` .". @-@-A. p "| rd q%HA&H* HH"| s#%jBLN^Nu "| A%HA(H* HH"| s#`* HH"| sA"jC .N ljJg `NVp.N CN^Nu0<'N@NuNVJfpN^Nup.N D -@. Dp/N `X @-HBBJgB .c .R`* .-@-nBS.p/N `X. zN D:Jf.N D N D(p.N D -@Jm.p/N `XJn JlJg .Ю.N D .Ю`NVp./< zN DJXN^Nu0<N@Nu0<N@dN oFBNu o HBNu o /fpL.NuNVH-| n-H-H||A-HHn//. N D $ nB LN^NuNVH<$n&nBB.G(J`RHH$gp%f -@"gtѮ "f&Sm kR`P.p/N ehX`> + f."/ /+N ]P @"'H`./."p// N [ Jf+ f .L<N^Nup-@-@-@-@-@RHH$  g$ #g" +g -fR`R`R`R`p*f$pѮ n -hl .D-@RR`Bp0fRB` .Ѐ"Ё"0Ё-@RHH$ | qU0(f .gJg .`p-@`VR *fpѮ n -hR`8B` .Ѐ"Ё"0Ё-@RHH$ | qU0(fBHH hg lfRR-| ppLAG-HHp-@-@HH$ Jgv Eg Gg XgT cg dgL eg fg gg og* sg ug xfp` p`p`p-@Jlp-@JfpdpѮ n -h>pdfBJ>l-| pqL >g* .>D-@>`Jg -| psL`Jg-| puLpXf | pw` | p-H*I\*L`Dp>-@ .>-@>.N lЀЮ"n*1. .>N \-@>J>f Ю-@Jgȹg  Xg4 og xf-| pL` lp-@`-| pL`xJlp-@pѮ n -h6-h:Hn.Hn2 .Rrl .R`p//.:/.6N O @(HJ.g -| pL`Jg -| pL`Jg-| pLKQJgHH`p0JfJg.-n`SJoJfIQ. p\/9 pX .6".:N SXJg .2S-@"JlD`Jlp-@pѮ n -h6-h:Hn.Hn2 + f."/ /+N ]P @"'H`./."p// N [ SmVSm kRr0`.p0/N ehX` kR"nHRH`. nHRHp/N ehX nHJg$Sm` kRr `.p /N ehXS .䰮&mSm`J"g@p . ."N l0rH"nHp . ."N \-@"`pH nH0 nHCEbJ2n . pd/9 p` .6".:N SXJfp+`p-rH"nH | qU0(gpE`perH"nH`>NVp././././. /.N> @ N^NuNVp././././. /.N @ N^NuNVH<$n&| z6 ."KI . fp.N iP/N \X. p/9 p .". N SXJlp`p"n"g .". @-@-A B9 z6B. p/9 p .". N SXJgd*| pR. q/9 q .". N SXJm,`>./ .". N U&X-@-A -ђ`. q/9 q .". N SXJm`-y q-y q` -n-n./. 9 q"9 q N VX-@-A. /.".N SXJo`. q8/9 q4 .". N SXJln`8./ .". N VX-@-A -` M o2./ .". N VX. q@/9 qN LNu"`"/H8NVN0 LNu$<&HCĀ(f<Jg,<`&HBJ Bf4<`<Jg<`SB<B2Nu m `B>BFCNBNr, AKNux ,<.̂(ȃ⊄(΀ȁ∀NuJf F m F BJgk [ZNu< 50> 58> 5A 5D8 5J 5M9: 5RD 5Y 5\=^ 5ad 5g 5l 5o 5r 5v 5{ u 5 5 5x` 5 5u 5 5N 5 5" 52 5 5 5a 5 5fD 5 5f| 5 5hH 5 5h 5 5k 5 5k 5 6l" 6 6m 6 6!m$ 6- 63mh 6> 6Am 6L 6OmF 6Z 6_k 6h 6kh 6t 6yiR 6 6i 6i 6 6l 6 6m 6k 6 6n8 6nT 6 6 69R 6 69 6 6P 6- 6-j 7.B 7 ;~ 7 7; 7" 7(; 7.=* 77 7<=D 7E 7J: 7T 7X:\ 7c 7h: 7q 7v: 7 7; 7 7 7A 7H 7H, 7H: 7j. 7jh 7j 7k 7CV 7D 7 7DF 7 7 7 7 8D 8D 8 h 8 8 8" 8%DX 8*  81 85 8= 8A52 8I6L 8N 8RkR 8Zk* 8e 8nB 8w 8zA 8HH 8H` 8E 8Et+<+>+=+++-+*+/+\+^+ +;+^<>==<>=?<>=A<">"="+"-"*"/"\"^"}")")*3/3\3^333 3 3333333144 4 44444442Kn`7zLJeC8Ow-Fp. {qHsD, Am?PMNQEPI IQ6Y yvRO RO( (PM jQ(PMNQTSUTSU(  RO (RO (r%&'t$"#x G >!r%&'<t$"#:5  u!%&'$"#  !%&'$"#  !%&'$"#  !%&'/PMjQ !TSUPMjQTSURORO(PMNQPMN(QTSUTSU(RO(RO)49;=((f(%&'/( !%&'/( !%&'/ !%&'(/ !%&'/ !%&'/( !%&'/ !%&'/ !%&'/ !%&'/ !PMNQTSU%&'(/ !RO((PMNQ(TSU(RO(PMNQ%&'/(TSU !%&'(/RO !}%&'(/ !^%&'/ (!d%&'/ b!%&'/ W!%&'/( !@%&'/ 3!%&'/ !1%&'/( !PMNQTSU(+%&'/ R!O%&'/ !*02X&'/B V!Z[\]_achiklgo|~9 j}VV+VVB+eeVV NeeNeo~e T   Nkeeue"KItB&?='!;972. -+*"           ;"[:-(   {  :+-^*/\=<> - ]})  iDmnSXX+C_%D jRTUIKM,.34CadL"#$XWVZ[`efHJNO-/01256789:;<>@BF*klEbh !(F QY G'cg& P\]sumdifferencediffproductquotientremaindermodbothandeitherorgreaterplesspmaximummaxminimumminiswordsentenceseequalpemptypnotnumberpsentencepwordpcountzeropfirstfbutfirstbflastlbutlastblthingnameprandomrndsqrtpowsincosarctanatantimerequestreadlistrlprintprtypeoutputopwaitlocalmakeiftoendstopeditedgoshowpoeraseerhelpdescribetraceuntracegoodbyebyeturtleturforwardfdbackbkleftltrightrtpenuppupendownpdclearscreencsfullscreenfullsplitscreensplitshowturtlesthideturtlehttextscreentextpenerasepepencolorpencsetcolorsetcsetxysetheadingsethwipecleancleanpenmodepenreversepxshownptowardsxytopleveltopfprintfpftypeftypotsfputlputlistopenreadopenropenwriteopenwclosefilereadfirdfilewordfiwdfileprintfipfilefprintfifpfiletypefityfileftypefiftyunixrunrepeatrepcountdebquitmemtraceyaccdebugxcorycorheadinggetpencbreakreadcharrckeypintroundasciicharoflushgpropplistppropppsremproptestiftrueiftiffalseiffmemberpitemnthscrunchsetscrunchsetscruncontinuecopausesetipausesetqpauseerrpauseerrquit [](){}";%lf%ldyacc stack overflowsyntax errorPprop takes three inputs.Pprop takes three inputs.%s takes no inputs. You don't say what to do with %l.Too many inputs to procedure. You don't say what to do with %l.You don't say what to do with %l.You don't say what to do with %l There's something extra on the line. Too many inputs to procedure. Your procedure doesn't have an output.It can't be used as an input.Run didn't output. to : :Not enough inputs to %s Not enough inputs to if. []Unmatched [ in procedure. !makewordUnmatched [ in procedure. Unmatched [ in procedure. Your line is too long. needs at least two inputs./bin/shsh-c/usr/lib/logo/logohead *.lg of %l and what? must have two numbers for inputs. takes only two inputs. takes two inputs. takes only one input. takes one input. go takes one input, which must be a line number.go takes one input, which must be a line number. what? must be followed by a number. sumdifferenceproductquotientremainderlesspgreaterppowequalp of %l and what? = takes two inputs. of %l and what? takes two inputs. takes two inputs. takes one input.That doesn't look like a title to me.Too many levels of recursion.I don't understand that.Please submit a Logo bug report, telling what you typed, and asking for a more specific error message.There's something extra on the line.There's something missing on the line. doesn't like %l as input. /tmp/logo%u Welcome to LSRHS LOGO *truefalsetruefalseIftrue%ld%g.0truefalseBothtruefalseBothtruetruefalseEithertruefalseEithertruetruefalseNotFirstButfirstLastButlastSecond input of fput must be a list. Second input of lput must be a list. %ld%lf%ld%lfWordWord%ld%g.0%ld%g.0ItemItemItem%p has fewer than %d items. %p has fewer than %d items. %ld%g.0File commandFile commandOpen fileCan't open file %l. rwWait RepeatRepeatRepcount outside repeat.Pausing at line %d in procedure %s CbreakONOFFcbreak input must be "on or "offONtruefalseTesttrueArithmetic overflow.%d%d%d%o%o%o%s%semptyNo more memory, sorry. Malloc size=%d loc=0%o mfree of -1Trying to mfree nonlocal at 0%o val=%p Mfree entry=%d loc=0%o val=%p lfree of -1Trying to lfree negative refcnt, loc=0%o Lfree loc=0%o val=%p Lfree frees string %s at 0%o I can't remember everything you have told me.Please enter less complex instructions.@@@@@@? DH DI DJ DKPP|PBTOBOBS&@f@ !TREP@@@@ @ @@@@@@@@@?zG{?zG{@f@ !TREP>h@f@ !TREP>h@&@v@v@&@v G G G@ !TREP@fcan run only on bitmapLOGO - graphicsLOGO - graphicsLOGO - textLOGO - text[=1Cpc|PC7300|unixpc|pc7300|Safari 4:al=\E[1L:am:bs: :cd=\E[0J:ce=\E[0K:cl=\E[2J\E[H:cm=\E[%%i%%2;%%2H:co#%d: :dc=\E[1P:dl=\E[1M:do=\E[B:ei=:ho=\E[H:ic=\E[1@:im=: :kb=\10:kd=\E[B:kl=\E[D:kr=\E[C:ku=\E[A:li#%d:k1=\EOc: :k2=\EOd:k3=\EOe:k4=\EOf:k5=\EOg:k6=\EOh:k7=\EOi:k8=\EOj: :nd=\E[C:se=\E[m:so=\E[2;7m:ue=\E[m:up=\E[A:us=\E[4m: :EE=\E[m:BO=\E[0;7m:CV=\E[=C:CI=\E[=1C:KM=/usr/lib/ua/kmap.pc:TERMCAP*** ERROR *** Not a window! ioctl to set window parameters failed! %c[0K*** ERROR *** Not a window! ioctl to set window parameters failed! *** ERROR *** Not a window! ioctl to set window parameters failed! *** ERROR *** %s %s=%s*** ERROR *** alloc has failed! Turtle commandTERMs4unixpc7300I don't recognize your terminal type! offdpydisplayTurtleOut of bounds! (x=%d,y=%d) You don't have a display turtle!pendownpenerasepenreversepenupEditEditEdit.lg/usr/lib/logo/.lg.lgCan't write %s. to end cat %s >> %sEDITORed/bin//usr/bin/Can't fork to editor. Can't find editor (%s or %s). Redefinition aborted. rCan't reread edits! toEdited file includes non-procedure. Defining %s %s%s.lgwCan't write %s %s%sendErase.lgYou haven't defined EraseLine too long.[: {(: endShow.lgr/usr/lib/logo/.lgrYou haven't defined %s Show?F59?F59@L"??%ld%lfMinusSumSumDifferenceDifferenceProductProduct%s can't divide by zero. QuotientQuotientQuotientQuotientRemainderRemainderRemainderRemainderRemainderGreaterpGreaterpLesspLesspMaximumMaximumMinimumMinimumRndRndRndSqrtSinCosPowPowAtanZeropIntRoundAsciiAscii%ld%gAsciiCharCharGo can only be used within a procedure. GoGoThere is no line %d. NamepLocal can only be used within a procedure. LocalVariable name can't be empty. Variable name %s must start with a letter. is already defined as a local variable. Thing has no value.Argassign bug trap, newloc messed up. MakeCannot assign value to %l Variable name can't be empty. Variable name %s must start with a letter. Thing has no value. "[ :Jfree loc=0%o Trying to jfree zero. .lgr/usr/lib/logo/.lgrYou haven't told me how to %s. Procedure name must be no more than %d letters..lg is already defined.Can't write %s. /usr/lib/logo/helpfiler? Help file missing, sorry. Describe%p isn't a primitive. /usr/lib/logo/help//usr/lib/logo/help/rSorry, I have no information about %s You were at line %d in procedure %s of %l and %l called. outputs %l stops.PpropPpropRempropRemprop%p has no properties %p has no %p property. GpropGprop%s's %s is %p Plist@0'U ?.@p*@T@ѠjA@Iv?@Mz~v@|k8@ "^J@>@@Iv???!TD-??!TD-@PO3??ڂy0?!TD-!TD-@ !TD- !TD-@.B9GT'opowpow: DOMAIN error DV(@0bJ P?AՀKg@s&~ w??栞f;?+\a ?0?{&loglog: DOMAIN error loglog: SING error ?!TD-A??_0mȃ?@ "K>P$d*>?UUUUUUcossin: TLOSS error ??sqrtsqrt: DOMAIN error ?D*?K*?>3c U?D \(?(Q?T'o@.B9G>P??Ge+?0+\a expexpHelp Touch ENTER to continue or HELP for more informationError Touch ENTER to continue or HELP for more informationError Touch ENTER to continue or CANCL to stop. Touch HELP for more information Confirm Touch ENTER to continue or CANCL to stop. Touch HELP for more information Touch ENTER to continue or HELP for more informationCan't exec help processError - Can't create window - Touch ENTER to continue/usr/lib/ua//usr/bin/uahelpuahelp-h-tUUUUUUUUUUUUUUUU/dev/windowr+ /dev/window W W| Wb W Yr Z1 W62 W@3 WJ4 WT5 W^6 Wh7 Wr8 Zt! W@ [# W$ W% W^ W& W* W,c X& [di [<ru X Wd ZVf ZB \|i Zm Z X:vd Y Xl Z`k Zr XX [e Z8s W Y vo Xvp YHp Wc X0i X XmC Y [nI [FRU W XD [F [ XI \M Y Y>VD Z YL [l YS X Y4L ZK [(s [R Y* [S [E [xVO YP Y\P XC YN [P YJ \e W Zxs Xbm Zp XD Zr Yg W"vws Xm Xlo Y Z.p Z~f Zh X Zjmpnl ZL? Wtn Xg Yn Yn Z$ ZxwE X [XS YpM [P YR [R [B X [ G [VWS YM Yzl YL ZO Z [ZP [e WE XF [2H X [MuUPd XND YfNL [TN YG ZN ZXW1 \"2 \,3 \64 \@5 \J6 \T7 \^8 \h9 \0 \- \r= X \ ] \b ]b _r _1 \2 \3 \4 \5 \6 \7 ]8 d! ]&@ `# ]0$ ]:% ]N^ \& ]X* dc ] `i `ru ^* ]d _f _ bi `Pm `< ]vd _L ^ l _k _r ] aJe _s ] ^vo ^ p ^p ]vc ]i ] ^>mC ^ aI `RU b& ^pD a@F a ^I aM _8 ^VD `Z _.L a^l _`S ^f ^L `nK `s a,R ^ aTS a6E aVO _P ^P ^\C ^N ` dJ de ] `2xs ]m `p ] `(r _g \vws ]m ^o _t _p `f _h ^4 `mpnl _? ]tn ^g _~n _Vn _ `FxwE ^z aXS _M a|P ^ aR `B ^H `G `V eWS ^M _l _jL `xO ` cpP ee ]lE ^RF `H ^ ahMuUPd ]D ^NL a"T dN _$G `N `dX dLW1 a2 a3 a4 a5 a6 a7 a8 a9 b0 a- b= ][ ]D b:Z? d`c bNd bXe bbf blg bvh bi bj cC bD bE bF bG bH bI bJ da c*n c4s c>x cHc cRe c\i cfb bDo ct cy dd cf djA cN cS arX cC cE cI _BB bO `Y dD cF dk d.p d8u dBz9 ` g dD dVl dtq d~v da c H eA djB dm br bw cU eZ0 \h c C d$K dU e Z bB cG enK exL e<Q eFV ePJ e2M edT dS e(M czR cW cV b0N aH cL ea eb ec ed ee ef eg eh ei ej ek el [? OcOdOeOfOgOhOiOjOCODOEOFOGOHOIOJOaOnOsOxNcNeNiObOoOtOyNdNfNjOAONOSOXNCNENIOBOOOTOYNDNFNJOkOpOuOz9NgOlOqOvNaOmOrOw0NhOKOPOUOZNBNGNKOLOQOVNMOMOROWNNNHNLPaPbPcPdPePfPgPhPiPjPkPllptx|6:>BFJNR $(,048<@DHLPTX\`dh"&*.2VZ^bfjnrvz~    e/usr/lib/ua/kmap.s4/usr/lib/ua/keynamesrrE^^\\n r t bf [%d;%dH b d f j n r v z ~ x TERMunknownxxxx|dumb:licosgambsncbcBEBOcdceCIclcmCVEEFEFLhoKMllndpcsesotetiueupusvevsXEXS JJJJJJ   j     J J JJJJJJJJJJJJJJJJ  JJJJJJJ  lJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ     ~  B  J    JJ RJJ < JJJJJJJJJJJ  JJ f  JJJJJJ JJJJJJJJJJJJJJJJJJJJ JJJJJJJJJJ JJJJ JJJJJJJJJJJJJJJJJJJJJJJJ @JJJJJJJJJ JJJJJJJPANIC: olalloc: no ol TERMCAPTERM/etc/termcap/etc/termcapTermcap entry too long Bad termcap entry Infinite tc= loop Termcap entry too long E^^\\::n r t bf OOPS5MS7) M:/Day Mon 00 00:00:00 1900 SunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecTZFP o oESTEDTC@@$C@@$?@A>???-+ 0123456789ABCDEF0123456789abcdef0x0X-+ -+ Fn CAy7Aׄ@È@Y@$C@@$@$@$@$@$?@$@$ ((((( H /bin/shsh-c    s 0707070000020064011007770001460001440000010222740361052762500001100000000041MAKEcpiocat Files | cpio -ocBv > LOGO+IN 0707070000020064261006660001460001440000010222720360032020300000700000002267READMEThe file 'logoman' in this directory is a nroff-style document which is a manual for this version of LOGO. LOGO has been adapted for the AT&T PC7300 in the following ways: - When you invoke 'logo', 2 windows will be created: a text window and a graphics window. The 'textscreen' command will enlarge the text window to fill the screen. The 'fullscreen' command will enlarge the graphics window to fill the screen. The 'splitscreen' command will restore the original window arrangement. - The windows can be resized and moved by the user, if desired. - If you invoke the 'edit' command and an EDITOR shell variable has been set to 'vi', a TERMCAP will automatically be created so that 'vi' will work in whatever size text window exists at the time. - The graphics window coordinates for turtle commands are automatically scaled, no matter what size window is used. The location 0,0 is always in the center of the graphics window. The upper right corner is 500,500 and the lower left corner is -500,-500. - Any problems, questions can be addressed to ihnp4!twitch!tjt. ...Tim Thompson... 0707070000020066471006660001460001440000010724440357755742200001200000010630applediffA Guide to LSRHS Logo for people who know Apple Logo Although the two versions of Logo are very different internally, they are fairly similar in the way you use them. This guide assumes that you know all about Apple Logo, and explains the differences. There are enough differences that you can't just run your Apple Logo programs unchanged, but what you know of Apple Logo will help you understand LSRHS Logo. Read this along with the LSRHS Logo Manual. 1. Multi-instruction lines. To put more than one Logo instruction on a line, you must use a semicolon between instructions: print "foo; print "baz 2. Comments can be used, starting with exclamation point: print "foo ! This is a comment 3. The procedure editor is edt, an EMACS dialect somewhat more complicated than the Apple Logo editor. There is no edns primitive. 4. Differences in graphics: LSRHS doesn't have background, dot, fence, pen, setbg, setpen, window, or wrap. Instead of pencolor and setpc, there are somewhat different primitives setcolor and pencolor. There is also setxy, which is like setpos but takes two scalar inputs instead of one vector. Similarly, towardsxy takes two scalar inputs. 5. Differences in words and lists: In addition to the Apple Logo primitives, LSRHS Logo has sentencep (true only if the input is a list of words, not a list of lists); is (like equalp, but true for numbers only if they are string equal, so "is 3.0 3" outputs false); memberp and item for words as well as lists. 6. Differences in use of variables: LSRHS local takes only one input. There is no name, only make. 7. Differences in arithmetic operations: There is no rerandom. Quotient and / are equivalent, and give an integer result if both inputs are integers. Additional arithmetic operations are difference (prefix -), greaterp (prefix >), lessp (prefix <), maximum, minimum, zerop, pow (two inputs, x to the y power). LSRHS random is like Apple "random 10"; LSRHS rnd is like Apple random. 8. Differences in conditionals and flow of control: LSRHS Logo has trace and untrace (no inputs, affect all procedures). Pausing works somewhat differently. Your Unix interrupt character pauses; your quit character stops all procedures. The equivalent of ERRACT is the procedure errpause. See the manual. 9. Differences in reading and printing: There is no buttonp or paddle. In order to use readchar and keyp, you must first use cbreak. (See the LSRHS Logo Manual.) Apple show is called fprint in LSRHS. There is also ftype for full type without newline. 10. Differences in screen commands: LSRHS Logo has no cleartext (type control-L instead), cursor, or setcursor. 11. Workspace management: There is no concept of a workspace in LSRHS Logo. Procedures are saved in individual files, and variables are not saved at all. Therefore, none of bury, erall, ern, erns, erps, package, pkgall, poall, pons, pops, or unbury exist. The Apple Logo po is called show (note that Apple Logo uses show with a different meaning), but po is accepted as an abbreviation. Erase exists, and pots exists with no input. 12. Differences in files: None of catalog, disk, erasefile, load, save, and setdisk exist in LSRHS Logo. But there is a facility for reading and writing arbitrary text files, using the primitives openread, openwrite, fileread, fileword, fileprint, filefprint, filetype, fileftype, and close. See the LSRHS Logo Manual. Other file directory manipulation can be done using the unix command: unix [ls -la] 13. Error handling: The primitives catch, throw, and error do not exist in LSRHS Logo. The special name erract is not used. There is a command toplevel which is equivalent to throw "toplevel. 14. Procedure redefinition: None of copydef, define, definedp, primitivep, or text exist. The special name redefp is not used. 15. Miscellany: There are no label, nodes, recycle, reparse, .bpt, .contents, .deposit, .examine, or .printer primitives. The go primitive takes a numeric input; a procedure line can start with a number which is ignored except to serve as a label for go. The LSRHS time primitive outputs the current date and time. The command goodbye is used to exit from Logo. The command help prints a help message, and describe with one input, the name of a primitive, prints a description of that primitive. 16. Floor turtles: LSRHS has the primitives turtle, hitoot, lotoot, lampon, lampoff, ftouch, btouch, ltouch, and rtouch applicable to floor turtles. 0707070000020071431006440001460001440000010711070357755743000001100000000612helpfileLogo is an interactive procedural programming language designed for education. The file /usr/lib/logo/logoman is an nroff-format logo manual. To find out about a particular Logo primitive, use the "describe" command with the name of the primitive as its input: describe "print to see a description of the print command. The command to leave Logo is "goodbye" (abbreviated "bye"). 0707070000020067451006660001460001440000010711060357755743100000700000005306logo.1.TH LOGO 1 .SH NAME logo - Logo language interpreter .SH SYNOPSIS .B logo [ main procedure ] .SH DESCRIPTION Logo is a computer programming language which was designed to be both simple to use and extremely powerful. It was designed by a group of computer scientists at MIT and at Bolt, Beranek, and Newman. Its structure is based largely on the LISP language, which is widely used in Artificial Intelligence research, but the notation has been changed to make Logo far easier for a beginner than LISP. This manual describes a version of Logo for the PDP-11, originally written in C at the Boston Children's Museum and extensively modified at the Lincoln-Sudbury Regional High School (LSRHS). .PP The power of Logo comes primarily from the idea of the \f2procedure\f1. A procedure is simply something the computer "knows" how to do; some procedures are built into Logo itself (these are called \f2primitive\f1 procedures), while others are \f2defined\f1 by the programmer in terms of these simple procedures. Defined procedures can be used as part of the definition of other procedures, so that a complicated program can be built in "layers" of complexity. This layered structure is analogous to the description of a complex machine in terms of building blocks: an automobile is made of a chassis, a drive train, an electrical system, and so on. The drive train contains an engine, a transmission, a clutch, an axle, and so on. The transmission contains a housing, gears, and levers. A lever may include connecting joints at the ends and at a pivot point. Eventually the description of the automobile reaches the level of bolts and washers; these correspond to the primitive procedures in Logo. .SH EXAMPLES Use the shell command \f3logo\f1 to start the Logo interpreter. When Logo is running it will print an asterisk (*) at the beginning of a line to indicate that it is ready for you to type in a Logo instruction. The instruction may print something on the terminal, or draw a line on a graphics display screen, or move a turtle around the floor. Then another asterisk is typed and you may give another instruction. (If Logo prints a "greater than" sign (>) instead of an asterisk, it is in \f2procedure definition mode\f1, which will be described later. Type your system quit character (control-G at Lincoln-Sudbury) to return to normal mode.) .PP If an argument is used with the shell command \f3logo\f1, the argument is taken as the name of a procedure, which Logo runs before doing anything else. You can therefore create a shell script which will start Logo, run a procedure automatically, and (if you say "goodbye" at the end of the procedure) exit. .SH SEE ALSO The LSRHS Logo manual, and the .I Mindstorms book by Seymour Papert. 0707070000020066541007550001460001440000010510670360167311100001100000004006logoheadRvB  .text .data @.bss  .lib  /< N1X OQ./HJf/H#0N) instead of an asterisk, it is in \f2procedure definition mode\f1, which will be described later. Type your system quit character (control-G at Lincoln-Sudbury) to return to normal mode.) .PP If an argument is used with the shell command \f3logo\f1, the argument is taken as the name of a procedure, which Logo runs before doing anything else. You can therefore create a shell script which will start Logo, run a procedure automatically, and (if you say "goodbye" at the end of the procedure) exit. .PP .UB "Syntax." Unlike most computer languages, Logo has an almost entirely uniform syntax. That is, all of the different commands Logo understands are represented using the same notation: the name of a procedure is followed by its \f2inputs\f1, which may be \f2constants\f1 (like numbers) or else may be the results of using other procedures. Here is a simple example: .EX print "hello .EC In this Logo instruction, the primitive procedure \f3print\f1 is used with a constant input, the word \f3hello\f1. The quotation mark indicates that \f3hello\f1 is being used to represent the word itself; without the quotation mark it would have been interpreted as the name of a procedure, just as \f3print\f1 is the name of a procedure. In Logo, the \f3print\f1 procedure always requires exactly one input, which is the thing to print. The input can be a \f2word\f1, as in this example, or a \f2list\f1, which will be explained later. (A \f2number\f1 is a special case of a word, and a \f2sentence\f1 is a special case of a list.) Here is another example: .EX print first "hello .EC In this instruction, the primitive procedure \f3first\f1 is used. This procedure takes one input, a word, and has an \f2output\f1 which is the first letter of the word. The output from \f3first\f1 is used as the input to \f3print\f1, so what is printed is the letter \f3h\f1 rather than the word \f3hello\f1 as in the earlier example. .PP Don't confuse the \f2output\f1 from a procedure with what is \f2printed\f1 by the \f3print\f1 command. In Logo, the word "output" is not used to refer to what is printed by a program, just as the word "input" does not mean something you type into the program. Instead, these words refer to objects (words or lists) which are given to a procedure (inputs) or produced by a procedure (outputs). A particular procedure has a fixed number of inputs and outputs. The number of inputs may be anything, including zero, whereas the number of outputs is either zero or one. A procedure with an output (like \f3first\f1) is called an \f2operation\f1; one without an output (like \f3print\f1) is called a \f2command\f1. .PP Some operations only have two possible outputs: the word \f3true\f1 and the word \f3false\f1. Such a procedure is called a \f2predicate\f1. Predicates are used to allow a program to carry out some instruction only if a particular condition is met. By convention, predicates generally have names ending with the letter "p". .PP .UB "Multiple inputs to operations." Several Logo primitive procedures are operations with two inputs. The arithmetic operations, like \f3sum\f1, are examples of this. A special extension to Logo syntax allows such an operation to have more than two inputs by enclosing the operation and its inputs in parentheses or braces: .EX (sum 2 5 13 8.5) .EC Association is right to left. At least two inputs must be given, except for the \f3list\f1 operation, which can take one input if parenthesized. .PP .UB "Multi-instruction lines." It is possible to put more than one instruction on the same line when you are typing to Logo. To do this, type a semicolon (;) between the instructions: .EX print "hello; print "goodbye .EC Later in this manual, the phrase "instruction line" will mean one or more instructions on a line. .PP .UB "Multi-line instructions." It is possible to continue an instruction on a second line. To do this, end the first line with a backslash (\\), immediately followed by the RETURN key. If you are typing a quoted word, you must end the word (with a space, for example) before using the backslash-RETURN combination. Inside a quoted word, backslash-RETURN means to put an actual RETURN as part of the word. .PP .UB "Comments." It is possible to include in an instruction line comments which are meant for human readers of your program (including yourself, next week), and which are not Logo instructions. To do this, begin the comment with an exclamation point (!). Everything after the exclamation point on the line will be ignored by Logo. For example: .EX print [Hi, there.] ! A friendly greeting. .EC However, the exclamation point does not begin a comment if it is part of a word or list (see below). You should type a space before the exclamation point, as in the example above, to make sure it will be interpreted as the beginning of a comment. .PP .UB "Words." Every computer language deals with particular kinds of objects. Most languages, like FORTRAN or BASIC or Pascal, are best at dealing with numbers. Logo is a \f2list processing\f1 language, which is at its best with more complicated data structures. The two main categories of object are the \f2word\f1 and the \f2list\f1. .PP A \f2word\f1 is a string of characters. (A \f2character\f1 is a letter, digit, space, or punctuation mark. Things like TAB and RETURN on the terminal keyboard are also characters, although they are not usually used as part of Logo words.) A word can be any length, including zero. The way to indicate a word as part of a Logo program is to use the quotation mark (") before the word. The word begins with the character after the quotation mark and continues until a space, a tab, the end of the line, or one of these characters: .EX ( ) [ ] { } " ; .EC A quotation mark immediately followed by a space or one of the other word-terminating characters indicates the \f2empty word\f1, which is a word of length zero. .PP Please notice that, unlike most programming languages, Logo does not use quotation marks in pairs to delimit strings of characters. The following instruction is an error: .EX print "aardvark" .EC This is an error because the \f3print\f1 command is followed by \f2two\f1 words, the word \f3aardvark\f1 and an empty word which is indicated by the second quotation mark. Since \f3print\f1 only uses one input, the second word has no purpose, and Logo gives the error message .EX There's something extra on the line. print takes only one input. .EE In order to include one of the word-terminating characters in a word, you must precede it with a backslash (\\). Do not confuse backslash with the regular slash (/) character. For example, this instruction: .EX print "\\(boo\\) .EC will print the five characters \f3(boo)\f1 as its result. The space character may be included in a word by using a percent (%) instead of the space. Therefore, the following are equivalent: .EX print "Hello%there. print "Hello\\ there. .EC To include a percent character or a backslash character in a word, you must precede it with a backslash. .PP .UB "Numbers." A number is a special case of a word, in which the characters are all digits. (That definition isn't quite complete, and will be expanded in the next paragraph.) A number need not be preceded with a quotation mark. (This rule is possible because normally Logo interprets words without quotation marks as the names of procedures, but there are no procedures whose names begin with digits.) If a quotation mark is not used, then any nondigit terminates the word. .PP Actually, numbers may be written in scientific notation. That is, they can include signs, decimal points, and a power of 10 by which the number is multiplied. This \f2exponent\f1 is indicated by the letter \f3e\f1 followed by the integer power of 10. The following numbers have the same value: .EX 1000 "1000 1000.00 1e3 10.0e+2 "+1.0e3 10000e-1 .EC Notice that if the number begins with a sign it must be quoted. A quoted number still must begin with a digit or a sign, not with a decimal point or a letter \f3e\f1. (The letter may be a capital \f3E\f1, by the way.) If a number is quoted, it must end with one of the normal word-terminating characters. A number which contains only digits (no decimal point or exponent) is called an \f2integer\f1. Note that a number with a decimal point is not considered an integer even if the digits after the decimal point are all zero. .PP Since a number is a word, the usual character-manipulating procedures may be applied to it. For example, .EX print first 1024 .EC prints the digit \f31\f1 which is the first character of the number. In addition, there are arithmetic procedures which apply specifically to numbers: .EX print sum 3 2 .EC prints the number 5. These procedures will be listed later. .PP .UB "Lists." A word can be thought of as a list of characters; for example, the word \f3hello\f1 is a list of five letters. In Logo it is possible to manipulate not only lists of characters but also lists of words, lists of lists of words, and so on. This is a very powerful capability which allows very complicated data structures to be manipulated easily. To indicate a list in a program, you put square brackets ([ and ]) around the list, and separate the list elements with spaces. For example: .EX print [This is a list of seven words.] .EC A list all of whose elements are words is called a \f2sentence\f1. Here is an example of a list which is not a sentence: .EX print [[This is a list][of two sentences.]] .EE Within a bracketed list, square brackets delimit sub-lists (lists which are elements of the main list). The quotation mark, parentheses, and braces are not considered special within a bracketed list, unlike the rules for quoted words. A list may extend over more than one line; that is, if you have typed an open square bracket ([) and have not yet typed the matching close square bracket, the Logo instruction is not ended by typing the RETURN key. .PP .UB "Variables." A variable is an entity which has a \f2name\f1, which is a word, and a \f2thing\f1 (also called a \f2value\f1), which can be any Logo object. Variables are used to "remember" a computed object for repeated or delayed use in a program. In Logo, the most common way that a variable acquires a value is that it is associated with an input to a user-written procedure. In the following example, don't worry about the details of the format of the procedure, which will be explained later: .EX to pff :sentence print first first :sentence end .EC This is the definition of a command with one input. The name of the command is \f3pff\f1. It has one input because in the "title line" (the one starting \f3to pff\f1) there is one variable name after the command name. The variable whose name is \f3sentence\f1 is associated with the first (and only, in this case) input to \f3pff\f1. In the line starting with the word \f3print\f1, the notation \f3:sentence\f1 means "the \f2thing\f1 of the variable whose \f2name\f1 is \f3sentence\f1". (To refer to the name itself, quote it as you would any word.) If this procedure is used in a Logo instruction like this: .EX pff [This is the poop.] .EC then the variable \f3sentence\f1 has the value \f3[This is the poop.]\f1. .PP It is also possible to assign a value to a variable by an explicit Logo instruction. There is a primitive procedure to do this: .sp 1 \f3make\f1 \(em Command, two inputs. .IN The first input is the name of a variable (that is, it must be a word); the second is any Logo object. The effect of the command is to assign the second input as the value of the variable named by the first input. .OU If you are accustomed to programming in a non-procedural language like BASIC, you should strenuously avoid the temptation to overuse \f3make\f1; explicit assignment is almost always the wrong thing to do in Logo. Total abstention is the best policy for a Logo beginner. .PP In Logo, variables are \f2dynamically scoped\f1. That means that a variable can "belong to" a particular procedure; such a variable can be used by that procedure and by any procedure which is used by an instruction within the procedure, but is not available to the procedure which invoked the owning procedure. In other words, such a \f2local\f1 variable comes into being when the owning procedure starts running, and disappears when that procedure is finished. It is possible for a procedure with a local variable to use another procedure with a local variable of the same name. In that case, the variable belonging to the "inner" procedure is the one which is associated with the name as long as it exists; when the inner procedure is finished, the "hidden" variable belonging to the outer procedure is again available. .PP A variable which is associated with the input to a procedure is automatically local to that procedure. Other variables are normally \f2global\f1: they are "permanent" and do not disappear when the procedure in which they get their values finish. It is both possible and desirable to make such variables local, by an explicit instruction to that effect: .sp 1 \f3local\f1 \(em Command, one input. .IN The input must be a word. A variable with that word as its name is created, local to the currently running procedure (that is, local to the procedure in which the \f3local\f1 command is used). .OU The virtue of local variables is that they make procedures more independent of one another than they would be if global variables were used. In other words, if you use local variables consistently, then nothing that happens in one procedure will change the values of variables used in another procedure. This makes it very much easier to find program errors. .PP .UB "Primitive procedures to define user procedures." There are two ways to define your own procedure. The first way, using the \f3to\f1 command, is simple to learn but limited in flexibility. The second way, using the \f3edit\f1 command, is more complicated to learn, but makes it easy to make changes in your procedures. The \f3edit\f1 command uses the text editing program \f3edt\f1, just as you might use it outside of Logo to edit a document you want to print. Once you've learned the special editing commands in \f3edt\f1, it's easy to use. The \f3to\f1 command makes it possible to begin programming in Logo without having learned how to use \f3edt\f1. It just lets you type in your procedure definition, without any provision for correcting errors or changing the definition of the procedure. It is fast and convenient for short procedures, but limited. .sp 1 The \f3to\f1 command is unique, in Logo, in that its inputs are interpreted in a special way. The inputs aren't \f2evaluated\f1: Logo doesn't run any procedures you name, or look up the values of any variables, before carrying out the \f3to\f1 command. The example below should make this clearer. .sp 1 \f3to\f1 \(em Command, special form, see below. .IN This command takes a variable number of inputs. The first is the name of a procedure to be defined. The rest, if any, must be preceded by colons, and are the names of variables to be used as inputs to the procedure. Logo responds to the \f3to\f1 command by printing a "greater than" sign (>) prompt, to show you that you are defining a procedure rather than entering commands to be executed immediately. You type the instruction lines which make up the definition. When you are done with the definition, type the special word \f3end\f1 on a line by itself. For example: .sp 1 .nf \f3\z_*to twoprint :thing \z_>print :thing \z_>print :thing \z_>end \z_*\f1 .fi .sp 1 This example shows the definition of a procedure named \f3twoprint\f1, which has one input, named \f3thing\f1. The procedure you are defining with the \f3to\f1 command must not already be defined. .OU \f3edit\f1 \(em Command, zero or one input. Abbreviation: \f3ed\f1 .IN The input to this command must be a word, which is the name of a procedure, or a list of words, each of which is the name of a procedure. (Unlike the \f3to\f1 command, but like all other Logo procedures, the \f3edit\f1 command evaluates its input, so you must use a quotation mark before the procedure name, if only one is given, to indicate that it is the name itself which is the input to \f3edit\f1; otherwise Logo would actually run the procedure to calculate the input to \f3edit\f1.) The procedure you name may or may not already be defined. Logo responds to the \f3edit\f1 command by running the text editor \f3edt\f1, editing the definition of the procedure(s) named in its input. (If a procedure was not previously defined, Logo creates an initial definition for it which contains only a title line and the end line.) You then edit the definition(s) with \f3edt\f1. When you write the file and leave \f3edt\f1, Logo will use the edited file as the definition(s) of the procedure(s). You must not put anything in the file except procedure definitions; in other words, every nonempty line in the file must be between a "to" line and an "end" line. .sp 1 If the \f3edit\f1 command is given with no input, \f3edt\f1 is given the same file as from the last time you used the \f3edit\f1 command. This is a convenience for editing the same procedure(s) repeatedly. .sp 1 If, while editing, you change your mind and want to leave \f3edt\f1 without redefining anything, use the command \f3ESC ^Z\f1 instead of the normal \f3^Z\f1. This special way of leaving \f3edt\f1 tells Logo not to redefine your procedures. You have the choice, before exiting \f3edt\f1, of writing or not writing the temporary file which contains the definitions. If you don't write the file, another \f3edit\f1 command with no input will re-read the previous contents of the temporary file; if you do, another \f3edit\f1 will re-read the new version. .sp 1 If your Unix environment contains a variable named EDITOR, the contents of that variable is used as the name of the text editor program instead of the standard \f3edt\f1. The variable can contain a full pathname, or just a program name if the program can be found in /bin or /usr/bin. Your favorite editor may not have a facility like \f3edt\f1's ESC ^Z to abort redefinition. .OU \f3show\f1 \(em Command, one input. Abbreviation: \f3po\f1 .IN The input to this command is a word or a list of words. Each word must be the name of a procedure. The command prints out the definition(s) of the procedure(s) on your terminal. (The abbreviation \f3po\f1 stands for \f3printout\f1, which is the name used for this command in some other versions of Logo.) .OU \f3pots\f1 \(em Command, no inputs. .IN This command types at your terminal the title lines of all procedures you've defined. The name is an abbreviation for "print out titles". .OU \f3erase\f1 \(em Command, one input. Abbreviation: \f3er\f1 .IN As for the \f3show\f1 command, the input is either a word, naming one procedure, or a list of words, naming more than one. The named procedures are erased, so that they are no longer defined. .OU .ti 5 .UB "Primitive procedures to manipulate words and lists." There are primitive procedures to print text objects on the terminal, to read them from the terminal, to combine them into larger objects, to split them into smaller objects, and to determine their size and nature: .sp 1 \f3print\f1 \(em Command, one input. Abbreviation: \f3pr\f1 .IN The input, which may be a word or a list, is printed on the terminal, followed by a new line character. (That is, the terminal is positioned at the beginning of a new line after printing the object.) If the object is a list, any sub-lists are delimited by square brackets, but the entire object is not delimited by brackets. .OU \f3type\f1 \(em Command, one input. .IN The input, which may be a word or a list, is printed on the terminal, \f2without\f1 a new line character. (That is, the terminal remains positioned at the end of the object after printing it.) Brackets are used as with the \f3print\f1 command. .OU \f3fprint\f1 \(em Command, one input. Abbreviation: \f3fp\f1 .IN The input is printed as by the \f3print\f1 command, except that if it is a list (as opposed to a word) it is enclosed in square brackets. The name of the command is short for "full print". .OU \f3ftype\f1 \(em Command, one input. Abbreviation: \f3fty\f1 .IN The input is printed as by the \f3type\f1 command, except that if it is a list, it is enclosed in square brackets. .OU \f3readlist\f1 \(em Operation, no inputs. Abbreviation: \f3rl\f1 .IN Logo waits for a line to be typed by the user. The contents of the line are made into a list, as though typed within square brackets as part of a Logo instruction. (The user should not actually type brackets around the line, unless s/he desires a list of one element, which is a list itself.) That list is the output from the operation. .OU \f3request\f1 \(em Operation, no inputs. .IN A question mark is printed on the terminal as a prompt. Then Logo waits for a line to be typed by the user, as for \f3readlist\f1. .OU \f3word\f1 \(em Operation, two inputs. .IN The two inputs must be words. The output is a word which is the concatenation of the two inputs. There is no space or other separation of the two inputs in the output. .OU \f3sentence\f1 \(em Operation, two inputs. Abbreviation: \f3se\f1 .IN The two inputs may be words or lists. The output is a list formed from the two inputs in this way: if either input is a word, that word becomes a member of the output list; if either input is a list, the \f2members\f1 of that input become members of the output. Here are some examples: .EX .ta 2i 4i first input second input output "hello "test [hello test] "goodbye [cruel world] [goodbye cruel world] [a b] [c d] [a b c d] [] "garply [garply] .EC If an input is the empty list, as in the last example above, it contributes nothing to the output. .OU \f3list\f1 \(em Operation, two inputs. .IN The output is a list of two elements, namely, the two inputs. The inputs may be words or lists. .OU \f3fput\f1 \(em Operation, two inputs. .IN The first input may be any Logo object; the second must be a list. The output is a list which is identical with the second input except that it has an extra first member, namely, the first input. .OU \f3lput\f1 \(em Operation, two inputs. .IN The first input may be any Logo object; the second must be a list. The output is a list which is identical with the second input except that it has an extra last member, namely, the first input. .OU \f3first\f1 \(em Operation, one input. Abbreviation: \f3f\f1 .IN The input may be any non-empty Logo object. If the input is a list, the output is its first member. If the input is a word, the output is a single-letter word, namely the first letter of the input. If the input is empty (a word or list of length zero) an error results. .OU \f3last\f1 \(em Operation, one input. Abbreviation: \f3l\f1 .IN The input may be any non-empty Logo object. If the input is a list, the output is its last member. If the input is a word, the output is a single-letter word, namely the last letter of the input. If the input is empty (a word or list of length zero) an error results. .OU \f3butfirst\f1 \(em Operation, one input. Abbreviation: \f3bf\f1 .IN The input may be any non-empty Logo object. If the input is a list, the output is a list equal to the input list with the first member removed. (If the input list has only one member, the output is the \f2empty list\f1, a list of zero members.) If the input is a word, the output is a word equal to the input word with the first letter removed. (If the input is a single-letter word, the output is the \f2empty word\f1.) If the input is empty, an error results. .OU \f3butlast\f1 \(em Operation, one input. Abbreviation: \f3bl\f1 .IN The input may be any non-empty Logo object. If the input is a list, the output is a list equal to the input list with the last member removed. (If the input list has only one member, the output is the \f2empty list\f1, a list of zero members.) If the input is a word, the output is a word equal to the input word with the last letter removed. (If the input is a single-letter word, the output is the \f2empty word\f1.) If the input is empty, an error results. .OU \f3count\f1 \(em Operation, one input. .IN The input may be any Logo object. If the input is a list, the output is a number indicating the number of members in the list. (Note: only top-level members are counted, not members of members. The count of the list .EX [[This is] [a list]] .EC is 2, not 4.) If the input is a word, the output is the number of letters (or other characters) in the word. Remember that in Logo a number is just a particular kind of word, so the output from \f3count\f1 can be manipulated like any other Logo word. .OU \f3emptyp\f1 \(em Operation (predicate), one input. .IN The input can be any Logo object. The output is the word \f3true\f1 if the input is of length zero (i.e., it is the empty word or the empty list). The output is the word \f3false\f1 otherwise. .OU \f3wordp\f1 \(em Operation (predicate), one input. .IN The input can be any Logo object. The output is the word \f3true\f1 if the input is a word. The output is the word \f3false\f1 if the input is a list. .OU \f3sentencep\f1 \(em Operation (predicate), one input. .IN The input can be any Logo object. The output is the word \f3true\f1 if the input is a sentence, i.e., a list of words. The output is the word \f3false\f1 if the input is a word, or if any member of the input is a list. .OU \f3is\f1 \(em Operation (predicate), two inputs. .IN The inputs can be any Logo objects. The output is the word \f3true\f1 if the two inputs are identical. That is, they must be of the same type (both words or both lists), they must have the same count, and their members (if lists) or their characters (if words) must be identical. The output is the word \f3false\f1 otherwise. (Note: this is an exception to the convention that names of predicates end with the letter "p".) .OU \f3memberp\f1 \(em Operation (predicate), two inputs. .IN If the second input is a word, the first input must be a word of length one (a single character), and the output is \f3true\f1 if and only if the first input is contained in the second as a character. If the second input is a list, the first input can be any Logo object, and the output is \f3true\f1 if and only if the first input is a member of the second input. (Note that this is member, not subset.) .OU \f3item\f1 \(em Operation, two inputs. Abbreviation: \f3nth\f1 .IN The first input must be a positive integer less than or equal to the \f3count\f1 of the second input. If the second input is a word, the output is a word of length one containing the selected character from the word. (Items are numbered from 1, not 0.) If the second input is a list, the output is the selected member of the list. .OU .ti 5 .UB "Primitive procedures for turtles and graphics." An important part of the Logo environment is a rich set of applications to which the computer can be directed. The most important of these is \f2turtle geometry\f1, a way of describing paths of motion in a plane which is well-suited to computer programming. There are two ways to use the turtle procedures. First, you can control a \f2floor turtle\f1, a small robot which can move one the floor or on a table under computer control. Second, you can use a \f2display turtle\f1 to draw pictures on the TV screen of a graphics terminal. .PP Each computer center has a different variety of graphics hardware available. Floor turtles are very different from display turtles, but also each kind of display terminal has different characteristics. For example, some terminals can draw in several colors; others can't. The following descriptions of graphics primitives explain the "best" case for each one and mention restrictions on some graphics devices. .PP The floor turtle can draw pictures on paper, because it has a pen attached to its "belly": the underside of the turtle. Since it is a mechanical device, however, it is not very precise; the pictures you get may not be exactly like what your program specifies. A more interesting way to use the floor turtle is to take advantage of its \f2touch sensors\f1. Switches under the turtle's dome allow the computer to know when the turtle bumps into an obstacle. You can use this information to write programs to get around obstacles or to follow a maze. .PP The display turtle lives on the surface of a TV screen. It can draw pictures more precisely than the floor turtle, since it does not measure distances and angles mechanically. It is also faster than the floor turtle. When using the display turtle, remember that it interprets commands relative to its own position and direction, just as the floor turtle does. The command \f3left\f1, for example, turns the turtle to its own left, which may or may not be toward the left side of the TV screen. .sp 1 \f3turtle\f1 \(em Command, one input. Abbreviation: \f3tur\f1 .IN The input is the name of a turtle. You can only control one turtle at a time, so using this command a second time releases the turtle previously selected. The names of floor turtles are numbers like \f30\f1 and \f31\f1. If you are using a graphics display terminal (not just a text display trminal), you can control the display turtle by using the word \f3display\f1 (or the abbreviation \f3dpy\f1) as the turtle name. (As usual, the word must be preceded by a quotation mark.) If you use a graphics primitive without selecting a turtle, Logo assumes that you want to use the display turtle. But once you select a floor turtle, you must say \f3turtle "display\f1 explicitly to switch to the display. .sp 1 The word \f3off\f1 as input to the \f3turtle\f1 command releases a floor turtle, if you have one, or turns off the graphics display if you have been using the display turtle. This also happens when you leave Logo. .OU \f3forward\f1 \(em Command, one input. Abbreviation: \f3fd\f1 .IN The input is a number, the distance you would like the turtle to move. For a floor turtle, the unit of distance is however far the turtle can travel in 1/30 second. For a display turtle, the unit is one dot on the TV screen. (Note: on some displays, one dot horizontally may not be the same length as one dot vertically. The \f3setscrunch\f1 command allows you to control the relative sizes so that squares come out square.) The turtle moves in whatever direction it is pointing when you use the command. .OU \f3back\f1 \(em Command, one input. Abbreviation: \f3bk\f1 .IN The input is a number, a distance to move, as in the \f3forward\f1 command. The difference is that the turtle moves backward, i.e., in the direction exactly opposite to the way it's pointing. .OU \f3left\f1 \(em Command, one input. Abbreviation: \f3lt\f1 .IN The input is a number, the number of degrees of angle through which the turtle should turn counterclockwise. This command does not change the \f2position\f1 of the turtle, but merely its \f2heading\f1 (the direction in which it points). The turn will be only approximately correct for the floor turtle, because of mechanical errors. For the display turtle, the angle will be perfectly reproducible, although it may not look quite right on the screen because of the difference in size between horizontal and vertical dots. Nevertheless, a display turtle program will work in the sense that when the turtle is supposed to return to its starting point, it will do so. .OU \f3right\f1 \(em Command, one input. Abbreviation: \f3rt\f1 .IN The input is a number; the turtle turns through the specified number of degrees clockwise. .OU \f3penup\f1 \(em Command, no inputs. Abbreviation: \f3pu\f1 .IN This command tells the turtle to raise its pen from the paper, so that it does not leave a trace when it moves. In the case of the display turtle, there is no physical pen to move mechanically, but the effect is the same: any \f3forward\f1 or \f3back\f1 commands after this point do not draw a line. The floor turtle starts with its pen up; the display turtle starts with its pen down. Note: the floor turtle will not move on the carpet correctly with its pen down; put it on a smooth surface if you want to draw pictures. .OU \f3pendown\f1 \(em Command, no inputs. Abbreviation: \f3pd\f1 .IN This command tells the turtle to lower its pen, so that later commands will draw lines when the turtle moves. .OU \f3penerase\f1 \(em Command, no inputs. Abbreviation: \f3pe\f1 .IN This command tells the turtle to "lower its eraser", so that lines previously drawn will be erased when retraced by the turtle. It only works with the display turtle. The commands \f3penup\f1, \f3pendown\f1, \f3penerase\f1, and \f3penreverse\f1 are mutually exclusive; whichever was most recently used is the one which affects the turtle. (Graphics terminals which cannot selectively erase lines, such as Tektronix displays, will treat \f3penerase\f1 as \f3pendown\f1.) .OU \f3penreverse\f1 \(em Command, no inputs. Abbreviation: \f3px\f1 .IN This command tells the display turtle to lower its "reversing pen"; thereafter, when the turtle moves, it turns on any points which were off, and turns off any points which were on. The commands \f3penup\f1, \f3pendown\f1, \f3penerase\f1, and \f3penreverse\f1 are mutually exclusive; whichever was most recently used is the one which affects the turtle. (Note: Graphics terminals which cannot penreverse will treat this command as \f3pendown\f1.) .OU \f3penmode\f1 \(em Operation, no inputs. .IN This operation applies to the floor or the display turtle. It outputs one of the words \f3penup\f1, \f3pendown\f1, \f3penerase\f1, or \f3penreverse\f1, depending on the current state of the turtle's pen. .OU \f3lampon\f1 \(em Command, no inputs. Abbreviation: \f3lon\f1 .IN This command applies only to the floor turtle; it turns on the headlamps on the front of the turtle. .OU \f3lampoff\f1 \(em Command, no inputs. Abbreviation: \f3loff\f1 .IN This command turns off the floor turtle's headlamps. .OU \f3hitoot\f1 \(em Command, one input. Abbreviation: \f3hit\f1 .IN This command applies only to the floor turtle. It sounds the turtle's horn at the higher of its two pitches. The input is a number which indicates the number of quarter-seconds to toot the horn. Note: large numbers are likely to lead to violent behavior on the part of other computer users. .OU \f3lotoot\f1 \(em Command, one input. Abbreviation: \f3lot\f1 .IN This command sounds the floor turtle's horn at the lower of its two pitches. The input is the duration of the toot. .OU \f3ftouch\f1 \(em Operation (predicate), no inputs. Abbreviation: \f3fto\f1 .IN This operation can be used only with the floor turtle. It has as its output the word \f3true\f1 if the front of the turtle is touching an obstacle; otherwise it has the word \f3false\f1 as its output. .OU \f3btouch\f1 \(em Operation (predicate), no inputs. Abbreviation: \f3bto\f1 .IN This operation can be used only with the floor turtle. It has as its output the word \f3true\f1 if the back of the turtle is touching an obstacle; otherwise it has the word \f3false\f1 as its output. .OU \f3ltouch\f1 \(em Operation (predicate), no inputs. Abbreviation: \f3lto\f1 .IN This operation can be used only with the floor turtle. It has as its output the word \f3true\f1 if the left side of the turtle is touching an obstacle; otherwise it has the word \f3false\f1 as its output. .OU \f3rtouch\f1 \(em Operation (predicate), no inputs. Abbreviation: \f3rto\f1 .IN This operation can be used only with the floor turtle. It has as its output the word \f3true\f1 if the right side of the turtle is touching an obstacle; otherwise it has the word \f3false\f1 as its output. .OU \f3clearscreen\f1 \(em Command, no inputs. Abbreviation: \f3cs\f1 .IN This command applies only to the display turtle. It erases everything on the TV screen, and restores the turtle to its initial position and heading (center of the screen, facing toward the top edge). .OU \f3wipeclean\f1 \(em Command, no inputs. Abbreviation: \f3clean\f1 .IN This command applies only to the display turtle. It erases everything on the TV screen, but does not change the turtle's position or heading. .OU \f3fullscreen\f1 \(em Command, no inputs. Abbreviation: \f3full\f1 .IN This command applies only to the Atari display turtle. It eliminates the use of the bottom four lines of the screen to display the commands you type; instead, the entire screen is available to show the picture drawn by the turtle. However, you can no longer see what you're typing. The command may be used after the picture is already drawn; the part "hidden" by the text at the bottom of the screen will become visible. On other displays, \f3fullscreen\f1 and \f3splitscreen\f1 are equivalent; they make the entire screen available for graphics, and text appears on the bottom line (Gigis) or superimposed (ADMs), or somewhere. .OU \f3splitscreen\f1 \(em Command, no inputs. Abbreviation: \f3split\f1 .IN This command applies only to the Atari display turtle. It restores the normal text display at the bottom of the screen, undoing the effect of the \f3full\f1 command. On other displays, \f3fullscreen\f1 and \f3splitscreen\f1 are equivalent; they make the entire screen available for graphics, with text superimposed in a display-dependent area. .OU \f3textscreen\f1 \(em Command, no inputs. Abbreviation: \f3text\f1 .IN This command applies only to the display turtle. It temporarily removes the turtle display from the screen, making the entire screen available for text display. The commands \f3fullscreen\f1 and \f3splitscreen\f1 will restore the graphics display. Note: On the Atari display, the picture on the screen is remembered, so that when you return to \f3fullscreen\f1 or \f3splitscreen\f1 mode, the picture returns to the screen. On other displays, the picture is forgotten, and you return to an empty graphics screen. .OU \f3hideturtle\f1 \(em Command, no inputs. Abbreviation: \f3ht\f1 .IN This command applies only to the display turtle. It erases the display of the turtle itself from the screen, so that only the lines drawn when the turtle moves are visible. The display is faster when the turtle is hidden (only slightly faster on the Atari, but much faster on other terminals). Also, once a graphics program is debugged, it may be prettier to watch without the turtle visible. (Note: On the Tektronix display, the turtle is never visible, because the terminal cannot erase selectively.) .OU \f3showturtle\f1 \(em Command, no inputs. Abbreviation: \f3st\f1 .IN This command applies only to the display turtle. It restores the display of the turtle, after the \f3hideturtle\f1 command has been used. (Note: On the Tektronix display, the turtle is never visible.) .OU \f3shownp\f1 \(em Operation (predicate), no inputs. .IN This predicate applies only to the display turtle. It outputs the word \f3true\f1 if the turtle is visible on the TV screen, \f3false\f1 otherwise. .OU \f3pencolor\f1 \(em Command, one input. Abbreviation: \f3penc\f1 .IN This command applies only to the display turtle. Its effect is different depending on how each type of terminal supports color. For the Atari, the input must be an integer between 0 and 6. An input of 0 enters black-and-white display mode (which is the turtle's initial mode), in which lines are as thin as possible but there is no control of color. Any other input selects color mode, in which lines are twice as thick, so the effective size of the screen is smaller, but colors can be used. There are, in color mode, three possible pen colors, numbered 1 to 3. There are 256 possible colors, but only three can be on the screen at a time; the \f3setcolor\f1 command is used to decide which pen draws in which actual color. If the input is 4, 5, or 6, the color is that of pen 1, 2, or 3, respectively, but lines are drawn in "fill mode": for each point inked, all points to its right are also inked until a point is reached which was already inked. On the Gigi, there is only one mode, and there is no loss of resolution in using color. The input must be between 0 and 7; 0 means black, 7 means white. The ADM, Tektronix, and Sun displays do not have multi-color drawing. .OU \f3setcolor\f1 \(em Command, two inputs. Abbreviation: \f3setc\f1 .IN This command applies only to the Atari display turtle. The first input must be an integer between 0 and 3. If the input is nonzero, the second input specifies the color for the pen selected by the first input. If the first input is zero, the second input specifies the background color for the color graphics display. The second input is either an integer between 0 and 15, which is a color number, or a list of two integers, in which case the first is a color number and the second is an intensity number, an integer between 0 and 7. .OU \f3setxy\f1 \(em Command, two inputs. .IN The two inputs must be numbers. The turtle is moved to the point on the screen whose x (horizontal) coordinate is the first input, and whose y (vertical) coordinate is the second input. The center of the screen, where the turtle starts, has both coordinates zero. If the pen is down, this command draws a line. This command applies only to the display turtle. .OU \f3setheading\f1 \(em Command, one input. Abbreviation: \f3seth\f1 .IN The input must be a number. The turtle's heading is set to the input, taken in degrees. Zero points straight up, as the turtle starts out; positive headings are clockwise from zero. This command applies only to the display turtle. .OU \f3towardsxy\f1 \(em Operation, two inputs. .IN This operation applies only to the display turtle. The two inputs must be numbers, which are the x and y coordinates of a point on the TV screen. The output is a number which is the heading to which the turtle must be set, in order to point towards that point from its current position. Note: this operation does not actually move or turn the turtle. You must use it as the input to \f3setheading\f1 if that is what you want. .OU \f3xcor\f1 \(em Operation, no inputs. .IN The output is the turtle's current x (horizontal) coordinate. The operation works only with the display turtle. .OU \f3ycor\f1 \(em Operation, no inputs. .IN The output is the turtle's current y (vertical) coordinate. This operation works only with the display turtle. .OU \f3heading\f1 \(em Operation, no inputs. .IN The output is the turtle's current heading in degrees. This operation works only with the display turtle. .OU \f3getpen\f1 \(em Operation, no inputs. .IN The output is the turtle's current pen color, or (on the Atari) zero if in black-and-white mode. This operation works only with the display turtle. .OU \f3setscrunch\f1 \(em Command, one input. Abbreviation: \f3setscrun\f1 .IN This command is used only for display turtles. The input must be a number. The vertical component of turtle motion is multiplied by this number before each motion is taken. If squares come out too wide on your screen, you should increase the number; if too tall, you should decrease it. (You can also use \f3setscrunch\f1 to deform the turtle's motion on purpose, so for example a circle program will draw an ellipse instead.) The initial scrunch value depends on the terminal you are using: for the Atari and the Gigi, it is around 0.8 (your particular computer center will adjust this for the particular TV monitors you use), but for the ADM, Tektronix, and Sun, it is 1.0 because these terminals display the same size steps horizontally and vertically. .OU \f3scrunch\f1 \(em Operation, no inputs. .IN This operation is used only for display turtles. It outputs a number, which is the scrunch factor (or aspect ratio) by which vertical motion is multiplied before it is displayed. This number is changed using the \f3setscrunch\f1 command. .OU .ti +5 .UB "Primitive procedures for arithmetic." Several procedures are available for arithmetic operations on numbers. In all cases, the inputs to these procedures must be numbers, except as otherwise indicated in the individual descriptions. .PP In general, procedures are used in Logo by typing first the name of the procedure, then its inputs. This is true of arithmetic procedures also, e.g. .EX sum 3 2 .EC However, for some arithmetic operations, Logo also recognizes the more traditional \f2infix\f1 notation, with the operation between the two inputs: .EX 3 + 2 .EC Be warned, though, that the use of infix forms makes it difficult for Logo to know how to group operations, unless parentheses are used. If you stick to the standard (in Logo) prefix notation, the grouping is always unambiguous. For example, the first two of these three instructions are equivalent, but the third is not: .EX if equalp count "hello 5 [print "Yes.] if (count "hello) = 5 [print "Yes.] if count "hello = 5 [print "Yes.] .EC The reason for the error message produced by the last of those three instructions is that Logo interprets it as .EX if count equalp "hello 5 [print "Yes.] .EC That is, the equality test is done first, on the word \f3hello\f1 itself, rather than first taking the count of \f3hello\f1 as was intended. .sp 1 \f3sum\f1 \(em Operation, two inputs. Infix: \f3+\f1 .IN The output of this procedure is the sum of the two inputs. .OU \f3difference\f1 \(em Operation, two inputs. Abbreviation: \f3diff\f1 Infix: \f3-\f1 .IN The output of this procedure is the difference of the two inputs. .OU \f3product\f1 \(em Operation, two inputs. Infix: \f3*\f1 .IN The output of this procedure is the product of the two inputs. .OU \f3quotient\f1 \(em Operation, two inputs. Infix: \f3/\f1 .IN The output of this procedure is the quotient of the two inputs. If both inputs are integers, the output is also an integer; the remainder of the division is lost. If either input is not an integer, the quotient can include a fractional part. Therefore, these two are not the same: .EX quotient 2 3 quotient 2.0 3 .EC .in -5 \f3remainder\f1 \(em Operation, two inputs. Abbreviation: \f3mod\f1 Infix: \f3\\\f1 .IN The inputs to this procedure must be integers. The output is also an integer, and is the remainder of dividing the first input by the second. .OU \f3maximum\f1 \(em Operation, two inputs. Abbreviation: \f3max\f1 .IN The output of this procedure is equal to whichever of the two inputs is numerically greater. .OU \f3minimum\f1 \(em Operation, two inputs. Abbreviation: \f3min\f1 .IN The output of this procedure is equal to whichever of the two inputs is numerically smaller. .OU \f3greaterp\f1 \(em Operation (predicate), two inputs. Infix: \f3>\f1 .IN The output of this procedure is the word \f3true\f1 if the first input is numerically strictly greater than the second input. Otherwise the output is the word \f3false\f1. .OU \f3lessp\f1 \(em Operation (predicate), two inputs. Infix: \f3<\f1 .IN The output of this procedure is the word \f3true\f1 if the first input is numerically strictly less than the second input. Otherwise the output is the word \f3false\f1. .OU \f3equalp\f1 \(em Operation (predicate), two inputs. Infix: \f3=\f1 .IN The two inputs to this procedure may be any Logo objects. If they are numbers, then the output is the word \f3true\f1 if they are numerically equal, \f3false\f1 if they are numerically unequal. If either input is not a number, then the output is the same as for the procedure \f3is\f1: it is \f3true\f1 if the two inputs are identical, \f3false\f1 if not. For example, the numbers \f32\f1 and \f32.0\f1 are numerically equal, but not identical. .OU \f3numberp\f1 \(em Operation (predicate), one input. .IN The input may be any Logo object. The output is the word \f3true\f1 if the input is a number, \f3false\f1 if not. .OU \f3zerop\f1 \(em Operation (predicate), one input. .IN The input must be a number. The output is the word \f3true\f1 if the input is numerically equal to zero, \f3false\f1 otherwise. .OU \f3random\f1 \(em Operation, no inputs. .IN The output from this procedure is an integer between 0 and 9, i.e., a single digit. It is chosen randomly, so the output may be different each time the procedure is used. .OU \f3rnd\f1 \(em Operation, one input. .IN The input must be a positive integer. The output is a randomly selected integer between 0 and one less than the input. .OU \f3sqrt\f1 \(em Operation, one input. .IN The input must be a nonnegative number. The output is its square root. .OU \f3pow\f1 \(em Operation, two inputs. .IN The inputs must be numbers. If the first is negative, the second must be an integer. The output is the first number raised to the power of the second input. .OU \f3sin\f1 \(em Operation, one input. .IN The input must be numeric. The output is the sine of the input, taken in degrees, not radians. .OU \f3cos\f1 \(em Operation, one input. .IN The input must be numeric. The output is the cosine of the input, taken in degrees, not radians. .OU \f3arctan\f1 \(em Operation, one input. Abbreviation: \f3atan\f1 .IN The input must be numeric. The output is the arctangent, in degrees, of the input. .OU .ti +5 .UB "Primitive procedures for conditional execution." The predicates (like \f3wordp\f1) which we've mentioned above can be used to carry out some command only if a condition is met. The basic command for the purpose is \f3if\f1: .sp 1 \f3if\f1 \(em Command or operation, two or three inputs. .IN The first input to the \f3if\f1 procedure must be either the word \f3true\f1 or the word \f3false\f1. Typically, it is the output from a predicate. The second and (optional) third inputs are lists containing instruction lines. The second input is executed if the first input is \f3true\f1. The third input, if any, is executed if the first input is \f3false\f1: .sp 1 .nf \f3to greet :person if equalp :person [Ronald Reagan] [print [Hi, turkey!]] \\ [print sentence "Hi, :person] end\f1 .fi .sp 1 In that example, the first input to \f3if\f1 is the output from the expression .br \f3equalp :person [Ronald Reagan]\f1. .sp 1 The \f3if\f1 procedure can be used as an operation, producing a value. In this case, the third input is required: .sp 1 .nf \f3print if equalp :person "Reagan ["Loser] ["Winner]\f1 .fi .OU \f3test\f1 \(em Command, one input. .IN The input must be the word \f3true\f1 or the word \f3false\f1. The command remembers its input for use in a later \f3iftrue\f1 or \f3iffalse\f1 command. This is an alternative to \f3if\f1 which is useful if several instructions are to be made conditional on the same condition. The remembered truth value is local to the current procedure, if any. .OU \f3iftrue\f1 \(em Command, one input. Abbreviation: \f3ift\f1 .IN The input must be an instruction list. It is run if the most recent \f3test\f1 command saved a \f3true\f1 value. .OU \f3iffalse\f1 \(em Command, one input. Abbreviation: \f3iff\f1 .IN The input must be an instruction list. It is run if the most recent \f3test\f1 command saved a \f3false\f1 value. .OU \f3both\f1 \(em Operation (predicate), two inputs. Abbreviation: \f3and\f1 .IN The two inputs must both be either \f3true\f1 or \f3false\f1. The output is \f3true\f1 if both inputs are \f3true\f1; otherwise the output is \f3false\f1. .OU \f3either\f1 \(em Operation (predicate), two inputs. Abbreviation: \f3or\f1 .IN The two inputs must be either \f3true\f1 or \f3false\f1. The output is \f3true\f1 if at least one of the inputs is \f3true\f1; otherwise the output is \f3false\f1. .OU \f3not\f1 \(em Operation (predicate), one input. .IN The input must be either \f3true\f1 or \f3false\f1. The output is \f3true\f1 if the input is \f3false\f1, and vice versa. .OU .ti +5 .UB "Primitive procedures for file input and output." In the Unix operating system, there are two steps in reading or writing files: first, the file must be \f2opened\f1, thereby associating a "file descriptor" (an integer) with the file name; second, the file descriptor is used to specify the file for each read or write operation. Logo has primitive procedures for each of these steps. .sp 1 \f3openread\f1 \(em Operation, one input. Abbreviation: \f3openr\f1 .IN The input to this procedure is a word, which must be a Unix filename. It can contain slashes to indicate directory names. If the file can be opened for reading, the output from the procedure is a file descriptor, which should be stored in a variable for use in reading the file. If the file cannot be opened, an error results. .OU \f3fileread\f1 \(em Operation, one input. Abbreviation: \f3fird\f1 .IN The input must be a file descriptor, previously output by \f3openread\f1. The procedure reads one line from the file. The output is the line, in the form of a list. (That is, the output is the file line as if enclosed in square brackets in a program.) If the end of the file has been reached, the output is the empty word. If the file line contains mismatched brackets, trouble may result. .OU \f3fileword\f1 \(em Operation, one input. Abbreviation: \f3fiwd\f1 .IN The input must be a file descriptor, open for reading. The procedure reads one line from the file. The output is that line, in the form of a single word, including spaces and punctuation characters. If the end of the file has been reached, the output is the empty list. .OU \f3openwrite\f1 \(em Operation, one input. Abbreviation: \f3openw\f1 .IN The input must be a Unix filename. The file is opened for writing (replacing any previous version), if allowed, and the output is a file descriptor, for use by file printing commands below. If the file cannot be opened, an error results. .OU .nf \f3fileprint\f1 \(em Command, two inputs. Abbreviation: \f3fip\f1 \f3filetype\f1 \(em Command, two inputs. Abbreviation: \f3fity\f1 \f3filefprint\f1 \(em Command, two inputs. Abbreviation: \f3fifp\f1 \f3fileftype\f1 \(em Command, two inputs. Abbreviation: \f3fifty\f1 .fi .IN The first input must be a file descriptor previously output by \f3openwrite\f1. The second input is any object. The second input is printed (typed, fprinted, ftyped) into the file. .OU \f3close\f1 \(em Command, one input. .IN The input must be a file descriptor. The file is closed. This must be done when you've finished reading or writing the file. .sp 1 Sample program: .sp 1 .nf \f3make "fd openwrite "outfile fileprint :fd "Hello. close :fd\f1 .fi .sp 1 This will create a file named \f3outfile\f1 containing the word \f3Hello.\f1 .OU .ti +5 .UB "Primitive procedures for procedure exit." A procedure written by a user, in Logo, can be a command or an operation. If it is an operation, you must, in the procedure, say what its output should be. If it is a command, it can simply stop at the end of the procedure, or you can explicitly make it stop before the end. .sp 1 \f3output\f1 \(em Command, one input. Abbreviation: \f3op\f1 .IN This command is used in a user procedure which is meant to be an operation. The input to this command becomes the output from the user procedure. Please don't be confused by the fact that the user procedure is an operation, while the \f3output\f1 primitive procedure is a command used in that procedure. Example: .sp 1 .nf \f3to nickname :person if equalp :person [Peter Parker] [output "Spiderman] if equalp :person [Lamont Cranston] [output "Shadow] output first :person end\f1 .fi .OU \f3stop\f1 \(em Command, no inputs. .IN This command is used in user procedures which are meant to be commands. It stops the user procedure. (Note that it does not stop all running procedures. If user procedure A runs user procedure B, a \f3stop\f1 command in procedure B returns to procedure A, which continues after the point where procedure B was invoked.) .OU \f3toplevel\f1 \(em Command, no inputs. Abbreviation: \f3top\f1 .IN This command stops all running procedures. The user at the terminal is prompted to type another command. This can be used when a user procedure discovers some error condition and wants to abort the entire program, for example. .OU .ti +5 .UB "Property lists." It is possible to associate with any name a list of "properties". A property list contains property names and property values. For example: .IN .nf .sp 1 \f3pprop "bh "firstname "Brian pprop "bh "lastname "Harvey\f1 .fi .OU The form of a property list is .EX [name1 val1 name2 val2 name3 val3] .EC Although this data structure could be created using other Logo primitives, special property list primitives are provided because they are faster. The property lists do not share storage with Logo variables, so you can change the value of any property without having to recopy the entire property list as you would ordinarily. The following primitives manipulate property lists. .sp 1 \f3pprop\f1 \(em Command, three inputs. .IN The first input, which must be a word, is a name with which a property list is associated. The second input, which must be a word, is the name of a property. The third input can be any Logo object. It becomes the value of the specified property of the specified name. .OU \f3gprop\f1 \(em Operation, two inputs. .IN Both inputs must be words. The first is a name, and the second is a property name. The output is the value of the indicated property of the indicated object. It is not an error if there is no such property; the output in that case is the empty list. .OU \f3remprop\f1 \(em Command, two inputs. .IN The inputs must be words, as for \f3gprop\f1. The specified property is removed from the specified name. .OU \f3plist\f1 \(em Operation, one input. .IN The input must be a word, which is a name. The output is the property list of the specified name. Note: the output is actually a copy of the property list. The real property list is not a Logo list. Any later changes to the properties of the specified name will not change the list which was output by an earlier \f3plist\f1. .OU \f3pps\f1 \(em Command, no inputs. .IN All properties of all names are listed on your terminal. .OU .ti +5 .UB "Pausing." When you are debugging a complicated Logo program, it is very helpful to be able to stop in the middle of a procedure, so that you can give interactive commands to examine its inputs and other local variables. This is different from stopping a procedure, which destroys its local environment. There are three ways a procedure can pause: (1) You can include the command \f3pause\f1 in the procedure definition, to make the procedure pause at a particular place you choose in advance; (2) you can decide to pause a procedure while it is running by typing the system "interrupt" character (this is control-C at Lincoln-Sudbury but is different on other systems); or (3) you can arrange for an error in the processing of the procedure to pause instead of stopping as it usually does. .PP Note that when you type the system "quit" character (control-G at Lincoln-Sudbury) Logo does not pause, but returns to toplevel. All information about the local state of your active procedures is lost. .PP When you are paused, Logo accepts instructions from your terminal as it does at toplevel, but local variables can be examined or modified. To let you know that you are paused, Logo prompts with the characters "\f3-*\f1" instead of just "\f3*\f1" as usual. It is possible to pause within a procedure within a pause; in this case your prompt is "\f3--*\f1" to indicate two levels of pause. This can be continued to higher levels. .PP To get out of a pause, there are three things you can do. You can give the command \f3toplevel\f1, which stops all pending procedures and returns to interactive top level. You can give the command \f3stop\f1 or the command \f3output\f1 with an input, which will terminate the current procedure (without or with an output respectively) and return to its calling procedure. Or you can give the command \f3continue\f1, which will resume the procedure at the point where you paused. .sp 1 \f3pause\f1 \(em Command, no inputs. .IN This command is meaningful only within a procedure. It causes a pause. .OU \f3continue\f1 \(em Command, no inputs. Abbreviation: \f3co\f1 .IN This command is meaningful only when typed during an interactive pause. It continues the current procedure from where it was paused. .OU \f3errpause\f1 \(em Command, no inputs. .IN This command tells Logo that any errors which happen during procedure execution from now on should cause a pause, rather than a return to toplevel. .OU \f3errquit\f1 \(em Command, no inputs. .IN This command tells Logo that any errors which happen during procedure execution from now on should return to toplevel, rather than pausing. This is the initial state of affairs when you start Logo. .OU \f3setqpause\f1 \(em Command, no inputs. .IN This command tells Logo that from now on, the system quit character should pause, and the system interrupt character should return to toplevel. This is the reverse of the usual interpretation. This command is provided for people whose systems or keyboards make one of these characters easier to type than the other. In particular, under Eunice there is only an interrupt character, not a quit character. .OU \f3setipause\f1 \(em Command, no inputs. .IN This command tells Logo that from now on, the system interrupt character should pause, and the system quit character should return to toplevel. This is the initial state of affairs when you start Logo. .OU .ti +5 .UB "Miscellaneous primitives." The remaining primitives are one of a kind, or very obscure, or both. .sp 1 \f3goodbye\f1 \(em Command, no inputs. Abbreviation: \f3bye\f1 .IN This command is used to leave Logo. It is the only way out, unless there is a bug somewhere. .OU \f3thing\f1 \(em Operation, one input. .IN The input must be a word, and must be the name of a variable. The output is the value of the variable. These are equivalent: .sp 1 .nf \f3:foo thing "foo\f1 .fi .OU \f3namep\f1 \(em Operation (predicate), one input. .IN The input must be a word. The output is \f3true\f1 if that word is the name of a variable which has a value assigned to it, \f3false\f1 otherwise. .OU \f3wait\f1 \(em Command, one input. .IN The input must be a positive integer. Logo waits that many seconds before continuing. .OU \f3trace\f1 \(em Command, no inputs. .IN This command is used for debugging your Logo programs. After you use this command, every time a user-defined procedure starts or stops, a message is typed at your terminal naming the procedure and its inputs or its output, if any. The message is indented according to the depth in procedure calls. .OU \f3untrace\f1 \(em Command, no inputs. .IN This command turns off the trace messages started by the \f3trace\f1 command. .OU \f3unix\f1 \(em Command, one input. .IN The input must be a Unix shell command, which is carried out in a forked shell. (/bin/sh is used, not csh.) Example: .sp 1 .nf \f3to whois :user unix (sentence "grep (word "'^ :user ":') "/etc/inquir) end\f1 .fi .OU \f3run\f1 \(em Command or operation, one input. .IN The input must be a list, containing a Logo instruction line. The list is run as if you typed it directly to Logo. Example: .sp 1 .nf \f3to while :condition :cmd if not run :condition [stop] run :cmd while :condition :cmd end .sp 1 make "number 1 while [:number < 5] [print :number; make "number :number+1]\f1 .fi .sp 1 The \f3run\f1 procedure can be used as an operation, if its input is a Logo expression which produces a value, instead of a complete instruction: .sp 1 \f3print run [sum 2 3]\f1 .OU \f3repeat\f1 \(em Command, two inputs. .IN The first input must be a positive number. The second is an instruction list, as for the \f3run\f1 command. The list is run repeatedly, the number of times specified by the first input: .sp 1 \f3repeat 5 [print "hello]\f1 .OU \f3repcount\f1 \(em Operation, no inputs. .IN This operation may be used only within the range of a repeat command. It outputs the number of repetitions which have been done, including the current one. That is, it outputs 1 the first time through, 2 the second time, and so on. .OU \f3cbreak\f1 \(em Command, one input. .IN The input must be either the word \f3on\f1 or the word \f3off\f1. If the input is \f3on\f1, your terminal is placed in cbreak mode, which means that what you type is made available to your program every character, rather than every line. This must be done before the \f3readchar\f1 procedure, below, will work. This facility is good for writing video game programs or text editors. While in cbreak mode, echo is turned off also. .OU \f3readchar\f1 \(em Operation, no inputs. Abbreviation: \f3rc\f1 .IN This operation waits for you to type a single character at your terminal. The output is a word containing only that character. This works only if you have turned on cbreak mode; see above. .OU \f3keyp\f1 \(em Operation (predicate), no inputs. .IN This procedure outputs \f3true\f1 if there is a character waiting to be read from the terminal, if you are in cbreak mode. If not, it outputs \f3true\f1 if there is an entire line waiting to be read. .OU \f3oflush\f1 \(em Command, no inputs. .IN Normally, when you tell Logo to print something, the printing is not done right away. Instead, Logo remembers everything you tell it to print, and the printing is done all at once the next time Logo is waiting for you to type something. This arrangement makes Logo much faster than it would be if everything were printed immediately. The \f3oflush\f1 command tells Logo to print whatever you've previously asked for right away, without waiting. .OU \f3help\f1 \(em Command, no inputs. .IN This command types at your terminal a brief message about Logo and how to use it. .OU \f3describe\f1 \(em Command, one input. .IN The input must be the name of a Logo primitive procedure. A brief explanation of that primitive is typed at your terminal. .OU \f3go\f1 \(em Command, one input. .IN This command can be used only inside a procedure. The input must be a number. The same number must appear at the beginning of some line in the same procedure. (This line number is otherwise ignored.) The next command executed will be the one on the indicated line in the definition. Note: there is always a better way to do it. If you have previously programmed in BASIC, your only hope of ever really learning how to program computers is NEVER EVER to use the \f3go\f1 command! .OU \f3debquit\f1 \(em Command, no inputs. .IN This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, the QUIT signal is not caught by Logo, so it will cause a core dump. .OU \f3memtrace\f1 \(em Command, no inputs. .IN This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every allocation or deallocation of memory, and every character parsed by the interpreter, types an incomprehensible message at your terminal. .OU \f3yaccdebug\f1 \(em Command, no inputs. .IN This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. .OU .ti +5 .UB "The Logo library." The directory /usr/lib/logo contains Logo procedures which are available to all users. They are not listed by \f3pots\f1, but can be thought of as pseudo-primitives which happen to be written in Logo. Some of these procedures are only useful in conjunction with the teaching units used in Introduction to Computers, but others are generally useful. This manual does not fully document the Logo library, because it changes too often. Look through the /usr/lib/logo directory yourself if you want. The procedures \f3listp\f1, \f3home\f1, \f3pos\f1, \f3setpos\f1, \f3towards\f1, \f3setx\f1, and \f3sety\f1 in the library are provided for partial compatibility with Apple Logo. 0707070000020066000407550001460001440000020673260361052672000000500000000000help0707070000020056521006440001460001440000010673270360167405000001200000000406help/makemake --Command, two inputs. The first input is the name of a variable (that is, it must be a word); the second is any Logo object. The effect of the command is to assign the second input as the value of the variable named by the first input. 0707070000020061761006440001460001440000010673300360167405100001300000000346help/locallocal --Command, one input. The input must be a word. A variable with that word as its name is created, local to the currently running procedure (that is, local to the procedure in which the local command is used). 0707070000020065041006440001460001440000010673310360167405100001000000001640help/toto --Command, special form, see below. This command takes a variable number of inputs. The first is the name of a procedure to be defined. The rest, if any, must be preceded by colons, and are the names of variables to be used as inputs to the procedure. Logo responds to the to command by printing a "greater than" sign (>) prompt, to show you that you are defining a procedure rather than entering commands to be executed immediately. You type the instruction lines which make up the definition. When you are done with the definition, type the special word end on a line by itself. For example: _*to twoprint :thing _>print :thing _>print :thing _>end _* This example shows the definition of a procedure named twoprint, which has one input, named thing. The procedure you are defining with the to command must not already be defined. 0707070000020067201006440001460001440000010673320360167405200001200000004533help/editedit --Command, zero or one input. Abbreviation: ed The input to this command must be a word, which is the name of a procedure, or a list of words, each of which is the name of a procedure. (Unlike the to command, but like all other Logo procedures, the edit command evaluates its input, so you must use a quotation mark before the procedure name, if only one is given, to indicate that it is the name itself which is the input to edit; otherwise Logo would actually run the procedure to calculate the input to edit.) The procedure you name may or may not already be defined. Logo responds to the edit command by running the text editor edt, editing the definition of the procedure(s) named in its input. (If a procedure was not previously defined, Logo creates an initial definition for it which contains only a title line and the end line.) You then edit the definition(s) with edt. When you write the file and leave edt, Logo will use the edited file as the definition(s) of the procedure(s). You must not put anything in the file except procedure definitions; in other words, every nonempty line in the file must be between a "to" line and an "end" line. If the edit command is given with no input, edt is given the same file as from the last time you used the edit command. This is a convenience for editing the same procedure(s) repeatedly. If, while editing, you change your mind and want to leave edt without redefining anything, use the command ESC ^Z instead of the normal ^Z. This special way of leaving edt tells Logo not to redefine your procedures. You have the choice, before exiting edt, of writing or not writing the temporary file which contains the definitions. If you don't write the file, another edit command with no input will re-read the previous contents of the temporary file; if you do, another edit will re-read the new version. If your Unix environment contains a variable named EDITOR, the contents of that variable is used as the name of the text editor program instead of the standard edt. The variable can contain a full pathname, or just a program name if the program can be found in /bin or /usr/bin. Your favorite editor may not have a facility like edt's ESC ^Z to abort redefinition. 0707070000020066271006440001460001440000010673360360167405200001200000000552help/showshow --Command, one input. Abbreviation: po The input to this command is a word or a list of words. Each word must be the name of a procedure. The command prints out the definition(s) of the procedure(s) on your terminal. (The abbreviation po stands for printout, which is the name used for this command in some other versions of Logo.) 0707070000020067211006440001460001440000010673370360167405200001200000000257help/potspots --Command, no inputs. This command types at your terminal the title lines of all procedures you've defined. The name is an abbreviation for "print out titles". 0707070000020034131006440001460001440000010513010360167405200001300000000366help/eraseerase --Command, one input. Abbreviation: er As for the show command, the input is either a word, naming one procedure, or a list of words, naming more than one. The named procedures are erased, so that they are no longer defined. 0707070000020021221006440001460001440000010170340360167405300001300000000613help/printprint --Command, one input. Abbreviation: pr The input, which may be a word or a list, is printed on the terminal, followed by a new line character. (That is, the terminal is positioned at the beginning of a new line after printing the object.) If the object is a list, any sub-lists are delimited by square brackets, but the entire object is not delimited by brackets. 0707070000020067171006440001460001440000010524270360167405300001200000000427help/typetype --Command, one input. The input, which may be a word or a list, is printed on the terminal, without a new line character. (That is, the terminal remains positioned at the end of the object after printing it.) Brackets are used as with the print command. 0707070000020030121006440001460001440000010632520360167405300001400000000364help/fprintfprint --Command, one input. Abbreviation: fp The input is printed as by the print command, except that if it is a list (as opposed to a word) it is enclosed in square brackets. The name of the command is short for "full print". 0707070000020030041006440001460001440000010665240360167405400001300000000245help/ftypeftype --Command, one input. Abbreviation: fty The input is printed as by the type command, except that if it is a list, it is enclosed in square brackets. 0707070000020065311006440001460001440000010720220360167405400001600000000634help/readlistreadlist --Operation, no inputs. Abbreviation: rl Logo waits for a line to be typed by the user. The contents of the line are made into a list, as though typed within square brackets as part of a Logo instruction. (The user should not actually type brackets around the line, unless s/he desires a list of one element, which is a list itself.) That list is the output from the operation. 0707070000020067241006440001460001440000010546460360167405400001500000000247help/requestrequest --Operation, no inputs. A question mark is printed on the terminal as a prompt. Then Logo waits for a line to be typed by the user, as for readlist. 0707070000020067251006440001460001440000010703750360167405400001200000000325help/wordword --Operation, two inputs. The two inputs must be words. The output is a word which is the concatenation of the two inputs. There is no space or other separation of the two inputs in the output. 0707070000020067231006440001460001440000010703770360167405400001600000001226help/sentencesentence --Operation, two inputs. Abbreviation: se The two inputs may be words or lists. The output is a list formed from the two inputs in this way: if either input is a word, that word becomes a member of the output list; if either input is a list, the members of that input become members of the output. Here are some examples: first input second input output "hello "test [hello test] "goodbye [cruel world] [goodbye cruel world] [a b] [c d] [a b c d] [] "garply [garply] If an input is the empty list, as in the last example above, it contributes nothing to the output. 0707070000020067261006440001460001440000010701770360167405500001200000000210help/listlist --Operation, two inputs. The output is a list of two elements, namely, the two inputs. The inputs may be words or lists. 0707070000020067271006440001460001440000010703760360167405500001200000000361help/fputfput --Operation, two inputs. The first input may be any Logo object; the second must be a list. The output is a list which is identical with the second input except that it has an extra first member, namely, the first input. 0707070000020067301006440001460001440000010672630360167405500001200000000360help/lputlput --Operation, two inputs. The first input may be any Logo object; the second must be a list. The output is a list which is identical with the second input except that it has an extra last member, namely, the first input. 0707070000020067321006440001460001440000010540310360167405500001300000000520help/firstfirst --Operation, one input. Abbreviation: f The input may be any non-empty Logo object. If the input is a list, the output is its first member. If the input is a word, the output is a single-letter word, namely the first letter of the input. If the input is empty (a word or list of length zero) an error results. 0707070000020067351006440001460001440000010540320360167405600001200000000515help/lastlast --Operation, one input. Abbreviation: l The input may be any non-empty Logo object. If the input is a list, the output is its last member. If the input is a word, the output is a single-letter word, namely the last letter of the input. If the input is empty (a word or list of length zero) an error results. 0707070000020071341006440001460001440000010543160360167405600001600000001027help/butfirstbutfirst --Operation, one input. Abbreviation: bf The input may be any non-empty Logo object. If the input is a list, the output is a list equal to the input list with the first member removed. (If the input list has only one member, the output is the empty list, a list of zero members.) If the input is a word, the output is a word equal to the input word with the first letter removed. (If the input is a single-letter word, the output is the empty word.) If the input is empty, an error results. 0707070000020071411006440001460001440000010537720360167405600001500000001024help/butlastbutlast --Operation, one input. Abbreviation: bl The input may be any non-empty Logo object. If the input is a list, the output is a list equal to the input list with the last member removed. (If the input list has only one member, the output is the empty list, a list of zero members.) If the input is a word, the output is a word equal to the input word with the last letter removed. (If the input is a single-letter word, the output is the empty word.) If the input is empty, an error results. 0707070000020071521006440001460001440000010540150360167405700001300000001064help/countcount --Operation, one input. The input may be any Logo object. If the input is a list, the output is a number indicating the number of members in the list. (Note: only top-level members are counted, not members of members. The count of the list [[This is] [a list]] is 2, not 4.) If the input is a word, the output is the number of letters (or other characters) in the word. Remember that in Logo a number is just a particular kind of word, so the output from count can be manipulated like any other Logo word. 0707070000020071531006440001460001440000010721020360167405700001400000000357help/emptypemptyp --Operation (predicate), one input. The input can be any Logo object. The output is the word true if the input is of length zero (i.e., it is the empty word or the empty list). The output is the word false otherwise. 0707070000020071541006440001460001440000010661040360167405700001300000000277help/wordpwordp --Operation (predicate), one input. The input can be any Logo object. The output is the word true if the input is a word. The output is the word false if the input is a list. 0707070000020071551006440001460001440000010661640360167406000001700000000414help/sentencepsentencep --Operation (predicate), one input. The input can be any Logo object. The output is the word true if the input is a sentence, i.e., a list of words. The output is the word false if the input is a word, or if any member of the input is a list. 0707070000020071561006440001460001440000010601120360167406000001000000000741help/isis --Operation (predicate), two inputs. The inputs can be any Logo objects. The output is the word true if the two inputs are identical. That is, they must be of the same type (both words or both lists), they must have the same count, and their members (if lists) or their characters (if words) must be identical. The output is the word false otherwise. (Note: this is an exception to the convention that names of predicates end with the letter "p".) 0707070000020071571006440001460001440000010510710360167406000001500000000724help/memberpmemberp --Operation (predicate), two inputs. If the second input is a word, the first input must be a word of length one (a single character), and the output is true if and only if the first input is contained in the second as a character. If the second input is a list, the first input can be any Logo object, and the output is true if and only if the first input is a member of the second input. (Note that this is member, not subset.) 0707070000020071601006440001460001440000010720370360167406100001200000000616help/itemitem --Operation, two inputs. Abbreviation: nth The first input must be a positive integer less than or equal to the count of the second input. If the second input is a word, the output is a word of length one containing the selected character from the word. (Items are numbered from 1, not 0.) If the second input is a list, the output is the selected member of the list. 0707070000020071611006440001460001440000010720200360167406100001400000001731help/turtleturtle --Command, one input. Abbreviation: tur The input is the name of a turtle. You can only control one turtle at a time, so using this command a second time releases the turtle previously selected. The names of floor turtles are numbers like 0 and 1. If you are using a graphics display terminal (not just a text display trminal), you can control the display turtle by using the word display (or the abbreviation dpy) as the turtle name. (As usual, the word must be preceded by a quotation mark.) If you use a graphics primitive without selecting a turtle, Logo assumes that you want to use the display turtle. But once you select a floor turtle, you must say turtle "display explicitly to switch to the display. The word off as input to the turtle command releases a floor turtle, if you have one, or turns off the graphics display if you have been using the display turtle. This also happens when you leave Logo. 0707070000020021441006440001460001440000010664060360167406200001500000001112help/forwardforward --Command, one input. Abbreviation: fd The input is a number, the distance you would like the turtle to move. For a floor turtle, the unit of distance is however far the turtle can travel in 1/30 second. For a display turtle, the unit is one dot on the TV screen. (Note: on some displays, one dot horizontally may not be the same length as one dot vertically. The setscrunch command allows you to control the relative sizes so that squares come out square.) The turtle moves in whatever direction it is pointing when you use the command. 0707070000020021541006440001460001440000010170070360167406200001200000000365help/backback --Command, one input. Abbreviation: bk The input is a number, a distance to move, as in the forward command. The difference is that the turtle moves backward, i.e., in the direction exactly opposite to the way it's pointing. 0707070000020021631006440001460001440000010221570360167406200001200000001353help/leftleft --Command, one input. Abbreviation: lt The input is a number, the number of degrees of angle through which the turtle should turn counterclockwise. This command does not change the position of the turtle, but merely its heading (the direction in which it points). The turn will be only approximately correct for the floor turtle, because of mechanical errors. For the display turtle, the angle will be perfectly reproducible, although it may not look quite right on the screen because of the difference in size between horizontal and vertical dots. Nevertheless, a display turtle program will work in the sense that when the turtle is supposed to return to its starting point, it will do so. 0707070000020032741006440001460001440000010425000360167406300001300000000222help/rightright --Command, one input. Abbreviation: rt The input is a number; the turtle turns through the specified number of degrees clockwise. 0707070000020033571006440001460001440000010535600360167406300001300000001124help/penuppenup --Command, no inputs. Abbreviation: pu This command tells the turtle to raise its pen from the paper, so that it does not leave a trace when it moves. In the case of the display turtle, there is no physical pen to move mechanically, but the effect is the same: any forward or back commands after this point do not draw a line. The floor turtle starts with its pen up; the display turtle starts with its pen down. Note: the floor turtle will not move on the carpet correctly with its pen down; put it on a smooth surface if you want to draw pictures. 0707070000020034121006440001460001440000010221610360167406400001500000000247help/pendownpendown --Command, no inputs. Abbreviation: pd This command tells the turtle to lower its pen, so that later commands will draw lines when the turtle moves. 0707070000020046071006440001460001440000010535560360167406400001600000001005help/penerasepenerase --Command, no inputs. Abbreviation: pe This command tells the turtle to "lower its eraser", so that lines previously drawn will be erased when retraced by the turtle. It only works with the display turtle. The commands penup, pendown, penerase, and penreverse are mutually exclusive; whichever was most recently used is the one which affects the turtle. (Graphics terminals which cannot selectively erase lines, such as Tektronix displays, will treat penerase as pendown.) 0707070000020046341006440001460001440000010544730360167406500001000000000766help/pxpenreverse --Command, no inputs. Abbreviation: px This command tells the display turtle to lower its "reversing pen"; thereafter, when the turtle moves, it turns on any points which were off, and turns off any points which were on. The commands penup, pendown, penerase, and penreverse are mutually exclusive; whichever was most recently used is the one which affects the turtle. (Note: Graphics terminals which cannot penreverse will treat this command as pendown.) 0707070000020047511006440001460001440000010720570360167406500001500000000343help/penmodepenmode --Operation, no inputs. This operation applies to the floor or the display turtle. It outputs one of the words penup, pendown, penerase, or penreverse, depending on the current state of the turtle's pen. 0707070000020050331006440001460001440000010544460360167406600001400000000236help/lamponlampon --Command, no inputs. Abbreviation: lon This command applies only to the floor turtle; it turns on the headlamps on the front of the turtle. 0707070000020050341006440001460001440000010544440360167406600001500000000153help/lampofflampoff --Command, no inputs. Abbreviation: loff This command turns off the floor turtle's headlamps. 0707070000020051701006440001460001440000010720600360167406700001400000000553help/hitoothitoot --Command, one input. Abbreviation: hit This command applies only to the floor turtle. It sounds the turtle's horn at the higher of its two pitches. The input is a number which indicates the number of quarter-seconds to toot the horn. Note: large numbers are likely to lead to violent behavior on the part of other computer users. 0707070000020052511006440001460001440000010574320360167406700001400000000255help/lotootlotoot --Command, one input. Abbreviation: lot This command sounds the floor turtle's horn at the lower of its two pitches. The input is the duration of the toot. 0707070000020052641006440001460001440000010574300360167406700001400000000411help/ftouchftouch --Operation (predicate), no inputs. Abbreviation: fto This operation can be used only with the floor turtle. It has as its output the word true if the front of the turtle is touching an obstacle; otherwise it has the word false as its output. 0707070000020053011006440001460001440000010574310360167407000001400000000410help/btouchbtouch --Operation (predicate), no inputs. Abbreviation: bto This operation can be used only with the floor turtle. It has as its output the word true if the back of the turtle is touching an obstacle; otherwise it has the word false as its output. 0707070000020053241006440001460001440000010553440360167407000001400000000415help/ltouchltouch --Operation (predicate), no inputs. Abbreviation: lto This operation can be used only with the floor turtle. It has as its output the word true if the left side of the turtle is touching an obstacle; otherwise it has the word false as its output. 0707070000020055571006440001460001440000010574260360167407100001400000000416help/rtouchrtouch --Operation (predicate), no inputs. Abbreviation: rto This operation can be used only with the floor turtle. It has as its output the word true if the right side of the turtle is touching an obstacle; otherwise it has the word false as its output. 0707070000020056321006440001460001440000010574270360167407100001000000000412help/csclearscreen --Command, no inputs. Abbreviation: cs This command applies only to the display turtle. It erases everything on the TV screen, and restores the turtle to its initial position and heading (center of the screen, facing toward the top edge). 0707070000020056461006440001460001440000010616560360167407100001700000000321help/wipecleanwipeclean --Command, no inputs. Abbreviation: clean This command applies only to the display turtle. It erases everything on the TV screen, but does not change the turtle's position or heading. 0707070000020057111006440001460001440000010616570360167407200001200000001317help/fullfullscreen --Command, no inputs. Abbreviation: full This command applies only to the Atari display turtle. It eliminates the use of the bottom four lines of the screen to display the commands you type; instead, the entire screen is available to show the picture drawn by the turtle. However, you can no longer see what you're typing. The command may be used after the picture is already drawn; the part "hidden" by the text at the bottom of the screen will become visible. On other displays, fullscreen and splitscreen are equivalent; they make the entire screen available for graphics, and text appears on the bottom line (Gigis) or superimposed (ADMs), or somewhere. 0707070000020057151006440001460001440000010616600360167407300001300000000625help/splitsplitscreen --Command, no inputs. Abbreviation: split This command applies only to the Atari display turtle. It restores the normal text display at the bottom of the screen, undoing the effect of the full command. On other displays, fullscreen and splitscreen are equivalent; they make the entire screen available for graphics, with text superimposed in a display-dependent area. 0707070000020057341006440001460001440000010616540360167407400001200000001104help/texttextscreen --Command, no inputs. Abbreviation: text This command applies only to the display turtle. It temporarily removes the turtle display from the screen, making the entire screen available for text display. The commands fullscreen and splitscreen will restore the graphics display. Note: On the Atari display, the picture on the screen is remembered, so that when you return to fullscreen or splitscreen mode, the picture returns to the screen. On other displays, the picture is forgotten, and you return to an empty graphics screen. 0707070000020057701006440001460001440000010616550360167407400001000000001121help/hthideturtle --Command, no inputs. Abbreviation: ht This command applies only to the display turtle. It erases the display of the turtle itself from the screen, so that only the lines drawn when the turtle moves are visible. The display is faster when the turtle is hidden (only slightly faster on the Atari, but much faster on other terminals). Also, once a graphics program is debugged, it may be prettier to watch without the turtle visible. (Note: On the Tektronix display, the turtle is never visible, because the terminal cannot erase selectively.) 0707070000020060601006440001460001440000010601340360167407500001000000000404help/stshowturtle --Command, no inputs. Abbreviation: st This command applies only to the display turtle. It restores the display of the turtle, after the hideturtle command has been used. (Note: On the Tektronix display, the turtle is never visible.) 0707070000020061251006440001460001440000010601370360167407500001400000000275help/shownpshownp --Operation (predicate), no inputs. This predicate applies only to the display turtle. It outputs the word true if the turtle is visible on the TV screen, false otherwise. 0707070000020061501006440001460001440000010647060360167407500001600000002435help/pencolorpencolor --Command, one input. Abbreviation: penc This command applies only to the display turtle. Its effect is different depending on how each type of terminal supports color. For the Atari, the input must be an integer between 0 and 6. An input of 0 enters black-and-white display mode (which is the turtle's initial mode), in which lines are as thin as possible but there is no control of color. Any other input selects color mode, in which lines are twice as thick, so the effective size of the screen is smaller, but colors can be used. There are, in color mode, three possible pen colors, numbered 1 to 3. There are 256 possible colors, but only three can be on the screen at a time; the setcolor command is used to decide which pen draws in which actual color. If the input is 4, 5, or 6, the color is that of pen 1, 2, or 3, respectively, but lines are drawn in "fill mode": for each point inked, all points to its right are also inked until a point is reached which was already inked. On the Gigi, there is only one mode, and there is no loss of resolution in using color. The input must be between 0 and 7; 0 means black, 7 means white. The ADM, Tektronix, and Sun displays do not have multi- color drawing. 0707070000020061751006440001460001440000010676100360167407600001600000001162help/setcolorsetcolor --Command, two inputs. Abbreviation: setc This command applies only to the Atari display turtle. The first input must be an integer between 0 and 3. If the input is nonzero, the second input specifies the color for the pen selected by the first input. If the first input is zero, the second input specifies the background color for the color graphics display. The second input is either an integer between 0 and 15, which is a color number, or a list of two integers, in which case the first is a color number and the second is an intensity number, an integer between 0 and 7. 0707070000020062711006440001460001440000010647100360167407600001300000000643help/setxysetxy --Command, two inputs. The two inputs must be numbers. The turtle is moved to the point on the screen whose x (horizontal) coordinate is the first input, and whose y (vertical) coordinate is the second input. The center of the screen, where the turtle starts, has both coordinates zero. If the pen is down, this command draws a line. This command applies only to the display turtle. 0707070000020063271006440001460001440000010717640360167407600001200000000457help/sethsetheading --Command, one input. Abbreviation: seth The input must be a number. The turtle's heading is set to the input, taken in degrees. Zero points straight up, as the turtle starts out; positive headings are clockwise from zero. This command applies only to the display turtle. 0707070000020063301006440001460001440000010540750360167407700001700000000752help/towardsxytowardsxy --Operation, two inputs. This operation applies only to the display turtle. The two inputs must be numbers, which are the x and y coordinates of a point on the TV screen. The output is a number which is the heading to which the turtle must be set, in order to point towards that point from its current position. Note: this operation does not actually move or turn the turtle. You must use it as the input to setheading if that is what you want. 0707070000020063331006440001460001440000010647070360167407700001200000000227help/xcorxcor --Operation, no inputs. The output is the turtle's current x (horizontal) coordinate. The operation works only with the display turtle. 0707070000020063521006440001460001440000010541050360167407700001200000000226help/ycorycor --Operation, no inputs. The output is the turtle's current y (vertical) coordinate. This operation works only with the display turtle. 0707070000020063551006440001460001440000010541040360167410000001500000000224help/headingheading --Operation, no inputs. The output is the turtle's current heading in degrees. This operation works only with the display turtle. 0707070000020063721006440001460001440000010722250360167410000001400000000302help/getpengetpen --Operation, no inputs. The output is the turtle's current pen color, or (on the Atari) zero if in black-and-white mode. This operation works only with the display turtle. 0707070000020063731006440001460001440000010546540360167410000001600000001542help/setscrunsetscrunch --Command, one input. Abbreviation: setscrun This command is used only for display turtles. The input must be a number. The vertical component of turtle motion is multiplied by this number before each motion is taken. If squares come out too wide on your screen, you should increase the number; if too tall, you should decrease it. (You can also use setscrunch to deform the turtle's motion on purpose, so for example a circle program will draw an ellipse instead.) The initial scrunch value depends on the terminal you are using: for the Atari and the Gigi, it is around 0.8 (your particular computer center will adjust this for the particular TV monitors you use), but for the ADM, Tektronix, and Sun, it is 1.0 because these terminals display the same size steps horizontally and vertically. 0707070000020064021006440001460001440000010540770360167410100001500000000434help/scrunchscrunch --Operation, no inputs. This operation is used only for display turtles. It outputs a number, which is the scrunch factor (or aspect ratio) by which vertical motion is multiplied before it is displayed. This number is changed using the setscrunch command. 0707070000020064301006440001460001440000010540740360167410100001100000000146help/sumsum --Operation, two inputs. Infix: + The output of this procedure is the sum of the two inputs. 0707070000020064731006440001460001440000010540700360167410200001200000000207help/diffdifference --Operation, two inputs. Abbreviation: diff Infix: - The output of this procedure is the difference of the two inputs. 0707070000020065621006440001460001440000010603240360167410200001500000000156help/productproduct --Operation, two inputs. Infix: * The output of this procedure is the product of the two inputs. 0707070000020067361006440001460001440000010221320360167410200001600000000616help/quotientquotient --Operation, two inputs. Infix: / The output of this procedure is the quotient of the two inputs. If both inputs are integers, the output is also an integer; the remainder of the division is lost. If either input is not an integer, the quotient can include a fractional part. Therefore, these two are not the same: quotient 2 3 quotient 2.0 3 0707070000020067501006440001460001440000010726510360167410300001700000000333help/remainderremainder --Operation, two inputs. Abbreviation: mod Infix: \ The inputs to this procedure must be integers. The output is also an integer, and is the remainder of dividing the first input by the second. 0707070000020071621006440001460001440000010425220360167410300001500000000232help/maximummaximum --Operation, two inputs. Abbreviation: max The output of this procedure is equal to whichever of the two inputs is numerically greater. 0707070000020071631006440001460001440000010425250360167410300001500000000232help/minimumminimum --Operation, two inputs. Abbreviation: min The output of this procedure is equal to whichever of the two inputs is numerically smaller. 0707070000020071641006440001460001440000010540760360167410300001600000000346help/greaterpgreaterp --Operation (predicate), two inputs. Infix: > The output of this procedure is the word true if the first input is numerically strictly greater than the second input. Otherwise the output is the word false. 0707070000020071651006440001460001440000010673450360167410400001300000000340help/lessplessp --Operation (predicate), two inputs. Infix: < The output of this procedure is the word true if the first input is numerically strictly less than the second input. Otherwise the output is the word false. 0707070000020071661006440001460001440000010673460360167410400001400000000746help/equalpequalp --Operation (predicate), two inputs. Infix: = The two inputs to this procedure may be any Logo objects. If they are numbers, then the output is the word true if they are numerically equal, false if they are numerically unequal. If either input is not a number, then the output is the same as for the procedure is: it is true if the two inputs are identical, false if not. For example, the numbers 2 and 2.0 are numerically equal, but not identical. 0707070000020071671006440001460001440000010425200360167410400001500000000234help/numberpnumberp --Operation (predicate), one input. The input may be any Logo object. The output is the word true if the input is a number, false if not. 0707070000020071701006440001460001440000010540510360167410400001300000000250help/zeropzerop --Operation (predicate), one input. The input must be a number. The output is the word true if the input is numerically equal to zero, false otherwise. 0707070000020071711006440001460001440000010425240360167410400001400000000331help/randomrandom --Operation, no inputs. The output from this procedure is an integer between 0 and 9, i.e., a single digit. It is chosen randomly, so the output may be different each time the procedure is used. 0707070000020071721006440001460001440000010511250360167410400001100000000235help/rndrnd --Operation, one input. The input must be a positive integer. The output is a randomly selected integer between 0 and one less than the input. 0707070000020071731006440001460001440000010425170360167410500001200000000156help/sqrtsqrt --Operation, one input. The input must be a nonnegative number. The output is its square root. 0707070000020071741006440001460001440000010603200360167410500001100000000311help/powpow --Operation, two inputs. The inputs must be numbers. If the first is negative, the second must be an integer. The output is the first number raised to the power of the second input. 0707070000020071751006440001460001440000010425210360167410500001100000000205help/sinsin --Operation, one input. The input must be numeric. The output is the sine of the input, taken in degrees, not radians. 0707070000020071761006440001460001440000010673430360167410500001100000000207help/coscos --Operation, one input. The input must be numeric. The output is the cosine of the input, taken in degrees, not radians. 0707070000020071771006440001460001440000010673440360167410600001400000000217help/arctanarctan --Operation, one input. Abbreviation: atan The input must be numeric. The output is the arctangent, in degrees, of the input. 0707070000020072001006440001460001440000010540200360167410600001000000001524help/ifif --Command or operation, two or three inputs. The first input to the if procedure must be either the word true or the word false. Typically, it is the output from a predicate. The second and (optional) third inputs are lists containing instruction lines. The second input is executed if the first input is true. The third input, if any, is executed if the first input is false: to greet :person if equalp :person [Ronald Reagan] [print [Hi, turkey!]] \ [print sentence "Hi, :person] end In that example, the first input to if is the output from the expression equalp :person [Ronald Reagan]. The if procedure can be used as an operation, producing a value. In this case, the third input is required: print if equalp :person "Reagan ["Loser] ["Winner] 0707070000020072011006440001460001440000010540210360167410600001200000000562help/testtest --Command, one input. The input must be the word true or the word false. The command remembers its input for use in a later iftrue or iffalse command. This is an alternative to if which is useful if several instructions are to be made conditional on the same condition. The remembered truth value is local to the current procedure, if any. 0707070000020072021006440001460001440000010540220360167410700001400000000236help/iftrueiftrue --Command, one input. Abbreviation: ift The input must be an instruction list. It is run if the most recent test command saved a true value. 0707070000020072031006440001460001440000010540140360167410700001500000000240help/iffalseiffalse --Command, one input. Abbreviation: iff The input must be an instruction list. It is run if the most recent test command saved a false value. 0707070000020072041006440001460001440000010304120360167410700001200000000303help/bothboth --Operation (predicate), two inputs. Abbreviation: and The two inputs must both be either true or false. The output is true if both inputs are true; otherwise the output is false. 0707070000020072051006440001460001440000010673410360167411000001400000000315help/eithereither --Operation (predicate), two inputs. Abbreviation: or The two inputs must be either true or false. The output is true if at least one of the inputs is true; otherwise the output is false. 0707070000020072061006440001460001440000010673420360167411000001100000000224help/notnot --Operation (predicate), one input. The input must be either true or false. The output is true if the input is false, and vice versa. 0707070000020072071006440001460001440000010170470360167411000001600000000625help/openreadopenread --Operation, one input. Abbreviation: openr The input to this procedure is a word, which must be a Unix filename. It can contain slashes to indicate directory names. If the file can be opened for reading, the output from the procedure is a file descriptor, which should be stored in a variable for use in reading the file. If the file cannot be opened, an error results. 0707070000020072101006440001460001440000010536520360167411100001600000000722help/filereadfileread --Operation, one input. Abbreviation: fird The input must be a file descriptor, previously output by openread. The procedure reads one line from the file. The output is the line, in the form of a list. (That is, the output is the file line as if enclosed in square brackets in a program.) If the end of the file has been reached, the output is the empty word. If the file line contains mismatched brackets, trouble may result. 0707070000020072111006440001460001440000010315300360167411100001600000000526help/filewordfileword --Operation, one input. Abbreviation: fiwd The input must be a file descriptor, open for reading. The procedure reads one line from the file. The output is that line, in the form of a single word, including spaces and punctuation characters. If the end of the file has been reached, the output is the empty list. 0707070000020072121006440001460001440000010537110360167411100001700000000470help/openwriteopenwrite --Operation, one input. Abbreviation: openw The input must be a Unix filename. The file is opened for writing (replacing any previous version), if allowed, and the output is a file descriptor, for use by file printing commands below. If the file cannot be opened, an error results. 0707070000020072131006440001460001440000010541270360167411100001700000000063help/fileprintfileprint --Command, two inputs. Abbreviation: fip 0707070000020072141006440001460001440000010541310360167411200001600000000063help/filetypefiletype --Command, two inputs. Abbreviation: fity 0707070000020072151006440001460001440000010543170360167411300001200000000065help/fifpfilefprint --Command, two inputs. Abbreviation: fifp 0707070000020072161006440001460001440000010540100360167411300001700000000363help/fileftypefileftype --Command, two inputs. Abbreviation: fifty The first input must be a file descriptor previously output by openwrite. The second input is any object. The second input is printed (typed, fprinted, ftyped) into the file. 0707070000020072171006440001460001440000010540110360167411300001300000000514help/closeclose --Command, one input. The input must be a file descriptor. The file is closed. This must be done when you've finished reading or writing the file. Sample program: make "fd openwrite "outfile fileprint :fd "Hello. close :fd This will create a file named outfile containing the word Hello. 0707070000020072201006440001460001440000010673400360167411300001400000001053help/outputoutput --Command, one input. Abbreviation: op This command is used in a user procedure which is meant to be an operation. The input to this command becomes the output from the user procedure. Please don't be confused by the fact that the user procedure is an operation, while the output primitive procedure is a command used in that procedure. Example: to nickname :person if equalp :person [Peter Parker] [output "Spiderman] if equalp :person [Lamont Cranston] [output "Shadow] output first :person end 0707070000020072211006440001460001440000010545640360167411300001200000000556help/stopstop --Command, no inputs. This command is used in user procedures which are meant to be commands. It stops the user procedure. (Note that it does not stop all running procedures. If user procedure A runs user procedure B, a stop command in procedure B returns to procedure A, which continues after the point where procedure B was invoked.) 0707070000020072221006440001460001440000010545220360167411300001600000000450help/topleveltoplevel --Command, no inputs. Abbreviation: top This command stops all running procedures. The user at the terminal is prompted to type another command. This can be used when a user procedure discovers some error condition and wants to abort the entire program, for example. 0707070000020072611006440001460001440000010421010360167411400001300000000477help/pproppprop --Command, three inputs. The first input, which must be a word, is a name with which a property list is associated. The second input, which must be a word, is the name of a property. The third input can be any Logo object. It becomes the value of the specified property of the specified name. 0707070000020072641006440001460001440000010725200360167411400001300000000455help/gpropgprop --Operation, two inputs. Both inputs must be words. The first is a name, and the second is a property name. The output is the value of the indicated property of the indicated object. It is not an error if there is no such property; the output in that case is the empty list. 0707070000020072671006440001460001440000010617470360167411500001500000000214help/rempropremprop --Command, two inputs. The inputs must be words, as for gprop. The specified property is removed from the specified name. 0707070000020072701006440001460001440000010617500360167411500001300000000567help/plistplist --Operation, one input. The input must be a word, which is a name. The output is the property list of the specified name. Note: the output is actually a copy of the property list. The real property list is not a Logo list. Any later changes to the properties of the specified name will not change the list which was output by an earlier plist. 0707070000020072721006440001460001440000010617510360167411500001100000000130help/ppspps --Command, no inputs. All properties of all names are listed on your terminal. 0707070000020072741006440001460001440000010617520360167411700001300000000155help/pausepause --Command, no inputs. This command is meaningful only within a procedure. It causes a pause. 0707070000020072751006440001460001440000010617530360167412000001600000000277help/continuecontinue --Command, no inputs. Abbreviation: co This command is meaningful only when typed during an interactive pause. It continues the current procedure from where it was paused. 0707070000020072771006440001460001440000010617540360167412000001600000000302help/errpauseerrpause --Command, no inputs. This command tells Logo that any errors which happen during procedure execution from now on should cause a pause, rather than a return to toplevel. 0707070000020073001006440001460001440000010617550360167412100001500000000363help/errquiterrquit --Command, no inputs. This command tells Logo that any errors which happen during procedure execution from now on should return to toplevel, rather than pausing. This is the initial state of affairs when you start Logo. 0707070000020073011006440001460001440000010617560360167412100001700000000722help/setqpausesetqpause --Command, no inputs. This command tells Logo that from now on, the system quit character should pause, and the system interrupt character should return to toplevel. This is the reverse of the usual interpretation. This command is provided for people whose systems or keyboards make one of these characters easier to type than the other. In particular, under Eunice there is only an interrupt character, not a quit character. 0707070000020073021006440001460001440000010617570360167412100001700000000371help/setipausesetipause --Command, no inputs. This command tells Logo that from now on, the system interrupt character should pause, and the system quit character should return to toplevel. This is the initial state of affairs when you start Logo. 0707070000020073031006440001460001440000010617600360167412100001500000000227help/goodbyegoodbye --Command, no inputs. Abbreviation: bye This command is used to leave Logo. It is the only way out, unless there is a bug somewhere. 0707070000020073041006440001460001440000010617610360167412100001300000000300help/thingthing --Operation, one input. The input must be a word, and must be the name of a variable. The output is the value of the variable. These are equivalent: :foo thing "foo 0707070000020073051006440001460001440000010222170360167412200001300000000273help/namepnamep --Operation (predicate), one input. The input must be a word. The output is true if that word is the name of a variable which has a value assigned to it, false otherwise. 0707070000020073061006440001460001440000010537250360167412200001200000000173help/waitwait --Command, one input. The input must be a positive integer. Logo waits that many seconds before continuing. 0707070000020073071006440001460001440000010222140360167412200001300000000537help/tracetrace --Command, no inputs. This command is used for debugging your Logo programs. After you use this command, every time a user-defined procedure starts or stops, a message is typed at your terminal naming the procedure and its inputs or its output, if any. The message is indented according to the depth in procedure calls. 0707070000020073111006440001460001440000010735740360167412300001500000000160help/untraceuntrace --Command, no inputs. This command turns off the trace messages started by the trace command. 0707070000020073121006440001460001440000010726720360167412300001200000000365help/unixunix --Command, one input. The input must be a Unix shell command, which is carried out in a forked shell. (/bin/sh is used, not csh.) Example: to whois :user unix (sentence "grep (word "'^ :user ":') "/etc/inquir) end 0707070000020073131006440001460001440000010735730360167412300001100000001047help/runrun --Command or operation, one input. The input must be a list, containing a Logo instruction line. The list is run as if you typed it directly to Logo. Example: to while :condition :cmd if not run :condition [stop] run :cmd while :condition :cmd end make "number 1 while [:number < 5] [print :number; make "number :number+1] The run procedure can be used as an operation, if its input is a Logo expression which produces a value, instead of a complete instruction: print run [sum 2 3] 0707070000020073141006440001460001440000010735720360167412300001400000000377help/repeatrepeat --Command, two inputs. The first input must be a positive number. The second is an instruction list, as for the run command. The list is run repeatedly, the number of times specified by the first input: repeat 5 [print "hello] 0707070000020073151006440001460001440000010735710360167412300001600000000435help/repcountrepcount --Operation, no inputs. This operation may be used only within the range of a repeat command. It outputs the number of repetitions which have been done, including the current one. That is, it outputs 1 the first time through, 2 the second time, and so on. 0707070000020073161006440001460001440000010735630360167412300001400000000720help/cbreakcbreak --Command, one input. The input must be either the word on or the word off. If the input is on, your terminal is placed in cbreak mode, which means that what you type is made available to your program every character, rather than every line. This must be done before the readchar procedure, below, will work. This facility is good for writing video game programs or text editors. While in cbreak mode, echo is turned off also. 0707070000020073171006440001460001440000010735610360167412400001600000000376help/readcharreadchar --Operation, no inputs. Abbreviation: rc This operation waits for you to type a single character at your terminal. The output is a word containing only that character. This works only if you have turned on cbreak mode; see above. 0707070000020073201006440001460001440000010735520360167412400001200000000364help/keypkeyp --Operation (predicate), no inputs. This procedure outputs true if there is a character waiting to be read from the terminal, if you are in cbreak mode. If not, it outputs true if there is an entire line waiting to be read. 0707070000020073211006440001460001440000010735530360167412400001400000000767help/oflushoflush --Command, no inputs. Normally, when you tell Logo to print something, the printing is not done right away. Instead, Logo remembers everything you tell it to print, and the printing is done all at once the next time Logo is waiting for you to type something. This arrangement makes Logo much faster than it would be if everything were printed immediately. The oflush command tells Logo to print whatever you've previously asked for right away, without waiting. 0707070000020073221006440001460001440000010735540360167412400001200000000167help/helphelp --Command, no inputs. This command types at your terminal a brief message about Logo and how to use it. 0707070000020073231006440001460001440000010735550360167412400001600000000244help/describedescribe --Command, one input. The input must be the name of a Logo primitive procedure. A brief explanation of that primitive is typed at your terminal. 0707070000020073241006440001460001440000010735560360167412500001000000001025help/gogo --Command, one input. This command can be used only inside a procedure. The input must be a number. The same number must appear at the beginning of some line in the same procedure. (This line number is otherwise ignored.) The next command executed will be the one on the indicated line in the definition. Note: there is always a better way to do it. If you have previously programmed in BASIC, your only hope of ever really learning how to program computers is NEVER EVER to use the go command! 0707070000020073251006440001460001440000010735570360167412500001500000000373help/debquitdebquit --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, the QUIT signal is not caught by Logo, so it will cause a core dump. 0707070000020073261006440001460001440000010734460360167412500001600000000520help/memtracememtrace --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every allocation or deallocation of memory, and every character parsed by the interpreter, types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an incomprehensible message at your terminal. 0707070000020073271006440001460001440000010537150360167412500001300000000000TRAILER!!!2500001700000000433help/yaccdebugyaccdebug --Command, no inputs. This command is meant to be used only for debugging Logo itself. It is explained here only for completeness. After this command is used, every state transition in the yacc parser types an inc