cϽ 1""2"2SAS FILETETRIS_SUGI30 CATALOG AIA 58.0202M0WIN_PROWINƃƃ>>8 SYSRESR PGBITMAPXSOURCE CREATEPIECES SYSRESR PGBITMAPXSOURCE CREATEBLOCKS SCL SCORESCLASS SCL SCORES SCL PLAYMETHODS8 SCL PLAYdSCL PIECECLASS SCL LOADBLOCKS SCL FIELDCLASS SCL BLIPSOUNDCLASSIMAGE GRIDIMAGE GH IMAGE Ft IMAGE E IMAGE D IMAGE C IMAGE B$ IMAGE APFRAME PLAY|CLASS SCORESCLASS PIECECLASS FIELDCLASS BLIPSOUND, >XLCH5(XLSRIAIA  XLSR *A *A ********  F  XLSR؋ *A؋ *A J ********  F  XLSRN*AN*A"q ********  F  XLSRAA+" 05/11/04   F  XLSR 1RA*A 84  F  Play TetrisXLSR {E *A{E *A  2  XLSR |E *A|E *A  2  XLSR }E *A}E *A  2  XLSR  }E *A}E *A  2  XLSR }E *A}E *A  2  XLSR }E *A}E *A  2  XLSR }E *A}E *A  2  XLSR}E *A}E *A  2  XLSR *A *Aca{  F %Create waveform for blip sound effect>j00BP>0/!UCLASSL POBJECTLCLLCPplayLP()V LCPoffLP()V LCC=L  L  PN PUL  PN PUL  PN PUP(N)VL L PCL PNLLPSCNLPSCCCPBBBIz!!!_TYPE__IV_DESC _METHODS_playentryLABEL signature sigStringoff_INITCONSTRUCTORdurTYPEINOUTfreqvol _ATTRIBUTES_ samplebuffer canplaysound_EVENTS_samplebuffer changedstate descriptioncanplaysound changed_PARENT__ATTR__UATTR_ _ALTATTR_ _FILLATTR_usePropertySheet _RELEASE_GAMES.TETRIS.BLIPSOUND.CLASSGAMES.TETRIS.BLIPSOUNDCLASS.SCL_INITCONSTRUCTOR1Occurs when the samplebuffer attribute is changed1Occurs when the canplaysound attribute is changedSASHELP.FSP.OBJECT.OBJECTSASHELP.FSP.PROPERTYSHEET.FRAMEx NAME6NAME7NAME8NAME9NAME10SCORE1formatinformatdataTypeSCORE2SCORE3SCORE4SCORE5SCORE6SCORE7SCORE8SCORE9SCORE10OK_onClick _METHODS__newstateentry saveScores signature sigStringsetcamSlistEntryscopeattributeValueINOUT DESCRIPTIONReturn descriptionaddScorenewscore _ATTRIBUTES_ resourceEntry initialValue borderColorborderTitleFontborderTitleFontScaling borderWidthivlinkable sendEventcategoryonameoscorescoreseditorsetCAM slistEntrynewix_EVENTS_ oname changedoscore changedscores changedslistEntry changed newix changed_ATTR__UATTR_ _ALTATTR_ _FILLATTR_usePropertySheet _RELEASE_+COMPOSITGAMES.TETRIS.SCORES.CLASS!SASHELP.FSP.afcomponents.resourceSYSFONTS Comic Sans MS High ScoresCX3TEXTLABEL_C.AFCNTRL TEXTENTRY1SASHELP.CLASSES.TEXTENTRY_CXCOMPOSXCx3TEXTENTRY_C.AFCNTRL saveScoresPUSHBUTTON_C.AFCNTRLGAMES.TETRIS.SCORES.SCLgames.tetris.scores.sclsetcamSlistEntry Protectedcontains the attribute valueqreturns a value indicating whether the setcam completed successfully: 0 if successful, >0 if error, <0 if warning0Invoked when the slistEntry attribute is changedaddScore11 if score was added to high scores, 0 if too low Textentry1&Returns the id of the component object&sashelp.classes.simplelisteditor.frame*Catalog entry where high scores are stored Slot where new score was entered*Occurs when the oname attribute is changed+Occurs when the oscore attribute is changed+Occurs when the scores attribute is changed/Occurs when the slistEntry attribute is changed*Occurs when the newix attribute is changedSASHELP.FSP.COMPOSIT.COMPOSITSASHELP.FSP.PROPERTYSHEET.FRAME  ;IISAS/IMAGE CAT5>&&66BB44**++++>>//;;//..''''##''&&==((((00DD))EE))11GG1122[[z----,,--0000,,****..@@%%%%$$$$$$33882299%H\HÇ!~Pa TbAC (Xb /fcȑ%O\2K5rR$I(Uυ343)O L< fQHw.mjBVDoթgVJط lXeؚjضX pbTlt",r}K[E [ Gi[!Li gl0-17qJ~JCLASSL PSASOGVUPIMAGELLLCLLPO C P_init P()V L C C5 LL PNPR P()NL  C CE L L PNPR P()NL  C CX L P()VL C CdCp LLPNPI P(N)VL C CzCp LLPNPI P(N)VL C CCp LLPNPI P(N)VLPO C P_term P()VL LPNN4@CpLPNN$@CpLPNNCLPNNCz LPNNCd!LPNN"L PNN$@#L!PO(*,*)$L"PO(*)%L# &L$PS'C(L%PS'C)L&PS'C*L'PS'C+L(PS'CJ,L)PS'Cu-L*PS'C.L+PS'C/L,PS'C0C-1CQ2P3B4B5B6Iz111_MODULE__TYPE__IV_USERATTR_REGION_DESC _METHODS__initstateentryLABEL sigStringgetNumberOfRows signatureReturnTYPEINOUTgetNumberOfColumns clearBlocks setcamScorescopeN setcamLevelsetcamRowsCleared_term _ATTRIBUTES_nRows initialValuenCols rowsClearedsetCAMlevelscoregameover rowsPerLevelblocksclicks_EVENTS_ nRows changed description nCols changedrowsCleared changed level changed score changedgameover changedrowsPerLevel changedblocks changedclicks changed_PARENT__ATTR__UATTR_ _ALTATTR_ _FILLATTR_usePropertySheet _RELEASE_qqqGAMES.TETRIS.FIELD.CLASSGAMES.TETRIS.FIELDCLASS.SCLgetNumberOfRowsgetNumberOfColumns clearBlocks setcamScore Protected setcamLevelsetcamRowsCleared*Occurs when the nRows attribute is changed*Occurs when the nCols attribute is changed0Occurs when the rowsCleared attribute is changed*Occurs when the level attribute is changed*Occurs when the score attribute is changed-Occurs when the gameover attribute is changed1Occurs when the rowsPerLevel attribute is changed+Occurs when the blocks attribute is changed+Occurs when the clicks attribute is changed#SASHELP.CLASSES.IMAGEVIEWER_C.IMAGESASHELP.FSP.PROPERTYSHEET.FRAME+ ;IISAS/IMAGE CAT6D[2r&/=>l$m$|)n$/;k#DGE00+0,,11w'v'u't&B.6.~*@8[y(z(z({)*9-4-3*2-+q%p%H f( Ç!PHD @ň,\ ,aʼn /fcȑ%O\ٲK5rR$I(U\"υ343)O1*<%!fQHw.mZVDoթgV JطdlXeؚjضXxbTl8Et",2}K[9[ Gi&B &Jl7mϰKdتytk3h*5lغvg¥sJu7p7@cfҷOVkg_#V xB 1T`2B`B hPC  >^h@ " B(!`@+rx?AjG"K29OBS> oname[i].text = getNItemC (score,'name');`F@voscore[i].text = getNItemN (score,'score');`D@vpMend;`m@v`w@vreturn 1;`h@vendmethod;`i@v`w@v`w@venduseclass;`k@v>0kV7qCLASSL POBJECTLCLLPOCC5P()V LCCF L L CW PUL PC PUCpL CC L L  PC PRP()CL CCC L L PC PUL PN PRP(C)NLCPsetcamXC LL PN PUL PN PRP(N)NLCPsetcamYC LL PN PUL PN PRP(N)NLCCC LL PN PUL PN PRP(N)NLCCC LL PN PUL PN PRP(N)NL CCPPrivate L!L" PN PUL# PN PRP(N)NL$CCPPrivate L%L& PN PUL' PN PRP(N)NL(CCPPrivate L)L* PN PUL+ PN PRP(N)NL,CCPPrivate L-L. PN PUL/ PN PRP(N)N L0CPleft L1P()V!L2CPright L3P()V"L4CPdown L5#L6 PN PIP(N)V$L7CPdrop L8P()V%L9CC L:L; PN PRP()N&L<CProtate L=P()V'L>CPwait L?L@ PN PRP()N(LACC LBLC PO PRP()O)LDCCC LEP()V*LFCPlock LGP()V+LHCC  LIP()V,LJ-LK PO(4) LL POCLM PCCLN PN.N?/LO PN.N0LP PN.N1LQ PN2LR PN.N$@CLS PC3C4PYes NoLT PN3PsetcamXLU PN3PsetcamYLV PN3CLW PN3C5LX PN.N3?6LY PN.N@o@7LZ PN.ND@8L[ C.L\@NNN?NNNN@NNNN@NNNN@NNNNNNNNNN@N@N@N?NNNNNNN@NNNN@NNNN@NNNN?NNNNNNNNNN?N@N@N@NNNNPPrivate9L] C.L^$NN?NN@N@N@NNNNN@NNN@N?NN@NNNNN@N@N@NN?NNN@NN?N@NNN@NPPrivate:L_ C.L`$NNN?N@N@N@NNNNN@NNN@NNN@N?NNNN@N@N@N?NNN?N@NNN@NNN@NPPrivate;La C.Lb$NNNN?N@N@NNN@NN?NNN@NN@N@NN@NNN@N@N?NNNNN@N@NN@NNN?NPPrivate<Lc C(.LdN?N@N@N@N@N?N@N@N@N@N@N?N@N@N?N@PPrivate=Le C.Lf$NN?N@N@N@NNNNNN@NNN@N?NNN@NNNNN@N@N@N?NN@NNN?N@NNN@NPPrivate>Lg C.Lh$N?N@NNN@N@NNNNNN?NN@N@NN@NNNNN@N@NNN@N?NN@NN@N@NN?NNPPrivate?Li C1PPrivate@Lj C:PPrivateALk PN.NPPrivateBLl PN.NPPrivateCLm PN.NPPrivateDLn PN.NPPriv>  ateELoFLpPSGCCHLqPSGCnILrPSGCJLsPSGCKLtPSGCLLuPSGCMLvPSGCFNLwPSGCsOLxPSGCPLyPSGCQLzPSGCRL{PSGCSL|PSGCFTL}PSGCoUL~PSGCVLPSGCWLPSGCXLPSGC)YLPSGCPZLPSGCw[LPSGC\LPSGC]LPSGC^LPSGC_LPSGC:`LPSGChaLPSGCbLPSGCcLPSGCdCeC6fPgBhBiBjIz_TYPE__IV_DESC _METHODS__initConstructorstateentryLABEL sigString_INITCONSTRUCTOR signaturefieldTYPEINOUTpiecegetPieceReturn setcamVisiblescopevisiblesetcamXxsetcamYy setcamRowrow setcamColcol blockRowOf blockColOftopOfRow leftOfColleftrightdowndydrop canRotaterotatewaitgetField nextLevellock termBlocks _ATTRIBUTES_block initialValuesidegravitytimeout baseSleepsetCAM validValuesdropWiggleTime interval1 interval10ABCDEFGPlocationincamXincamYincamRowincamCol_EVENTS_ block changed description field changed piece changed state changed side changedgravity changedtimeout changedbaseSleep changedvisible changed x changed y changed col changed row changeddropWiggleTime changedinterval1 changedinterval10 changed A changed B changed C changed D changed E changed F changed G changed P changedlocation changedincamX changedincamY changedincamRow changedincamCol changed_PARENT__ATTR__UATTR_ _ALTATTR_ _FILLATTR_usePropertySheet _RELEASE_VVVGAMES.TETRIS.PIECE.CLASSGAMES.TETRIS.PIECECLASS.SCL_initConstructor_INITCONSTRUCTORGAMES.TETRIS.FIELD.CLASS(O:GAMES.TETRIS.FIELD.CLASS;C)VgetPiece setcamVisible Protected setcamRow setcamCol blockRowOf blockColOftopOfRow leftOfCol canRotategetField nextLevel termBlocksN(4,4,4)N(4,3,3)N(4,2,2)N(*,*,*)N(4,4,2)*Occurs when the block attribute is changed*Occurs when the field attribute is changed*Occurs when the piece attribute is changed*Occurs when the state attribute is changed)Occurs when the side attribute is changed,Occurs when the gravity attribute is changed,Occurs when the timeout attribute is changed.Occurs when the baseSleep attribute is changed,Occurs when the visible attribute is changed&Occurs when the x attribute is changed&Occurs when the y attribute is changed(Occurs when the col attribute is changed(Occurs when the row attribute is changed3Occurs when the dropWiggleTime attribute is changed.Occurs when the interval1 attribute is changed/Occurs when the interval10 attribute is changed&Occurs when the A attribute is changed&Occurs when the B attribute is changed&Occurs when the C attribute is changed&Occurs when the D attribute is changed&Occurs when the E attribute is changed&Occurs when the F attribute is changed&Occurs when the G attribute is changed&Occurs when the P attribute is changed-Occurs when the location attribute is changed+Occurs when the incamX attribute is changed+Occurs when the incamY attribute is changed-Occurs when the incamRow attribute is changed-Occurs when the incamCol attribute is changedSASHELP.FSP.OBJECT.OBJECTSASHELP.FSP.PROPERTYSHEET.FRAME  > 0$"CLASSLPSASOCMXCLC C#LLLCE NЂ N NSUQ@ NNN>@ PNªA@NNN>@iiiiiiiiiiiiiiii i!i"i#i$i%i&L'L(L )L *CN+N@,N-CN.N?/Na@0N?1N"@2N@3N4N6:?5N6:?6N?7PNone8C\9PNo:Ch;PWhite<PCenter=C\>P*P?Cq@CANBL CCL CE NFU @ N؉? Nѕ N;; @ CDL (L )L*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME1ANBL8LFPCGPOCCHLILGPOJPownerIDKCLP()VLCE Nª? NW;;@ NLU3@ Nj;;@ CML (L)L*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME2ANBL8LFPCGPOCCHLILGPOJPownerIDKCLP()VLCE Nª? N$vb'v@ NLU3@ N&vb'v @ CNL (L)L*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME3ANBL8L FPCGPOCCHL!IL"GPOJPownerIDKCLP()VL#CE Nª? N؉!@ NLU3@ N ;%@ COL$ (L%)L&*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME4ANBL'8L(FPCGPOCCHL)IL*GPOJPownerIDKCLP()VL+CE Nª? N$vb'v&@ NLU3@ N79;)@ CPL, (L-)L.*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME5ANBL/8L0FPCGPOCCHL1IL2GPOJPownerIDKCLP()VL3CE Nª? N٭;+@ NLU3@ NcNN.@ CQL4 (L5)L6*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME6ANBL78L8FPCGPOCCHL9IL:GPOJPownerIDKCLP()VL;CE Nª? N7;/@ NLU3@ N%vb'v1@ CRL< (L=)L>*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME7ANBL?8L@FPCGPOCCHLAILBGPOJPownerIDKCLP()VLCCE Nª? N`'vb'2@ NLU3@ N]N3@ CSLD (LE)LF*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME8ANBLG8LHFPCGPOCCHLIILJGPOJPownerIDKCLP()VLKCE Nª? N$vb'v4@ NLU3@ N;6@ CTLL (LM)LN*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME9ANBLO8LPFPCGPOCCHLQILRGPOJPownerIDKCLP()VLSCE Nª? NCN6@ NLU3@ Nsb'vb8@ CULT (LU)LV*CN/NX@1N"@7PNone8PTop Gun9PNo:CEPWhite*P?C@PNAME10ANBLW8LXFPCGPOCCHLYILZGPOJPownerIDKCLP()VL[CE Nª? N٭;9@ NLU3@ N8;:@ CVL\(L] )L^*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE1ANBL_8L`FPNGPOCCLaCE NLU6@ NW;;@ NA@ Nj;;@ CZLb(Lc )Ld*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE2ANBLe8LfFPNGPOCCLgCE NLU6@ N$vb'v@ NA@ N&vb'v @ C[Lh(Li )Lj*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE3ANBLk8LlFPNGPOCCLmCE NLU6@ N؉!@ NA@ N ;%@ C\Ln(Lo )Lp*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE4ANBLq8LrFPNGPOCCLsCE NLU6@ N$vb'v&@ NA@ N79;)@ C]Lt(Lu )Lv*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.X>  PYPNumeric:CEPWhite*P?C@PSCORE5ANBLw8LxFPNGPOCCLyCE NLU6@ N٭;+@ NA@ NcNN.@ C^Lz(L{ )L|*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE6ANBL}8L~FPNGPOCCLCE NLU6@ N7;/@ NA@ N%vb'v1@ C_L(L )L*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE7ANBL8LFPNGPOCCLCE NLU6@ N`'vb'2@ NA@ N]N3@ C`L(L )L*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE8ANBL8LFPNGPOCCLCE NLU6@ N$vb'v4@ NA@ N;6@ CaL(L )L*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE9ANBL8LFPNGPOCCLCE NLU6@ NCN6@ NA@ Nsb'vb8@ CbL(L )L*CN/NX@1N"@7PNone9PNo<PRightWPcomma9.XPYPNumeric:CEPWhite*P?C@PSCORE10ANBL8LFPNGPOCCLCE NLU6@ N٭;9@ NA@ N8;:@ CcL(L=POK*P?CHLdLGPOJPownerIdKCLP()V@POKANLCE NFU @ N;;;@ Nѕ N;;>@ CeLfLgPOhC@P_newiLhC@CjLkP()VlLhC @C"mC3jLnLFPCoPUpC=qLFPNoPRpCZkP(C)NrCsLhC @CjLtLFPNoPIqLFPNoPRpCkP(N)NuL#rLgPOvLgPO:LgPOwChxLgPOwPGrayyLgPOwLzLgPOwPNo7LgPOwPSimple{LgPOwN@LgPSFPO|Pname1mC39PN}PN~PNPSystemLgPSFPO|Pname2mC39PN}PN~PNPSystemLgPSFPO|Pname3mC39PN}PN~PNPSystemLgPSFPO|Pname4mC39PN}PN~PNPSystemLgPSFPO|Pname5mC39PN}PN~PNPSystemLgPSFPO|Pname6mC39PN}PN~PNPSystemLgPSFPO|Pname7mC39PN}PN~PNPSystemLgPSFPO|Pname8mC39PN}PN~PNPSystemLgPSFPO|Pname9mC39PN}PN~PNPSystemLgPSFPO|Pname10mC39PN}PN~PNPSystemLgPSFPO|Pscore1mC39PN}PN~PNPSystemLgPSFPO|Pscore2mC39PN}PN~PNPSystemLgPSFPO|Pscore3mC39PN}PN~PNPSystemLgPSFPO|Pscore4mC39PN}PN~PNPSystemLgPSFPO|Pscore5mC39PN}PN~PNPSystemLgPSFPO|Pscore6mC39PN}PN~PNPSystem LgPSFPO|Pscore7mC39PN}PN~PNPSystem!LgPSFPO|Pscore8mC39PN}PN~PNPSystem"LgPSFPO|Pscore9mC39PN}PN~PNPSystem#LgPSFPO|Pscore10mC39PN}PN~PNPSystem$LgPSFPO|PokmC39PN}PN~PNPSystem%L gPSFPO|C8mC39PN}PN~PNrCCPSystemLFPO(10)mC3LFPO(10)mC3LFPLCjmC3C"PDataLFPCC"rCPDataLFPNwNmC3rCPDataLLgPSrCLgPSrCLgPSrC4LgPSrC`LgPSrC CCPBBBIz_MODULE__TYPE__IV_DESCRESNAMEUSERATTRCHILDREN_REGION_UNITSULXULYLRXLRY_PARENT_XSIZEYSIZEname1name2name3name4name5name6name7name8name9name10score1score2score3score4score5score6score7score8score9score10ok Textentry1 _OBJECTS_ TEXTENTRY1_ATTRS_fontNAMEOPTIONSFAMILYFAMNAMECHARSETPOINTSSTYLEWEIGHTWIDTHPORTABLERATIO SYS_RATIOcursorPosition borderStyletexteditablebackgroundColor labelColor justificationlabel errorMessage _CLASSNAME_LABEL_LEN__INSTANCE_ATTRIBUTES_ _CURRENT_NAME1 textColorTYPESTATE_INSTANCE_METHODS_ _onReturnKey COMPONENT COMP_METHOD SIGSTRINGNAME2NAME3NAME4NAME5 >  PLAYFRAME SYSFORE SYSBACK YELLOW 0@.@ P0"APPLlLLCL N?N?NUW@NO@I4 C L PYes PEdit PSYSFONTPNONEI=OBJECTSNONVISRESNAMEGATTRSROWSCOLNCOLNROWEXESIZE _CLASSNAME__ATTRS_ buildTime buildTimeMode sizingUnits_BANNER__APPL_"""afcomponents.resource FRAME.FRAME-46"@ pP.D*(8&P./ 4/;Zj6?@@@p@$@^@C@a@"@@F@@D@Y@[@>@``@A@[@K@@b@V@i@ @@P ! )08 AD HLPTX \`d h j lrvz~   1   EE            VV      ' /1(&(Y'/')(Y */)*+/+(^$-^.$3/(W6.^=$(WB.^I$^N$^S$X/^[$X/(x`.e4^)t 04^2. 4.5 56 67(8^2(x87^)t^28^2787665^9(x87^0)t^98^9787665^:(x58:7^n)t/(,^s;z/ 08^;}/l/7 876 65(4^;(x87^)t 08^=7 876 65 54(.^=(x87^)t 08^>7 876 65 54(.^>(x87^ )t*0A^28 187^26 765^;}/l/4 54. .C^>D CDE EB AF^?E FED(G BF^ ?!EED FDC(&HGy*GHw*H(?+I IF(2E EI^6?F IFEEJ^6?!F IFEEK 0F FJE ED DC(&L 1F FKE ED DC(&M^7?^<?^A?^F?MKFFN^K;^=FNFEED^P=^>FNFEED^P>^U>Z(x_FdE^)t 0F^OE FED DC C8(7^O 1F^OE FED DC C8(7^O^;/^;)g(d,,)(xFE^)t^PZ*U(TT(SS(FFEUD EDCC(T(+U(S(TUFF( SSdV(.7F7W<(2CX(JT(QT8W<(T(,7T)gVe >  )gV*TTp*INTdhq!+@H\w~]' &' &*  -  -. .-..01.0   !"#$ %&' ( 24. +-78)8.80   / !"#$ %&'( 978))50  0 !"#$ %&'( :7183  2334565 !"#789:;<;7>,@=+54)4*   AB$ %&'( =74.).*   CD$ %&'( >7E8  ?7FGHDCIHC8HGFFE)LFM JKFNFDJKLF9  M"N !OPJK$ %&'( OEF87)7F7Q8RST,VF   PEWXYFSF SRFRZF Y[\FY]F$^Z_`abcdefghVFFVWXSXESERi  """""""""&...000000004<<<>>>>>>>>BLLLNNNOOOOOOOOOSYYY[[[[[[[[[_eeegggggggggkkkknpppppqqqqqrrrrsuuuuuvvvvvvxxyy{|||~~~~sp_MSG__STATUS__ERROR__CURROW__CURCOL__SELF__FRAME__CFRAME_sn$T0cat$T1$T2$T3$T4box$T5$T6whscore$T7$T8$T9$T10$T11$T12level remainingkbd$T13startkeysfield$T14gridwgridh$T15$T16$T17$T18dimwdimhdimfwfhfxfy_ygameoverscores$T19linefidrc routinefound >~ routinei$T20.titleSASTris - Richard A. DeVenezia, 2004_SetAttributeValueulxulylrxlryunitspixels_convertBoxcharacterswidthLRXheightLRYbackgroundColorBlack_winfonumxpixelnumypixelSASHELP.CLASSES.TEXTLABEL_C.CLASS_NEW__region__attrs_labelColorWhitelabelScorejustificationCenterborderStyleSimpleborderColorcx303030fontNAMEComic Sans MSPOINTSWEIGHThorizontalPositionFLOOR_GetAttributeValueSASHELP.FSP.WIDGET.CLASS(C)N(CN)VLevelRemainSASHELP.CLASSES.TEXTENTRY_C.CLASStextColorcx505050enabledYeskeyFeedback_instance_attributes_pieceTYPEODESCRIPTIONPiece that is falling_setInstanceMethod_onKeyPlaymethodsonkeyOrangePress S to StartGray4,5,6,2,DGAMES.TETRIS.FIELD.CLASSverticalPositiongetNumberOfColumns()NgetNumberOfRowsvisibleNo(CC)VBlueCx808080borderWidthGAME OVER_cursorcanplaysound0SYSSCPWINGAMES.TETRIS.SCORES.CLASSslistEntrysasuser.scores.tetrisSASCBTBL* PlaySoundA for AF;WORK.WINAPI.ROUTINES.SOURCECATALOGA routine PlaySoundAmodule = winmmminarg = 3maxarg = 3stackpop = calledreturns= long;arg 1 char inputbyaddrformat=$CHAR32767.; *lpszSoundName;arg 2 numinputbyvalue format=pib4.;*hModule, always 0;arg 3 numinputbyvalue format=pib4.;*uFlags;1  hlSASCBTBLq?xpV@؉N@@#L  pp'@SYSFORE SYSBACK SYSFORE p  ;IISAS/IMAGE CAT5>zz[[3ww{{mm~~yyfkk||nnqq ll pprrttuuvv5Hh`Ç!P (1 L8hpB&  /fcȑ%O\K5rR$I(UDυ343)O/Zf3zz %HHÇ!nPH10 ) 4  /fcȑ%O\ٲK5rR$I(U$Aυ343)Od< fQHw.m*VDoթgV %Jط%lXeؚjضXxqaTlŠt",}K[ył[ Gi[!Li&g&Fll]Mlmʛsu3iӋ0`kq賯Paks%+, & dH@t ( " BR8`&`f'V;أ=N(CYG")K2٤O.  >  ;IISAS/IMAGE CAT5>4466,,p$$))88>>//;;..##''%%&&==//BBDDEEGG0000112211&&22******++,,++----((--..00[[))((@@$$$$''''3399%%#H^DHÇ!P Xx`dpȠ (@PpD /fcȑ%O\ْK5rR$I(U4Abυ343)O#Bx`pbrsuQff 33zl|}~jk{m_ohiyaqcdtfgwH<Ç!6Ph@*P !"X"6h /fcȑ%O\K5rR$I(U`"υ343)Oh< fQHw.mJVDoթgV1Jط1lXe*ؚjضX/PbTlt",r}K[A[ Gi[!Li g8lzz[[3ww{{mm~~yyfkk||nnqq ll pprrttuuvv5Hh`Ç!P (1 L8hpB&  /fcȑ%O\K5rR$I(UDυ343)O/Z;IISAS/IMAGE CAT¥-Y-¥ OOO444pH*\ȰÇ#JHŋȱǏ IƑ&SzD%˖)_,)sfȚ6?q'ϓ>94gQGg&OMUF9dUOofyV_W9cכg=Vd۴`+۹d-׬ݽc+-అ8ƈ!U|x䭉)3rV͎9YSҖM |ugDYmT6QןmצTwoJq8SN3>{KGO͗ylɧ֞T뻹TT[Uz [u~qX "*ؠB( B8! Zxajh . %(b axa0c6VX"8:#:>dBJHdFHdJn$;JY%Szh%X[jiGyal 馜r $kYbJym֩|I薃Zh(hNʨ^Ji )i ꣨j5Z⚫ګ[l҈ȪhjRh^>l޺mNkmK.)o6n pFoSiӨ ,qk'FpG rbOLr& s24gs:s"w >FrHwrD4JoRnjZlu6\LvB f/ھ6r)vlWT~ xzg ؂x֊oxׄ p;^v;mݗMtܦ-桇zv{xԤ5yӮ빯;?{7ò?_?xKS|S[磟sϟOc X T @`%@ VPĠ5AvЃa8B0( 7B 0 (Ђ8\3HCQTZU^YVՙ +GEZVz.*Hͪϵt-ZjӺ:m+OƘ`+FJ̴4tXKֳq-P'Kƚ<,<+z}=7 ʲun=-\Ckؾc|md9&VkgkZv5-pQZ6'nwk[&,t9\vuqYֺ-v\vUn(Jܕr׽׭ovjv}AK`.0 oH0*‡ BHP"E/B̨1bG'r Yp$I'#LdK/C8cM7/2aÞ>")RhITjiSD7F}8#TUf zҭCTlRF.ZoE+4ݶt._x .60. U\^#oeP!xˉ=,^ДED-װc˞M۸sͻ 5MUD\NҝM[vS:f.^F:c>{jS/KǏ>WWoUrH "6F8Z "!~蠇!8"H"'v".)H6rc:Z+XbBbF飄J^x$":NRdCJ`-Z/vA~a209.I$uR8'x"yiɦ©|"j֘(t2zc9N 螕鏞.(jz(MBjN骤(*BJv돶f릾. v,šJ,̪ mȂ)Rll *nԚylߒ>6KoJ'W gˮN o q1'| \'+ܲ/3\73ˉp"GLé@o $)YIK^&9IO~4$ C|"UV5 gR $e-T&w)}b3 )f>hr&ier/ir<',9vve&VUf[+2ֲ^ EY=gZ[k:[2hE\o[XTp[\U.$aܿ:7`{X^׷}tj7o1ˊصnv YB׻og+|W[_ݒכ0iڅ\HA*\X0!Ç8Haŋ/>̨q!ǎAn#Ɂ&OHyRʐ/Ɣ9eM7Wԙ%I"] dюG5&HОK+F8bՑOo^-T+ѭ,LYNJ)[iٮi`]Zԋܸtk`y x_QH1+MY3ƈ=KM3hȧ'֙a+%m6ŃM-nԿU͵hTEnU7ଡfe}uc{qəo_c׆{_KXx "Ƞ&J .x!j!2! h#baXaha8`!)d$&`OBSRYWb[r٥_cdK*&g*yI`Fgw"rɧz)('?Z96h&Z':Z)ȩ"ZB**HꩦZ꤬(+ 릶v맾ˆ뮺 򈬅KƮ ʆbJ-֊-fmH.fnn覩m;lI I0 p Ok1 wK1q ">+Ir˲/2wLs s*6 :WFJjrBR?NIuPu^(omufόb vdunsHttj|4vwwЂw҆O ׄxgeR^cs>%ۊ,yՐxwۦzɪܫ~v>{+kÞew?x|?}s؟sS?k叞 ~/W?ӯ  2Ё (AVЂ `AЃ`E8&%LWA 0| AHp8 ` 9 Ђ@ uh"B/xD&6t)&:b E-R18 (0p5,#x5Ұ9| 3saM_ (HCq,#B"hl'ID𑒼d+ML" IJN~2%*XJV.Q|eg LⱖR̥wHR%#{Ia:j f,LX&ӍǤ$4G(LH^SҴ6=MZ38ST:NwOSΤ%:eIfRӎ 8N6$'2@Nt}FQ2T iD)nEAZRliFQzΚ+ͩg͛)/4MOԘ~T,1Ѫv)eiTzUzU`EQE9Ue՗hjV{HVj=+\JVr5v^Tn+_Jذ5*^ײ5Y(غ:f/ =ZVM(e'+>v+gCzV]j [ʶ0_?عⶰ=pKn=i/Z6}s#KZ7q_[V v߆ww\Bwmy+KѾ׷`, J\8"bp#DŽ? )r ɒQ*cwO_9^z=wiWx0"` 2 B(F6x!nXaj!"2"xb$('"2vH6b#:z<@f(F*dJ@dL6 2bRbyJNc\Jb%d gijn)$rIv Ki(b,.b3hHiiF驠Y%h.*NJk^jjT)c:,ƺe|B맲N[k7Zrۭ߂[碛ۮ%^k޻ic[漪lL.|lNl%> h^k~\c|klo;n L`C53gL$ b'p84@3τJBG ot`w]6lf&=lrmujmp>uZznw\?.b_>cx/vtx9nt2zrXx[>;ľh߰nznx^{ħλ_:˓ =cۼ|K+>KN#ϽO}Nß??>4`6RĠ7A vG!L WX@ 1 iXC9yCA X& b*b`+E%z1 cA0e̠FIt# #[;ڱxda(c BD]Lc$HG62$&MZ2t(HJ)zҔTLWVjb$!IKF$cI^Q )IY%fbL&3gen IiZsL'1io.zBy ~̦/ {bb!ˉ΀,(7'ƆS5FQ:(BGЊd ?=*Җt1(Hȗ<)_pg]~ "*` :R6x! jf %pb*"a Hc&ވc).z0أYKdIJHLNPFZheR^Ie^b~ffrfl"U9f_I`6Y()`:+.b/yh)jd~hveYeZꥲfJ릶zd+B?ji j. g6 -N[kH쵹gm~gn;lʞlΆ;g;Kﻠ뮶Jk'>lm.;1{jln莬n+pr.głLެ/̦֌h lCwG#K3ݴOCSS]Wc[s -qطMsÂ~2-vmǼfϓ618WgO o>?wr<"yK_0YLcT2Lg>%-K(R3֜61JAڲܬ&8-IzԤ8NV3T%a-VJZ5JMXհu`)Zk|"udZլux*PH׷ʵ]S֥pM`{WFL#cJ٧Md ijhYS5XWMӾ_[;Wئ n+zvm,dIlur[^E<-kҶe mc]y{Ji|[_MpGK\-v^v^i BTH \P† >Hq"E/2̨! Ip$I'@vend;`o@v_super();`j@vendmethod;`k@v`w@vendclass;`n@v >0#!#_SCLD1_LIIP1RELEASEEXESIZEFLAGS-@  H f4(2ff4?@@0@5@@@@@F@ @F@a2U0*3?P !   ' / 8 AIVcg k o tx |            %*/*4*6*8p^ " ))^"*)^#"(^ " )))5d>(fQ)^Q"V^ " ))..-*-#-*- -.([/*0 ,+.([1 0+.([2 1.(`) .)5 526 299:^";:^";(e9 92 299: :9(Nj;/;(Nq?/>?@(NxA/@AB(NC/BCD(NE/DEF 0.(NG/FGH(NI/HIJ(NK/JKL/LM 2)(NN/MNO^"(*4*877c(9 /9.([36464666^"O(NN)b^"(68887Vep4@LOSeioy}  **   +,-E ) .)) 99;?AC0E.GIK)NO2493N O8N^^^^ ''())++-//11333488:::;;;;==ABBCDEEFFGGHHHIIJJKKLLMMMMOPRTTTUVXXXXXXZ[\\^pF_MSG__STATUS__ERROR__CURROW__SELF__FRAME__CFRAME__METHOD__EVENT_ samplebuffer canplaysound$T0$T1durfreqvol$T2maxlevel sampleratecycles samplecountlevelthetathetamax thetastepiix$T3bytes$T4$T5$T6$T7$T8$T9$T10$T11$T12$T13$T14$T15$T16$T17$T18$T19$T20$T21$T22$T23$T24GAMES.TETRIS.BLIPSOUND.CLAS;ASHELP.FSP.OBJECT.CLASSsamplebuffercanplaysound()Vplay_GetAttributeValue(C)NMODULEPlaySoundA(C)C_SetAttributeValue(CC)Voff(N)V_INITCONSTRUCTOR(CN)VFLOORCONSTANTPIRIFFPIB4.WAVEfmt PIB2.dataSINIB2.ht@playoff_INITCONSTRUCTOR@ x'@(@`6HALFHALF 7 10 13 16 19 >  22`/class BlipSound;`g@v`w@vpublicchar samplebuffer;`[@vpublicnumcanplaysound;`[@v`w@v%let SND_ALIAS = 10x;`]@v%let SND_ASYNC = 1x;`a@v%let SND_FILENAME = 20x;`Z@v%let SND_LOOP = 8x;`b@v%let SND_MEMORY = 4x;``@v%let SND_NODEFAULT = 2x;`]@v%let SND_NOSTOP = 10x;`_@v%let SND_SYNC = 0x;`b@v`w@vrplay:`p@vpublic method;`g@vif canplaysound then`_@vcall module ('PlaySoundA', samplebuffer, 0, &SND_ASYNC+&SND_MEMORY+&SND_NOSTOP);`!@vendmethod;`k@v`w@voff:`q@vpublic method;`g@vif canplaysound then`_@vcall module ('PlaySoundA', 0,0,&SND_MEMORY);`E@vendmethod;`k@v`w@vblipSound:`k@vpublic method dur:num freq:num vol:num;`N@v`w@vxcanplaysound = symgetn ('canplaysound');`K@v`w@vif not canplaysound then return;`S@v`w@vdeclare num maxlevel samplerate cycles samplecount ;`?@vdeclare num level;`a@vdeclare num theta thetamax thetastep i;`L@vdeclare num ix;`d@v`w@vif vol > 1 then vol = 1;`[@velse`o@vif vol < 0 then vol = 0;`[@v`w@vmaxlevel = floor (32767/2 * vol);`R@v`w@vsamplerate = 10;* samples / sec;`N@v`w@vcycles = floor (freq * dur); * number of oscillations needed for dur to achieve freq;`@v`w@v samplecount = floor (samplerate * dur); * number of samples needed for dur;`(@v`w@vthetamax = cycles * 2 * constant ('PI');`K@vthetastep = thetamax / samplecount;`P@v`w@vdeclare num bytes ;``@v`w@vbytes = samplecount*2 + 44;`X@v`w@vif bytes > mlength(samplebuffer) then`N@vsamplecount = floor(mlength(samplebuffer) / 2) - 44;`=@v `w@vbytes = samplecount*2 + 44;`X@v`w@vsamplebuffer =`e@v'RIFF'`j@v|| put (bytes-8,pib4.) %* # of bytes to next chunk;`@@v|| 'WAVE'`j@v|| 'fmt '`j@v|| put (16, pib4.)%* # of fmt bytes;`G@v|| put ( 1, pib2.)%* uncompressed format;`B@v|| put ( 1, pib2.)%* # of channels;`H@v|| put (samplerate,pib4.) %* sampling rate;`H@v|| put (samplerate*2, pib4.)%* average bytes per second;`9@v|| put ( 2, pib2.)%* bytes per sample frame;`?@v|| put (16, pib2.)%* bits per sample;`F@v;|| 'data'`j@v|| put(samplecount*2,pib4.)%* # of data bytes;`C@v;`r@v`w@vtheta = 0;`i@vix = 45;`k@v`w@vdo i = 1 to samplecount;`[@v`w@vlevel = floor (maxlevel * sin(theta));`K@vtheta + thetastep;`_@vthetastep + 0.03;`^@v`w@vsubstr (samplebuffer,ix,2) = put(level,ib2.);`D@v`w@vP>ix + 2;`j@vend;`o@vendmethod;`k@v`w@vendclass;`n@v >XLSRً *Aً *An1#   F $Tetris field - locked block handlingXLSRSASA1(:   F *Load blocks created by Createblocks.source(7Ls$MV] l)g` l)gXLSRN*AN*A % F Tetris piece (all)XLSR&,A*A ( F  Play TetrisXLSR)pQApQAoH * F %Override method for kbd in Play frameXLSR+6A6A/  F High scores methodsXLSR.#A#A 1 F High scores compositeXLSR2SAqSA[ 5 Create Tetris blocks x .60. U\^#oeP!xˉ=,^ДED-װc˞M۸sͻ 5MUD\NҝM[vS:f.^F:c>{jS/KǏ>WWoUrH "6F8Z "!~蠇!8"H"'v".)H6rc:Z+XbBbF飄J^x$":NRdCJ`-Z/vA~a209.I$uR8'x"yiɦ©|"j֘(t2zc9N 螕鏞.(jz(MBjN骤(*BJv돶f릾. v,šJ,̪ mȂ)Rll *nԚylߒ>6KoJ'W gˮN o q1'| \'+ܲ/3\73ˉp"GLé@o $)YIK^&9IO~4$ C|"UV5 gR $e-T&w)}b3 )f>hr&ier/ir<',9vve&VUf[+2ֲ^ EY=gZ[k:[2hE\o[XTp[\U.$aܿ:7`{X^׷}tj7o1ˊصnv YB׻og+|W[_ݒכ0iڅ\HA*\X0!Ç8Haŋ/>̨q!ǎAn#Ɂ&OHyRʐ/Ɣ9eM7Wԙ%I"] dюG5&HОK+F8bՑOo^-T+ѭ,LYNJ)[iٮi`]Zԋܸtk`y x_QH1+MY3ƈ=KM3hȧ'֙a+%m6ŃM-nԿU͵hTEnU7ଡfe}uc{qəo_c׆{_KXx "Ƞ&J .x!j!2! h#baXaha8`!)d$&`OBSRYWb[r٥_cdK*&g*yI`Fgw"rɧz)('?Z96h&Z':Z)ȩ"ZB**HꩦZ꤬(+ 릶v맾ˆ뮺 򈬅KƮ ʆbJ-֊-fmH.fnn覩m;lI I0 p Ok1 wK1q ">0#!#_SCLD1_LII#P1RELEASEEXESIZEFLAGS-#@74(#% <734@$@?@F@@5)^r @f6\?Q?™?P !   ' / 8 AIOUagmv  A          g     a        $  ).pd^ "1^"2^"3(4((5(Y+6/68(Y49/89:/:7/7;^="B"G<^"3(L2*?*@^"47=S9 =3(Z22 @?3 =2 320^"A AB 0BC?C> >DD>(aD(f>(xkD^p)ts^xE^"8 =C^"F^"8=SedX^"DedP^"DedH"1(C7G\"1(B7H[d ^"II^IJ^"e 8HQ8GNed ^ "F^FM(NN^$L)e d ,^ "F^7FQ(N<R^CP)e d H^ "F^SFU^X"D DSSS*S(N[V^bT)e d]^o"F^sFvX^o"F^sFX^"D7Wy^"F WA^"YFYe^"Y^YX8Wy^ep;@EValq|#)MV\_n 0 12346 56 59;4<32432>DDCDED >  E=!DC"F=#   D1CC1BB (DGH)* (GH+K -/ L0K2N1NO PO3R1RS 4T S5V1V]D6DCWBA* """$$$$$$$$%%&&(((((((*+++++,-> -00111225566677::<<<====>>?@@AACCDEEHHJJJJKKKLLOOQQQQRRRSSVVXXXXYYYZZ[[[\\__aaaabbbbcccddddddddddeffggi   _MSG__STATUS__ERROR__CURROW__SELF__FRAME__CFRAME__METHOD__EVENT_nRowsnCols rowsClearedlevelscoregameover rowsPerLevelblocksclicks$T0$T1$T2$T3$T4sn$T5cat$T6$T7$T8$T9$T10ifreqminidmaxid$T11$T12$T13$T14$T15$T16jb$T17N$T18$T19$T20$T21 remaining$T22$T23$T24$T25GAMES.TETRIS.FIELD.CLASASHELP.CLASSES.IMAGEVIEWER_C.CLASSnRowsnColssetcamRowsClearedrowsClearedsetcamLevellevelsetcamScorescoregameoverrowsPerLevelblocksclicksO()V_init_GetAttributeValue(C)N.imagegrid_SetAttributeValue(CC)VMODFLOOREXPCLICKSGAMES.TETRIS.BLIPSOUND.CLASS_NEW__INITCONSTRUCTOR(N,)V(CO:GAMES.TETRIS.BLIPSOUND.CLASS;N)V(CNN)O(*)(CON)V()NgetNumberOfRowsgetNumberOfColumnsclearBlocksBLOCKS(CN)O(*,*)_term(CN )V(N)VframeIdSASHELP.FSP.OBJECT.CLASS(C)O_getNumVarlabel8.3.remaining2.offeh(HHHHHH;BI^it $$,,,@N%_initgetNumberOfRowsgetNumberOfColumns clearBlocks setcamScore setcamLevelsetcamRowsCleared_term @ x'@ (@ )*+ ,@ -@ .@/@`g6HALFHALF 7 10 13 16 19 22`/class Field extends sashelp.classes.ImageViewer_c;`E@vprotected num nRows / (initialValue = 20);`K@vprotected num nCols / (initialValue = 10);`K@v`w@vpublic num rowsCleared / (initialValue = 0, setcam="setcamRowsCleared");`-@vpublic num level / (initialValue = 0, setcam="setcamLevel");`9@vpublic num score / (initialValue = 0, setcam="setcamScore");`9@vpublic num gameover / (initialValue = 0);`L@vpublic num rowsPerLevel / (initialValue = 10);`G@v`w@vpublic Object blocks [*,*];`Z@v`w@vpublic Object clicks [*];`\@v`w@v_init:`o@vmethod / (state='O');``@v_super();`j@vredim (blocks,nRows,nCols);`X@v`w@vdeclare char(131) sn = screenname();`O@vdeclare char(65) cat = scan(sn,1,'.') || '.' || scan(sn,2,'.') || '.';`-@v`w@vimage = cat || 'grid';`]@v`w@vredim (clicks,nRows);`^@vdeclare num i freq;``@v`w@v* id values corresponding to notes;`P@vdeclare num minid = 33;`\@vdeclare num maxid = 45;`\@v`w@vdo i = 1 to nRows;`a@v* new higher pitched sound every five rows;`F@vif mod (i-1,5) = 0 then do;`V@v* convert noteid to corresponding frequency;`C@vfreq = minid + (maxid-minid) * (i-1) / (nRows-1);`>@vfreq = 3.430845 + 0.057742 * freq;`M@vfreq = floor(exp (freq));`V@v* compute waveform for desired blip sound;`E@vclicks[i] = _new_ BlipSound (.07, freq, .1); * dur,freq,vol;`3@vend;`m@velse`m@vclicks[i] = clicks[i-1];`W@vend;`o@vendmethod;`k@v`w@vgetNumberOfRows:`e@vmethod return=num;`c@vreturn nRows;`f@vendmethod;`k@v`w@vgetNumberOfColumns:`b@vm>  0#!#_SCLD1_LII P1RELEASEEXESIZEFLAGS?- 6@ Lxd *   *u*p?@@P ! ( , /7;? CGK O QVZ ^ c g l n("($(Y #/#&(Y'/&'%(x*^ )t#^%+(*+)7,-(S4* *..,/(9(/(-8,- +-^;)>/"(/(-0/%(/(-1^C)F^I)LO2^P)S(WV3(W]4:d(,q2p"2JMQRV^cdq~## $# $'*+* */( 0122/2/ -342/  "$$&')+,,p_MSG__STATUS__ERROR__CURROW_in_path$T0snout_cat$T1$T2$T3img$T4$T5iname$T6$T7fileentattrwhWORK.SASHELP.FSP.IMGDAT.CLASS_NEW__INITCONSTRUCTORSASHELP.FSP.OBJECT.CLASS()VBYTEa.gifgrid.gif_term\_readFilepath_writeCatalog_getAttributeswidthheightname=w=h= hlttttttttttimportHALFHALF 7 10 13 16 19 22`//* Richard A. DeVenezia``@v * Aug 11 2004`i@v *`u@v * Create IMAGE entries for Tetris game`P@vF */`t@v`w@vinit:`r@vin_path = pathname ('WORK');`Y@v`w@vsn = screenname();`c@vout_cat = scan(sn,1,'.') || '.' || scan(sn,2,'.');`C@v`w@vdeclare sashelp.fsp.imgdat img`W@v= _new_ sashelp.fsp.imgdat ();`W@v`w@vdo i = 1 to 7;`g@vname = byte(rank('a')-1+i) || '.gif';`N@vlink import;`g@vend;`q@v`w@vname = 'grid.gif';`c@vlink import;`i@v`w@vimg._term();`i@vreturn;`p@v`w@vimport:`p@vfile = in_path || '\' || name;`W@vent= out_cat || '.' || name;`W@v`w@vimg._readFilepath (file);`\@vimg._writeCatalog (ent);`]@v`w@vdeclare list attr = {};`^@v  `w@vimg._getAttributes (attr);`[@v`w@vw = getNitemN (attr,'width');`X@vh = getNitemN (attr,'height');`W@v`w@vput name= w= h=;`e@v`w@vattr = dellist (attr);`_@vreturn;`p@v >0#!#_SCLD1_LIIP1RELEASEEXESIZEFLAGS- P@ 0peX`cX=4(4 {?$@3?@o@D@@@@Q~?™?MbP?@@@e@Y@r@@P !   ' / 8 AIOU[afnv          %O U       [     A"', 1 7 @DHMR W\ c hm t y~               # # # # # # # ### ) ) ) ) ) ) ) ) )) 0 l11 [2 $2 2 &3 +3 3 3 3 3035:3 ?5 5 B5K5 l8P8U Z;`;e;j; o; y; ; ;; = = = = = = == == = ==== == == o= @ $ $ $  $ $ 6  *O***pd(q,AOC1$AC:9^@"E^J"OA"TE"YF(^H"eI(jK"qL(vN(}O"L"LfA"L"I(M"F(J"E(G(D"L"LfA"L"I(M"F(J"E(G(D"L"LfA"L"I(M"F(J"E(G(D"L"LfA"L"I(M"F(J"E(G(D"L"LfA"L"I(M" F(J"E(G(D"L"LfA"L"I(M"F(J"#E(G(D"(L"Lf"L(-N7P4z"L(;M7QBy"L(IK7RPx^W"bSSw^g"r^w"r8RPo8QBl8P4i(T(YB/BV(YW/VWX/XU+Z^@O^>@N ONM(K^"^"O ON(M^"[\([O([O^"O(ZN^"O(ZN(xO^)t^ "(xO^)t^"(xO^)t^"(xO^)t^$"(,+O7S2(9OOJ^>"E^^J^Q/UAY^>"E^^T^Q8S2(;OON^["ed_^h"k_pedr^"kaa1P^"E^^^Q^"E^^^Q^"E^^^Q^"E^^^Q:edC^"kdd^"OO:^"7e2^"M^"K^"J KJHcHG^"E^^^Q8e2 cO^"^^^flfN ONM^"K MKJ(HHG^"^" ed ^"kii^"OO ^"7j2)^"M^%"K^"J KJHhHG^"E^^0^Q8j2 hO^"^^7^klkN ONM^"K MKJ(HHG^:"^?"BedD^"knn6^O"OOB^R"^"^^7^oloO mN^"M NMKOKJJH^W"^\"_eda^"krrU^l"OO_^o"^"^^^slsO qN^"M NMKOKJJH^t"^y"|ed~ tO^"^^7^uluN ONM^"K MKJ(HHG=edt vO^"^^^wlwN ONM^"K MKJ(HHG=edi xO^"N ONM^"^^7^ylyKMKJJH(GedW zO^"N ONM^"^^^{l{KMKJJH(GedO^"OO7|2^"E^^7^^"^^Ql}^"E^^7^lN^"MNMK KJ^"~^"E^^^lNNM^D"^"E^^^lNNM^"KMKJ JH^b"OO*~^"^^^lN N^"^^^lN N}^"^^^lN N^"^^^lN N *O^;"N^"E^^>^lK NKJ(8|2^ "O6OO^"ed#^"72}^"E^^7^^#"^&^Ql^"E^^7^lN^"MNMK KJ^"^"E^^^lNNM^D"^"E^^^lNNM^"KMKJ JH^ "^"^^"^+lOOOO*^"^^.^lN N^"^^7^lN N^"^^@^lN N^"^^I^lN No* O^;"N^R"E^^^lK NKJ(*82"^ "O6OO^"e#d)Y72^d"E^^7^lNNM^D"^d"E^^7^lNNM^"KMKJ JH^ "^d"E^^^^k"n^q^Ql^d"E^^^lN^"MNMK KJ^"^"^^j^vlOOOO-*;^"^^y^lN N^"^^^lN N.^"^^^lN N^"^^^lN N* O^;"N^"E^^7^lK NKJ(^"^^^Q82^"O6OO^"e)d0Jd1^"^^"N^^l^^"^"O^;"e1^"OO(;O^"NONM^"e0d2&^"OO"L(-*72dd3^ "O^"M^"K MKJOJ^"O^"M^"K MKJOJ^"^"OON NM^D"^"^"OON NM^D"^"^^^vlOO||^"^^^+lOO|^"^^^lN^"^lK NKJJ|^"^lN^"^^^lK NKJJ|e382e2!^'"*OONN^"O6OO^/"^"O"4L(9MOM^@"^ "O^"^"O^"d5C(;^M"OON(a=MMK NKJJo^P"O(SN(;^"^ZlOOh]^M"OO4d8^">^"N^l^Y^"^_"O^;"^"OOQY^"^blOOH^e"^h"O^e"N^h"M NMK^"^blJ KJH HGOG OON^["e8(a;OO{|e5d:Y^"se:d;p^"^b6^}Q^"^Q^"^^^"^b(L^Q^"^^^Q^"^^^m^Q7(N/^Q(O8^Q^Q^"^e;d=$72;^"O^"M^"KOK^"O^"M^"KOK^"^Q^"^lNN^"^Q8272Q^"O^"M^"KOK^"O^"M^"KOK^ "E^^"^ Q82<^"^ vl^"^ +l**7 7 h^"^lNNMMh8 _L7 {^"^^$ Q^"^^- m(+0 NN68 j>(7 O7 ^"^l^"^> Q^F G 8 ~ O7J 7 ^"^Q lMM`^"^Q ^7^"M6M^"^Z Q^"^Q lN^"^c Q8 8J 7 ^"^l Q8 668 ^Ou ^"^{ N~ O^"^^b^lNNMMK OKJ6J^ Q^"^^ ^"^{ (L ^ Q^"^ 6^ Q^"^ ^"^^ ^kOO^t " ^"^^ ^"^ lO^"^^ ^lN ON(N ^ Qe= O^"E^ G ^"E^ G ^"E^ G ^"E^ G p05:?DHOV_ery)>Pot  %HMxy #-5:C>GQ[ajosw !*+.8:EIPUZ\hq{lll0ll@A!AB'A(@)*A)+ DGF HJI KML N E HKNOO  ONI MKF JHE G L MJGDONKHONKHONKHONKHONKHOL NNL MML KK OPQR,- .QPS)/ .RPSB T0B T0W2,456MKK)7NMM89:;<= >?@ Z[AO Z\BO [O:N [O;NDO]ZOEC])FC]C]C]ZGO OCOS,IJKS)JYS N_ ,O_`u PCO `CO `CO `CO `cu RRCOe .NMe,UTGe,VT,JHGR hu WWCOj >.NMjXGjXGW mu YYHY quZZHZ tuvuxuEn6HGzuCO|aXaSbS cO~ cO~ cO} cO}dSCM|JHOCOX5 cO cO cO cOCMCObTh cO cO cO cOiSCMjOmONn#of M .N .N cO cM cO cM!r6O NL MC  O Nj uYpuy zu{}|~|j|   |O >| .NM .NM cOCO c^  >JN O c O  cN X cN c  |yy#~}                     "##00111122223367777777777778::::::::::::::<<=>>DDEEEEFFFFGGJKKKKKKKKKKKKLNNNNNNNNNNNNNNPPQRRXXYYYYZZZZ[[]]]]]]]]]]]]]__`aagghhhhiiiijjlllllllllllllnnoppuuvvvvvvvv>vvvvvww||}}}}}}}}}}}}}~~          ########$$$$$$$$&&''''''(())))))+++++++,,-------/001111122222356677777888889::<==BCCCCCEEEEEFFFFFFFHHHHIIIIJOOPUUUUUUUVVVWXZZZZZZZ\\\\^^^^^^^__aabbbbdddfiiiijjjjkkkkkkkkkkkkkkkkmmmmnooqrrwwxxxyy}}~~~~~~~p>######################################################################################################))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))001111111111111111000000000002222222222333333333333333333333333333333333333333333333333333333333333333333333333333332222pb555555555555555555555555588888888888888888888888888888888888888888888888855555::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;===================================================================================================================================================================================================================================p>_MSG__STATUS__ERROR__CURROW__SELF__FRAME__CFRAME__METHOD__EVENT_blockfieldpiecestatesidegravitytimeout baseSleepvisiblexycolrowdropWiggleTime interval1 interval10ABCDEFGPlocation$T0$A#11$T1$T2$T3$T4$T5$T6$T7$T8$T9$T10$T11$T12blocknosncat$T13$T14$T15$T16attrs_region__attrs_$T17$T18$T19$T20incamX$T21$T22incamY$T23$T24incamRow$T25$T26incamCol$T27$T28$T29$T30$T31$T32itrowbrowlcolrcollblockedblockeddx$T33$T34rblocked$T35$T36dybblocked$T37$T38oldyblip$T39nnewxnewy$T40$T41$T42dtinterval$T43$T44$T45level$T46$T47$T48 remaininggameoverlabel$T49rrrcc rowsCleared$T50nr$T51ncadvancer$T52$T53$T54factor$T55score$T56$T57GAMES.TETRIS.PIECE.CLAS/ASHELP.FSP.OBJECT.CLASSblockfieldpiecestatesidegravit> ytimeoutbaseSleepYes NosetcamVisiblevisiblesetcamXxsetcamYysetcamColcolsetcamRowrowdropWiggleTimeinterval1interval10ABCDEFGPlocationO()V_INITCONSTRUCTORGAMES.TETRIS.FIELD.CLASS(O:GAMES.TETRIS.FIELD.CLASS;C)VERROR: pieceis out of range (A-G)_SetAttributeValue(CO:GAMES.TETRIS.FIELD.CLASS;)V(CC)V_GetAttributeValue(CN)N(*,*,*)LOCATION(CN)V.FLOORwidthSASHELP.FSP.WIDGET.CLASS(C)NgetNumberOfColumns()N(CN)VulxulylrxlryunitsPixelsNoimageSourceCatalog_region__attrs_BLOCKSASHELP.CLASSES.IMAGEVIEWER_C.CLASS_NEW_(CO:SASHELP.CLASSES.IMAGEVIEWER_C.CLASS;N)VYRANUNI(CNN)O(4)imageSASHELP.I0808.SASIDSDATETIME()CgetPiece(C)CerrorMessageincamX(N)NhorizontalPosition(CNV)N(4,4,2)(C)OincamYverticalPositionincamRowincamColblockRowOfblockColOftopOfRowROUNDleftOfColleftBLOCKROWOFBLOCKCOLOFblocksLEFTOFCOLright(N)VdowngetNumberOfRowsTOPOFROWgameoverdropGAMES.TETRIS.BLIPSOUND.CLASSclicksplayDOWNcanRotaterotateCANROTATEwaitSLEEPlevel()OgetFieldnextLevelrowsClearedframeId_getNumVarlabel2.remaining0YesGet Ready 1.clearBlockslockSASHELP_termscore8.rowsPerLevelNEXTLEVELtermBlocksK!KhL``````<Zx g #$%%$)*++*.025668;=>>==BBDDDGD#&M4SSSSSSSS##f#6#6v###A_INITCONSTRUCTOR_INITCONSTRUCTORgetPiece setcamVisiblesetcamXsetcamY setcamRow setcamCol blockRowOf blockColOftopOfRow leftOfColleftrightdowndrop canRotaterotatewaitgetField nextLevellock termBlocks@ x'@(@)@*@ +@ ,@ -@.@ / 01234@ 5@ 6@ 7@ 8@ 9/@ :@ ; @ <:@ =@ >@?@b @ g @ l @ p @ 6HALFHALF 7 10 13 16 19 22`//*`@ * Richard A. DeVenezia`@ * Tetris piece`@ */`@`@/*`@ * Each piece is composed of four blocks in a distinct`@m * geometric arrangement.`@ */`@`@`@class Piece ;`@`@public Object block[4];`@`@1protected Object field;`@`@protected char piece;`@public num state / ( initialValue = 1 );`@public num side / ( initialValue = . ); * dimension of side;`@public num gravity / ( initialValue = . );`@public num timeout;`@protected num baseSleep / (initialValue = 10);`@J`@ public char(3) visible / ( validValues="Yes No", setcam="setcamVisible") ;`@public num x / ( setcam="setcamX" );`@public num y / ( setcam="setcamY" );`@public num col / ( setcam="setcamCol" );`@public num row / ( setcam="setcamRow" );`@`@public num dropWiggleTime / ( initialValue = 0.6 );`@,public num interval1/ ( initialValue = 250 );* level1 time between drops;`@public num interval10 / ( initialValue =40 );* level 10 time between drops;`@`@/*`@* Enumerate the arragements of the blocks in each of the`@* four rotations of each piece`@*/`@`@private num A [ 4, 4, 4 ] / ( initialValue =`@{ ., ., 1, .`@, ., ., 2, .`@, ., ., 3, .`@, ., ., 4, .`@`@, ., ., ., .`@, ., ., ., .`@|, 4, 3, 2, 1`@, ., ., ., .`@`@, ., ., 4, .`@, ., ., 3, .`@, ., ., 2, .`@, ., ., 1, .`@`@&!>! , ., ., ., .`@, ., ., ., .`@, 1, 2, 3, 4`@, ., ., ., .`@});`@`@private num B [ 4, 3, 3 ] / ( initialValue =`@{ ., 1, .`@, 2, 3, 4`@, ., ., .`@j`@, ., 2, .`@, ., 3, 1`@, ., 4, .`@`@, ., ., .`@, 4, 3, 2`@, ., 1, .`@`@, ., 4, .`@, 1, 3, .`@, ., 2, .`@});`@`@private num C [ 4, 3, 3 ] / ( initialValue =`@{ ., ., 1`@j, 2, 3, 4`@, ., ., .`@`@, ., 2, .`@, ., 3, .`@, ., 4, 1`@`@, ., ., .`@d, 4, 3, 2`@, 1, ., .`@`@, 1, 4, .`@, ., 3, .`@, ., 2, .`@});`@`@`@private num D [ 4, 3, 3 ] / ( initialValue =`@{ ., ., .`@, 1, 2, 3`@, ., ., 4`@`@, ., 1, .`@, ., 2, .`@j, 4, 3, .`@`@, 4, ., .`@, 3, 2, 1`@, ., ., .`@`@, ., 3, 4`@, ., 2, .`@~, ., 1, .`@});`@`@private num E [ 4, 2, 2 ] / ( initialValue =`@{ 1, 2`@, 3, 4`@`@, 3, 1`@U, 4, 2`@`@, 4, 3`@, 2, 1`@`@, 2, 4`@, 1, 3`@});`@`@private num F [ 4, 3, 3 ] / ( initialValue =`@{ ., 1, 2`@, 3, 4, .`@, ., ., .`@`@, ., 3, .`@, ., 4, 1`@j, ., ., 2`@`@, ., ., .`@, ., 4, 3`@, 2, 1, .`@`@, 2, ., .`@, 1, 4, .`@, ., 3, .`@});`@`@private num G [ 4, 3, 3 ] / ( initialValue =`@{ 1, 2, .`@, ., 3, 4`@, ., ., .`@`@j, ., ., 1`@, ., 3, 2`@, ., 4, .`@`@, ., ., .`@, 4, 3, .`@, ., 2, 1`@`@, ., 4, .`@, 2, 3, .`@, 1, ., .`@});`@`@/*`@* Array P will contain the enumeration of whichever`@* piece this instance is rendering`@*/`@`@private num P[*,*,*];`@`@/*`@* Array location is an inverse mapping of P that`@* tells which row