MZ@ !L!This program cannot be run in DOS mode. $PELZA 7(" @p@X`.text `.data @.bssp0.idataX@@.rsrc`2@PU5$AEPh Ah A ÍvU$At{jjujjt t jл؍e[^USh@x poxDA05 A5 Aà 9S@ U1ÐUBBC BASIC for Windows 3.13aBBCWrunBBCProgvCouldn't allocate virtual memoryInsufficient memoryCOMCTL32ADVAPI32SHELL32.bbcUWVS@PhjPLhjP- @E0EE@EEEEăh @PEEj EEE@h @URE܃EPj@h hjm T uj0h @hP@.j@hhTQ4 uj0h @hq@j=1t A A Aƀ A@ A@E=$AǰIf A$Ah@ h@ h@ hSj jjjjjhS ƃ,jjjV| Lj\SjPVc  t ;LVI URQ6 "u-PPRj"Q j.Pƃj\R 9wh@QjjjjjhPƃ#jjjVsLDžDžDžƅDžDžL A+; AXPh@0AhRXL$A@0A@0AIf P$AjjVj\R)LLP5 AVhSRFVr j Dž`DždhlDžpDžtx|jhpPpx)t|)‰jMQjjhhhSh@jcËt P t&uSHSD ],$AtSP1uS)S+ jjjS$uChjTPE荥([^_U ABBCWinU WVSjPj5P AT AttEܻ 8 Axu'j P5 AMj 8 A5 ABNy18 A@tVj P5 A=L At90豨@j 35 Aj 35 A@tNy5 A5 A5P Ax A~Cannot create screen bitmapCannot create screen character mapCannot create palette&Cannot allocate clipboard memoryCannot open clipboardsequencervU|WVS] uSw]w'!w:wm w3w~ly US w<6*;wrw9t& gw  w2w x e=6EPƃj&V]$Aj#AhhVǃ$VURuj0h@h@Dhjm Auj0h@h@t&j7P5#AK]S5#AAE#AE#AW5#A0Ahbhhjj5#A jHjffG11҉ȍt 8D1tt 8D1tt 8DDF~W#AWX #Auj0h@h3@jjP5#AN 0Ahj $A1fDžBEDž$P_ i #AƒPh, AV rgS5#ApE#AEE#AjX5#A0)Ѝ 4g )‰#AjZ5#A)Ѝ )‰#Aj5#AjX5#A)Ѝ ))։5#Aj 5#AjZ5#Au)Ѝ ))։5#Ao$An$A$AjhjeURAj jjMQ:jjjj%$ APEP#A#AhP1AU$A( AM1jhS@1t&EPƃj&V]$AVUR~1PMQS ;;C;;5 $AC"A"A)P5#AjEP$"A"AP5"A="A UR ;u =]$AMQzƃj5#AV5#AVVEPN UR1 }p Ap Aw~j*p Ap Aw=p Ahjp Axp A~BF$"@#@ #@'#@0#@C#@G#@P#@T#@X#@`#@d#@h#@p#@t#@x#@#@jjjMQ}yut&lhdt&\XTt&LHDt&<$AtURVSPMQL> EPVSUR@* &uj- f|u-j f}uj f}P菜j0F߃^$D$@%@%@%@%@%@%@%@%@'@'@'@'@%@%@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@'@%@&@&@&@&@&@&@ &@$&@(&@0&@4&@8&@@&@D&@H&@t&vrnt&fb^t&VRNt&FB>t&62.t&&"t&t&v/j f}vj f} C~<wjm f}Cx<wjQ f}Pu=j011 uj f}uo$A@u o$A1vP舙uj0ՃhP1A^0A0A 90AtjWEP`SURƃ=n$AuhPWDt&h lQhR5#At)Pp)PQRVWH %n$ASMQ9hP1A,9E"A"AP5"A( AEP19E"A"A)P5#AjUR:"A"AP5"A&="AXMQG o$Ah9Eu"A"AP5"A!A URVSP o$A   A9r : t1;w%FJ9r: t)ʍ4;vۃFPh uj0h@hP@MQt&􋅤PƋ  A ;w?J9r: t)ʍZSQVJ F F;v􋕤RaMQ uj0h@hq@EPvRj1n!At"MQVjP蓖 o$A 1J&( A"A"AMQ"AURVSP5 o$A  o$A]j jjjMQSA u=o$AuσhP1Atj5 0A5#AN#At PQ #At PD 50A5#Aǃ#At P t W  At P 5$ AXjEPzjeURw= Au ji 5!ANy!A!A$At-jjhPjjh5$A$AL A= At&j = Au1۾vX At!PX AǃX A Nyϡl AP5l Arl A= AfDžfDžDž"VDž"VfDžfDžfDžhjh/@Pjh At QL AjjjjP Ajjh@h|jl AP{{JNyDž8 Avj jPX A PI8@L@ @@ LNyF00A8 A1۾j 45 Aj 45 ANyNDž@Ph"hjƅ$AMPjhRaƅjjh5$AC$Ajjh5$A$A;5 A;5 Awfv9yj@h A)RPhZ5 A-$AtURVSPMQEPVSURx[^_UE =t=tT&T AAt&=T A+00A'w T A T A5P Ag~~~~l|88||88888|8|<<><~~<ffffff{>88xʴʴ<~~<<~~< 0``0$ff$<~~<000000llllllll~|00` 8l8vv0`0```0`00`l88l000000`00 0`xx0p0000x 0`x 8 x8x x8`x 0```xxxx| p00000000`0``0`0 0`x000xxxxxxx00000|pxxxxxx x000000xx0x0xx000 0``0 | |8l`0x ||xx ||xx8`````|| x0p000x0p0000p00000xlxx|| |x `````8|x0lx0x| x0`0000000000`0000`v8l(C) Copyright R.T.Russell 2005 t Af 0C#Ar"A0!Ap4@r!A !A !Ao t"A"A'%!Ar"A$ 0"A1҉!A!A!A!A"A"A"A At "A!A|!A5!A!AIC5!AANDABSACSADVALASCASNATNBGET BPUT COLOURCOLORCALLCASECHAINCHR$CLEAR CLOSE CLG CLS COSCOUNT CIRCLEDATADEGDEFDIVDIMDRAWENDPROC ENDWHILE ENDCASE ENDIF END ENVELOPEELSEEVALERL ERROREOF EORERR EXPEXT ELLIPSEFORFALSE FILLFNGOTOGET$GETGOSUBGCOLHIMEM INPUTIFINKEY$INKEYINTINSTR( INSTALLLINELOMEM LOCALLEFT$(LENLETLOGLNMID$(MODEMODMOVEMOUSENEXTNOTONOFFOFORIGINOROPENINOPENOUTOPENUPOSCLIOTHERWISEPRINTPAGE PRIVATEPTR PI PLOTPOINT(PROCPOS QUIT RETURN REPEATREPORT READREMRUN RADRESTORERIGHT$(RND RECTANGLESTEPSGNSINSQRSPCSTR$STRING$(SOUNDSTOP SUMSWAP SYSTANTAB(THENTIME TINTTOTRACETRUE UNTILUSRVDUVALVPOS WHILEWHEN WAIT WIDTHHIMEMLOMEMPAGEPTRTIMENo roomJump out of rangeSize neededMultiple labelMistakeMissing ,Type mismatchNot in a functionAddress out of rangeMissing "Bad DIM statementDIM spaceNot in a FN or PROCNot in a procedureBad use of arrayBad subscriptSyntax errorEscapeDivision by zeroString too longNumber too bigNegative rootLogarithm rangeAccuracy lostExponent rangeBad MODENo such variableMissing )Bad hex or binaryNo such FN/PROCBad callIncorrect argumentsNot in a FOR loopCan't match FORBad FOR variableSTEP cannot be zeroMissing TOMissing OFNot in a subroutineON syntaxON rangeNo such lineOut of dataNot in a REPEAT loopWHEN/OTHERWISE not firstMissing #Not in a WHILE loopMissing ENDCASEOF not lastMissing ENDIFBad MOUSE variableNo such system callBad librarySize mismatchDATA not LOCALCF< us< t<,t.+<(F?<)tF@<$(r<(tފFsԊC<(uC"At~%t ~$t<#uZ<$t<%t<#t81!AډFFrC<%t<$t<#t"At N#CF<(uCCSu?u^O;T$ uV;Wu SQWSQRVWU11PSVWUQR QR [X 6[X 6]_^[XMu]B_^ZY[⦉_Y[Ku^][YXJuyzPU6jHuϨyzPU6j-uyzPU5JR$6<,uFpR5l[X]$}fEuQW ff_Y9rY y )s1)v9rωJ,$!AVyl^uP>5PU5_[u;81@utـtt ttEE닰AV=!A< ׹< 5!A< ^hPI6trà y PQ$YX$R@tցR@tӁiQ@tˁN@t2T@t2_b@tY:T@t;M@t#S@u[^5!A[A[!A[_[`a[[PQRZYXt[]$xL$T$XYZQRQT$ ;YZX5(u !A>(UR1FQW_Y xBRA>,3ʋ-!MEذ$X܉-!)<,: tIt V^ta5ˍ$)r!9r)܉:PS )V^,$ \ *r퍌$9r-!A}02<,6F2@utx2 0fϸʴڸfݴܳ۰/5!uFQR1ɀ>uF u Ұ#tQRV Y!AYT $N@tT@tށR@ut<,t ;l$uql$D$nD$ \$u ۜ $-l$ \$QR ZYD$\$xӽ,u ,<,u Fgt$B $N@tT@tR@ufYY!Aϰ!0P0Pz NVYt)rQ!A t!A^tËA,<(2,<(0F",u?' uffF F*<"t< u4T!A& STOP!!Amlltڱ谪lrҳmܱmomڱ簪p簪l6аǰlܰuܰu"z屹lnvɰפɰvyyЯ3氪ɰy$ɰxw۳ѳvɰvvvyyy,xɰy9ɰ9Ⱚ氪$u F!A׹0 (kn@C:h* 52_c/1:k ^# x-·&X2x?h)SaQYӺo%(Ny9?!I@|o|樭7EW߄v |Η@½pQv0rÊAr"At߀7À:r0F+t-tNÑڑuMULu8 ynXTLTLx7szIjq_\!AT!AL$t 9<Fy "AI1ɱv+ 8S" 8û.e)u 1ɺ t  !ǃ1SWUQRȉӽ [X ]_[Ou qxLpvȜ*{~[tt81۰ûI  KRV ^[yyS r@.seoO.v7my*{O}V~[S x'[ yۀÀr x  xÀt8HȇHr1ðJ  xtہ35ϱrS QRȉw Ht}~L~㩪*[XR[QRt*sLjQd$sx[X8 V[^~8{  QRȉ;m[XtS6  RT~QRU ZYr"yQRA ZYr  QQRȉE 57{k|Aa|{7}Z*L}\~[X[Ss [s {[ y8z 8 u "A' S 0 <,uF gY tH [SVև^[u)܉19s() t Ku9rQVWF t_^Yu  3<!A y <#t@6!Ajs< t< t tfBufJы!A) c tr16 <,t FB1 9s  9sV)ˉ׍4;QY^ 4~ 0TYx R^ h [ tKtQYVցQ9YtKu^!A) ðuˁsVʉ֋=!ANO^`!X1P H Й5 Й)q  q) tt߈ʼn1؜18s͇Ӊ(t̀ r r1xs)u!)s xu=urug y8ðv ttt݈ʼn1М19r9Ӊur (r x Z_xx8Éq tt߈ʼn1М x=ur1 t%ySȉӺ1ɽ5[ r u1QR1ɺPSȉӽ s\$D$ [Xu҃tPS,s%< s1 us1^{[X sB: v$ r1J111 ucwt WEtrV 9'u111$2F2&F1F=!AQ0Yxtu8t'@'ׇ!A) C<~tz@w Att A=!A1ty-Gq y-GiM/S[1I SW׉11{u1_[ tQ9YCMEuu  y11 ss C u uMEutEtك"Au ~1Ƀ|RMu 9˱C9|كf0. t0GCu u.GKI`u!A) IFu~.GI5uEGK1Ez@[WU_9s AQ0G YSQW1ۿ t1 u!!_Y[''''ÑCtuCՀsـ s1u sp1 t8tss9i!018r')ss̀8r s) xFuÑ u. t*"A  Ҝyʀـx91y1yچ8u91y1yڑ9u99ˉstÝÍ$);-!Ar])QD$ W|$_0陿]!A׉QYQR ]$L$'[X]QRE]Uf]E]Ux"D$\$])AsIIxs)ArA)sI8u@F)uF8tN8<=mb8uF$<>s<=s<F6@uE"A u utT A0u1ɉȉϻQ@=_YXuftKftDt ttiugAu>^"S?@1[t%u:>:uFd$uʯ1ɇ@uu $[t_YYXX_YYXX̀_ZY]Xct`P YXtUPMXtIPf @Xt

r"At;= As_^ð鰱N> :t ACt;uPVFC>:^ݰijXF< t A> @> B B/ BA BB BB BB BB BBBBBBA/AAA/A//A/BBBBBBBABABABBB/BBB/AABBBBB/B/BAB/BBB/BB BB!BB"BA#$A$$A$$A$BB%BA&BA'BA(BA)BA*BA+BA,BA-BA.BA/BA0B/1BA1B@1/>3A>3@>3BA2A<3B3B/3BA3BA4BA5BA6BA7BA8BA9BA:BA;BA<BA=BA>?/////7//7//7/7/////////02345/012345/////////////////////////////////////////////////////////////////////////////////////////=&='=(=)=+=,=-=.=/=0=4=5=6=7=8=9=:=;=<A==A=>A=?A=@A=AA=BA=CA=DA=EA=FA=G//BBBBB/BBBABABABABABABABABABABABBBBBBBBBBB/B/BBBBBBBB/BB/BBB/B/BBBBBBB/B/B/B/BBBBBBBBB//?B/B/BBBBBBBBBBBBBBB/B/BBB/B/BBBBBBBBBBBBB/B/B/ BB BB BB BB BB/BB//?B/B/B/B/B/B/B/B/BB/BBBB/B/B/B/BBB B!BB"BB#B$BB%BB&BB'7 ?$""%%## !bPHff<::==;;89f'/8XOiiiGlfmswvrfrt}~|P-H-rvwssu|~}q{yupz{zxtſĿff`С``LJ```     nfofaf_f`fWhӗїӟџ@@Ӈчӏяӧѧӿѿfӧѧӯѯf,**--++()Щ422553301 ѺѣѺѻѺѳѺѫm oa`٤٬٬٫ @ggggg•1܇އܗܟޗޟܷ޷ܿ޿݇ۯߧ߇ٯ٧܏ޏݧݷݷݗݟۿߗߟ߷ٿٿٷٷݿݿܧާܯޯA"2Rbr#3Scs$4Tdt%5Ueu(8Xhx )9Yiy 0@P`p  0 @ P ` p  0 @ P ` p  0 @ P ` p  0 @ P ` p 0@P`p 0@P`p((( (0(@(P(`(p))) )0)@)P)`)p*** *0*@*P*`*p+++ +0+@+P+`+p--- -0-@-P-`-p... .0.@.P.`.p/// /0/@/P/`/pHHH H0H@HPH`HpIII I0I@IPI`IpJJJ J0J@JPJ`JpKKK K0K@KPK`KpMMM M0M@MPM`MpNNN N0N@NPN`NpOOO O0O@OPO`Op 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p$ -6?@IR[mv ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_hijklmnopqrstuvwxyz{|}~~#A2"A#AÇ%$Aj0jR5$At%$AÉ%$A% Aj+-$A A A AE!A!AƉ"AƉ"AƉ "AƉ$"A"AƉ8"A3"A4"A ,"APSQRZZY[X u>o$AuNo$Auv%o$A%1ۇ"A ta:<o$Aua`%$Aj ]v%$Aa-uo$A uGo$Au%o$A="Au`jao$Auyo$Auo$A%o$A8%o$Aߠ#A:#AtGS$"AË#A#Ay$A#A:#A[t o$A 1ۉ"A"Au9M%$Ajt"A tP~q"A t#PjqP5#Ai$qiRq"A tPCqo$Ap%$Ajjh5$ACs%$A]%$Aj t%$A%$At%$A;$A$As "A1һ "AP%$At%$A1һ Z)‰"AOR<,tYEPPP)RYY[zRCYeְ!AK Bۼ>,t ְ-Rр>,۰ڈֈʈݱ݈İ鬙蔼0ۀ>,ڰֈx<uFnRRZY=u1(<uF,u>tM[ZYPZٝa1Ҵ ډ1ɴ ى1Ҵ 1ɴ pFR舻R_X[ZYPYZ0Otĉ:TRR~Rx_ZYڴ 0ɰ4 - &    ROY[1u<(sFºR&YZ1Èư 蝺 x-JjjjjR%$ASjzk%$AZ1ڃs#A*#A#A*#Ats,1F-*Y[1"A u2"Au r`%$Aj *h%$Aa{tݰSQ2"Au91ۇ"A t *"AY[*됐< u Ӑ 뽐PƁÉ׊G3PÇ8< t<|t?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>=;9742/,)&#    #(,059>BGLQUZ_ejotz&.6>GOX`ir{  ,8DP\iv,<L\l| /BVj~*AXp9Tp:Yx < ^  7 ^ $ N x & T  @ q >sO8t/o4xI$oWHEM`G|Q345s8v%fgz{y,WET7I90(hi12DR6UOP&kml-$!AXFYJK on"SCGHNL.j Z VBM#`acpqrtuwx'debKERNEL32USER32GDI32COMCTL32WINMMADVAPI32COMDLG32SHELL32= AtR`%$Ajjh5 AD%$Aa A`%$Ajjh5 AnD%$Aaã A`%$AjPh5$AFD%$AD$aË"Aŀut.MID%$Aj5"Ah5$AC%$A=v uðdDevice unavailable`0"A5 S%$AjSDPPjkDY ‡%$A[)T$SP%$AjPQRSD%$AX[%$ASC%$Aa%$ARD%$AhQZ uZ uJ)GB Ѝj`%$Ah jUPrrjjQSWV5#An8(@%$AaRQSWV%$AjP5$A2BK8%$AZR/Z:,uBRZSn_%$AWw h jVWvvjjQSRP5#A?6C%$AwSQ"A YZt@P`D$ %$AjPQRSfC%$AaXtPQR%$ASB%$AZYX9A%$ARB%$A3 u#A u #A)G`%$AQS5#A,7>P5#Ar>$PPSPv>%$Aa%$AXh WV5#AQSjjP>6>$PjS>D$d$[Y ]%$A䘺r@r r1ҸÃ6`%$APjA%$AD$a rBCMCCS PSRڃ%$AUjSRQjU5#A(C jSjjjU5#A6=\$C{ rC=5v=%$AZ[Y)ЉC"C2Ë"A ŀut .BMP<,uBv<,uBj<,uB^·3Á= At*`%$Ajjh5 A?%$AaSQ0`YZX= At%`%$AP5"Ah5 AR?%$Aa9ð1`rSQ0YZ P`D$ %$AjPQRS?%$AtoaXSQ!erSQYZ t3P`D$ %$AjPQRS@%$AatX9cÇ%$A?%$At tnuq_File or path not found= t {t=u@_Bad directoryu&_Too many open filest!tt tRu^Access deniedu^Invalid channel=u^Bad deviceu^Disk faulttlu^Disk read onlyul^Device faultPt=uL^File existspt'u/^Disk full^Unknown error ^Bad commandSrX 8"AݍL"AK :K!u.0Ɂ;&C#u0[ÊK [Ã<"APP`%$A5$ AjjjjRPjQS5$ Ae>=u+==uo$Au+jd5$ A=-t%$AaYX[Ç%$A\$%$AjS=SrV 8"AݍL"AK :K!u&0Ɂ;P $XK K"K#[Ã<"APP`%$A5$ AjjjjRPjQS5$ Af=<u+<=uo$Au*jd5$ A <-t%$AaYX[Ç%$A\$%$AjS< uUQWL"A t;"At ;"At5C߿<"A tC_Y`rP 8"AݍL"A;P t#1C  z%$AP:%$AaÃ[<"A1PX"A:t":*tz:ukztezt_ztY%$A`P1BBCL$AWG G4_A"A"A$P%$APP5$Aj5$AË$#AD$D$#AD$ QRjSP ZYX][)X)`jUjj0a,;l$~L$); $} $,;l$ ~T$ );T$}T$jPSRQ5$ASXP=#AuMjt$ "APP5#Af8P5#AXD$8XvRXPjjjjjjt$jjjh jj5#A5#A t(PP5#AYX"A tP{XjBy$bhhjj5#A'j5#Az%$AXy/f f"A%"A%"Af"A%"AܸL%"Aun= A "A#A"A"A"A"A="A@1=,"A@W  @@ X X``88@@ !!!!"AfC=#AfC=#AC#A"AC#A"A"ACȢ"A|#AC<t<tA< sTt<u$Ct %"Au "A lC< t< t È%"AX%"APCc$)Al%=,"A"A%$AÀ="Atf{#Afy#Ax#AÃ%$AP5$Am%$AXX[Y #A #A1#A #A"A"A"A"A"A "AI"A"A"A "A"A "AAʉى&|#A|#AE-#AÊE-#AE-#AŠER-#AZ x]9}Y; #AQ xM9}I;#AA"A "A"A"A"A;"A|Y;"A}Q"A;"A|D;"A}StretchBlt?StretchDIBitsCTextOutA*CreateFontAAnimatePalette4CreatePalette6CreatePen:CreateRectRgnArc?CreateSolidBrushBDeleteDCEDeleteObjectKEllipseLEndDocMEndPage BitBlt`ExtFloodFillbExtTextOutAdEnterCriticalSection{ExitProcessBuildCommDCBAFindCloseFindFirstFileAFindNextFileAGetCommandLineAGetCurrentDirectoryAGetCurrentThreadClearCommError GetFileAttributesACloseHandleGetFileSizeGetFullPathNameAGetLastErrorGetLocalTime GetModuleFileNameA"GetModuleHandleA:GetProcAddressMGetStartupInfoAjGetTickCount~GlobalAllocGlobalFreeGlobalLock(CopyFileAGlobalUnlockInitializeCriticalSectionLeaveCriticalSectionLoadLibraryA-CreateDirectoryAMoveFileA1CreateEventAPurgeComm4CreateFileA ReadFileRemoveDirectoryAResetEvent,SetCommStateKSetCurrentDirectoryAOSetEndOfFileSSetEventVSetFileAttributesAXSetFilePointer_SetLastError`SetLocalTimeuSetThreadPriorityySetUnhandledExceptionFilterSleepVirtualAllocDCreateProcessAVirtualFreeWaitForSingleObjectWriteFileUDeleteCriticalSectionWDeleteFileAAdjustWindowRectwDefFrameProcA{DefWindowProcADestroyCaretDestroyWindowDispatchMessageAEmptyClipboardEndPaintFillRectGetAsyncKeyStateGetClientRectGetClipboardDataGetCursorPosGetDCGetFocusGetKeyStateGetMessageA&GetWindowLongA)GetWindowRect3HideCaret=InvalidateRect?InvertRectIIsClipboardFormatAvailableWKillTimer\LoadCursorA`LoadIconAvMessageBeepwMessageBoxAMoveWindowOpenClipboardPeekMessageAPostMessageAPostQuitMessageRedrawWindowRegisterClassExARegisterHotKeyReleaseDCScreenToClientScrollDCSendMessageASetCaretPosSetClipboardDataSetCursorSetCursorPosSetRectEmptySetTimer2ClientToScreenShowCaretShowWindow3ClipCursorSystemParametersInfoA4CloseClipboardTranslateMDISysAccelTranslateMessageUnregisterHotKeyUpdateWindow<CopyRect@CreateCaretPCreateWindowExA BeginPaint@@OLE32.dll@@@@@@@@WINMM.DLL(@(@(@COMDLG32.DLL<@<@<@<@<@<@<@<@<@<@<@<@<@<@<@<@<@crtdll.dllP@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@GDI32.dlld@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@d@KERNEL32.dllx@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@x@USER32.dll: P:8::h:BBCWRUN`c( @0x3  0pppppppp3pppppppp30 33033 30 33wwwwwwwwzwp3wx 3pxpxpxpxpxpxpxpxpxpxpxpxpxwwwwwwwwwwxwwwwwwwwwwp?  630x1000 window : 6 Nesting is in the next one back with fewer zeros (: O2 Revision 2/3/2010 to accommodate the 8-level contrast set for a three-way $< fully-factorial balanced ANOVA F: P*FONT Courier New,10 Z:ROWS%=12:CONT%=:OUT=0 /d =17 DZ@ :: " at line ";: n I%=1 2 x0,0)""; Q" Program Constrasts by C. P. Doncaster gives coefficients for all possible" X" sets of balanced orthogonal contrasts on a factor A with up to ";ROWS%;" levels." R" Have your factor levels ordered to gain most interest from contrasting the" R" first against the largest pool of others, and the last against each other." O" Scan the list of sets ( to scroll through pages), then store the" R" desired one(s) in a text file ( to jump ahead to storage options). "  J%=1 3: 70," "): 0,-1)"";  0,-1)70," ") 90,-1)" Give the number of levels of the factor: ";  I%=1 ""L% "";L%  L%>2 L%<=ROWS%  I%=1   PRINTTAB(0,8)""; " 3-level , -1,-1 6 +1,-1 @ +0,+2 J 4-level #2 T -1,+0,-1 ^ +1,+0,-1 h +0,-1,+1 r +0,+1,+1 | 4-level #3  -1,-1,-1  +1,+1,-1  +1,-1,+1  -1,+1,+1 :  Revision 2/3/2010  8-level #34  +1,+1,-1,+1,+1,-1,-1  -1,-1,+1,+1,-1,-1,-1  -1,-1,-1,-1,+1,+1,-1  +1,+1,+1,-1,-1,+1,-1  -1,+1,+1,-1,+1,-1,+1  +1,-1,-1,-1,-1,-1,+1  +1,-1,+1,+1,+1,+1,+1  -1,+1,-1,+1,-1,+1,+1  End revision 2/3/2010 &: '0COLS%=ROWS%-1:SETS%=2^(ROWS%-2)+500 :: C%(ROWS%,COLS%,SETS%): The matrix of contrast sets :D N%(SETS%): Tracks which sets belong to which level \N LEV%(1,ROWS%): 0 = number of sets at this level, 1 = set number that starts the level UX SM%(COLS%),SZC%(COLS%),SZR%(ROWS%) in PROCPrintout to check column and row sums (b n% counts the total number of sets l V% is the current level ev dp% are the number of sets in a level that are more empty than full, so are ignored (N%(V%)= 0) IV%=3:N%(1)=V%:n%=1:dp%=0:LEV%(0,3)=1:LEV%(1,3)=1:HELMERT%=1: 3-level  R%=1 V%  C%=1 V%-1  C%(R%,C%,1)    L%<=V% DhF (V%=3:N%(2)=V%+1:n%=n%+1: 4-level #1  R%=1 V%  C%=1 V%-1 C%(R%,C%,2)=C%(R%,C%,1)  C%(R%,V%,2)=-1   C%(4,3,2)=V% V%=4: 4-level #2 and #3   S%=3 4 *N%(S%)=V%:n%=n%+1 4 R%=1 4 > C%=1 3 H C%(R%,C%,S%) R \ f p: 8zLEV%(0,V%)=n%-1:LEV%(1,V%)=LEV%(1,V%-1)+LEV%(0,V%-1)  L%<=V% DhF :  2V%=V%+1:dp%=0:ns%=0:ne%=0:neb%=0: Next level U First copy all existing sets that are at least half the size of the current set  S%=1 n% a N%(S%)*2=V% dHE F Add the LEV%(0,S1%)-1 extra sets of level S1% combined with each level V%-S1% (e.g., at level 9: two extra lots of level 4 added to each level 5) -P S0%=LEV%(1,V%-S1%) LEV%(1,V%-S1%+1)-1 Z N%(S0%)=0 t~E (d S%=LEV%(1,S1%)+1 LEV%(1,S1%+1)-1 -nn%=n%+1:LEV%(0,V%)=LEV%(0,V%)+1:N%(n%)=V% x R%=1 V%-S1%  C%=1 V%-S1%-1 C%(R%,C%,n%)=C%(R%,C%,S0%)   Fillempty(S1%,n%,S%)    : :  Revision 2/3/2010  V%<>8 DTF  Add in the 8-level set #34 -n%=n%+1:LEV%(0,V%)=LEV%(0,V%)+1:N%(n%)=V%  R%=1 8  C%=1 7 " C%(R%,C%,68) , 6 @ End revision 2/3/2010 J: T V%>=L% /^ =17 DrF :: " at line ";: hPrintout r'':Printtofile | DZ@  : Sortitout K Find the appropriate columns of numbers and fill if 1-2 empty columns  N%(S%)=0 + N%(S%)-N%(S%-n%) dLF,TfG t@G 6 1 empty column and identify the Helmert contrast HL%= C%(V% ,V%-1,S%)=V%-1  R%=1 V%-1 C%(R%,V%-1,S%)=-1  C%(R%+1,R%,S%)<>R% HL%=   HL% HELMERT%=S%-n%-dp%   2 empty columns &C%(V%-1,V%-2,S%)=-1 0C%(V% ,V%-2,S%)=1 : R%=1 V%-2 DC%(R%,V%-1,S%)=-1-V%2 N $XC%(V%-1,V%-1,S%)=(V%-2)/(2-V%2) $bC%(V% ,V%-1,S%)=(V%-2)/(2-V%2) l v >2 empty columns  MP%=3 ROWS%2 ? (N%(S%)-N%(S%-n%))MP%=0 Fillempty(MP%,S%,LEV%(1,MP%))   : #Fillempty(E%,WHICH0%,WHICH1%) G For sets with three or more empty columns, fill from earlier sets ! E% is the level for filling % WHICH0% is the set to be filled * WHICH1% is the set to be copied from V1%=V%-E%:V2%=E%  R%=V%2 2 -1 1 V1%R%=0 V2%R%=0 V1%=V1%R%:V2%=V2%R%    R%=1 E%  C%=1 E%-1 5 C%(V%-E%+R%,V%-E%-1+C%,WHICH0%)=C%(R%,C%,WHICH1%) * !4C%(V%-E%+R%,V%-1,WHICH0%)=V1% > H R%=1 V%-E% RC%(R%,V%-1,WHICH0%)=-V2% \ f p: zPrintout  Print to screen ( SM%(ROWS%),SZC%(ROWS%),SZR%(ROWS%) 14:'" A\Contr"; % C%=1 L%-1:+4,)(65+C%);: :COUNTER%=0 2 S%=LEV%(1,L%) n%: LEV%(1,L%)+LEV%(0,L%)-1 4 I%=1 ROWS%:SM%(I%)=0:SZC%(I%)=0:SZR%(I%)=0:  N%(S%)<>L% dXI BCOUNTER%=COUNTER%+1:" Set ";COUNTER%;" of ";LEV%(0,L%)-dp%  R%=L% 1 -1 !@%=3: 1+L%-R%," ",;:@%=5  C%=L%-1 1 -1  C%(R%,C%,S%);  SM%(C%)=SM%(C%)+C%(R%,C%,S%) % SZC%(C%)=SZC%(C%)+(C%(R%,C%,S%)) % SZR%(R%)=SZR%(R%)+(C%(R%,C%,S%)) $ . 8 /B SZR%(L%)=0 " Empty row ";L%;"!" L C%=1 L%-1 2V SZR%(C%)=0 " Empty row ";L%-C%;"!" 5` SZC%(C%)=0 " Empty column ";L%-C%;"!" Pj SM%(C%)<>0 " Coefficients in column ";L%-C%;" don't sum to zero!" t ~ C1%=1 L%-2  C2%=C1%+1 L%-1 SM%=0  R%=1 L% ' SM%=SM%+C%(R%,C1%,S%)*C%(R%,C2%,S%)  Z SM%<>0 " Coefficients in columns ";L%-C1%;" and ";L%-C2%;" not orthogonal!"     15:@%=10   :  Printtofile " Print requested sets to file Y CM%(1,20): 0 to identify set requested numbers, 1 to identify 'and all in between'  Collect requests ( #OUT 2 X< 0,-2)" Set number(s) or range(s) in ascending order to store in 'Contrasts.txt' " F 75," "); $P L%-2 DZJ,DdJ,DnJ DxJ NZ -75,)" (e.g., '1', or 'H' for Helmert, or for none): ";: tBJ Pd -75,)" (e.g., '1,2', or 'H' for Helmert, or for none): ";: tBJ Rn -75,)" (e.g., '1,3-4', or 'H' for Helmert, or for none): ";: tBJ Mx -75,)" (e.g., '2,4-6,8', or 'H' for Helmert, or for none): "; RANGE$=""   KEY$=:KEY$; e (KEY$)<>8 (KEY$)<>127 RANGE$=RANGE$+KEY$ RANGE$=RANGE$,(RANGE$)-1):" ";:-1,)"";:  KEY$=(13) - :GDRNG%=:T%=0:IOLD%=1:RANGE$=RANGE$+" " + I%=0 1: J%=1 20:CM%(I%,J%)=0:: @ RANGE$,1)="h" RANGE$,1)="H" CM%(0,1)=HELMERT%: TXK  (RANGE$)=0 TXK  I%=1 (RANGE$)  T$=RANGE$,I%,1) ] T$="-" T$="," T$=" " T%=T%+1:CM%(0,T%)=(RANGE$,IOLD%,I%-1)):IOLD%=I%+1 TNK  T$="-" CM%(1,T%)=1 B CM%(0,T%)>LEV%(0,L%)-dp% CM%(0,T%)<=CM%(0,T%-1) GDRNG%=   GDRNG% " T%<2 CM%(0,1)=0 DXL , : 6 Print to file @ OUT=("Contrasts.txt") YJ " Give the number of replicates at each level of factor A (default = 1): ";:""REPS% T REPS%=0 REPS%=1 ^ HEADER$=(10)+" A" 2h C%=1 L%-1:HEADER$=HEADER$+" "+(65+C%): Vr #OUT,HEADER$:#OUT,(10): Print the letter tag for the factor and each contrast | S1%=0:S0%=1  S%=LEV%(1,L%) n% ? N%(S%)<>L% DDL: It's one with more empty than full S1%=S1%+1 T S1%=CM%(0,S0%) CM%(1,S0%)=0 S0%=S0%+1: dBK: It's an individual request T S1%CM%(0,S0%+1) CM%(1,S0%)=0 DDL: It's not in range D S1%=CM%(0,S0%+1) S0%=S0%+2: It's got to the end of a range / Setmodel: Print the set number and model  R%=L% 1 -1  I%=1 REPS% ' 1+L%-R%<10 GAP$=" " GAP$=" "  ROW$=(10)+GAP$+(1+L%-R%)  C%=L%-1 1 -1 > C%(R%,C%,S%)<0 C%(R%,C%,S%)>9 GAP$=" " GAP$=" " " ROW$=ROW$+GAP$+(C%(R%,C%,S%))   #OUT,ROW$ & 0 : #OUT,(10) D N #OUT X b : l Setmodel v SM$(12) 6 SETMODEL$=(S1%)+" ": Start with the set number ) I%=1 ROWS%:SM%(I%)=0:SM$(I%)="": . Count the number of zeros in each column  R%=L% 1 -1  C%=L%-1 1 -1 ( C%(R%,C%,S%)=0 SM%(C%)=SM%(C%)+1   W SM$(L%-1)="'"+(65+1)+"'":SETMODEL$=SETMODEL$+SM$(L%-1): 'B' is the first contrast 6 Find the nesting for each of the other contrasts  C%=L%-2 1 -1 . SM$(C%)="'"+(65+L%-C%)+"'": Contrast tag S Check for any nesting, evidenced in the next previous column with fewer zeros  NEST%=0  C1%=L%-1 C%+1 -1 " SM%(C1%) NST$="" H C2%=1 (SM$(NEST%)) R BIT$=SM$(NEST%),C2%,1) @\ BIT$<>")" BIT$<>"(" BIT$<>"'" NST$=NST$+"'"+BIT$+"'" f p SM$(C%)=SM$(C%)+"("+NST$+")" #z SETMODEL$=SETMODEL$+"+"+SM$(C%)  + SETMODEL$=SETMODEL$+10:#OUT,SETMODEL$  vb-6