8L2C)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL L  !"#$%&'()*+,-./0123456789:;<=>??<O! !,USEFUL.TOOLS HO!I&FORMAT O!I*FORMAT.BINO!IFORMAT.HELPO!I)MAIN.HELPO!ISAMPLESO!ILOGO' %LOGO19pO!I%LOGO2A+O!I%LOGO3X O! ILOGO4hO!I+LOGO.SYSTEMjO!I&PRODOSn >dLԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@LLnSOS BOOT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!)? &PRODOS `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RȱY! YȍYȱYYZ````@ ߩLߩ ߩ@DLߩ@ ߩLߩ ߩ@DLߍ('((ɿ1T1 ߩT\L߅(),'+'+(,()` ѩ  Lץ o0` ` u F׮0*@`.ʽ@`-ʎ jЩ" X ڽ@` LX`80  \n8` * f m m qխ8` r# r \ m0  ֩1 !٩8` ! |ש84567 -7 jm m0O rJ\ m0A = jm k Lٗ l0<` Ol OlL k ؐ k 喰 ٗ8` k 喐 ՗8`L k ` Ol0` Ol`H k եhȥ` Olо` < N  C C < 0 &! C L"ѩd  " Щ L md  NЩ ѩ `` j Xe N1` } j0L i; Xe k` * fH m0h@`hʎ` qթ`` } kL` k 0ސ ݢ`H nk4L sh`h` nk͹)-L` } < V Z j |m0 L թ` } kNL0 L" N L< j N` j N   ` } N` /j6` @j`L @j L /j &` j l lL j l lL \j | < @ ?[ QA.jsg,0A+Xo8098/J|ej<FFKꑂzT_S y݉9Y׷m G8h2 u2)3.l L~O.  !L` d" N ! V C b-` NazCl@@PZZZ@rqdzUW0|}\;q~q~zGzG{G{k|G|Y|k||}G}P}X}a}j}s}{~B~F~J~O~S~W~[~_~d~h~l~p~t~x~|@ACEGIKMNPRSUWXZ\]_`bcdfghjklmnoqrsttuvwxyyz{{||}}~~~|?{I}{t{i}?|w||||||~|}|{t{i}?}c}c{{z } }{}}z{{{{){I~{t{i|ϼ{t{i|\ [])(+-*=>.5?7--65??-%+.6??';'!) -, 67+56>?8</( -,%7/1/26'?<?( e-.$-7576><<< --,.,%->6'75767'''$''--5.$-77><$-5-.m7?7-$<,-5.$5--?7>>'<{{z z z } {{{}z{{{{)| m0* r%\ m0  jm" Vѥ. m |Lm c8034 o4 ޮ7 ݩ`` oL o4Ln ə!80eeee0` ٖ 藩4 n eB80 L;4LnLXo5 5 m5580m550`8`(c`(c`40..EN$64 n 藩488`88`4 n `Lٖ e ٖ e 80 藠 ٖL; 5" n e5 喭6L j`: 08`8`lr p (t (t` :` U ` p hh,`LrL袥o"i  : @Lc { @ {Lc` Gߢ[HpgC pph[L_hhk. y_ըP8`֨Q } >OҨO Ũ BL } * f m0 q wL} qLzhh }Lzk w %gk iLrhh %g u{- : U-  r0  r-L{ ZL : Tmh  5L <~ TLLZ  n f~ nLoʆ.  f~hl. 5L L| y 8_]-`^.F.f-F.f-F.f-[e-[\e.\ ~ 5L | : <~L|L뀭HH wߢ[Hp pph[  f~mh i hg f~L{LBi  o f~L*{  f~ oL : o <~LJ{ <~ : oL 5 <~Lj{   i ( f~Lu{L r0  ~L<~ r0 L~LZ  f~ :  L~ u{ : i }a   : L~ - L$z gL$z n5N65N6 @ g a d: e k @(( 7e0).   ٩/.0Lx$0A/= | }թ&L  ) )Ї g aե0)0/L |ة L 7 f~L :, <~L :! i <~hl <~ 5hgLBi BiLZ֩҅1?2/0Lx o  %yLz Fel- )> _ Oe 4 ٥F wLGy,EF M׍LGy mLz Oe  ` gե/ u g a a MLw )8 | C " rLy r < t & rLy 1q r` ֩1 L$z L$z 3 L$z ٖ4pF d /L p y dH h j e < @L-z N34 5j1{!" ! l | N e a ] em Lx b# ȱ#`JiJ# ȱ#b% A)b-A b%B)b-B` 8,H-! hIiH!h8.H/ f!hIiHh8F0  ٖO 5> ՚ J?  c  8> c  8Ly t } $c` L  `    ` OLy SLy0H E ҊEJJJLh `bQ##` ! #ȥ#` ! Q#)ȥQbCbD`C CIC`  lL]  llHLI`  rjO "S  4L  l L`  l ./O  4L  l ,-"S  4L L z  `  \j | < @ < @ l l S ٖ 8? ՚/ nL7  lW 8L]  b5b6L$z HLy HbAbB` GLI HLI ` O ٖ4 ؠS ٖ4 N 0@)A$ը֨ ٨ר_بi` kL 5L! 4soi SsL +shHij Bi[H\H 8h\h[jihhLBi :+iok i#hm!L4s U r L8kLiL\illʆmno`l` i }  P РL I!I`3I!7I^`ab`aba`\b[a` _[`\[\[` i  acbd`[c\d`[_ \`a`[` U ` i ` [` [`g][^\`_`k][@^\acCbd` Ȁ[`k ပ[`~~hgLBihg 5hmРS [ c ` S` blHH bl hhL ͖ w   hhR w w ,0  pL`  k0 Vѥ-LyL k0 k0  Lz8Lz }Lz j0(  | Vѥ. & @`.ʎ`0@`Τ`. u0 uΤ`2 ll ll k u nVL𶍥 7m N! Vѥ- -. mЩrL +gL5 Sf LFL dL  + SfL { Z V֩> r _q0% }ե6 | " i3_4N LV Sf ` س0 ` t L[ש-.   < j j &-L jЩ$ L 0?`@`A````7`8``. DL$zLy`; g/ r`H rh`/ r %g c ة` bk /O * f o0  rL Lq  kL 1g V p  r k 媩L%g b wL q }  N @ wL bk /O> * 0?@/A*i@ f o0  1 L` Lqթ5L bk /O La0 a`L`! ѧ Ƭ`L=`) ` D Z֢``` kH ek } Ϧ iH-  H `hi ` bkLa:ͷ3 k` ek Ϧ Pa> 0?@AL2L bk L bk K^)LL  i `> 0?@ALy @j k k bL zL SfL bk իLz | @ /O * f _q0 M/NP.U!) i0 Z֩``5`6H Zhi  TL$z( bl bk /O> 0?@ L) bl bl bk /O L kL i ` ``) ` ުO0 `L L" / L`Lé CL`' WLé ` uLé`3i L``5`6i -L` ,L( ! 3 ީ LȹL`+(.@)D7E6FGH I KLé  `` FDLé - `` = ` NLé e` ` sLé ˝ Ha ahLé` ˱Lé  ʱL ѨLé ѨL Lé  Lé`  )Lé` K^)L JLé`@ \Lé`D J FED @PLé`OO ̡Lé μLé ϼ ` Χ `` ݧLé` Lé`@` N8L  r C " 8 tξ` ` 9 @ t r Lr r ` t r ` <ѥ6  5j r tLr t r;3<4 4e- s Z-Lv T tLr t r)L i tLrH rhʊ` Lé IGIGLé` Lé` ٥L Qj zL Qj zH | & " C2hLҩL Qj zL Qj zL L Qj zL Qj zLȎ`hh o | r WF & r < i { ֥Lhh o r W & r < N { ֥L`l | ` t ` 9 9 |- V &`٩ L Y) ` Qj z e ѩL Qj z 9 N$ 2 `٩ L ٥L `٩L tL Qj z eL3 zLr e\ C N)R `L3 Qj z 9 N$ 2 `٩ L ٥Lr Lr C N) < N$ ٥Lr` Lr C N) < N$ < @ < @֦mʊ llho lliLBi'P llPʎ m rLi(ʎ m rLiLoii iPSW`Q`'Ly Qj zL Qj zL e +L`  LD C N) Y$$` Qj z C Y$ 2b `٩ L g r m0  c %g f qL$z, * ^f _q0 f qL'z ?׭0 f qLy } f t rL@gL } f { < t ` C @gLz } f t @gLz blLO p p p`iLiLi-h 3 إi 3 N OD`      H 7 hʊL`D)ɀ#) r r r / rLr D tLr r r r  #`ger lisloc bytwidtpathname lopathname loc integepathname newpathnamname(list) pathnamlis[columnnumber linenumberprefiNothing on No input needed for is a special wornumber field precisio[integer [message] name name(name(list)name (input(s)111111112?"CK"BA1"11'1 1,12L"ND"OU;1"GR@1"CKE1"BAJ1O161T1 1Y12~"EN"REh1"SCm1"ARr1"LEw1!C|11c11 112σ"RD"WA1"OR1!F1111 112ޅ"LE"RT1"TU1"DE1"HI1111 112"FT"LE11< 1<2c"PX === 1=2p"PU%= =*= 1/=2y"OS!P>=C=9=H= 1M=2"RT\=W=a= 1f=2"CH"UNu="CRz=".S==p== 1=2"ETr;!S==== 1=2"TH"SE==== 1=2'"ET"TP>="SE3;;< 1<2σ"FD<<< 1!<2"FI60<+<5< 1:<2օ!H%3I<D848C8 1H82 "EP"STW8\8R8a8 1f82"RA3!Tu8z8p88 1828"UN6888 182D"UN6888 182O"NB6!U8888 182X"UN\8888 182d"NTu666 172ף"ER7 77 172ף!Eb2+7&707 1572"RN!ED7I7?7N7 1S72"ER.4b7]7g7 1l72"PS"ER{77v77 172."PO777 172["OA6!P7777 172e!P2777 172t"PO.4777 172FI1"SE5"RA6!E 6656 162"QU3!.'6,6"616 166"RT2"TA@6!SE6 J61O61T6"EL"EV^6"PLc6"TOh6 m61r61w62"RY"BU6666 162"ME"NA6"RY6"BU6666 162"LL"YA6"UR6!B6666 162"RA6!E6"RS"HA5"DC5"EA 5!R5545 152*"LIf3"AD-5"RE2575(5<5 1A52١"WO1"ADP5"REU5Z5K5_5 1d52"XT"TEs5"ARx5"LE}5!C55n55 152"LLr1"FU5555 152S"ITr1"PL5!S5555 152r"XTr1"TE5555 152w"33 142"DN!E44 44 142"NS"ED.434)484 1=42z"AL]2"FFL4!IQ4V4G4[4 1`42"UE"TRo4"IFt4y4j4~4 142"UT"TP4"OU4444 142I"NT"RI4!P4 444 142"AR"CH4"AD4"RE4444 1422!R2323 1 32"NG"DI3"EA 3"TH%3"SE*3/3343 1932"OW1"SHH3M3C3R3 1W32"ST"IRf3"TFk3"BUp3u3a3z3 1320"LAf3"UT3!B3333 132 "CE"EN3"NT3"SE3 333 132e"ED333 132e"IT"ED33@BCDEFGHIJKLMNOPQRSTUV11 1126"OR"OL 2"NC2"PE222!2 1&22?"WN"DO52"EN:2!P?2D202I2 1N22V"SE"RA]2"NEb2"PEg2l2X2q2 1v22c"ER]2"EV2"NR2"PE2222 122p"UP"EN2!P2222 122y"ON"TI2"SI2"PO2222 122"HT"IG===> 1>2Y"TS="SE>!.>>>$> 1)>2i"TX"SE8>=>3>B> 1G>2"TY"SEV>[>Q>`> 1e>2"NP"OWt>"SHy>~>o>> 1>2f3>> 1>2‡"DS"AR>"OW>!T>>>> 1>2e"OW"ND>"WI>>>> 1>2m"AP"WR>>>? 1?2"XC 2??? 1?2"YC 2-?(?2? 17?2!"TO8F?A?K? 1P?2"CT;"AR_?d?Z?i? 1n?2!C>=}?x?? 1?2ϔ"ER3"FF?"DI???? 1?2"US"IN?!M???? 1?2!I4??? 1?2"IE4"OT?""ST\GMLM 1 M2"TEf3MMM 1$M2!A;1 3M.M8M 1=M2ڠ 2GMLM 1QM2 !N8`M[MeM 1jM2>"AL"OCyM!L~MMtMM 1M2_"KE"MAMMMM 1M2q6MM 1M2"AMW8!NMMMM 1M2"HI3!TMMMMKK 1L2*"RLL LL 1L2P"SH>*L%L/L 14L2`"TY< CL>LHL 1ML2G"IF\LWLaL 1fL2z"FF!IuLzLpLL 1L2!I1LLL 1L2\GLL 1L2ʟ"AT"PEL"RELLLL 1L2("UN!RLLLL 1L2}JJ 1J2"UMJ!N KKKK 1K2"AR]2!P+K0K&K5K 1:K2 ]2DKIK 1NK2"PPJ!U]KbKXKgK 1lK2 P5vK{K 1K27"OR9!WKKKK 1K2I"PR KKK 1K2"RCKKK 1K2!R;KKK 1K2١"RWKII 1I2,"FP4J JJ 1J2="EM"IT'J,J"J1J 16J23@JEJ 1JJ2Б -5TJYJ 1^J2"IS;!LmJrJhJwJ 1|J2"CA]2"ERJ"OWJ!LJJJJ 1J2"LP4JJJ 1J2V"MB7"MEJJJJ 1J2"BEm@"EMJ!MJJ"EFH!BIIH I 1I2"BFII#I 1(I20"BL7I2I!T$H)HH.H 13H2ϔ!-BH=HGH 1LH2 !*[HVH`H 1eH2N!/tHoHyH 1~H2!+HHH 1H2Y!<HHH 1H2i!>HHH 1H2Ď"II"SCH!AHHHH 1H2֎"ORW8FF 1G2"OG"ALG"ATG!CG G G%G 1*G2D"RO{7"RP9G!E>GCG4GHG 1MG2U"OP"PR\G!GaGfGWGkG 1pG2m!P-5GzGG 1G2z!PaGGGG 1G2!P{7GGG 1G2"EMaG!RGGGG 1G2"ATu=!CGGGG 11E2"ET'E!SF FFF 1F2"REC"ET&F!S+F0F!F5F 1:F2;"DP>="EAIF!RNFSFDFXF 1]F2W"TRNF"SElFqFgFvF 1{F2"TE"RIF"TWF"SEFFFF 1F2~"EP>="ITF"WRF"ETF!SFFFF 1F2"IT7"WRFFFF 1F2F1D2BE E 1E26"IX"EFE"PR"E'EE,E 11E2"PO5@E;EEE 1JE2"TPD"INYE"PR^EcETEhE 1mE2Y"AD7"RE|EEwEE 1E2"RE6EEE 1E2GCEE 1E2"AV^6!SEEEE 1E2ܮ"EPD"AVE!SEEEE CCD 1D2w"RF!EDDDD 1#D2"ELh1"IL2D!F7DBCB9BHB 1MB2"FS\BWBaB 1fB2"ETCB!SuBzBpBB 1B2$"ID="TWB"SEBBBB 1B2S"SSBBB 1B2r98BB 1B2|!WBBBB 1B2 "OPh@@ 1@2ԕ!R@1 AAA 1A2ߕ"IN!S&A+A!A0A 15A2"SQ\=DA?AIA 1NA2"UM!S]A bAXAgA 1lA2"CO{AvAA 1A2"AU]2!PAAAA 1A2"TOt>"UTA!BAAAA 1A2#"YP"KEAAAA 1A2."DD1"PAAAQU?"NT?!I@ @?@ 1@2 "CT"DU"@"RO'@!P,@ 1@@6@ 1;@2Y"SP"ESJ@!LO@T@E@Y@ 1^@2i"RP"TEm@"EAr@"GRw@|@h@@ 1@2N?@@ 1@2a"OM"ND@"RA@@@@ 1@2"ND7"AI@"EM@!R@@@@ 1@2"RE@@ 1M2C!( NNN 1N2!) #NN(N 1-N2"TO3N\3N3N3N3N3N4N$4NB4Ne4N4N4N4N4O#5 OF5Oi5O5O5O5"O5'O6,O;61OY66O|6;O6@O6EO6JO7OO!7TO:7YOX7^Oq7cO7hO7mO7rO7wO7|O8O/8OM8Ok8O8O8O8O8O8O9O89O`9O9O9O9O9O9O:O7:OZ:O:O:O:O:O(U*U*U*U*T*U*U*U*U* line -1 Go to beginning of buffer through through -9 Go to end of buffer Delete to end of line -UP Move cursor up 1 page -DOWN Move cursor down 1 page -RIGHT Move cursor right one word -LEFT Move cursor left one word -> Move cursor to end of line -< Move cursor to start of ter under cursor CONTROL-O Open a line at the current position CONTROL-D Delete character to the left of cursor CONTROL-R Replace the last deleted line CONTROL-X Delete the line CONTROL-Y Editor Command -A Accept the contents of edit buffer -ESC Exit the editor ARROWS Move cursor one line or space DELETE Delete character to the left of cursor CONTROL-F Delete charac-ESC Stops procedure and returns to top level CONTROL-L Full Graphics CONTROL-S Split Screen CONTROL-T Full Text CONTROL-W Pauses, waits until any key is pressed CONTROL-Z Executes a pause evel. Defining a Procedure TO TO name begins the definition. END alone on a line ends the definition. Using the Editor EDIT "name or EDIT [list] EDITFILE "filename EDN "name or EDN [list] EDNS (EDit NameS) Special key HIDETURTLE (HT) HT CLEARSCREEN (CS) CS PENUP (PU) PU PENDOWN (PD) PD PENERASE (PE) PE The ? prompt means you are at the top level. The > prompt means you are defining a procedure. -ESC returns you to top l Turtle Graphics Commands Command Example FORWARD (FD) FD 10 BACK (BK) BK 60 RIGHT (RT) RT 45 LEFT (LT) LT 130 SETPC pen color SETPC 2 SETBG background SETBG 5 SHOWTURTLE (ST) ST LRLSLSL SLSMS)MSBMSVM#SoM(SM-SM2SM7SMQBCQBHQBMQBRQBWQC\Q8CaQ[CfQyCkQCpQCuQCzQ DQ(DQKDQiDQ}DQDQDQDQDQEQ6EQOEQrEQEQEQEQEQEQFQ?FQbFQFQFQFQF;O,;OO;Ph;P; P;P;P;P;!P <&P&<+P?<0PX<5Pl<:PP.>PL>Pj>P>P>P>P>P ?P#?P (U*U*U*U*Ap U*U U*ժժժժAOcBBBb"8^D"@*UժժժP* U*U*U*U*UUԪժժժՀ U*UU*ժժժժQ(>B>R"PD"@*UժժժՀP* U*U*U*U*TT*U*U*U*U*ԪժժժՂԪժժժ^glaxD>pgq9o<T*UT*!GgBBBJ@Ox>Ng8ԪժժժBl! (U*U*U*U* U*U*U*U*U (UЪժժժՊ*U*U*U*U*!BBBFЪժժժՂP*ԂЊP*TP U*U*U*U*U**UժժժՂԪժժժGB _(E< E@@"(U*U*U*U**U*U*U*U*>~~B>BЪժժժՊP*UՊԪ@*PU*U*U*U*U**UժժժՂԪժժժ>"Q B<Q(E  E@"(U*U*U*U*(U*U*U*U*ЪժժժՊ P*UժժP U*U*U*U*U*(UЪժժժՊԪժժժBO`g<=`q8Os<(U*U*U*U*(U*U*U*U*ЪժժժժosB~Z SY ɘL` X _ [ V7 c L '0%O '8O JmO * mopqrstuvwxyz{|}~n!o!p! k! iL X%>!L;!ΠΠҠ`}!!!"!!!l4"# G$YO!-e(eR9B}PBiBCe! H$q!r! c&L*!M8tl # ) y!s!(&s!t! c&E )?  @ e!l!0 $l!0u!v! c&-) &ύw!x! c&Эb)0I0 ( d!N)Gi/ h!4  INTERPRETER LOAD FAILURE PRESS CONTROL RESET TO REBOOT`0($ p,&"    !"#$%&'()*+,-./0123456789:;<=>?9Y 089 9Y 0%9켌  I8`; L/  # H_ \ h]9: H89E IL  :: )  h)  :L hL `ʊ ^ *^ *68q&8` I. IO Ȅ"IL #"࿐99Q꽌ɪ꽌Iܠ89*:%:E9 I,8` }꽌ɪ꽌I`$<꽌0Vikl 8e;;',)7(+ &* &*) ] I (l$0JJJ )` )) *9)F9jF9jJJ<( G b  +  L  0C8 I ̬  ޮ8V0*Quark*x $ !;%"&#', "!# @ IwL0)pX 0 i W L $6%78+)* ] )A0@0(, ] ' WORD PREFIX "SAMPLES/ SETPREFIX :PREFIX LOAD "MENU STARTUP CT SETPREFIX :SP UNBURYALL ERALL END MAKE "STARTUP [MENU.STARTER] ʈ0  0ŠϠĠ͢Š͠͠ϠŠŠϠĠخ͠ YYZLYLYLY뿩 8@  *$ MNЩUM  L 5   8 0 8 `0 / x X$$ $&$0`ŠӠέԠŠҬîʎ1DžϠ)&F@ 0 [ [LթK8` I8`FHGH ܪhGhF ݰբFF芝 ݰFG ݮI m IHHyHȘI ݰLԩ` ՠ @/@ 7@Юz)mzʈ@i Q`RC8` @ l3Nz@) Wڎ} ԭziz}`0 iڰ0GF ݰ#Q0 ڰW,u0 Q ۩.H hȑNWȮvNuW8`xzNxz0NN` װG8`^x}z}Б|` Ґ L` א@>)I3|8^_0`1a`K8`@Nȱ@O@ lIiNȽN)/ȩ/N`@[ WHJjjjRhA &'KI0JH0ōҍJJJJ ɺi) ɺiL9Ҏw s)?ef t Ұs Ӱ s  |Ґ `l@Hȱ@I|HXAT^^ȱH ɯ|ȩxz^5H)/@a)_xx .0 :A[8@`,xx@~@}J@` ߩ%S @ ~`EhhhѺ0 h ѐ# ѐ ѐ ѐ 0 HϭэLпllllhh8` QSTV'P،h@ihAiȱ@JJJJq@)@%vȱ@Hȱ@Ah@E@c%e J) LxL LxJiB LxJ) <ҩxNhHHHHL(  аƠx@BEOD  а(`( C)CJJJlBJ,~آ <B*IBGF08Lé'+8H <(h`@؍L3<>=?<>CAB@?A` / L  <>` ڢF]PL8i m L   4< L  BLRAM' hLDLHB-4F 1"aɿ LL@ Nϰ H  @h( L Lh  @`bLJCAB@=?,<ʆ>*=?BC8 é&'112` ( < *? ( < (? ( < (? ( <*? * **? *? *? ( < *? ( <Lg& 'L&8ei` ,$`ee` `<( '<( '` ' ' '`hh8`8`=(>(F(`}N(`e`H)hJJ'0JJ)` (<  )1& ` (Xp< @1& )m1&1&.1&4& M1&i  ``rȱȱȱȱ0]cȱeem<(ȱ=(ȱ>(=(ȱF(=(ȱN( '<( z' #'Lg&`L' 'L& ' 8f ZHH)hh8JhJJJJJ '&H(&8H) 12 (j21 h!hH h %)Ђ12H)M0 h10200I20h2 9&`L#`)&!2"L  :8! ȱɈ =ȱ@/ȱ@9;<2DE)7I0 '*5 ܰ701FG ݰ( ְLݩI mIH` @= t=0FG ݰ ֬HFG ݰFG ݰ%" ݰX)Im'F(G)* ݰ4 ֭ $H ݰ%HFFHGHG ݐ`R8`ͮͯ)` װ H` /ٰR(*؅IHHЍ@`[8W ؐeXW Y* YHIFHR  PLnEnʱNLMOklMEKP%nMEKnL2 Okl,jm PjeNNO P(` R  F .AlJFHIGHIR HIHI`  .` .AR HF HG`@Nȱ@OR`RjM}FIF` tJMF t 3 tJF` R` H  ^h)N@ N; L  ;ް$ )bJTU f۰ ) H BhL ) . )lJkjIG@L;ެR8NjNO 8q pjJLm`nRnʱLN.MOklMEKP/nMEKnLCL-qMp Okl,jpmeNNO(`JNKORL ;ް/  0P L8 | ZߠRJ`L@mȱ@nR h)N$%Rjmkn LL⭚ L l L ;ް  0pnJo )@rNJOK ;ްiKKnnkk llIJo m nJФ̭lJkjHFIH rHIGrxKE а((H hH h8`8m@ȭn) ) )Wв<J8` GR悔0FRZ $ ӭ+j ;ސHR  4Rh8` ߰Q R@`ZWSSZ (RS W )8`)i п`  H  RFG`BH TRFG`H RhHBF  GxDER0r0C а(`(8` L*J R :"L ݢH R : R9` א@ P8`RSB8` RJJJJ=HIH IL9߅FHGI ѭlJkjHIH;7IRJJ Zߐ3HIHIL|ߩJKJK`FHIG ߰( ߬RȢMjJLk)eKM`R)` J FJZk ߰$Z0 ߰ZJFJL8`JGBJ T(`(8`R@`M8`R8@hʈIR)Fk8FF lL|߹ LߠRC8`V)@ iR)Fl8FVzkJ l_ F Lr߹) +V&lJ(b .RFG/8` .lJFd eeQFG`QJJJJi LWݩH8`Qf ݰQfe0 ݰ Q c`e ݰe`fQiygihB0Hf0gFhG ݪh0`שB*xEDr0C [` FG `QJJJJ`\HQ\hn)[N\jN\jN\jbN\.d WݰHi\ ݰ;\Qf ݰ*bNd[ ee`Z8` Wݰ#ddc c 5ݐ`bcG .G .G .G8d*JFG'(`)P P8ʈ` ۰0)i `uv8`QR ܍\FG[ ݰNQFG ݰ< \0 FGLۮQ[0 GF8TU`H8` ܹ ,[F G 8\z Wڭ01 E8`1݊0 iڰ$Q0̩GF ݰ ڰ ڰ`12)1`0Q`ȎQi 0U`z)x8`x`Q ېW }װG =۰A)H Qʈh0)*xzȱHx`Z8eHI ٰSB0 ؠQFXʈ pٌz`z8mz0_`,|{0H {hi LٍxȽxhQ0GF{z8y`FaG ݰ ڰ`Q0{Q8`X*؅IFG ݐ`[[ p8D`F` ilH)HFȍHG ݰ$%X&Y!8* J8` Lע  )I '`8ZiFG`Z*؅IH3H [( [ )W IhHIhH  i ` ܰ ii` )0CGHFHBFG ЪhFhG`@5~R͔ M @BRi ׭~` .R 4#R0 iڮQ)`L@.~R Ri ~8`L Ӑ L~ Ӱ )ܹ0 )p )@ )  R0FG ݰ حFG ׬R234 / F) F ְR)f ݰ`H@h~`h`RFGV*& .V  JJJJH :h Ei :EX`'8`jWC)p> pCYY 轊( ( BV ( p0 \BiJ @i> i'j:ZH i@ioZZH h ȭnWǥBJ 8X` +>P8H  ): e: y8鰕:Jjjj<)yi8i;i(*=>hP8`;Zx3QTTSRWVUHEVhEhH)IWHPHHHAHHHLaVEWLӿLLՐ`BLڑL COPYRIGHT APPLE, 1983 h@ 0J @L:HUSTONLL`BLLТТТТТТТТТТТТТТТCOPR. APPLE,1983LM Mh@8nЍLЭ 0J @L:LhhhhIL@Ae P o**ӂӹ]|wKIJK,-NOPQRSuHUSTON!' @   !"#$Ԡ͠ˠĠԠ ]XXKR Ko`V8`no` & on ]I9XX`)HJJJh`OeNeO࿰ ]9XАO`@ȭ@` ON CNJKO`HHHHхЅG ݐ ` ~ qͬ ݰFG ݐ` ~* q% L`FGLݮ 'ܰ8`FHGH] 'ܰ]hGhF`@Bɼ>K@J5 ]9X(KI0F1G ݰ:%&N  ݰ# 'ܰFG ݐ`J HHR hh` 0 @ LFL q[̄T 0̄ȩF𸽒G ݰ 0` ݰF0F1G ݰy &밀L֢ȹLݠ@ȅH@ILҠ,|0` װJ WP8`TU fېH8,=)N 0 [01)@L` b讀 'ܰݩ ݰ L֬Qyy`O Wݰ @LL א=@ 5ȹQP8` &iQ` C0 5B C)yz( ȹ`y8myz8mz@8` װG8`F  װ P=)@N8`)@J 5yy))ꭁJJJJR RȢjI ;ސh(8H Nh(`R@`@Rȱ@ ` אB@8ZTUQ qۮQUT?H>8T2hU3JJJJ)@` װ%I -=) t 0@)N8``N8`  ) NRȢJ@jJjR@ʈLP 簞KIJHRȢjRjjk)lJn 8 ΄R  bH8R *L o % YZoY 3 NZ`rZLkZq8r7IZiZkk 8 s q | kн Z)*>>` @ $(,048<@DHLPTX\`dh 0ުlptx| ANYBASE INT QUOTIENT :N :BASE :BASE N.TO.C REMAINDER :N :BASE END TO C.TO.N :N IF NUMBERP :N [OP :N] OP (ASCII :N) - 55 END TO N.TO.C :N IF :N < 10 [OP :N] OP CHAR 55 + :N END TO DECTOHEX :N OP CONVERT :N 10 16 END TO HEXTODEC :N OP CONVERT :N 16 10 EN.TO.ANYBASE ANYBASE.TO.DEC :N :FRBASE 1 :TOBASE END TO ANYBASE.TO.DEC :N :BASE :POWER IF EMPTYP :N [OP 0] OP (:POWER * C.TO.N LAST :N) + ANYBASE.TO.DEC BL :N :BASE :POWER * :BASE END TO DEC.TO.ANYBASE :N :BASE IF :N < :BASE [OP N.TO.C :N] OP WORD DEC.TO. END TO CIRCLEL :RADIUS LOCAL "STEP MAKE "STEP 2 * :RADIUS * 3.1416 / 36 REPEAT 36 [LT 5 FD :STEP LT 5] END TO POLY :SIDE :ANGLE FD :SIDE RT :ANGLE POLY :SIDE :ANGLE END TO ABS :NUM OP IF :NUM < 0 [-:NUM] [:NUM] END TO CONVERT :N :FRBASE :TOBASE OP DECAKE "STEP 2 * :RADIUS * 3.1416 / 36 MAKE "REM REMAINDER :DEGREES 10 REPEAT :DEGREES / 10 [LT 5 FD :STEP LT 5] IF :REM > 0 [FD :STEP * :REM / 10 LT :REM] END TO CIRCLER :RADIUS LOCAL "STEP MAKE "STEP 2 * :RADIUS * 3.1416 / 36 REPEAT 36 [RT 5 FD :STEP RT 5]TO ARCR :RADIUS :DEGREES LOCAL "STEP LOCAL "REM MAKE "STEP 2 * :RADIUS * 3.1416 / 36 MAKE "REM REMAINDER :DEGREES 10 REPEAT :DEGREES / 10 [RT 5 FD :STEP RT 5] IF :REM > 0 [FD :STEP * :REM / 10 RT :REM] END TO ARCL :RADIUS :DEGREES LOCAL "STEP LOCAL "REM M &@DEF   %LҠؠӠ΢ϠԩҠŠƠԠԠŠӢɯϠҠůȠԠĠ à ɘɉ ɈL :Lɍ)ې)ɮ۰ɺH h 'ĝL  LL L)'L L L'L  (L(L $ʩ $$ $L `ީ % XʩXύX X A %  % ɍNH hɛɘɉɈ $ Lc :Lcې)ɮ۰ɺ'Ɲ Lc  : X i % $ɛ$8V%&8V)HV)hH)hHIhդD?DRIDQD); ?JDQD]`MY pY)p  p`8L:HhHh VY>:Y)`;R?AJ;<ȰY)`Y?)`ȐҰ ;HhHh=`Hh `Hh`DEiȍ01ZsDE8T8Wpq 7I꽌ɪ꽌ɭ蠪:VE:8`]V]H)]V])]T])] >8hUD` Y`> Hh݌(`HCJJJJ)*h`0($ p,&"op8`kkV꽌ɪɖxl*k-kmMl 꽌ɪ`8` D TO DIVISORP :A :B OP 0 = REMAINDER :B :A END TO LOG :X OP .434294 * LN :X END TO LN :X LOCAL "RLIST IF :X < 0 [OP [CAN'T DO LOG OF NEGATIVE NUMBERS]] IF :X = 1 [OP 0] IF :X < 1 [MAKE "RLIST ROOT (1 / :X) 1 -1] [MAKE "RLIST ROOT :X 1 1] OP (FIRST BF :RLIST) * (LN1 FIRST :RLIST) / (LAST :RLIST) END TO ROOT :X :NPWR :CONST IF :X < 1.2 [OP (LIST :X :NPWR :CONST)] OP ROOT (SQRT :X) (2 * :NPWR) :CONST END TO LN1 :X MAKE "X (:X - 1) / (:X +1) OP 2 * (:X + (PWR :X 3) / 3 + ( PWR :X 5) / 5) END TO PWR :A :X 32 "help ) MAKE "BLANK CHAR 32 REPEAT 38 [MAKE "BLANK WORD :BLANK CHAR 32] MAKE "B CHAR 32 REPEAT 16 [MAKE "B WORD :B CHAR 32] END TO GET.NAME SETCURSOR [22 10] MAKE "NAME UPPERCASE RW IF NOT VALIDPATH :NAME [NOTIFY [Bad Volume Name] OP GET.NAME] CLEARMS0] [Logo Formatter] SETCURSOR [0 1] REPEAT 39 [TYPE "=] SETCURSOR [0 22] REPEAT 39 [TYPE "-] TYPE.AT [5 5] [Slot Number:] TYPE.AT [5 7] [Drive:] TYPE.AT [5 10] [Volume Name:] TYPE.AT [0 23] ( WORD CHAR 193 "- "ESC CHAR 32 "quit, CHAR 32 CHAR 193 "- "? CHARTO CLEAROLD SETCURSOR [22 5] PR :B TYPE :BLANK SETCURSOR [22 7] PR :B TYPE :BLANK SETCURSOR [22 10] PR :B TYPE :BLANK END TO CLEARMSG TYPE.AT [0 15] :BLANK END TO SETUP .BLOAD "FORMAT.BIN 8192 CATCH "ERROR [LOADHELP "FORMAT.HELP] SETWIDTH 40 TYPE.AT [13 TEXT "PROGRAM PRINT SENTENCE FIRST :NAME [DEFINED] ERASE "PROGRAM END AL "NAME PRINT [WHAT SHOULD I CALL THIS?] MAKE "NAME READLIST IF EMPTYP :NAME [ERASE "PROGRAM STOP] IF DEFINEDP FIRST :NAME [TRYAGAIN] [COPY] END TO TRYAGAIN PRINT SENTENCE FIRST :NAME [IS ALREADY DEFINED.] PRINT [] NAMEIT END TO COPY DEFINE FIRST :NAME ORE]] GETLINES END TO WIPEOUT DEFINE "PROGRAM BUTLAST TEXT "PROGRAM CLEARSCREEN RUN [PROGRAM] END TO RUNSTORE CATCH "ERROR [RUN :THISLINE STORE STOP] PRINT FIRST BUTFIRST ERROR END TO STORE DEFINE "PROGRAM LPUT :THISLINE TEXT "PROGRAM END TO NAMEIT LOCRT 10] IF :ANS = "L [LT 10] END TO TEACH LOCAL "THISLINE DEFINE "PROGRAM [[]] CLEARSCREEN GETLINES NAMEIT END TO GETLINES TYPE "?? MAKE "THISLINE READLIST IF :THISLINE = [END] [STOP] IF :THISLINE = [ERASE] [WIPEOUT] [IF (FIRST :THISLINE) = "TO [ ] [RUNST:A BF :L END TO WHILE :CONDITION :INSTRUCTIONLIST TEST RUN :CONDITION IFFALSE [STOP] RUN :INSTRUCTIONLIST WHILE :CONDITION :INSTRUCTIONLIST END TO DRIVE IF KEYP [LISTEN] FD 1 DRIVE END TO LISTEN MAKE "ANS RC IF :ANS = "S [THROW "TOPLEVEL] IF :ANS = "R [D "" FIRST :LIST MAP :CMD BF :LIST END TO SORT :ARG :LIST IF EMPTYP :ARG [OP :LIST] MAKE "LIST INSERT FIRST :ARG :LIST OP SORT BF :ARG :LIST END TO INSERT :A :L IF EMPTYP :L [OP ( LIST :A )] IF BEFOREP :A FIRST :L [OP FPUT :A :L] OP FPUT FIRST :L INSERT IF :COUNT > 9 [OP 0] MAKE "TERM :TERM * :FRAC / :COUNT OP :TERM + EFRAC :FRAC :COUNT + 1 :TERM END TO ; :COMMENT END TO FOREVER :INSTRUCTIONLIST RUN :INSTRUCTIONLIST FOREVER :INSTRUCTIONLIST END TO MAP :CMD :LIST IF EMPTYP :LIST [STOP] RUN LIST :CMD WORWRLOOP :A :INTP END TO PWRLOOP :A :INTP IF :INTP = 0 [OP 1] OP :A * PWRLOOP :A :INTP - 1 END TO EXP :X LOCAL "E MAKE "E 2.71828 IF (:X - INT :X) = 0 [OP INTPWR :E :X] OP (INTPWR :E INT :X) * (1 + EFRAC (:X - INT :X) 1 1) END TO EFRAC :FRAC :COUNT :TERM IF AND (:A < 0) NOT (:X = INT :X) [PR (SE :A [TO POWER] :X [IS A COMPLEX NUMBER!]) STOP] IF OR :A = 1 :X = INT :X [OP INTPWR :A :X] OP EXP ((LN :A) * :X) END TO INTPWR :A :INTP IF OR :A = 1 :INTP = 0 [OP 1] IF :INTP < 0 [OP 1 / PWRLOOP (:A) (-:INTP)] OP PG OP :NAME END TO GET.DRIVE SETCURSOR [22 7] MAKE "DRIVE RW IF NOT MEMBERP :DRIVE [1 2] [NOTIFY [Bad Drive Number] OP GET.DRIVE] CLEARMSG OP :DRIVE END TO GET.SLOT SETCURSOR [22 5] MAKE "SLOT RW IF NOT MEMBERP :SLOT [1 2 3 4 5 6 7] [NOTIFY [Bad Slot Number] OP GET.SLOT] CLEARMSG OP :SLOT END TO NOTIFY :MSG TOOT 440 4 TYPE.AT [0 15] :MSG END TO GET.INPUTS MAKE "SLOT GET.SLOT MAKE "DRIVE GET.DRIVE MAKE "NAME GET.NAME END TO TYPE.AT :POS :MSG SETCURSOR :POS TYPE :MSG END TO .START LOCAL [SLOT DRIVE NAME] #!h` \I꽌ɪVɭսɖ0սɖ!ɖ 꽌ɪ\8`꽌ɪɖ۽*ݽ%ݙEۈзЮ꽌ɪФ`7%6%$%\8%$%9%86%7I$%i$%8%8% 8 x :!(`+L!!'L!!i08` $%6%JJJJ6% "N$%`)p#%#%**LS!ׅکP$% #! :$Ld!өЭ %iԩѥѮ#% #!#%L! c$%L!%L! %L!"%%%%%L!#% j"#% "ѥ#H#%LU Lk    )   1   ` ) ` 0 + *  ` 0 !  ` :% P J% `NAME .CALL 8195 OP .EXAMINE 8198 END TO OL :D :S .DEPOSIT 8199 ASCII FIRST ( WORD :D ) .DEPOSIT 8200 ASCII FIRST ( WORD :S ) .CALL 8192 OP .EXAMINESTR 8219 REMAINDER .EXAMINE 8218 16 END MAKE "STARTUP [START] PE.AT [0 18] :BLANK OP :T END TO FORMAT :S :D :NAME IF NOT MEMBERP :S [1 2 3 4 5 6 7] [OP 2] IF NOT MEMBERP :D [1 2] [OP 3] IF NOT VALIDPATH :NAME [OP 4] LOCAL "TEMP MAKE "TEMP OL :S :D IF NOT EMPTYP :TEMP [IF NOT DESTROY? :TEMP [OP 1]] .DEPOSITSTR 8201 :ES Y] [OP "TRUE] IF MEMBERP :TEMP [NO N] [OP "FALSE] PR [Please answer YES or NO.] OP YES? :POS END TO DESTROY? :NAME LOCAL "T SETCURSOR [0 17] PR [Do you really want to destroy] TYPE SE [the contents of] :NAME MAKE "T YES? CURSOR TYPE.AT [0 17] :BLANK TYDEPOSITSTR :LOC :NAME .DEPOSIT :LOC COUNT :NAME LOCAL "K MAKE "K 1 REPEAT COUNT :NAME [.DEPOSIT :LOC + :K ASCII ITEM :K :NAME MAKE "K :K + 1] END TO YES? :POS SETCURSOR :POS TYPE CHAR 32 TYPE CHAR 32 LOCAL "TEMP MAKE "TEMP UPPERCASE RW IF MEMBERP :TEMP [Y [OP "FALSE] IF MEMBERP :CH [0 1 2 3 4 5 6 7 8 9 .] [OP "FALSE] OP "TRUE END TO VALIDPATH :NAME IF 0 = COUNT :NAME [OP "FALSE] LOCAL "K MAKE "K 1 REPEAT COUNT :NAME [IF BADCHAR ITEM :K :NAME [OP "FALSE] [] MAKE "K :K + 1] OP IS.CHAR ITEM 1 :NAME END TO . "K MAKE "K :LOC + 1 LOCAL "TEMP MAKE "TEMP CHAR .EXAMINE :LOC REPEAT :LEN - 1 [MAKE "TEMP WORD :TEMP CHAR .EXAMINE :K MAKE "K :K + 1] OP :TEMP END TO IS.CHAR :CH IF AND 64 < ASCII :CH 91 > ASCII :CH [OP "TRUE] OP "FALSE END TO BADCHAR :CH IF IS.CHAR :CH1 GO "END LABEL "R2 LABEL "R3 LABEL "R4 NOTIFY [Bad Slot, Drive or Volume Name.] LABEL "END .START END TO START LOCAL [BLANK B RESULT] CATCH "ERROR [SETUP .START] CT CATCH "ERROR [LOADHELP "MAIN.HELP] END TO .EXAMINESTR :LOC :LEN IF :LEN = 0 [OP "] LOCAL CLEAROLD GET.INPUTS MAKE "RESULT FORMAT :SLOT :DRIVE :NAME IF :RESULT > 10 [NOTIFY [Format Failed. Check drive and slot] GO "END] GO WORD "R :RESULT LABEL "R0 TYPE.AT [0 17] :BLANK TYPE.AT [0 18] :BLANK TYPE.AT [0 17] [Format Successful.] GO "END LABEL "R#K$ :$9% #W$ :$8%н :$$%)* 7%7%` %݌HhHh # # # #V %꩖݌$ %݌ # # # # #`Hh݌`80^݌Hh $ $݌ -$ -$ -$ $ $ $EEHJНh ,$ -$ -$ -$`HJН݌h Hh݌`8`0($ p,&"!%֠Ls$Ԯ#% #L%#% .#ҥҭ"%%%&%8 % %Hh#% j"<ԥ%/8`#% j"#% "ع&%0 &%`%%8`"% %%#% j"HIDETURTLE (HT) HT CLEARSCREEN (CS) CS PENUP (PU) PU PENDOWN (PD) PD PENERASE (PE) PE The ? prompt means you are at the top level. The > prompt means you are defining a procedure. -ESC returns you to top level Turtle Graphics Commands Command Example FORWARD (FD) FD 10 BACK (BK) BK 60 RIGHT (RT) RT 45 LEFT (LT) LT 130 SETPC pen color SETPC 2 SETBG background SETBG 5 SHOWTURTLE (ST) ST Formatting A Disk The slot number you enter must be between 1 and 7. The drive number you enter must be 1 or 2. The volume name must contain only numbers, letters, and periods. The name must start with a letter. j<&` &'<&=&=&j<&8iH' <&<&=& '=&=& 'h ' &RH '=& '<& '<& '=&h ' &` Ȋ8j`h8``' '` ' '``8'  `8L2C ȩ'ȩ ' >&)<&Ȋ=&& &`%-&JJJ& &Hȱh & Hhh&&`BFG& &&&%C &`l&Hh`& &` ' & & &`<&)'<&)n=&Lԡm#i㰼m#iЕOLԡȱfg hi !dLԡ憦  Ljmkm l y`2 Lԡ8(Je稽)ʈ@LPROT 1.1 SOS.KERNEL SOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUND%INVALID KERNEL FILE: xةw,@  ȱlmi8#)!) >d `DaElH$?EGvѶK+`L HHLy XP LM ŠϠĠӠS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RLnSOS BOO)pJJJJ IH(ȱH:=IH[H`@HcH  $ +   I/H`JLNGȄBȄF aK  haaFF  mJm# KKJ UJ )J ۈ) ;J3ȱJFȱJGJKaȄM  aaNNJFLGJL L? &PRODOS j<&` &'<&=&=&j<&8iH' <&<&=& '=&=& 'h ' &RH '=& '<& '<& '=&h ' &` Ȋ8j`h8``' '` ' '``8'  `8L2CɭȭȩÑȩ'ȩ ' >&)<&Ȋ=&& &`%-&JJJ& &Hȱh & Hhh&&`BFG& &&&%C &`l&Hh`& &` ' & & &`<&)'<&)n=&%%8` % %$Lh$DEFAULT.NAME %%&)&%%&&12)ͳ&(8.2) % % % % & '%%`') ':% Ƚ;%):%. Defining a Procedure TO as in TO NAME begins the definition. END alone on a line ends the definition. Using the Editor EDIT "name or EDIT [list] EDITFILE "filename EDN "name or EDN [list] EDNS (EDit NameS) SpecialEM :K :M.LIST MAKE "K :K + 1] MAKE "K :ITEM LOCAL "CH OP READKEYS END TO MAIN.MENU SHOW.MENU MAKE "INUM DO.SOMETHING DO.MENU :M.LIST :INUM MAIN.MENU END TO TY.AT :LOC :OBJ SETCURSOR :LOC TYPE :OBJ END TO NOSAMPLE CT PR [I'm sorry, I can't find that file.DATA] MAKE "M.LIST [7 [[5 4] M.1] [[5 6] M.2] [[5 8] M.3] [[5 10] M.4] [[5 12] M.5] [[5 14] M.6] [[5 16] M.7]] SETWIDTH 40 CLEARKEY 1 END TO DO.MENU :M.LIST :ITEM LOCAL "K MAKE "K 2 REPEAT FIRST :M.LIST [SETCURSOR FIRST ITEM :K :M.LIST TYPE THING LAST ITF MEMBERP :CH [1 2 3 4 5 6 7] [MAKE "K :CH] IF NOT OR MEMBERP :CH [1 2 3 4 5 6 7] MEMBERP ASCII :CH [13 10 11] [TOOT 200 10] IF :K < 1 [MAKE "K FIRST :M.LIST] IF :K > FIRST :M.LIST [MAKE "K 1] OP READKEYS END TO STARTUP2 IF NAMEP "F1.1 [] [LOAD.DATA "MENU:M.LIST WAITKEY MAKE "CH RC IF OR MEMBERP :CH [1 2 3 4 5 6 7] MEMBERP ASCII :CH [10 11] [SETCURSOR FIRST ITEM :K + 1 :M.LIST TYPE THING LAST ITEM :K + 1 :M.LIST] IF :CH = CHAR 13 [OP :K] IF :CH = CHAR 10 [MAKE "K :K + 1] IF :CH = CHAR 11 [MAKE "K :K - 1] IEPEAT 7 [MAKE WORD "M. :K RW MAKE WORD "IM. :K RW MAKE "K :K + 1] SETREAD [] CLOSE :F END TO WAITKEY IF KEYP [STOP] WAITKEY END TO CLEARKEY :X IF KEYP [CLEARKEY RC] END TO READKEYS SETCURSOR FIRST ITEM :K + 1 :M.LIST TYPE THING WORD "I LAST ITEM :K + 1 OCAL "BLANK MAKE "BLANK CHAR 32 REPEAT 38 [MAKE "BLANK WORD :BLANK CHAR 32] SHOW.FRAME TY.AT [0 23] [RETURN TO CONTINE, ESC TO CANCEL] TY.AT [14 0] [INTRODUCTION] READ.FILE WORD :PREFIX "MENU.DOC END TO LOAD.DATA :F OPEN :F SETREAD :F LOCAL "K MAKE "K 1 RCH = CHAR 27 [STOP] R.LINES END TO READ.FILE :NAME LOCAL "CH CATCH "ERROR [OPEN :NAME R.LINES] SETREAD [] CLOSE :NAME END TO SHOW.FRAME TY.AT [0 1] :DASH TY.AT [0 22] :DASH END TO INTRO CT LOCAL "DASH MAKE "DASH "- REPEAT 38 [MAKE "DASH WORD :DASH "-] L RETURN.] END TO SHOW.20 SETCURSOR [0 2] REPEAT 20 [PR :BLANK] SETCURSOR [0 2] REPEAT 20 [PR RW] END TO R.LINES SETREAD :NAME SHOW.20 IF READPOS = FILELEN :NAME [SETREAD [] SETCURSOR [38 23] MAKE "CH RC STOP] SETREAD [] SETCURSOR [38 23] MAKE "CH RC IF :TO SHOW.MENU SETWIDTH 40 LOCAL "DASH MAKE "DASH "_ REPEAT 38 [MAKE "DASH WORD :DASH "_] TY.AT [0 1] :DASH TY.AT [0 22] :DASH TY.AT [10 0] [LOGO SAMPLE PROGRAMS] TY.AT [0 20] [Type a number, or select with the UP or] TY.AT [0 21] [DOWN ARROW key. Then press /O !IMEMORY.DOCIO !I*LOGO.SINGS2 O !I+MUSIC.INTROO !I*MUSIC.HELPO !I+TUNED.NOTESsO !I,SAMPLE.TUNESO !ISAMPLESvO'  '$MENU O!IMENU.DATAO!I(MENU.DOCO!I,POLYSPI.PLUS qO!I,ADV.GRAPHICS O !I&MEMORY key -ESC Stops procedure and returns to top level CONTROL-L Full Graphics CONTROL-S Split Screen CONTROL-T Full Text CONTROL-W Pauses, waits until any key is pressed CONTROL-Z Executes a pause .] PR [Press RETURN.] MAKE "JUNK RL END TO CHECKRESTART UNBURYALL IF DEFINEDP "DO.MENU [STOP] SETWIDTH 40 PR [I can reload the menu or return] PR [directly to Logo. Reloading takes] PR [about 45 seconds.] PR [] TYPE SE [Do you want me to reload \(\Y/N\)?] CHAR 32 MAKE "T UPPERCASE RC IF OR ( :T = CHAR 27 ) ( :T = "N ) [THROW "BEGIN] CT PR [Please wait while I reload the menu.] LOAD "MENU STARTUP2 END TO RUN.PROG :NAME :TIME IF NOT FILEP :NAME [NOSAMPLE CHECKRESTART STOP] BURYALL RECYCLE CT TY.AT [0 5] ( TO START CATCH "BEGIN [.GO] END TO Q? IF KEYP [ESC? RC] END TO .GO TS CT PO.EMBED Q? PO.PILE START2 END TO .POLY :SIZE :ANGLE :TOTALTURN IF NOT ( :TOTALTURN = 0 ) [IF 0 = REMAINDER :TOTALTURN 360 [STOP]] FD :SIZE RT :ANGLE .POLY :SIZE :ANGLE :TOTALTURN From the top level, use the SETPREFIX command to set the prefix to the appropriate subdirectory, and then use LOAD. For example, to study the music program, you would use these commands: ?SETPREFIX "/LOGO/SAMPLES ?LOAD "LOGO.SINGS ou to play a simple imitation game, test your knowledge of mouse trivia, or turn your keyboard into a musical instrument and create your own tunes. After you become familiar with Logo, you may want to examine these programs to see how they work. The sample programs on this disk demonstrate some of the capabilities of Logo and provide you with examples you might like to look at as you learn to create your own Logo programs. You'll find sample programs that do interesting graphic designs, allow yo Logo 7. 1. Introduction 1. 2. Polyspi's and More 2. 3. Advanced Graphics 3. 4. Musical Memory Game 4. 5. Logo Sings 5. 6. Mouse Quiz 6. 7. Return t] M RUN.PROG CHECKRESTART NOSAMPLE TY.AT] BURYNAME [INUM PREFIX SP R] ERALL END TO STARTUP IF NOT DEFINEDP "MENU.STARTER [MAKE "INUM 1 MAKE "SP PREFIX MAKE "PREFIX PREFIX] STARTUP2 CATCH "BEGIN [MAIN.MENU] CT END MAKE "STARTUP [IF NOT NAMEP "INUM [STARTUP]UN.PROG "ADV.GRAPHICS 45 OP :R] IF :R = 4 [RUN.PROG "MEMORY 70 OP :R] IF :R = 5 [MAKE.ROOM RUN.PROG "LOGO.SINGS 150 OP :R] IF :R = 6 [RUN.PROG "MOUSE.QUIZ 140 OP :R] IF :R = 7 [THROW "BEGIN] END TO MAKE.ROOM UNBURYALL BURY [MAIN.MENU DO.SOMETHING MAKE.ROOSE [Loading] :NAME [...] ) TY.AT [3 7] ( SE [\(\about] :TIME [seconds\)] ) CATCH "ERROR [LOAD :NAME] CLOSEALL SETREAD [] SETWRITE [] ERALL CHECKRESTART END TO DO.SOMETHING :R IF :R = 1 [INTRO OP :R] IF :R = 2 [RUN.PROG "POLYSPI.PLUS 70 OP :R] IF :R = 3 [R+ :ANGLE END TO PENSET IF HEADING < 90 [SETPC 5 STOP] IF HEADING < 180 [SETPC 3 STOP] IF HEADING < 270 [SETPC 4 STOP] IF HEADING < 360 [SETPC 2 STOP] END TO ELLIPTICAL :A :B :SIZE :ANGLE :INC :FACTOR IF NOT :TOTALTURN < 360 [STOP] PU SETPOS SE :A * COS (LE] PR.AT [5 6] [IF HEADING = "HEAD [STOP]] PR.AT [5 7] [POLY :SIDE :ANGLE :HEAD] PR.AT [5 8] [END] END TO POLY :FD :RT :HD FD :FD RT :RT IF HEADING = :HD [STOP] POLY :FD :RT :HD END TO PR.AT :XY :IT SETCURSOR :XY TYPE :IT END TO PO.EMBED CLEARTEXT TEXTFD RT 90 + :TURN / 2 PD PILE :SIDE :TURN END TO PO.PILE CS ST POLYPILE 150 90 HT Q? WAIT 150 Q? CS ST POLYPILE 110 60 HT Q? WAIT 150 Q? CS POLYPILE 70 45 Q? WAIT 150 Q? END TO PO.POLY PR.AT [5 4] [TO POLY :SIDE :ANGLE :HEAD] PR.AT [5 5] [FD :SIDE RT :ANGTTERN HT Q? WAIT 150 Q? CS ST SPIDOT 20 HT Q? WAIT 150 Q? CS ST SPIDOT 45 HT CS Q? WAIT 150 Q? START3 END TO ESC? :K IF :K = CHAR 27 [THROW "BEGIN] END TO POLYPILE :SIDE :TURN FS LOCAL "FD MAKE "PC [2 3 4 5] MAKE "FD :SIDE / 2 / SIN ( :TURN / 2 ) PU FD :quit.] WAIT.FOR.READING END TO START2 PO.SPI CS FS ST LOCAL "PC MAKE "PC [2 3 4 5] POLYSPI 5 90 3 50 HT Q? WAIT 150 Q? CS ST POLYSPI 5 87 3 50 HT Q? WAIT 150 Q? CS ST POLYSPI 5 123 3 60 HT Q? WAIT 150 Q? CS ST POLYSPI 5 60 1 100 HT Q? WAIT 150 Q? CS ST PAREEN PR.AT [1 5] [Spirals are extensions of polygons.] PR.AT [1 7] [The POLY procedure is changed so that] PR.AT [1 9] [the side increases every time the] PR.AT [1 11] [procedure is repeated:] PO.POLYSPI 5 14 PR.AT [1 20] [Press RETURN to continue, ESC to URN LOCAL "PC MAKE "PC [2 3 4 5] PU .DOT 1 :TURN END TO PATTERN REPEAT 6 [POLYSPI 60 60 -2 30 PU SETPOS [0 0] PD RT 60] END TO POLYSPI :FD :RT :INC :N IF :N = 0 [STOP] FD :FD RT :RT CC Q? POLYSPI :FD + :INC :RT :INC :N - 1 END TO PO.SPI CLEARTEXT TEXTSCFD :SIDE / 2 RT :TURN / 2 PD Q? PILE :SIDE * COS ( :TURN / 2 ) :TURN END TO START3 FS HT CS POLYCIRC 40 90 5 65 1 360 Q? WAIT 150 Q? CS CLEARTEXT FULLSCREEN POLYELL 100 180 6 12 12 -2 Q? WAIT 150 Q? CS POLYELL 70 180 3 14 5 4 Q? WAIT 150 END TO SPIDOT :TNC] PR.AT SE :X :Y + 1 [FD :SIDE RT :TURN] PR.AT SE :X :Y + 2 [POLYSPI :SIDE + :INC :TURN :INC] PR.AT SE :X :Y + 3 [END] END TO CC SETPC FIRST :PC MAKE "PC LPUT FIRST :PC BF :PC END TO PILE :SIDE :TURN IF :SIDE < 10 [STOP] CC POLY :SIDE :TURN HEADING PU N PU HOME MAKE "TOTALTURN 0 Q? CIRC :RADIUS :SIZE :ANGLE :INC :FACTOR END TO .DOT :SIDE :TURN FORWARD :SIDE RIGHT :TURN CC SPOT IF OR XCOR > 100 YCOR > 100 [STOP] Q? .DOT :SIDE + 0.3 :TURN END TO PO.POLYSPI :X :Y PR.AT SE :X :Y [TO POLYSPI :SIDE :TURN :IO SPOT PD DOT POS PU END TO POLYELL :SIZE :ANGLE :INC :A :B :FACTOR CS HT MAKE "TOTALTURN 0 ELLIPTICAL :A :B :SIZE :ANGLE :INC :FACTOR END TO POLYCIRC :SIZE :ANGLE :INC :RADIUS :FACTOR :N CS PU MAKE "TOTALTURN 0 PDCIRC :RADIUS :SIZE :ANGLE :INC :FACTOR :E :ANGLE :INC :FACTOR :N IF :TOTALTURN > :N [STOP] SETPOS SE :RADIUS * COS ( :FACTOR * HEADING ) :RADIUS * SIN ( :FACTOR * HEADING ) PD PENSET SETHEADING HEADING + :INC MAKE "TOTALTURN :TOTALTURN + :INC Q? PDCIRC :RADIUS :SIZE :ANGLE :INC :FACTOR :N END T360 [STOP] PU SETPOS SE :RADIUS * COS ( :FACTOR * HEADING ) :RADIUS * SIN ( :FACTOR * HEADING ) PD PENSET .POLY :SIZE :ANGLE 0 SETHEADING HEADING + :INC MAKE "TOTALTURN :TOTALTURN + :INC Q? CIRC :RADIUS :SIZE :ANGLE :INC :FACTOR END TO PDCIRC :RADIUS :SIZ :FACTOR * HEADING ) :B * SIN ( :FACTOR * HEADING ) PD PENSET .POLY :SIZE :ANGLE 0 SETHEADING HEADING + :INC MAKE "TOTALTURN :TOTALTURN + :INC Q? ELLIPTICAL :A :B :SIZE :ANGLE :INC :FACTOR END TO CIRC :RADIUS :SIZE :ANGLE :INC :FACTOR IF NOT :TOTALTURN < SCREEN PR.AT [0 2] [By using the POLY procedure] PO.POLY PR.AT [0 11] [polygons can be embedded in polygons] PR.AT [0 13] [and rotated for interesting effects.] PR.AT [0 16] [Press RETURN to continue.] PR.AT [0 17] [You can press ESC to quit at any time.] WAIT.FOR.READING END TO WAIT.FOR.READING REPEAT 90 [WAIT 30 IF KEYP [ESC? RC STOP]] END MAKE "STARTUP [START] TO START LOCAL "ALREADY CATCH "BEGIN [.START] CT END TO .START TS CT POFILE "MEMORY.DOC PR.AT [6 21] [Press RETURN to begin or] TY.AT [12 22] [ESC to quit.] TEST RC.RAN = CHAR 27 CT IFTRUE [STOP] IF NOT NAMEP "K.1 [SETDATA] INIT GAME END TO RC.RAN IF KEYRETURN to continue, ESC to quit.] Q? MATH IF KEYP [ESC? RC] WAIT 100 IF KEYP [ESC? RC] PAINTING END TO ESC? :K IF :K = CHAR 27 [THROW "BEGIN] END TO PR.AT :XY :IT SETCURSOR :XY TYPE :IT END MAKE "STARTUP [START] C STOP]] END TO .START TEXTSCREEN CLEARTEXT PR.AT [0 5] [You will now see two examples of fairly] PR.AT [0 7] [advanced turtle graphics:] PR.AT [6 10] [A math function plotting program] PR.AT [6 12] [An "intelligent" painting program] PR.AT [0 18] [Press ] [MONDRIAN 55] MONDRIAN 55 IF KEYP [ESC? RC] WAIT 200 IF KEYP [ESC? RC] PR.AT [12 23] [MONDRIAN 25] MONDRIAN 25 IF KEYP [ESC? RC] WAIT 200 IF KEYP [ESC? RC] SETBG 6 WAIT 100 END TO START CATCH "BEGIN [.START] END TO Q? REPEAT 40 [WAIT 30 IF KEYP [ESC? R9 -119 119 END TO painting TEXTSCREEN CLEARTEXT PR.AT [4 5] [The Mondrian program creates] PR.AT [4 7] [random "paintings" that are] PR.AT [4 9] [partly controlled by a variable.] PR.AT [1 18] [Press RETURN to continue, ESC to quit.] Q? CT SS PR.AT [12 23R :B :T IF KEYP [ESC? RC] LOCAL "MID IF ( :R - :L ) < :MIN [PAINT :L :R :B :T STOP] MAKE "MID :L + RANDOM ( :R - :L + 1 ) VLIN :B :T :MID HORIZONTAL :L :MID - 1 :B :T HORIZONTAL :MID + 1 :R :B :T END TO MONDRIAN :MIN CS HT SETBG 1 SETPC 0 VERTICAL -139 13ESC? RC] LOCAL "MID IF ( :T - :B ) < :MIN [PAINT :L :R :B :T STOP] MAKE "MID :B + RANDOM ( :T - :B + 1 ) HLIN :L :R :MID VERTICAL :L :R :B :MID - 1 VERTICAL :L :R :MID + 1 :T END TO HLIN :L :R :Y PU SETPOS SE :L :Y PD SETPOS SE :R :Y END TO VERTICAL :L :END TO VLIN :B :T :X PU SETPOS SE :X :B PD SETPOS SE :X :T END TO PAINT :L :R :B :T IF KEYP [ESC? RC] IF 0 < RANDOM 5 [STOP] SETPC ( 4 + RANDOM 2 ) REPEAT ( :R - :L + 1 ) / 2 [VLIN :B :T :L MAKE "L :L + 2] SETPC 0 END TO HORIZONTAL :L :R :B :T IF KEYP [OT LIST :Z + :ANG / 2 100 * COS :ANG IF KEYP [ESC? RC] COSC :ANG + 2 :Z END TO .COS LT 90 .C FD 4 .C PD .LF 10 PU .LF 9 .S END TO .S PD REPEAT 2 [FD 5 LT 90] FD 5 REPEAT 2 [RT 90 FD 5] PU END TO .LF :D LT 90 FD :D END TO .C PD REPEAT 2 [FD 5 .LF 5] PU ND TO SINC :ANG :Z IF :ANG > 360 [STOP] PD DOT LIST :Z + :ANG / 2 100 * SIN :ANG IF KEYP [ESC? RC] SINC :ANG + 2 :Z END TO .SIN RT 90 .S FD 4 RT 90 PD FD 10 PU .LF 4 PD .LF 10 RT 150 FD 10 / COS 30 LT 150 FD 10 END TO COSC :ANG :Z IF :ANG > 360 [STOP] DTO MATH CS FS ST AX IF KEYP [ESC? RC] SETPC 4 HT SINC 0 -100 PU IF KEYP [ESC? RC] LT 90 BK 15 .SIN IF KEYP [ESC? RC] SETPC 5 COSC 0 -100 PU IF KEYP [ESC? RC] SETPOS [100 95] .COS END TO AX PU .LF 100 RT 90 PD SETPC 1 FD 100 BK 200 FD 100 RT 90 FD 200 PU EP [OP RC] MAKE "J RANDOM 100 OP RC.RAN END TO YESNO PR [Please answer YES or NO.] END TO ASK :MESSAGE :LOC SETCURSOR :LOC TYPE SE :MESSAGE CHAR 32 LOCAL "ANS MAKE "ANS RL IF EMPTYP :ANS [YESNO OP ASK :MESSAGE :LOC] IF NOT MEMBERP UPPERCASE FIRST :ANS [YKE "K.7 (WORD REP 2 CHAR 32 "Your\ Turn\ |__| rep 4 char 32 "Errors:) MAKE "K.8 " MAKE "K.9 WORD REP 2 CHAR 32 REP 9 WORD "___ CHAR 32 MAKE "K.10 (WORD CHAR 32 "| REP 9 (WORD CHAR 32 CHAR 32 CHAR 32 "|) MAKE "K.11 (WORD CHAR 32 "|\ 1\ |\ 2\ |\ 3\ |\ 4\ |\ :CH] OP :T END TO SETDATA MAKE "K.0 WORD REP 12 CHAR 32 "MUSICAL\ MEMORIES MAKE "K.1 REP 39 "= MAKE "K.2 " MAKE "K.3 " MAKE "K.4 WORD REP 13 CHAR 32 "__ MAKE "K.5 (WORD REP 2 CHAR 32 "My\ Turn\ \ \ |__| rep 4 char 32 "Notes\ To\ Play:) MAKE "K.6 :K.4 MA3 7] "X END TO SHOWDATA TY.AT [37 5] :TIMES TY.AT [37 7] :ERRORS END TO SETDISPLAY IF :ALREADY [STOP] CT MAKE "K 0 REPEAT 23 [PR THING WORD "K. :K MAKE "K :K + 1] MAKE "ALREADY "TRUE END TO REP :K :CH LOCAL "T MAKE "T :CH REPEAT :K - 1 [MAKE "T WORD :T TO YOURTURN CHECKYOURTURN CBUFF 0 KEYPLAY HIDDEN.RC 1 :TIMES :ERRORS IF OK [WAIT 20] END TO WAITKEY IF KEYP [STOP] WAITKEY END TO HIDDEN.RC WAITKEY OP RC END TO CHECKMYTURN TY.AT [13 7] "_ TY.AT [13 5] "X END TO CHECKYOURTURN TY.AT [13 5] "_ TY.AT [1.AT SE :X 12 :HIGH.K TY.AT SE :X + 1 11 CHAR 128 + ASCII :KEY END TO NORMAL :KEY MAKE "X (:KEY - 1) * 4 + 2 TY.AT SE :X 10 :NORM.K TY.AT SE :X 11 :NORM.K TY.AT SE :X 12 "___ TY.AT SE :X + 1 11 :KEY END TO MYTURN CHECKMYTURN SHOWDATA LISTPLAY 1 :TIMES END HIGHLIGHT :KEY TOOT THING :KEY 15 NORMAL :KEY END TO LISTPLAY :COUNT :TIMES PLAY ITEM :COUNT :PLAYLIST IF :COUNT = :TIMES [STOP] LISTPLAY :COUNT + 1 :TIMES END TO HIGHLIGHT :KEY MAKE "X (:KEY - 1) * 4 + 2 TY.AT SE :X 10 :HIGH.K TY.AT SE :X 11 :HIGH.K TY128 + ASCII "? :KEY = CHAR 128 + ASCII "/ [DO.HELP STOP] IF NUMBERP :KEY [IF :KEY > 0 [PLAY :KEY] [MAKE "OK "FALSE]] [MAKE "OK "FALSE] CHECK :KEY :COUNT :ERRORS IF :COUNT = :TIMES [STOP] IF OK [KEYPLAY HIDDEN.RC :COUNT + 1 :TIMES :ERRORS] END TO PLAY :KEY"FALSE END TO CBUFF :K IF KEYP [CBUFF RC] END TO CHECK :KEY :COUNT :ERRORS IF NOT ( ITEM :COUNT :PLAYLIST ) = :KEY [SORRY :ERRORS + 1 :COUNT] END TO OK OP :OK END TO KEYPLAY :KEY :COUNT :TIMES :ERRORS IF :KEY = CHAR 27 [THROW "BEGIN] IF OR :KEY = CHAR PLAY MAKE "OK "TRUE MYTURN YOURTURN IF :DID.H [MAKE "TIMES :TIMES - 1] IF OK [PGAME :TIMES + 1 :ERRORS] [PGAME :TIMES :ERRORS + 1] END TO AGAIN IF KEYP [CBUFF RC] SETCURSOR [0 18] IF NOT ASK [One more time \(\Y\/\N\)?] CURSOR [THROW "BEGIN] MAKE "ALREADY PGAME 1 0 AGAIN GAME END TO SORRY :ERRORS :COUNT TOOT 100 20 MAKE "OK "FALSE RECYCLE END TO GEN.PLAYLIST MAKE "PLAYLIST [] REPEAT 30 [MAKE "PLAYLIST FPUT 1 + RANDOM 9 :PLAYLIST] END TO PGAME :TIMES :ERRORS MAKE "DID.H "FALSE IF :ERRORS = 3 [STOP] SETDIS (WORD :HIGH.K :HIGH.K CHAR 32 + 128) MAKE "NORM.M (WORD :NORM.K :NORM.K CHAR 32) MAKE "9 1046.29 MAKE "8 987.749 MAKE "7 880 MAKE "6 783.969 MAKE "5 698.439 MAKE "4 659.239 MAKE "3 587.309 MAKE "2 523.209 MAKE "1 493.862 END TO GAME GEN.PLAYLIST WAIT 70 [Press RETURN to continue.] MAKE "JUNK RC MAKE "ALREADY "FALSE MAKE "DID.H "TRUE END TO INIT MAKE "ALREADY "FALSE MAKE "DID.H "FALSE MAKE "HIGH.K (WORD CHAR 32 + 128 CHAR 32 + 128 CHAR 32 + 128) MAKE "NORM.K (WORD CHAR 32 CHAR 32 CHAR 32 ) MAKE "HIGH.MES Y NO N] [YESNO OP ASK :MESSAGE :LOC] OP "Y = UPPERCASE FIRST FIRST :ANS END TO ESC? :K IF :K = CHAR 27 [THROW "BEGIN] END TO PR.AT :P :X SETCURSOR :P TYPE :X END TO TY.AT :P :X SETCURSOR :P TYPE :X END TO DO.HELP CT POFILE "MEMORY.DOC TY.AT [0 21] 5\ |\ 6\ |\ 7\ |\ 8\ |\ 9\ | MAKE "K.12 WORD CHAR 32 "|___|___|___|___|___|___|___|___|___| MAKE "K.13 " MAKE "K.14 " MAKE "K.15 " MAKE "K.16 " MAKE "K.17 " MAKE "K.18 " MAKE "K.19 " MAKE "K.20 " MAKE "K.21 REP 39 "- MAKE "K.22 (WORD "ESC\ quit, CHAR 32 CHAR 193 "- "?\ help) END MAKE "STARTUP [START] TE :NAME PR [MUSIC.DATA] SAVETUNES :TUNE.LIST SETWRITE [] CLOSE :NAME SETCURSOR [0 10] SHOWERROR [Tunes saved.] END TO WHATFILE TY.AT [0 8] [WHAT FILE?] TYPE CHAR 32 OP FIRST RL END TO MUSIC.LOAD :NAME IF NOT FILEP :NAME [SHOWERROR [FILE DOES NOT EXIST] ORD FIRST :TUNE.LIST ".FREQ SAVETUNES BF :TUNE.LIST END TO LOADNAMES CATCH "ERROR [LOADNAMES1 STOP] END TO MUSIC.SAVE :NAME IF FILEP :NAME [SHOWERROR [FILE ALREADY EXISTS] STOP] SETCURSOR [0 8] CLEARLINE SETCURSOR [0 8] TYPE [SAVING...] OPEN :NAME SETWRIAME :TUNE.LIST [MAKE "TUNE.LIST SE :TUNE.LIST :NEWNAME] MAKE WORD :NEWNAME ".SYMBOLS RL MAKE WORD :NEWNAME ".FREQ RL LOADNAMES1 END TO SAVETUNES :TUNE.LIST IF EMPTYP :TUNE.LIST [STOP] PR FIRST :TUNE.LIST PR THING WORD FIRST :TUNE.LIST ".SYMBOLS PR THING WREADPOS = FILELEN :NAME [STOP] LOCAL "NEWNAME MAKE "NEWNAME FIRST RL IF NAMEP WORD :NEWNAME ".SYMBOLS [MAKE "NEWNAME RL MAKE "NEWNAME RL LOADNAMES1 STOP] IF NAMEP WORD :NEWNAME ".FREQ [MAKE "NEWNAME RL MAKE "NEWNAME RL LOADNAMES1 STOP] IF NOT MEMBERP :NEWNSETCURSOR [0 2] REPEAT 20 [PR RW] END TO READ.THE.LINES SETREAD :NAME SHOW.20 IF READPOS = FILELEN :NAME [SETREAD [] SETCURSOR [38 23] MAKE "CH RC STOP] SETREAD [] SETCURSOR [38 23] MAKE "CH RC IF :CH = CHAR 27 [STOP] READ.THE.LINES END TO LOADNAMES1 IF will be recorded.] TY.AT [0 23] [ESC to menu, P plays tune, DELETE note] TY.AT [0 7] SE [Your tune:] CHAR 32 TYPE :TUNE.SYMBOLS IF ( COUNT :TUNE.SYMBOLS ) > 0 [TYPE CHAR 32] END TO CLEARLINE PR :BLANK END TO SHOW.20 SETCURSOR [0 2] REPEAT 20 [CLEARLINE] COUNT :LIST [MAKE "WORD ( WORD :WORD CHAR 32 FIRST :LIST ) MAKE "LIST BF :LIST] TY.AT SE INTQUOTIENT ( 40 - COUNT :WORD ) 2 0 :WORD END TO RECORDSCREEN CT SHOW.FRAME TY.AT [12 0] [Play and Record] PR.AT [0 3] [Play from the keyboard, and your notes] PR [NE.SYMBOLS ( WORD :X ITEM :TEMP :SYMBOLS :SUFFIX ) MAKE "TUNE.FREQ SE :TUNE.FREQ SE ITEM :TEMP THING WORD :GROUP ".NOTES :X SHOWNOTE LAST :TUNE.SYMBOLS OP LAST BL :TUNE.FREQ END TO CENTER :LIST LOCAL "WORD MAKE "WORD FIRST :LIST MAKE "LIST BF :LIST REPEATTO TY.AT :P :M SETCURSOR :P TYPE :M END TO PR.AT :P :M SETCURSOR :P PR :M END TO GENERALREAD :GROUP :SUFFIX IF NOT MEMBERP CHAR :TEMP :VALID.NOTES [OP SPECIALCASE] IF :RECORDING = "FALSE [OP ITEM :TEMP THING WORD :GROUP ".NOTES] MAKE "TUNE.SYMBOLS SE :TUyboard. To play the notes just press the number keys on your keyboard. MUSICAL MEMORY GAME This is a game in which I play a note, or a sequence of notes, and you repeat them. Each time you respond correctly, the sequence becomes longer. The screen shows numbered boxes that represent the number keys on the keSTOP] SETCURSOR [0 8] CLEARLINE TY.AT [0 8] [Loading...] OPEN :NAME SETREAD :NAME IF NOT EQUALP [MUSIC.DATA] RL [CLOSE :NAME SETREAD [] SHOWERROR [NOT A MUSIC DATA FILE] STOP] LOADNAMES SETREAD [] CLOSE :NAME SETCURSOR [0 10] SHOWERROR SE :NAME [loaded.] END TO LOAD.SAMPLES CT SHOW.FRAME TY.AT [0 23] :BLANK CENTER [Loading Samples] MUSIC.LOAD "SAMPLE.TUNES END TO PLAY2 CT SHOW.FRAME CENTER [Playing Tunes] TY.AT [0 23] [RETURN to menu] SETCURSOR [0 5] IF EMPTYP :TUNE.LIST [SHOWERROR [There are no tunes in MENU END TO RECORD2 RECORDSCREEN MAKE "RECORDING "TRUE CATCH "RETURN [TYPE.MUSIC] MAKE WORD :CURRENT.TUNE ".SYMBOLS :TUNE.SYMBOLS MAKE WORD :CURRENT.TUNE ".FREQ :TUNE.FREQ END TO CHANGEDUR CT SHOW.FRAME CENTER [Change Duration] TY.AT [0 23] [RETURN to melay Existing Tune] TY.AT [7 13] [6\.\ Load/Save Tunes to Disk] TY.AT [7 15] [7\.\ Change Common Duration] TY.AT [7 17] [8\.\ Load Samples] TY.AT [7 19] [9\.\ Quit] TY.AT [0 21] SE [Type your choice and press RETURN] CHAR 32 CATCH "ERROR [DO FIRST RL] SHOW. STOP] IF :C = 9 [THROW "THEEND] END TO SHOW.MENU SETWIDTH 40 SHOW.FRAME TY.AT [15 0] [Logo Sings] TY.AT [7 3] [1\.\ Introduction] TY.AT [7 5] [2\.\ Play] TY.AT [7 7] [3\.\ Record or Change Tune] TY.AT [7 9] [4\.\ Erase Existing Tune] TY.AT [7 11] [5\.\ P [0 23] CHAR 193 (TYPE "- "? CHAR 32 "HELP) END TO DO :C IF :C = 1 [INTRO1 STOP] IF :C = 2 [PLAY1 STOP] IF :C = 3 [RECORD1 STOP] IF :C = 4 [ERASE.TUNES1 STOP] IF :C = 5 [PLAY2] IF :C = 6 [LOAD.SAVE1 STOP] IF :C = 7 [CHANGEDUR STOP] IF :C = 8 [LOAD.SAMPLESENTER [Introduction] READ.FILE "MUSIC.INTRO END TO SHOWERROR :LIST PR [] LOCAL "TEMP MAKE "TEMP CURSOR PR :LIST TYPE [Press RETURN] LOCAL "JUNK MAKE "JUNK RL SETCURSOR :TEMP CLEARLINE CLEARLINE END TO SHOW.FRAME TY.AT [0 1] :DASH TY.AT [0 22] :DASH TY.ATUNE.LIST ALL.BUT :TUNE.LIST :TEMP ERN WORD :TEMP ".SYMBOLS ERN WORD :TEMP ".FREQ END TO READ.FILE :NAME LOCAL "CH CATCH "ERROR [OPEN :NAME READ.THE.LINES] SETREAD [] CLOSE :NAME END TO INTRO1 CT SHOW.FRAME TY.AT [0 23] [RETURN to continue, ESC to menu] Crase.] STOP] TYPE [The current tunes are] TY.AT [0 7] :TUNE.LIST PR.AT [0 18] [Which tune do you want to erase?] LOCAL "TEMP MAKE "TEMP UPPERCASE FIRST RL IF NOT MEMBERP :TEMP :TUNE.LIST [SHOWERROR [That tune is not in the list.] ERASE.TUNES1 STOP] MAKE "T :OBJ ( FIRST :LIST ) [] [MAKE "NEWLIST SE :NEWLIST FIRST :LIST] MAKE "LIST BF :LIST] OP :NEWLIST END TO ERASE.TUNES1 CT SHOW.FRAME CENTER [Erase Tunes] TY.AT [0 23] [RETURN to menu] SETCURSOR [0 5] IF EMPTYP :TUNE.LIST [SHOWERROR [There are no tunes to eO PLAY1 CT SHOW.FRAME CENTER [Play Without Recording] TY.AT [0 23] [ESC to menu] PR.AT [0 5] [Play From the Keyboard] MAKE "RECORDING "FALSE CATCH "RETURN [TYPE.MUSIC] END TO ALL.BUT :LIST :OBJ LOCAL "NEWLIST MAKE "NEWLIST [] REPEAT COUNT :LIST [IF EQUALPK CENTER [Load/Save Tunes] TY.AT [0 6] [Do you want to load or save \(\L/S\)\?] TYPE CHAR 32 LOCAL "TEMP MAKE "TEMP UPPERCASE FIRST RL IF :TEMP = "L [MUSIC.LOAD WHATFILE STOP] IF :TEMP = "S [MUSIC.SAVE WHATFILE STOP] SHOWERROR [Please enter L or S.] END TUNE.LIST :TEMP MAKE WORD :TEMP ".SYMBOLS [] MAKE WORD :TEMP ".FREQ [] MAKE "CURRENT.TUNE :TEMP MAKE "TUNE.SYMBOLS THING WORD :CURRENT.TUNE ".SYMBOLS MAKE "TUNE.FREQ THING WORD :CURRENT.TUNE ".FREQ RECORD2 END TO LOAD.SAVE1 CT SHOW.FRAME TY.AT [0 23] :BLAN [Create a new tune by typing a name] PR [not in the list. Change a tune by ] PR [typing a name in the list.] TY.AT [0 18] (SE [Which one to record?] CHAR 32) LOCAL "TEMP MAKE "TEMP UPPERCASE FIRST RL IF NOT MEMBERP :TEMP :TUNE.LIST [MAKE "TUNE.LIST SE :T WORD :TEMP ".FREQ PLAY2 END TO RECORD1 CT SHOW.FRAME CENTER [Recording and Changing Tunes] TY.AT [8 23] [, RETURN to exit] TY.AT [0 5] [The current tunes are] TY.AT [0 7] :TUNE.LIST IF EMPTYP :TUNE.LIST [TYPE [There are no tunes in memory.]] PR.AT [0 14]memory.] STOP] TYPE [The current tunes are] TY.AT [0 7] :TUNE.LIST PR.AT [0 18] [Which tune do you want to play?] LOCAL "TEMP MAKE "TEMP UPPERCASE FIRST RL IF NOT MEMBERP :TEMP :TUNE.LIST [SHOWERROR [That tune is not in the list.] PLAY2 STOP] PLAYCON THINGnu] PR.AT [0 4] SE [The duration is currently] :DUR TY.AT [0 6] SE [Enter your new duration] CHAR 32 MAKE "DUR FIRST RL END TO TYPE.MUSIC CATCH "ERROR [TYPE.NOTES] TYPE.MUSIC END TO TYPE.NOTES IF KEYP [PLAYIT] TYPE.NOTES END TO PLAYIT IF BUTTONP 0 [TOOT FLATREAD :DUR * :X STOP] IF BUTTONP 1 [TOOT SHARPREAD :DUR * :X STOP] TOOT NATURALREAD :DUR * :X END TO PLAYCON :NOTES IF EMPTYP :NOTES [STOP] TOOT FIRST :NOTES :DUR * FIRST BF :NOTES PLAYCON BF BF :NOTES END TO DELETELAST MAKE "TUNE.FREQ BL BL :TUNE.FRu play are stored in tunes which can be named and kept in memory, or saved on disk for furture use. You can play sharps and flats by holding down one of the Apple keys as you play. Pressing OPEN APPLE makes the note flat; pressing SOLID APPLE makes e: ccc ddd eee fff ggg aaa bbb cc Key: a s d f g h j k The lowest octave is as follows: Note: cccc dddd eeee ffff gggg Key: z x c v b aaaa bbbb ccc n m , The notes yoCCC Key: Q W E R T Y U I The low notes are symbolized and played by lowercase letters. The octave below middle-C is as follows: Note: cc dd ee ff gg aa bb C Key: q w e r t y u i The next octave is as follows: Not: Note: C D E F G A B CC Key: Z X C V B N M < The next octave is as follows: Note: CC DD EE FF GG AA BB CCC Key: A S D F G H J K The highest octave is as follows: Note: CCC DDD EEE FFF GGG AAA BBB C This program lets you compose and play music. The Apple's keyboard becomes a musical keyboard, and the notes you play can be recorded, saved, and played again. Middle-C is played with a capital "Z" and symbolized by "C." The whole octave is as followsND MAKE "STARTUP [LOAD "TUNED.NOTES RUN.MUSIC] ELP WORD :SP "MAIN.HELP] END TO STARTUP MAKE "MUSIC.DATA [SYMBOLS NATURAL.NOTES FLAT.NOTES SHARP.NOTES VALID.NOTES MUSIC.DATA] MAKE "VALID.NOTES SE [z x c v b n m , a s d f g h j k q w e r t y u i Z X C V B N M < A S D F G H J K Q W E R T Y U I] CHAR 32 EH "- REPEAT 38 [MAKE "DASH WORD :DASH "-] MAKE "BLANK CHAR 32 REPEAT 38 [MAKE "BLANK WORD :BLANK CHAR 32] MAKE "RECORDING "FALSE MAKE "X 1 MAKE "DUR 5 MAKE "TUNE.FREQ [] MAKE "TUNE.SYMBOLS [] MAKE "TUNE.LIST [] CATCH "THEEND [SHOW.MENU] CATCH "ERROR [LOADH END TO FLATREAD LOCAL "TEMP MAKE "TEMP ( ASCII RC ) - 128 OP GENERALREAD "FLAT "% END TO RUN.MUSIC LOCAL "DUR LOCAL "RECORDING LOCAL "X LOCAL "TUNE.FREQ LOCAL "TUNE.SYMBOLS LOCAL "TUNE.LIST LOCAL "DASH LOCAL "BLANK STARTUP LOADHELP "MUSIC.HELP MAKE "DASPE CHAR 32 END TO SPECIALCASE IF MEMBERP CHAR :TEMP [1 2 3 4 5 6 7 8 9] [MAKE "X :TEMP - ASCII "0] IF :TEMP = 27 [THROW "RETURN] IF :RECORDING = "FALSE [OP 0] IF :TEMP = 127 [OP DELETELAST] IF OR :TEMP = ASCII "P :TEMP = ASCII "p [PLAYCON :TUNE.FREQ] OP 0EQ MAKE "TUNE.SYMBOLS BL :TUNE.SYMBOLS RECORDSCREEN OP 0 END TO NATURALREAD LOCAL "TEMP MAKE "TEMP ASCII RC OP GENERALREAD "NATURAL " END TO SHARPREAD LOCAL "TEMP MAKE "TEMP ( ASCII RC ) - 128 OP GENERALREAD "SHARP "# END TO SHOWNOTE :NOTE TYPE :NOTE TYthe note sharp. A pound sign (#) after a symbol indicates that the note is a sharp. A percent sign (%) after a note indicates that the note is a flat. Each note is played for a multiple of the common duration. Exactly what multiple depends on the number displayed before the symbol. The number keys (1 through 9) change the current multiple. To play a note twice as long, press the 2 key before you press the key for the note. You can put a rest in your tune using the SPACE bar. The rest 0 0 0 0 0 0 0 0 ccc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 CC 0 0 0 0 CC G E EE EEE FF GG AA CCCC BB CCC 0 B A 0 0 CCC FFF DD GGG BBB F DDD D AAA C 0 0 0 0 0 0 ccc gggg eeee eee ee fff ggg aaa C bbb cc 0 bbbb aaaa 0 0 cc ff ddd gg bb ffff dd dddd aa cccc 0 0 0 0 0]58 84 94 105 257 118 125 0 59 52 0 0 125 168 70 189 239 42 141 35 212 32 0 0 0 0 D] MAKE "MUSIC.DATA [SYMBOLS NATURAL.NOTES FLAT.NOTES SHARP.NOTES VALID.NOTES MUSIC.DATA] MAKE "SYMBOLS [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 R 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 515 0 0 0 0 515 383 320 655 1360 700 787 890 2250 1007 1070 0 485 431 0 0 1070 1460 581 1626 2090 341 1200 285 1850 257 0 0 0 0 0 0 63 47 39 79 181 0 0 0 0 581 431 370 780 1553 787 890 1007 2680 1130 1328 0 547 485 0 0 1200 1626 655 1850 2420 383 1360 320 2090 285 0 0 0 0 0 0 70 52 44 89 178 94 105 118 285 133 141 0 66 59 0 0 141 189 79 212 269 47 158 39 239 35 0 0 0 0 D] MAKE "FLAT.NOTES [0 0 0 0 MAKE "VALID.NOTES [z x c v b n m , a s d f g h j k q w e r t y u i Z X C V B N M < A S D F G H J K Q W E R T Y U I] MAKE "SHARP.NOTES [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 aaaa bbbb ccc n m , Press OPEN APPLE with a note key for flat notes (%) Press SOLID APPLE with a note key for sharp notes (#) Press the SPACE bar for rest (R) f gg aa bb C Key: q w e r t y u i The next octave is as follows: Note: ccc ddd eee fff ggg aaa bbb cc Key: a s d f g h j k The lowest octave is as follows: Note: cccc dddd eeee ffff gggg Key: z x c v b F G H J K The highest octave is as follows: Note: CCC DDD EEE FFF GGG AAA BBB CCCC Key: Q W E R T Y U I The low notes are symbolized and played by lowercase letters. The octave below middle-C is as follows: Note: cc dd ee fMiddle-C is played with a capital "Z" and symbolized by "C." The whole octave is as follows: Note: C D E F G A B CC Key: Z X C V B N M > The next octave is as follows: Note: CC DD EE FF GG AA BB CCC Key: A S D is symbolized by an "R." The duration of rests can be modified the same way the duration of notes is modified. You can get a summary of this introduction by asking for help (OPEN APPLE-?). MAKE "NATURAL.NOTES [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 547 0 0 0 0 547 405 341 700 1460 741 838 948 2420 1070 1130 0 515 457 0 0 1130 1553 620 1760 2250 361 1290 302 1990 269 0 0 0 0 0 0 66 50 42 84 168 89 100 112 269 125 133 0 63 56 0 0 133 178 75 200 257 44 149 37 225 33 0 0 0 0 D] NE WORD :LINE "_] MAKE "OPTIONS CHAR 32 REPEAT 7 [MAKE "OPTIONS WORD :OPTIONS CHAR 32] MAKE "OPTIONS WORD :OPTIONS "Quit REPEAT 7 [MAKE "OPTIONS WORD :OPTIONS CHAR 32] MAKE "OPTIONS WORD :OPTIONS "|| REPEAT 7 [MAKE "OPTIONS WORD :OPTIONS CHAR 32] MAKE "OPTTO START LOCAL "MOUSE LOAD "MOUSE MAKE "MOUSE MOUSEON DO.INTRO CATCH "BEGIN [.START] CLOSEALL SETREAD [] IF :MOUSE [MOUSEOFF] CT END TO .START MAKE "LINE "_ REPEAT 18 [MAKE "LINE WORD :LINE "_] MAKE "LINE ( WORD :LINE CHAR 32 CHAR 32 ) REPEAT 18 [MAKE "LI@*MOUSE.QUIZO !I.MOUSE.QUIZ.DOCO !I)QUESTIONSO !I%MOUSE O !IMOUSE.BIN O !\I)MOUSE.DOCO !IPICS.16 3E 2R 2F 2F 3F 1F 2F 2E 2E 1E 1E 2G 2G 2F 2D 8C 341 2 341 2 341 4 341 2 341 2 341 4 341 2 405 2 269 3 302 1 341 3 0 2 361 2 361 2 361 3 361 1 361 2 341 2 341 2 341 1 341 1 405 2 405 2 361 2 302 2 269 8 1F 4G 2G 2D 2D 2F 2E 2D 4C 405 2 341 2 405 4 405 2 341 2 405 4 457 2 405 2 361 2 341 2 302 2 341 2 361 2 341 1 361 1 405 2 269 2 269 1 269 1 269 2 269 1 302 1 341 1 361 1 405 4 405 2 302 2 302 2 361 2 341 2 302 2 269 4 JINGLE 2E 2E 4E 2E 2E 4E 2E 2G 3C 1D 341 2 269 2 269 2 302 2 341 2 269 2 341 2 361 2 405 4 341 2 361 2 405 4 405 1 457 1 405 1 361 1 341 2 269 2 405 1 457 1 405 1 361 1 341 2 269 2 269 2 200 2 269 4 269 2 200 2 269 4 OLDMAN 2G 2E 4G 2G 2E 4G 2A 2G 2F 2E 2D 2E 2F 1E 1F 2G 2C 1C 1C 2C 1C 1D 1E 2 341 2 302 4 405 2 405 2 361 2 361 2 341 2 341 2 302 4 269 2 269 2 405 2 405 2 457 2 457 2 405 4 361 2 361 2 341 2 341 2 302 2 302 2 269 4 FRERE 2C 2D 2E 2C 2C 2D 2E 2C 2E 2F 4G 2E 2F 4G 1G 1A 1G 1F 2E 2C 1G 1A 1G 1F 2E 2C 2C 2gg 4C 2C 2gg 4C 269 2 302 2MUSIC.DATA TWINKLE 2C 2C 2G 2G 2A 2A 4G 2F 2F 2E 2E 2D 2D 4C 2G 2G 2F 2F 2E 2E 4D 2G 2G 2F 2F 2E 2E 4D 2C 2C 2G 2G 2A 2A 4G 2F 2F 2E 2E 2D 2D 4C 269 2 269 2 405 2 405 2 457 2 457 2 405 4 361 2 361 2 341 2 341 2 302 2 302 2 269 4 405 2 405 2 361 2 361 2 341IONS WORD :OPTIONS "Help IF NOT :MOUSE [MAKE "OPTIONS (SE [ESC quit,] (WORD CHAR 193 "- "?) [help]) MAKE "LINE []] OPEN "QUESTIONS SETREAD "QUESTIONS IF NOT EQUALP "Q RW [STOP] DO.IT CT TYPE.AT [0 5] [THAT'S ALL FOLKS!!!] WAIT 120 END TO TYPE.AT :P :X SETQ.BOX :Q.TEXT LOCAL [HEIGHT X K] MAKE "HEIGHT 2 + COUNT :Q.TEXT MAKE "Q.WIDTH 2 + MAXLEN :Q.TEXT MAKE "X INTQUOTIENT 40 - :Q.WIDTH 2 BOX SE :X 1 :Q.WIDTH :HEIGHT MAKE "K 1 REPEAT COUNT :Q.TEXT [TYPE.AT SE :X + 1 2 + :K ITEM :K :Q.TEXT MAKE "K :K + 1] MAKE .NUM - 1 :WIDTH MAKE "X FIRST :POS MAKE "ANSWER.LOCS LPUT ( SE :POS :WIDTH :HEIGHT ) :ANSWER.LOCS BOX :POS :WIDTH :HEIGHT TYPE.AT :POS :A.NUM MAKE "K 1 REPEAT COUNT :A.TEXT [TYPE.AT SE :X + 1 :K + 1 + LAST :POS ITEM :K :A.TEXT MAKE "K :K + 1] END TO DRAW.IF ODDP :K [OP SE :Q.START + :Q.WIDTH - :SIZE 9 + 7 * INTQUOTIENT :K 2] OP SE :Q.START 9 + 7 * INTQUOTIENT :K 2 END TO DRAW.A.BOX :A.TEXT :A.NUM LOCAL [HEIGHT WIDTH POS X K] MAKE "HEIGHT 2 + COUNT :A.TEXT MAKE "WIDTH 2 + MAXLEN :A.TEXT MAKE "POS LOC.OF :A.BOX :X :Y 3 [OP 3] IF 3 = COUNT :CHOICES [OP 0] IF LOC.IN.BOX :X :Y 4 [OP 4] OP 0 END TO DO.IT IF READPOS = FILELEN "QUESTIONS [STOP] CT GET.Q.AND.A QUESTION :Q :CHOICES DO.IT END TO ODDP :K OP NOT EQUALP :K 2 * INTQUOTIENT :K 2 END TO LOC.OF :K :SIZE OOD.JOB] [SORRY] END TO MAPLOC :LOC LOCAL [X Y] MAKE "X FIRST :LOC MAKE "Y LAST :LOC IF :Y = 23 [IF :X < 20 [OP CHAR 27] [OP "?]] IF LOC.IN.BOX :X :Y 1 [OP 1] IF 1 = COUNT :CHOICES [OP 0] IF LOC.IN.BOX :X :Y 2 [OP 2] IF 2 = COUNT :CHOICES [OP 0] IF LOC.IN.Y ITEM 2 ITEM :BOX :ANSWER.LOCS IF NOT BETWEENP :Y :LOW.Y :LOW.Y + ITEM 4 ITEM :BOX :ANSWER.LOCS [OP "FALSE] OP "TRUE END TO GOOD.JOB TOOT 273 5 TOOT 273 5 TOOT 273 5 TOOT 370 20 HIGH.ANS :ANS RECYCLE END TO CHECK.ANSWER :USER.ANS IF :USER.ANS = :ANS [GD TO BETWEENP :X :Y :Z IF :X < :Y [OP "FALSE] IF :X > :Z [OP "FALSE] OP "TRUE END TO LOC.IN.BOX :X :Y :BOX LOCAL [LOW.X LOW.Y] MAKE "LOW.X FIRST ITEM :BOX :ANSWER.LOCS IF NOT BETWEENP :X :LOW.X :LOW.X + ITEM 3 ITEM :BOX :ANSWER.LOCS [OP "FALSE] MAKE "LOWMAKE "POS LOC.OF :A.NUM - 1 :WIDTH MAKE "X FIRST :POS MAKE "ANSWER.LOCS LPUT ( SE :POS :WIDTH :HEIGHT ) :ANSWER.LOCS INV.BOX :POS :WIDTH :HEIGHT MAKE "K 1 REPEAT COUNT :A.TEXT [TYPE.AT SE :X + 1 :K + 1 + LAST :POS INVERSE ITEM :K :A.TEXT MAKE "K :K + 1] ENAKE "K 1 REPEAT :HEIGHT [SETCURSOR SE FIRST :POS :K + LAST :POS DO.INV.SIDES :WIDTH MAKE "K :K + 1] END TO HIGH.ANS :A.NUM LOCAL [HEIGHT WIDTH POS X K A.TEXT] MAKE "A.TEXT ITEM :A.NUM :CHOICES MAKE "HEIGHT 2 + COUNT :A.TEXT MAKE "WIDTH 2 + MAXLEN :A.TEXT W] END TO DO.INV.SIDES :X TYPE "| REPEAT :X - 2 [TYPE CHAR 128 + 32] TYPE "| END TO INVERSE :W IF 1 = COUNT :W [OP INV :W] OP WORD INV FIRST :W INVERSE BF :W END TO INV.BOX :POS :WIDTH :HEIGHT LOCAL "K TYPE.AT :POS CHAR 32 REPEAT :WIDTH - 2 [TYPE "_] M keyboard or] PR [hold down the mouse button to use] TYPE [the mouse.] WAITFOR CT END TO MYNUMBERP :WORD IF MEMBERP CHAR 32 :WORD [OP "FALSE] OP NUMBERP :WORD END TO INV :W IF AND 64 < ASCII :W 96 > ASCII :W [OP CHAR 64 + ASCII :W] [OP CHAR 128 + ASCII :FOR IF AND :MOUSE MBUTTONP [MAKE "MOUSE "TRUE STOP] IF KEYP [MAKE "MOUSE "FALSE IGNORE RC STOP] WAITFOR END TO DO.INTRO SHOW.FILE "MOUSE.QUIZ.DOC CT PR.AT [0 4] [You can use a mouse or the keyboard] PR [to take the quiz.] PR [] PR [Press RETURN to use theCAL "T C.BUF 0 MAKE "T HIDDEN.RC IF 127 < ASCII :T [MAKE "T CHAR ( ASCII :T ) - 128] IF :T = "/ [MAKE "T "?] OP :T END TO SETUP TYPE.AT [15 0] [Mouse Quiz] DRAW.Q.BOX :Q.TEXT DRAW.ANSWERS :A.TEXT TYPE.AT [0 22] :LINE TYPE.AT [0 23] :OPTIONS END TO WAITCURSOR :P TYPE :X END TO PR.AT :P :X SETCURSOR :P PR :X END TO SAFE.RC LOCAL [T R] MAKE "R READER SETREAD [] MAKE "T RC SETREAD :R OP :T END TO HIDDEN.RC IF KEYP [OP SAFE.RC] OP HIDDEN.RC END TO C.BUF :X IF KEYP [C.BUF SAFE.RC] END TO READ.KEYBOARD LO"Q.START :X END TO READ.CHOICES MAKE "A [] READ.CHOICE MAKE "CHOICES LPUT :A :CHOICES IF :MORE [READ.CHOICES] END TO GET.Q.AND.A MAKE "Q [] READ.QUESTION IGNORE RW MAKE "CHOICES [] READ.CHOICES END TO IGNORE :L END TO READ.CHOICE LOCAL "TEMP MAKE "TEMP RW IF MYNUMBERP :TEMP [MAKE "MORE "TRUE STOP] IF OR "TRUE = LISTP :TEMP :TEMP = "Q [MAKE "MORE "FALSE STOP] MAKE "A SE :A :TEMP READ.CHOICE END TO READ.QUESTION LOCAL "TEMP MAKE "TEMP RW IF NUMBERP :TEMP [MAKE "ANS :TEMP STOP] MAKE "Q SE :Q :TEMP READ.QUQ What famous rodent first appeared in the film "Steamboat Willy"? 3 1 Chuck E. Cheese 2 Mighty Mouse 3 Mickey Mouse Q Which of the following is out of place? 4 1 Mickey Mouse 2 Mighty Mouse 3 Chuck E. Cheese 4 Donald Duck Q In the nursery rhyme "Hickory ly language subroutines from MOUSE.BIN. The procedures available in MOUSE are described in the file MOUSE.DOC in the same subdirectory. Use POFILE to print this description on the screen. ouse. You can use these same procedures in your own Logo programs. They're in the file MOUSE and its associated file MOUSE.BIN. Just load the file MOUSE from top level. On this disk, its prefix is /LOGO/SAMPLES/. MOUSE automatically loads the assembns. To answer with the mouse, just move the mouse so that the screen pointer is on the answer you want. Then click the mouse button. To answer from the keyboard, type a number. The MOUSE QUIZ program uses a number of procedures to respond to the m Welcome to MOUSE QUIZ, a program that tests your knowledge of mouse trivia. You will be asked a series of multiple choice questions about famous mice. Before you begin, you are asked whether you want to use the keyboard or a mouse to answer the questioDPOS = FILELEN :NAME [SETCURSOR [38 23] MAKE "CH SAFE.RC STOP] SETCURSOR [38 23] IF SAFE.RC = CHAR 27 [STOP] R.LINES END TO SHOW.20 SETCURSOR [0 2] REPEAT 20 [PR :BLANK] SETCURSOR [0 2] REPEAT 20 [PR RW] END MAKE "STARTUP [START] 22] :D TYPE.AT [0 23] [RETURN TO CONTINUE, ESC TO CANCEL] TYPE.AT [15 0] [MOUSE QUIZ] R.FILE :NAME END TO R.FILE :NAME LOCAL "R MAKE "R READER LOCAL "CH CATCH "ERROR [OPEN :NAME R.LINES] SETREAD :R CLOSE :NAME END TO R.LINES SETREAD :NAME SHOW.20 IF REAIGHTED.] RECYCLE WAIT 120 END TO DO.HELP CT SHOW.FILE "MOUSE.QUIZ.DOC CT END TO SHOW.FILE :NAME CT LOCAL "D MAKE "D "- REPEAT 38 [MAKE "D WORD :D "-] LOCAL "BLANK MAKE "BLANK CHAR 32 REPEAT 38 [MAKE "BLANK WORD :BLANK CHAR 32] TYPE.AT [0 1] :D TYPE.AT [0_] MAKE "K 1 REPEAT :HEIGHT [SETCURSOR SE FIRST :POS :K + LAST :POS DO.SIDES :WIDTH MAKE "K :K + 1] SETCURSOR SE 1 + FIRST :POS :HEIGHT + LAST :POS REPEAT :WIDTH - 2 [TYPE "_] END TO SORRY TOOT 100 20 HIGH.ANS :ANS TYPE.AT [4 0] [THE RIGHT ANSWER IS HIGHLA.TEXT [DRAW.A.BOX ITEM :K :A.TEXT :K MAKE "K :K + 1] END TO QUESTION :Q.TEXT :A.TEXT SETUP GET.ANSWER END TO DO.SIDES :X TYPE "| REPEAT :X - 2 [TYPE CHAR 32] TYPE "| END TO BOX :POS :WIDTH :HEIGHT LOCAL "K TYPE.AT :POS CHAR 32 REPEAT :WIDTH - 2 [TYPE "KIT] [MAKE "USER.ANS READ.KEYBOARD] IF :USER.ANS = CHAR 27 [THROW "BEGIN] IF :USER.ANS = "? [DO.HELP SETUP GET.ANSWER STOP] IF :USER.ANS = 0 [GET.ANSWER STOP] CHECK.ANSWER :USER.ANS END TO DRAW.ANSWERS :A.TEXT MAKE "ANSWER.LOCS [] MAKE "K 1 REPEAT COUNT :ESTION END TO MAXLEN :LIST LOCAL [ANS K] MAKE "ANS COUNT FIRST :LIST MAKE "K 2 REPEAT ( COUNT :LIST ) - 1 [TEST :ANS < COUNT ITEM :K :LIST IFT [MAKE "ANS COUNT ITEM :K :LIST] MAKE "K :K + 1] OP :ANS END TO GET.ANSWER IF :MOUSE [MAKE "USER.ANS MAPLOC TRACDickory," what time the did the mouse run down the clock? 3 1 12 o'clock 2 3 o'clock 3 1 o'clock 4 5 o'clock Q In the nursery rhyme "Three Blind Mice," whom did the mice run after? 2 1 Mother Goose 2 The Farmer's Wife 3 Old Mother Hubbard 4 Jack & Jil  the workspace, MOUSE.BIN is also loaded automatically. The procedure MOUSEON lets you turn the mouse on. It searches the I/O space for the first mouse card it finds and turns it on. The procedure MOUSEOFF turns off the mouse. The procedure MOUSE outpu THE MOUSE PROCEDURES The procedures in the MOUSE file let you track and control the Apple mouse from within your Logo programs. The mouse procedures depend on the assembly language routines stored in the file MOUSE.BIN. When you load MOUSE into8 .\`\x \x!\"\#\ .\` .\`G]H] ] \\&\\'\ ^\ ]H]G]` ]]]` ]]]`]HJ) h)i `x&\]'\] ]]]&\]'\](\] ](`x&\]'\]]] ](` ]\&\\'\ ]`BLH\h`Į)\*\,\-\h +\`J\K\ȅ0$8  ۥ\ *\\ )\8\J\K\`\ .\` .\)\\\8\8\\$\ N\n\L\%\ N\n\L\` .\`)\\\\8\EPOSIT :ADR + 1 INTQUOTIENT :WORD 256 END TO SCALE :X :Y .DEPOSIT 23588 :X .DEPOSIT 23589 :Y END TO TRACKIT SCALE 3 4 .CALL 23881 SCALE 0 0 OP SE .EW 23578 .EW 23580 END TO MOUSE .CALL 23732 OP SE .EW 23578 .EW 23580 END MAKE "STARTUP [INIT] E.BIN 23576 END TO .EW :ADR LOCAL "T MAKE "T .EXAMINE ( :ADR + 1 ) IF :T > 127 [OP -65537 + ( :T * 256 ) + .EXAMINE :ADR] [OP ( :T * 256 ) + .EXAMINE :ADR] END TO .DW :ADR :WORD IF :WORD < 0 [MAKE "WORD 65537 + :WORD] .DEPOSIT :ADR REMAINDER :WORD 256 .D 23840 MAKE "L BF BF :L .DW 23583 FIRST :L .DW 23585 FIRST BF :L .DEPOSIT 23587 1 .CALL 23840 .CALL 23873 END TO MOUSEON .CALL 23628 IF 0 = .EXAMINE 23576 [OP "FALSE] .DEPOSIT 23577 1 .CALL 23723 CLAMPMOUSE [0 304 0 368] OP "TRUE END TO INIT .BLOAD "MOUSTO SETMOUSE :L .DW 23578 FIRST :L .DW 23580 FIRST BF :L .CALL 23807 END TO MBUTTONP .CALL 23732 OP ( .EXAMINE 23582 ) > 127 END TO MOUSEOFF .DEPOSIT 23577 0 .CALL 23723 END TO CLAMPMOUSE :L .DW 23583 FIRST :L .DW 23585 FIRST BF :L .DEPOSIT 23587 0 .CALLfeaturing rodents has a hit title song sung by Michael Jackson? 3 1 Willard 2 Steamboat Willy 3 Ben Q Who wrote "Of Mice And Men"? 2 1 Shakespeare 2 Steinbeck 3 Shelly l Q Who is known for the slogan "Here I come to save the day!"? 1 1 Mighty Mouse 2 Mickey Mouse 3 Mouse That Roared Q Who is the mascot for the restaurant chain called "Pizza Time Theatre"? 3 1 Mickey Mouse 2 Mighty Mouse 3 Chuck E. Cheese Q What movie ts a list of two numbers, the X and Y coordinates of the mouse. The procedure MBUTTONP outputs TRUE if the mouse button is pressed and FALSE if it is not pressed. The procedure CLAMPMOUSE restricts the mouse movement to the region described by its input.l Q Who is known for the slogan "Here I come to save the day!"? 1 1 Mighty Mouse 2 Mickey Mouse 3 Mouse That Roared Q Who is the mascot for the restaurant chain called "Pizza Time Theatre"? 3 1 Mickey Mouse 2 Mighty Mouse 3 Chuck E. Cheese Q What movie FF 1G2"OG"ALG"ATG!CG G G%G 1*G2D"RO{7"RP9G!E>GCG4GHG 1MG2U"OP"PR\G!GaGfGWGkG 1pG2m!P-5GzGG 1G2z!PaGGGG 1G2!P{7GGG 1G2"EMaG!RGGGG 1G2"ATu=!CGGGG 11E2"ET'E!SF FFF 1F2"REC"ET&F!S+F0F!F5F 1:F2;"DP>="EAIF!RNFSFDFXF 1]F2W"TRNF"SElFqFgFvF 1{F2"TE"RIF"TWF"SEFFFF 1F2~"EP>="ITF"WRF"ETF!SFFFF 1F2"IT7"WRFFFF 1F2F1D2BE E 1E26"IX"EFE"PR"E'EE,E 11E2"PO5@E;EEE 1JE2"TPD"INYE"PR^EcETEhE 1mE2Y"AD7"RE|EEwEE 1E2"RE6EEE 1E2GCEE 1E2"AV^6!SEEEE 1E2ܮ"EPD"AVE!SEEEE CCD 1D2w"RF!EDDDD 1#D2"ELh1"IL2D!F7D