HEHX;!X; !X; נ͠!X; X; ˠΠ$X; .X;8X;B!X; (C) 1985 by Charles JohnsonL X; and Little Green FootballsVX;`!X; This program uses the extraj#X; RAM in the 130XE or the AXLONtX; 128K board to hold either~#X; 32 (130XE) or 48 (AXLON 128K) X; compressed Koala pictures.X; X; Also displays mode 8 and 9#X; pictures if they are in Koala!X; format and the mode byte in!X; the file header is changed.X;X; Last revision: 10/12/85X;PASSPASS PASSEI>D1:SYSTEXT.M65 >D1:IOCOMEQU.M65I(X;2X;<FX;P POINT1Z POINT2d MAXRAMn BYTCNTx FILCNT PICCNT NAMLEN COUNTR OPNFLG BANKCT ADRESS TYPE OTBUFP UNIQUE ODD DATA COUNT DLPTR MODSAV UNCCNT ALLFLG" DLFLAG, MODFLG6 VBPNTR@ SCRFLGJ SCRSAVT SCRSV2^ BOTSCRh AUTFLGr TEMP| CONSAV TPOINT SWITCH FILSIZ MXBANKX;X; ----------------X; Start of programX; ----------------X;&X; START-$>;;Close IOCB #0 CLOSEMX;&Q>OPEN;;Open IOCB #0 to0PICCOM;;the E: device: Q>4ENAMED PICBALN Q>5ENAMEX PICBAHbQ> l PICAX1v CIOVX;Q>;;Find out whichP;;type of RamdiskP@;;(130XE or AXLON)Q>PӼQ@R> FCKAXLNQ> PSWITCHQ>PSWITCHQ>  PFILSIZQ>  PMXBANK*$>4 CPYXE> QXEMSG9H PRDTYPE9R0\ ICPYXEf GGOTRAMp CKAXLNzQ>PώP@Q>PϬQ@R> FNORAMDQ> PSWITCHQ>PSWITCHQ>0 PFILSIZ Q> PMXBANK $>$ CPYAX. QAXMSG98 PRDTYPE9B 0L ICPYAXV GGOTRAM` X;j NORAMDt Q>NOTLEN~ $>4NOTRAM %>5NOTRAM PRINT0 FREEZE !FREEZE X; GOTRAM Q>;;Set screen PCOLOR1;;colors Q> PCOLOR2 Q>$ PCOLOR4 , QSAVMSC;;Put address of O>P;;screen memory PGR0SCR;;(+ 2 lines) in( QSAVMSC;;my display list2 O>< PGR0SCRF Q>4DLIST1P PSDLSTLZ Q>5DLIST1d PSDLSTHn X;x $> ;;Close IOCB #2 CLOSEM X; Q>OPEN;;Open IOCB #2 to PICCOM9;;the K: device Q>4KNAME PICBAL9 Q>5KNAME PICBAH9 Q> PICAX19 CIOV X; Q>;;Set maximum RAM PMAXRAM;;size (16K per Q>@;;bank) PMAXRAM" X;, Q>6 PROWCRS@ Q>M1LEN;;Print drive #J $>4MSG1;;promptT %>5MSG1^ PRINT0h X;r $> | Q>GETCHR PICCOM9 Q> PICBLL9 PICBLH9 GETDRV  CIOV;;Get drive # X; R> 1;;Must be 1 or 2 FGOTDRV R> 2 HGETDRV X; GOTDRV PALLMSG PDIRNAM PPICNAM& Q>0 PALLFLG: Q>ALLLEN;;"All pix?" msgD $>4ALLMSGN %>5ALLMSGX PRINT0b X;l $> ;;Get keypressv CIOV PMSG2 R> Y HNOTALL;;Not "Y", skip #ALLFLG;;Set flag Q>;;Set msg length HNOTA.2 NOTALL Q>M2LEN NOTA.2 $>4MSG2 %>5MSG2 PRINT0 X; Q>;;Init variables PBANKCT;;and pointers PMODFLG PSCRFLG* PFILCNT4 PPICCNT> PBYTCNTH PBYTCNTR ARRSET\ X;f $>0;;Open chosenp Q>OPEN;;disk directoryz PICCOM9 Q>4DIRNAM PICBAL9 Q>5DIRNAM PICBAH9 Q> PICAX19 CIOV X; #X; Read filenames from directory X; GETNAM $>0;;Get filenames Q>GETREC PICCOM9 Q>4FNAME PICBAL9$ Q>5FNAME. PICBAH98Q>B PICBLL9LQ>V PICBLH9` CIOVjX;tQFNAME;;"FREE SECTORS"~R> S;;message?FCONTIN;;Yes, go onQFILCNT;;Reached max #RFILSIZ;;allowed?FCONTIN;;Yes, go onX;QALLFLG;;Skip if allHMOV.1;;picturesX;Q>;;Print names$>4FNAME;;and prompt%>5FNAME PRINT0X;  Q>PRLEN $>4PROMPT %>5PROMPT( PRINT02X;< GETYNF$> ;;Get a keypressP Q>GETCHRZ PICCOM9dQ>n PICBLL9x PICBLH9 CIOVX; R> Y;;"Y"?FGOTYN;;Yes, go on R> N;;"N"?FGOTYN;;Yes, go on R>;;ESC?HGETYN;;No, get back!$>0;;Close directory CLOSEM!START;;Go to startX; GOTYNPMSG3;;Print Y or N Q>M3LEN $>4MSG3" %>5MSG3, PRINT06X;@QMSG3;;Was it "N"?JR> NTFGETNAM;;Yes, get names^X;h MOV.1r%>| MOVNAMQFNAME8;;Move name toP@POINT17;;array1 IMOVNAMX;,QPOINT1;;IncrementO>;;zero page ptr PPOINT1 DMOV.2#POINT1 MOV.2#FILCNT;;Count files!GETNAM;;Get namesX; CONTIN&$> ;;Close K: and D:0 CLOSEM:X;D$>0N CLOSEMXX;bQFILCNT;;Any files?lHCONT.2;;Yes, skipv!START;;Back to startX; CONT.2 ARRSET;;Init pointers Q>4COLORS PPOINT2 Q>5COLORSPPOINT2Q>$>4MSG3%>5MSG3 PRINT0X;"X; Load the compressed picturesX; into memory X; GETPIX %>;;Clear file open*'OPNFLG;;flag4 MOVNM2>Q@POINT17;;Move nameHR> ;;from array toRFEXT;;filespec area\PPICNAM8f3p)>z HMOVNM2EXT$> MOVEXTQEXTCHR9;;Put .PIC extPPICNAM832(> HMOVEXTX;C,O>PNAMLEN;;Save length,QPOINT1;;Increment array$O>;;pointer. PPOINT18 DM2.2B#POINT1LM2.2VX;`Q>M4LEN;;"Loading"j $>4MSG4t %>5MSG4~ PRINT0X;QNAMLEN;;Filename $>4PICNAM %>5PICNAM PRINT0X;$>;;Open file forQ>OPEN;;input PICCOM9 Q>4PICNAM PICBAL9 Q>5PICNAM PICBAH9 Q> PICAX19 CIOV(X;2Q>;;Get header<PCOUNTR;;bytesF Q>GETCHRP PICCOM9ZQ>d PICBLL9n PICBLH9xHDR1 CIOV "COUNTR IHDR1%PICCNT;;Save type ofPTYPES8;;compression CIOV;;and graphics%PICCNT;;mode PMODES8X;Q> PCOUNTRHDR2 CIOV "COUNTR IHDR2X;"Q>, PCOUNTR6HDR3@ CIOVJ%COUNTR;;Save colorsT P@POINT27^ "COUNTRh IHDR3rX;|,QPOINT2;;Increment colorO>;;array pointer PPOINT2 DHDR3.2#POINT2 HDR3.2X;Q>;;Get rest ofPCOUNTR;;headerHDR4 CIOV "COUNTR IHDR4X; GETDATQ>GETCHR;;Read picture&PICCOM9;;data0,:Q>D OBYTCNTN PICBAL9XQ>@bOBYTCNTl PICBAH9v; QMAXRAM SBYTCNT PICBLL9QMAXRAMSBYTCNT PICBLH9 CIOVX;QOPNFLG;;Is file open?HADDBYT;;Yes, skipX; %PICCNTQBYTCNT;;Store offsetPOFFTBL8;;of data from QBYTCNT;;start of bank POFFTBH8  QBANKCT* PBNKTBL84X;> ADDBYTH,RQBYTCNT;;Increment counter\OICBLL9;;by # of bytesfPBYTCNT;;readpQBYTCNTz OICBLH9PBYTCNTX; QICSTA9R>;;End of file?FDOMORE;;Yes, read moreX;QBANKCT;;At end of RAM? RMXBANKFMEMFUL;;Yes, skipX;,;;Increment bankO>;;counter PBANKCT %FILSIZ)>0 FSETB.1$;.S>8T?BT?L,VO>` SETB.1j%>tP@SWITCH7;;Switch banks~'BYTCNT;;Set byte count'BYTCNT;;to zero#OPNFLG;;Set open flag!GETDAT;;Rest of dataX; MEMFULQ>M5LEN;;Print full msg $>4MSG5 %>5MSG5 PRINT0X;$>;;Close file CLOSEMX;  ,;;PauseQRTCLOKO>x(WAIT2RRTCLOK< HWAITFFDISPLAY;;Go to SLIDESHOWPX;Z DOMOREd#PICCNT;;Count pixn$>;;Close filex CLOSEMX;QPICCNT;;At end of pix? RFILCNTFDISPLAY;;Yes, skip aheadQBYTCNT;;At end of bank? RMAXRAM HGOBACKQBYTCNTRMAXRAMHGOBACK;;No, skipX;QBANKCT;;Switch banks RMXBANK FDISPLAYX;,"O>, PBANKCT6 %FILSIZ@)>0J FSETB.2T;^S>hT?rT?|,O> SETB.2%> P@SWITCH7 'BYTCNT'BYTCNT GOBACK !GETPIXX;X; ---------------------X; The SLIDESHOW sectionX; ---------------------X; DISPLAYQ>PPOINT2&Q>;;Init flags and0PPOINT2;;turn screen off: PDLFLAGD PAUTFLGN PSDMCTLX PDMACTLb PCOLOR4l PCOLBKv$>@? CLSCRNP@POINT27;;Clear screen 3;;memory HCLSCRN#POINT20 HCLSCRNX;%> SETTOPQMTITL8;;Set prompt inPTITLE 8;;text line1  ISETTOPX; Q>4DLIST2;;Set pointers*PDLPTR;;to display list4 PVBPNTR> Q>5DLIST2H PDLPTRRPVBPNTR\%>f MODDLpQDLBYTS8;;Set text linez P@DLPTR71 IMODDLX;Q>;;Set vertical$>5VBI;;blank interrupt %>4VBI SETVBVX;Q>;;Set displayPNMIEN;;list interruptsX; DLOOP1Q>;;Init variablesPCOUNTR;;and selectPBANKCT;;bank 0 at $4000 %FILSIZ$)>0. FSETB.38Q>B SETB.3L%>V P@SWITCH7` DLOOP2j QSCRFLGtN>~ PSCRFLGX;,;;Get offset of%COUNTR;;data from startQOFFTBL8;;of bufferO> PADRESS QOFFTBH8O>@PADRESS QBNKTBL8 PBANKCT $FILSIZ(>0  FSETBNK;S>( GSETBNK2T?<T?F,PO>Z SETBNKd%>n P@SWITCH7x %COUNTRQTYPES8;;Get compressionPTYPE;;type HGOCNV CNVUNC;;Uncompressed, DSETSCRX; GOCNV CONVERTX; SETSCR#MODFLG;;Flag for VBIQ>;;Prevent colorPATRACT;;switchingX;GET1"Q>;;Clear key press,PCH6X;@ GETKEYJQCONSOL;;Get console keysTPCONSAV;;Save^R>;;START pressed?hHCONSL2;;No, skipr STRTWT|QCONSOL;;Wait for releaseR> FSTRTWT SOUND;;Make a soundQAUTFLG;;Toggle automaticN>;;show flag PAUTFLG>;;Get message adrQTADLO9;;for top line PTPOINT QTADHI9PTPOINT%> CHNGTI Q@TPOINT7;;Put message PTITLE 8;;in top line 1& ICHNGTI0 X;: CONSL2D QCONSAV;;Get consoleN R>;;OPTION pressed?X HCKAUTO;;No, skipb !TOPLIN;;Go do top linel CKAUTOv QAUTFLG;;Automatic show? FCKSTIK;;No, skip QRTCLOK ,;;Set time to wait O> > AUTOWT QCONSOL;;Get console keys PCONSAV;;Save R>;;START pressed? FSTRTWT;;Yes, go back R>;;OPTION? HAUTO2;;No, skip !TOPLIN;;Do top line! AUTO2 !QCH;;Get key press! R>;;ESC? !HAUTO3;;No, skip*!!GOSTRT;;Go restart4! AUTO3>!(RTCLOK;;Keep waitingH! HAUTOWTR!!NXTPIC;;Next picture\!X;f! CKSTIKp!QSTICK0;;Get stickz!R>;;Centered?!FGET1.3;;Yes, skip!5;;Save value!QRTCLOK;;Wait one VB! STIKWT!RRTCLOK! FSTIKWT!7;;Restore value!R>;;Forward?!HSTK1;;No, skip!!NXTPIC;;Next picture!STK1!R> ;;Back?!HGET1.3;;No, skip"!LSTPIC;;Last picture" GET1.3"QSTRIG0;;Get trigger$"HCKKEYS;;Not pressed."!TOPLIN;;Do top line8"X;B" CKKEYSL"QCH;;Get key pressV"R>;;None?`"HCKK2;;No, skipj"!GETKEY;;Go backt"CKK2~" R>;;ESC?"HGK2;;No, skip" GOSTRT"Q>;;Cancel press"PCH"!START;;Restart"GK2"R>!;;SPACE?"FNXTPIC;;Yes, skip" R>;;"+"?"HBACKUP;;No, skip" NXTPIC" #COUNTR# QCOUNTR # RPICCNT# FGOL1#GOL2(# !DLOOP22#GOL1<# !DLOOP1F# BACKUPP# R>;;"B"?Z#FLSTPIC;;Yes, skipd# R>;;"-"?n#FLSTPIC;;Yes, skipx#!GET1;;Go back# LSTPIC#"COUNTR;;Set counter back#ILST.2;;>=0, skip#$PICCNT;;Set to last pic#0# &COUNTR# LST.2# !DLOOP2#X;# TOPLIN#QSTRIG0;;Wait til trigger#FTOPLIN;;or console key#QCONSOL;;is released$R>$ FTOPLIN$ SOUND;;Make sound"$#DLFLAG;;Set flag for VBI,$!GET1;;Go back6$X;@$X; -----------J$X; SUBROUTINEST$X; -----------^$X;h$ PRINT0r$ PICBLL|$ &ICBAL$ 'ICBAH$ Q>PUTCHR$ PICCOM$$>$ !CIOV$X;$ CLOSEM$ Q>CLOSE$ PICCOM9$ !CIOV$X;$ ARRSET$ Q>4ARRAY% PPOINT1% Q>5ARRAY%PPOINT1&%:0%X;:% SOUNDD%Q>xN% PTEMPX%Q>b% PAUDC1l% SOUN2v% QTEMP% PAUDF1%;%S>% PTEMP% GSOUN3%QRTCLOK% SOUNWT%RRTCLOK% FSOUNWT% HSOUN2% SOUN3%:%X;&DLI1 &5&A &5*&C4&5>& QCOLOR4H&M>R&$>\&%>f& PWSYNCp& PCOLPF2z& &COLPF1& 'PRIOR& Q>4DLI2& PVDSLST& Q>5DLI2&PVDSLST&7&?&7&>&7&9&X;&DLI2'5'A'5$'C.'58' QCOLOR2B' $COLOR1L' %GPRIORV' PWSYNC`' PCOLPF2j' &COLPF1t' 'PRIOR~'7'?'7'>'7'9'X;'"X; ----------------------------'"X; The vertical blank interrupt'"X; ----------------------------'X;'VBI' Q>4DLI1( PVDSLST ( Q>5DLI1(PVDSLST( QMODFLG(( HDOMOD2( !CKDLST<( DOMODF( "MODFLGP( $SCRFLGZ( QSCRAD19d( PSCRN1n( QSCRAD29x( PSCRN2( $COUNTR( QMODES9(M>( PMODSAV( QMODES9(M>( PGPRIOR( PPRIOR(Q>(PPOINT1(A(T?(UPOINT1)T?)UPOINT1)T?")UPOINT1,),6) O>4ARRAY@) PPOINT1J)QPOINT1T) O>5ARRAY^)PPOINT1h)%>r) PUTNAM|) Q@POINT17);)S> )PTITLE8)1) IPUTNAM)X;),) Q>4DLIST2) PSDLSTL) PDLISTL)O>) PDLPTR) Q>5DLIST2* PSDLSTH* PDLISTH*O>&* PDLPTR0*Q>":* PSDMCTLD* PDMACTLN*%>X* QMODSAVb*R>l* HSETMODv*5*Q>* PCOLOR2* PCOLPF2* PCOLOR4* PCOLBK*Q>* PCOLOR1* PCOLPF1*7* SETMOD*L>@* P@DLPTR7*%>`+ P@DLPTR7 +,+ QDLPTR +O>*+ PDLPTR4+ DSETM1.1>+ #DLPTRH+ SETM1.1R+%>\\+ QMODSAVf+ SETMD2p+ P@DLPTR7z+1+ ISETMD2+,+ QDLPTR+O>`+ PDLPTR+ DSETM2.1+ #DLPTR+ SETM2.1+%>`+ QMODSAV+ SETMD3+ P@DLPTR7+1, ISETMD3,R>, HDOCOLR$, !XITVBV., DOCOLR8,Q>B,PPOINT2L, QCOUNTRV,T?`,UPOINT2j,T?t,UPOINT2~,,, OCOUNTR, DDOCOL.2,#POINT2, DOCOL.2,,, O>4COLORS, PPOINT2,QPOINT2, O>5COLORS,PPOINT2,%>,$>- SETCOL - Q@POINT27- PCOLOR09- PCOLPF09(-22-1<- ISETCOLF- GEXITVBP- CKDLSTZ- QDLFLAGd- FEXITVBn- "DLFLAGx-%>-Q>0- R@VBPNTR7- FTOPON- TOPOFF- P@VBPNTR7-1- ITOPOFF- GEXITVB- TOPON- QDLBYTS8- P@VBPNTR7-1- ITOPON. EXITVB. !XITVBV.X;"."X; ----------------------------,."X; De-compress ATARI ARTIST (or6."X; MICRO ILLUSTRATOR) pictures.@."X; ----------------------------J.X;T.X; TYPE values:^.X; 0 = Uncompressedh.X; 1 = Vertical compressionr.!X; 2 = Horizontal compression|.X;.X; Uncompressed pictures.X; are handled at CNVUNC.X;. CONVERT. %SCRFLG.Q>P. POTBUFP. PSCRSAV. PSCRSV2. PBOTSCR. QSCRAD18.POTBUFP.PSCRSAV/PSCRSV2/,/O>&/PBOTSCR0/%>:/'ODD;;Set ODD to 0D/X;N/ LOOP1X/'COUNT;;Clear count andb/'UNIQUE;;unique flagl/Q@ADRESS7;;Get countv/6;;Save status/ INCIBP;;Bump pointer/8;;Restore flags/,/U?;;Bit 7 of count/UUNIQUE;;in unique flag/V?;;and clear bit 7/ PCOUNT/ HCKUNQ/ Q@ADRESS7/ PCOUNT/ INCIBP/ Q@ADRESS7/ PCOUNT0 INCIBP 0X;0 CKUNQ 0 QUNIQUE*0 FLOOP340X;>0 LOOP2H0 Q@ADRESS7R0 INCIBP\0 P@OTBUFP7f0 $TYPEp0(>z0 HL2.20 INCOBP20 !L2.30L2.20 INCOBP0L2.30 "COUNT0 HLOOP20 QCOUNT0 FLOOP10 "COUNT0 ILOOP20X;0 LOOP31 Q@ADRESS71 PDATA1 INCIBP$1L3.2.1 QDATA81 P@OTBUFP7B1 $TYPEL1(>V1 HL3.3`1 INCOBP2j1 !L3.4t1L3.3~1 INCOBP1L3.41 "COUNT1 HL3.21 QCOUNT1 FLOOP11 "COUNT1 IL3.21X;1X; -----------------------1X; Subroutines for CONVERT1X; -----------------------1X;2 INCOBP 2,2 QOTBUFP2O>P(2 POTBUFP22DIO2<2#OTBUFPF2IO2P2 QOTBUFPZ2 RBOTSCRd2 HRETURNn2QOTBUFPx2RBOTSCR2 HRETURN2X;2 CKODD2QODD2 HCKDONE2#ODD2,2 QSCRSV22O>(2 POTBUFP2QSCRSV22O>2POTBUFP3,3 QBOTSCR3O>("3 PBOTSCR,3QBOTSCR63O>@3PBOTSCRJ3 #SCRSV2T3 HRETURN^3#SCRSV2h3X;r3 RETURN|3:3X;3 CKDONE3"ODD3 QSCRSV23 POTBUFP3 PBOTSCR3QSCRSV23POTBUFP3,3O>3PBOTSCR3 QSCRSAV3,4O>(4>4QSCRSAV&4O>04ROTBUFP:4 HRETURND4 (OTBUFPN4 HRETURNX4X;b4BACKTOMAINl47v474:;;To main routine4X;4 INCOBP24 #OTBUFP4 HIOB2.24#OTBUFP4 IOB2.24QSCRSAV4,4O>4>4 QSCRSAV4(OTBUFP5 HRETURN 5 ROTBUFP5 HRETURN 5FBACKTOMAIN*5X;45 INCIBP>55H5 QADRESSR5R>\5HIN2f5QADRESSp5R>z5HIN25 #BANKCT5 QBANKCT5 %FILSIZ5)>05 FSETB.55;5S>5T?5T?5,5O>5 SETB.55%>6 P@SWITCH76Q>6 PADRESS$6Q>@.6PADRESS86HIN3B6IN2L6 #ADRESSV6HIN3`6#ADRESSj6IN3t67~6:6X;6X; Move uncompressed picture6X; to screen RAM.6X;6 CNVUNC6 %SCRFLG6Q>P6 POTBUFP6 QSCRAD186POTBUFP6Q>6 PUNCCNT7Q> 7PUNCCNT7%>7 COPYEM(7 Q@ADRESS727 P@OTBUFP7<7 #OTBUFPF7 HCOPY2P7#OTBUFPZ7 COPY2d7 INCIBPn7 "UNCCNTx7 HCOPYEM7"UNCCNT7 ICOPYEM7:7X;7X; ------------------7X; Variables and data7X; ------------------7X;7 DLIST17 p=p=P=B7 NAMLIN7 ===B7 GR0SCR8 8 =====8 ====="8 =====,8 ===A68 DLIST1@8X;J8 DLIST2T8 p==^8 TITLEh8 r8 O|8 SCRN18 P8 ====8 ====8 ====8 ====8 ====8 ====8 ====8 ====8 ====8 ====8 ====8 ====9 ====9 ====9 ====&9 ====09 ====:9 ====D9 ==N9 OX9 SCRN2b9 l9 ====v9 ====9 ====9 ====9 ====9 ====9 ====9 ====9 ====9 ====9 ====9 ====9 ====9 ====9 ====: ==== : ====: ==== : ====*: =4: A>: DLIST2H:X;R: SCRAD1\: =f: SCRAD2p: =z:X;: ENAME: AE:A: KNAME: AK:A: SNAME: AS:A:X;: NOTRAM:, AϠ͠ġ͠ԮA:NOTLEN NOTRAM:X;: NAMLIN:! AנA; RDTYPE; AA;/ AA$;X;.; XEMSG8; AAB; AXMSGL; AAV;X;`;MSG1j; AWhich drive (/)? At;M1LEN MSG1~;X;; ALLMSG; A A==; AShow all pictures (/)? A;ALLLEN ALLMSG;X;;MSG2; A A==;0 Aes/o=Select pictures =RestartA==;M2LEN MSG2;X;; PROMPT; A --> A<PRLEN PROMPT <X;<MSG3< A A=(<M3LEN MSG32<X;<<MSG4F< ALoading AP<M4LEN MSG4Z<X;d<MSG5n< A٠̡A=x<M5LEN MSG5<X;< DIRNAM< AD :*A< EXTCHR< A.PICA=<X;< PICNAM< AD : A<X;< FNAME< A A<X;< DLBYTS= p=== TITLE= "=X;,= TITLE6=! =========@=% A =Forward =Back =Exit AJ=X;T= MTITL^= A=Forward =BackAh= ATITLr= A Â A|=X;= TADLO= 4MTITL=4ATITL= TADHI= 5MTITL=5ATITL=X;= ARRAY= 0=X;= COLORS= 0=X;= TYPES=0>X;> MODES>0&>X;0> OFFTBL:>0D> OFFTBHN>0X>X;b> BNKTBLl>0v>X;>X;> RUNAD> START>X;>EI