OUTINETONEPBUFSIZ PCOUNT&TONE1$COUNT;;SET VALUES0%>;;FOR TIMER:Q>DPCONSOL;;MOVE SPEAKERN CONTDN;;TI&}ME DELAYX'CONSOL;;MOVE OTHER WAYb3l$COUNT;;DELAYv CONTDNHTONE1;;KEEP GOING:X;X;X;*****************& }*******X;************************X;SDSTATC;;SAVE Y5 PSNDFLG PBUFSIZ  PCOUNT SENDEN;;ENABLE POKEY %& }>;;1 MILLISECOND% ;DELAY* 'CHKSNTX;SDSTATC;;SAVE Y5 PSNDFLG PBUFSIZ  PCOUNT SENDEN;;ENABLE POKEY %$'X; ASCII NUMCOUNTERX;#X;******************************X;X;ASC2INT macroX;$!X;Usag* }e: ASC2INT chars,number.X;8 X;'chars' is address of ASCIIB%X; string to convert,ending w/ EOLL#X;'number' is address of* } integerVX;` ASC2INT j  t AError in ASC2INTA~$> @ASCLOOP2Q 9 PASCII9 R>EOL H@ASCLO*}OP VALIDASC E@DONE ASC2INTE@ASCERRORQNUMP   QNUM P ,( D@DONE2 @ASCERROR<PRINT *}CONVERTMSGF;P @DONEZdnX;x#X;******************************X;X;INT2ASC macroX;!X;Usage: INT2ASC numb*}er,charsX;#X;'number' is address of integer$X;'chars' is address of resulting#X; ASCII string, ending with EOLX;*} INT2ASC    AError in INT2ASCAQ PNUM Q " PNUM, INT2ASC6$>@ @INTLOOPJ2T Q*}ASCII9^P 9h R>EOLr H@INTLOOP|X;$X;*******************************X;X;LDGZERO macroX;"X;Usage: *} LDGZERO address,bytesX;$X;'address' is beginning of ASCIIX; string of digits$X;'bytes' is max number of digits X*}; to check for leading zerosX; LDGZERO     AError in LDGZEROA& 0 $>: @SUPZEROD 2N Q 9X R>0b H*}@LZDONEl Q> v P 9 (>  H@SUPZERO @LZDONE  rror in LDGZEROA& 0 $>: @SUPZEROD 2N Q 9X R>0b H(? X; $X;******************************* X; X;subroutine VALIDASC %X;called by ASC2INT,ASC2BCD macros X; !X;make.}s sure all characters in X;string beginning at address $X;ASCII are valid ASCII codes for #X;numeric digits; looks until .}it "X;hits an EOL; error message is "X;printed and carry flag is set !X;if an invalid char. is found X; VALIDASC $>.}& LOOPASC0 QASCII9;;get a char: R>EOL;;EOL?D HCHKASC;;no,go check itN (>;;yes, 1st char?X FINVALID;;yes,null e.}ntryb ,;;no, all donel :;;go backv CHKASC R>0;;less than 0? DINVALID;;yes, no good R>:;;greater than 9? EINVA.}LID;;yes, no good M>;;clear 4 hi bits PASCII9;;save 4 lo bits 2;;ready for next DLOOPASC;;char INVALID PRI.}NT ASCERRMSG ;;;set carry to :;;show an error X; ASCERRMSG  ANon-numeric A  Acharacter foundA=EOL X;* #X;*.}*****************************4 X;> X;subroutine ASC2INTH X;called by ASC2INT macroR X;\ $X;converts string of ASCII digit.}sf !X;at address ASCII to a 2-bytep #X;binary integer at address NUM;z X;carry flag set if error X; ASC2INT Q>;;zer.}o hi byte PNUM QASCII;;get first char PNUM $>;;next char EOL? QASCII9;;next char EOL? R>EOL HNEXTDIG. }IT;;no, go on ,;;yes all done : NEXTDIGIT MULT10;;multiply by 10EABORT;;carry set? error2$QASCII9;;next .!}char EOL?. R>EOL8HNEXTDIGIT;;no, go onB,L ABORTV :;;exit`CONVERTMSGj AASCII conversionAt A error...A=EOL~."}X;$X;*******************************X;X;subroutine MULT10!X;called by subroutine ASC2INTX;!X;multiplies bina.#}ry integer at X;address NUM and NUM+1 by 10X;and adds the next digit inX; MULT10QNUM;;save high byte5.$}QNUM;;get low byte TNUM;;multiply x 2 UNUMTNUM;;times 2 again( UNUM2ONUM;;add to self to<PNUM;;effec.%}tivelyF7;;multiply x 5P ONUMZ PNUMdTNUM;;times 2 again,nUNUM;;total is now x10xQASCII9;;add in next c.&}harONUMPNUMQ>;;adding 0 to highONUM;;byte just pullsPNUM;;in carry value:X;$X;************.'}*******************X;X;subroutine INT2ASCX;called by INT2ASC macroX;%X;converts a 2-byte binary integer"X;at .(}address NUM to a string of"X;ASCII digits at address ASCIIX;" INT2ASC,%>;;pointer to table6'COUNTER;;of powers .)}of 10@NEXTDIGIT2J$>;;digit counterT SUBLOOP^QNUM;;get low byteh;;;subtract lo byterSDECTABLE8;;of current|.*}PNUM;;power of 10QNUM;;now subtract hi3;;byte of currentSDECTABLE8;;power of 10DADDITBACK;;if neg,restore.+}PNUM;;save hi byte2;;digit counter1;;point to lo-byte,;;of current powerDSUBLOOP;;of 10 again ADDITBACK.,}1;;point to lo byteQNUM;;add lo byte ofODECTABLE8;;power of 10PNUM;;back inA;;convert digitL>0;;counter.-} to ASCII&$COUNTER;;and store at0PASCII9;;next position: #COUNTERD3;;point to nextN3;;power of 10X)>;;at end ..}of table?bDNEXTDIGIT2;;no, go onlQNUM;;get units columnvL>0;;convert to ASCII$COUNTER;;store it PASCII92./}Q>EOL;;add an EOL inPASCII9;;next position:;;all doneX; DECTABLE '  d  it PASCII92,ied%X;Example 1. Interconverting ASCIin X;strings and 2-byte integersxX;X;by Karl E. WiegersX;EI=F>D8:MA21}CRO.LIBX;$X;-------------------------------X; PROGRAM STARTS HEREX;"X;You'll be prompted to enter a"X;numbe22}r with 1-5 digits. This X;is stored at address ENTRY. X;The binary integer produced"X;is stored at address INTEGER. 23}X;If the number is too large,%X;missing (null entry) or has non- X;digits in it, you'll get an"%X;error message. 25 wil24}l be added,"X;to the value you entered, and6$X;the result will be converted to@$X;ASCII and printed on the screenJX;T$X25};-------------------------------^X;hPrX;|- CLSPRINT PROMPTPOSITION =INPUT =ENTRYAS26}C2INT ENTRY=INTEGEREENDADD INTEGER=INT2ASC INTEGER=ENTRYLDGZERO ENTRY=POSITION =PR27}INT AFTERPOSITION = PRINT ENTRY END!ENDX; ENTRY&INTEGER0X;: PROMPTD AEnter a number 28}AN Awith 1-5 digits:A=EOLX AFTERb AAfter adding 25:A=EOLlX;v$X;-------------------------------X;>D8:SUBS29}.LIB Awith 1-5 digits:A=EOLX AFTERb AAfter adding 25:A=EOLlX;v$X;-------------------------------X;>D8:SUBS0l(4)=0 THEN RETURN FIFOR lc=1 TO 3DO IF PmHit(0,lc)=1 AND Estat(lc)>0 THEN RETURN FIODMeltdown()FOR lc=0 TO 7 DO PmClea}r(lc) ODLv==-1 Position(20,23) PrintB(Lv)IF Lv=0 THEN EndGame() ELSE Putman()PmHitClr=0 FI RETURNPROC InitLev();Set ini}tial stack values, call PutmanBYTE lpFOR lp=1 TO 8 DO Stack(lp)=0 ODStacky(1)=4 Stacky(2)=4 Stacky(3)=10Stacky(4)=10 Stac}ky(5)=16 Stacky(6)=16Stacky(7)=0 Stacky(8)=0 Putman()RETURNPROC Girders();draw the main four lines of girders;clear scr}een and init new levelSndRst() Zero(Scrn,960) Loud=0Hline(2,22,37,1) Hline(2,16,37,1)Hline(2,10,37,1) Hline(2,4,37,1)Hlin}e(9,4,13,4) Hline(9,10,13,6)Hline(9,16,13,8) Hline(26,4,30,4)Hline(26,10,30,6) Hline(26,16,30,8)InitLev()RETURNPROC Sc}reen1();draw screen 1BYTE lpGirders();now the laddersFOR lp=4 TO 21DO Plot4(2,lp,2) Plot4(3,lp,3) Plot4(19,lp,2) Plot4}(20,lp,3) Plot4(36,lp,2) Plot4(37,lp,3)OD Position(15,23)Print (" ")RETURNPROC Screen2();draw sc}reen 2BYTE lpGirders() FOR lp=4 TO 21DO Plot4(19,lp,2) Plot4(20,lp,3) ODFOR lp=10 TO 15DO Plot4(2,lp,2) Plot4(3,lp,3) OD}Position(15,23)Print ("")RETURNPROC Screen3();draw screen 3BYTE lpGirders() FOR lp=4 TO 21DO P}lot4(19,lp,2) Plot4(20,lp,3) ODFOR lp=4 TO 9DO Plot4(2,lp,2) Plot4(3,lp,3) ODFOR lp=16 TO 21DO Plot4(36,lp,2) Plot4(37,lp},3) ODPosition(15,23)Print (" ")RETURNPROC Screen4();draw screen 4BYTE lpGirders() Hline(16,4,23},0)Hline(16,16,23,0) FOR lp=4 TO 21DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)OD Position(15,23)Prin}t (" ")RETURNPROC Screen5();draw screen 5BYTE lpGirders() Hline(16,10,23,0)Hline(16,16,23,0) FOR }lp=4 TO 21DO Plot4(19,lp,2) Plot4(20,lp,3) ODFOR lp=4 TO 9DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)}OD FOR lp=16 TO 21DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)OD Position(15,23)Print(" } ")RETURNPROC Screen6();draw screen 6BYTE lpGirders() Hline(16,4,23,0)Hline(16,10,23,0) Hline(16,16,23,0)FOR }lp=4 TO 21DO Plot4(14,lp,2) Plot4(15,lp,3) Plot4(24,lp,2) Plot4(25,lp,3)OD Position(15,23)Print (" }")RETURNPROC Screen7();draw screen 7BYTE lpGirders() Hline(16,10,23,0)Hline(16,16,23,0) FOR lp=4 TO 21DO Plot4(19,lp,}2) Plot4(20,lp,3) ODPosition(15,23)Print (" ")RETURNPROC Screen8();draw screen 8BYTE lpGirders()}Hline(16,10,23,0) Hline(16,16,23,0)FOR lp=4 TO 21DO Plot4(2,lp,2) Plot4(3,lp,3) Plot4(36,lp,2) Plot4(37,lp,3)OD Positio}n(15,23)Print (" ")RETURNPROC Screen9();draw screen 9BYTE lpGirders() Hline(16,4,23,0)Hline(16,1}0,23,0) Hline(16,16,23,0)FOR lp=4 TO 21DO Plot4(2,lp,2) Plot4(3,lp,3) Plot4(36,lp,2) Plot4(37,lp,3)OD Position(15,23)Pr}int (" ")RETURNPROC Falling(BYTE tt);keep track of level statusBYTE lpIF tt=4 THEN IF X0<120 THE}N Stack(1)==+1 ELSE Stack(2)==+1 RETURN FIFIIF tt=6 THEN IF X0<120 THEN Stack(3) ==+1 ELSE Stack(4)==+1 RETURN} FIFIIF tt=8 THEN IF X0<120 THEN Stack(5)==+1 ELSE Stack(6)==+1 RETURN FIFIRETURNPROC Squashed(BYTE wh)BYTE l}k,xx,yyxx=(Stackx(wh) LSH 2)+48yy=(Stacky(wh) LSH 2)+16-14FOR lk=1 TO 3DO IF Px(lk)>=xx-8 AND Px(lk)<=xx+16 AND Py(lk)=}yy THEN Estat(lk)=1 Score==+5 Ld=14 FIOD RETURNRETURNPROC DropLevel();make levels fall, keep track of y posBYTE lp,}levBYTE ARRAY wh(7)=[0 5 5 7 7 9 9]FOR lp=1 TO 6DO IF Stack(lp)>=5 THEN Stack(lp)==+1 FI IF Stack(lp)>=7 THEN Hline}(Stackx(lp),Stacky(lp), Stackx(lp)+4,0) Score==+1 Stacky(lp)==+1 lev=Stacky(lp) IF lev=10 OR lev=16 THEN Stack(lp})=0 Hline(Stackx(lp),lev,Stackx(lp)+4, wh(lp)-1) IF Stacky(lp+2)=lev THEN Stack(lp+2)=7 Stacky(lp+2)=}lev+1 Hline(Stackx(lp+2),lev+1, Stackx(lp+2)+4,wh(lp+2)) FI ELSE Hline(Stackx(lp),lev,Stackx(lp)+4, } wh(lp)) IF lev=22 THEN Stack(lp)=0 FI FI IF lev=10 OR lev=16 OR lev=22 THEN Squashed(lp) FIFI ODRETURN}PROC Check();Look ahead-see whats there and moveBYTE xt1,xt2,yt1,yt2,t1,t2,t3,t4BYTE ARRAY pstnxt1=(X0-48) RSH 2 yt1=(Y}0-16+14) RSH 2t1=Locate4(xt1,yt1)t2=Locate4(xt1+1,yt1)IF t1=0 AND t2=0 THEN;falling Y0==+4 Moveit(pstn,0,18,X0,Y0) Ton}e=10 Loud=10 RETURNFIIF Stick0=15 THEN RETURN ELSE Tone=8 Flg=1-Flg IF Flg=0 THEN pstn=Chmp1 ELSE pstn=Chmp2 FI}FIIF Stick0=7 THEN;move right t1=Locate4(xt1+2,yt1) Loud=6 IF X0<192 THEN X0==+4 FI Moveit(pstn,0,18,X0,Y0) IF (t1=}4 OR t1=6 OR t1=8) THEN Plot4(xt1+2,yt1,t1+1) Falling(t1) FIFIIF Stick0=11 THEN;move left t1=Locate4(xt1-1,yt1) Lou}d=6 IF X0>56 THEN X0==-4 FI Moveit(pstn,0,18,X0,Y0) IF (t1=4 OR t1=6 OR t1=8) THEN Plot4(xt1-1,yt1,t1+1) Falling(t1}) FIFIIF Stick0=14 THEN;move up t1=Locate4(xt1,yt1) t2=Locate4(xt1+1,yt1) t3=Locate4(xt1,yt1-1) t4=Locate4(xt1+1,}yt1-1) IF ((t1=2 AND t2=3) OR (t3=2 AND t4=3)) THEN Y0==-4 Loud=6 Moveit(pstn,0,18,X0,Y0) FIFIIF Stick0=13 }THEN;move down t1=Locate4(xt1,yt1) t2=Locate4(xt1+1,yt1) IF (t1=2 AND t2=3) THEN Y0==+4 Moveit(pstn,0,18,X0,Y0) Lou}d=6 FIFIRETURNPROC Noise();the sound effectsIF Loud>0 THEN Loud==-1 Sound(1,Y0,Tone,Loud)FIRETURNPROC NoChase(B}YTE dl,dr,du,dd,lp)BYTE selIF (du=0 AND dd=0) THEN IF (Pxdr(lp)<0 AND dl=1) THEN RETURN ELSEIF (Pxdr(lp)>0 AND dr=1) THE}N RETURN FI FIIF (dl=0 AND dr=0) THEN IF (Pydr(lp)<0 AND du=1) THEN RETURN ELSEIF (Pydr(lp)>0 AND dd=1) THEN RETURN} FIFI sel=Rand(4)IF (sel=0 AND dl=1) THEN Pxdr(lp)=-4 Pydr(lp)=0 ELSEIF (sel=1 AND dr=1) THEN Pxdr(lp)=4 Pydr(lp)=0 ELS}EIF (sel=2 AND du=1) THEN Pxdr(lp)=0 Pydr(lp)=-4 ELSEIF (sel=3 AND dd=1) THEN Pxdr(lp)=0 Pydr(lp)=4 ELSE Pxdr(lp)=0 Pydr}(lp)=0FIRETURNPROC Chase();the creatures moveBYTE lp,xt1,xt2,yt1,yt2,t1,t2,t3,t4, dir,dl,dr,du,ddINT delx,dely,dx},dyFOR lp=1 TO 3; for each chaserDO delx=X0-Px(lp) dely=Y0-Py(lp) dx=delx dy=dely IF delx<0 THEN delx=-delx FI IF dely<0} THEN dely=-dely FI delx==RSH 2 dely==RSH 2 xt1=(Px(lp)-48) RSH 2 yt1=(Py(lp)-16+14) RSH 2 t1=Locate4(xt1,yt1) t2=Locate}4(xt1+1,yt1) t3=Locate4(xt1,yt1-1) t4=Locate4(xt1+1,yt1-1) dir=0 dl=0 dr=0 du=0 dd=0 IF (t1=2 AND t2=3 AND Py(lp)<91) T}HEN dd=1 FI IF ((t1=2 AND t2=3) OR (t3=2 AND t4=3)) THEN du=1 FI IF (yt1=4 OR yt1=10 OR yt1=16 OR yt1=22) THEN dir=1} FI IF (dir=1 AND Px(lp)>56) THEN dl=1 FI IF (dir=1 AND Px(lp)<192) THEN dr=1 FI IF (dely<=Level AND delx<=Level) TH}EN IF (dx<0 AND dl=1) THEN Pxdr(lp)=-4 Pydr(lp)=0 ELSEIF (dx>0 AND dr=1) THEN Pxdr(lp)=4 Pydr(lp)=0 ELSEIF (dy<}0 AND du=1) THEN Pxdr(lp)=0 Pydr(lp)=-4 ELSEIF (dy>0 AND dd=1) THEN Pxdr(lp)=0 Pydr(lp)=4 ELSE Pxdr(lp)=0 Pydr(lp})=0 FI ELSE NoChase(dl,dr,du,dd,lp) FI IF Estat(lp)<>0 THEN Pxdr(lp)=0 Pydr(lp)=0;killed! FI IF t1=0 AND t2=0 THEN Px}dr(lp)=0 Pydr(lp)=4 FI; falling! Px(lp)==+Pxdr(lp) Py(lp)==+Pydr(lp) IF lp=1 THEN Moveit(Ibm,lp,18,Px(lp),Py(lp)) EL}SEIF lp=2 THEN Moveit(Cmdore,lp,18,Px(lp),Py(lp)) ELSE Moveit(Apple,lp,18,Px(lp),Py(lp)) FIODRETURNPROC Play();th}e play game loopBYTE lp,time=20DO Check() Chase() Msldrop() Atrt=0 Position(7,23) PrintC(Score) FOR lp=0 TO 2 DO Nois}e() time=0 DO UNTIL time=1 OD OD Noise() Testcol() Gotbumped() Ouch() IF Indx=0 THEN EXIT FI DropLevel();make levels fa}ll IF (Stacky(1)=22 AND Stacky(2)=22 AND Stacky(3)=22 AND Stacky(4)=22 AND Stacky(5)=22 AND Stacky(6)=22) THEN }EXIT;test for level finished FI IF Level=5 THEN Check() time=0 DO UNTIL time=2 OD FIODRETURNPROC Vector();Dummy} PROC for the screensRETURNPROC Intro()BYTE tm=20tm=0DO Sound(0,tm,10,4) UNTIL tm=100 ODPosition(15,23)Print(" } ")Update() Sound(0,0,0,0)RETURNPROC Main()BYTE time=20,lp,ch=764Title()Gr4Init() Snd1=0 Snd2=3Downloa}d() Pmgraphics()FOR lp=0 TO 7 DO PmClear(lp) ODFOR lp=1 TO 3DO Pcolr(lp)=((Rand(14)+1)LSH 4)+10 ODPcolr(0)=56 Modify() Sc}oreLine()Sc(1)=Screen1 Sc(2)=Screen2Sc(3)=Screen3 Sc(4)=Screen4Sc(5)=Screen5 Sc(6)=Screen6Sc(7)=Screen7 Sc(8)=Screen8Sc(}9)=Screen9DO Indx==+1 Vector=Sc(Indx) FOR lp=0 TO 7 DO PmClear(lp) OD Vector() Intro() Play() IF Indx=9 THEN Indx=0 Le}vel==+4 IF Pep<8 THEN Pep==+2 FI IF Ft>100 THEN Ft==-20 FI Update() FIODRETURNPlay() IF Indx=9 THEN Indx=0 Le\9 EIX;SAVE#D:XEBANKS.M65X;ASM,,#D:XEBANKS.OBJ(X;2%X;--------------------------------<%X; Save up to 8 Gr.7+,8},9,10 or 11F!X; screens into the XE's extraPX; RAM. Won't interfere withZ X; BASIC!dX;nX; Call with:x X; A=USR(1536,}oper,scrn,bank) X; Where:X; 1536 is addr of routineX; oper = 0 for save to XRAM!X; 1 for load from XRAM"X;} scrn = address of screen RAMX; bank = a number from 1-8$X; signifying which "bank""X; to load/save to/f}rom.$X;-------------------------------X; FROM TO PORTBX; START"7;# of args,7;ignore }high byte67;this is the one@HLOAD;make SCRN the TOJX;else make SCRN the FROMTSAVE^7h PFROMr7| PFROM7;}high of BANK7;low of BANK WHERE&TO 'TO !ACTIONLOAD7 PTO7PTO7;high of BANK7;low }of BANK WHERE &FROM 'FROM& ACTION0#X;here we actually move the data:$>;# of pagesD LOOP1N%>X LOOP}2b Q@FROM7l P@TO7v3 HLOOP20 FDONE#FROM;next page of RAM #TO !LOOP1DONEQ>;restore it t}oPPORTB;normal status.:;back to BASIC WHERE$X; decide if the address is $4000#X; or $5E00. Enable accordingly.}>;save it for later, W?;odd or even? DEVEN ODD*$X; was an odd number, so the bank4!X; is 1, 3, 5 or 7. That me}ans>X; it's located at $4000.H ENABLER$>\%>@f:pEVENz#X; set up for pointing to $5E00. ENABLE$>%}>^: ENABLE0;1-8 now 0-7 QINSTR9 PPORTB: INSTR === ===$5E00. ENABLE$>%a &X**********************************&X** BOOT-DIRECTORY **&X** by Bill Bodenstein **(&X** } COPYRIGHT 1988 **-&X** BY ANALOG COMPUTING **2&X**********************************<X;F%X;This pro}gram creates a directoryP"X;lister which is executed whenZX;disk is booted.dX;nX;x X; EQUATESX;CURSORROWT}CURSORCOLUCONSOLEPRESSЪSELECTKEYX;DIRSECTiDIRBUFFFENTRYPTRENTRYLENGTHX;}FNPLACEPUTRECORD PUTCHARS  ICCOMBICBADRD"ICBLENH, CIOV6X;@ READRJDCBCMD}TDCBBUF^DCBSEC h SIOSrX;|CONTBOOT;;start of boot!X; record routine which loadsX; DOS.SYS in}to memory.X;X;$X;The following code is stored in#X;the 3rd boot sector and booted#X;into memory from $800 }to $87F.X;X;#X;Set data control block to read"X;sectors into directory buffer"X;and set file entry pointer to"X};point to the first file entryX;in directory.X;& SETUPDCB0Q>4DIRSECT: PDCBSECDQ>5DIRSECTNPDCBSECXQ}>4DIRBUFFb PDCBBUFlPFENTRYPTRvQ>5DIRBUFFPDCBBUFPFENTRYPTRSETROWPCURSORROW;;start at"X; row 6, }avoiding silly stuff"X; LOAD*IT puts on the screen.X;X;"X;Skip to next sector and check!X;if last sector in dire}ctory.X;READINSECTOR #DCBSEC QDCBSECR>4DIRSECT EEXITBOOTDIR Q>READ  PDCBCMD* SIO4X;>X;H X};Check status flag of entry:RX; =0 if no more files\X; >=128 if deleted filefX;pCHECKENTRYz$>Q@FENTRYPTR6}FEXITBOOTDIRGNEXTENTRYX;X;$X;Indent file name and put two onX;each line.X;WHERECURSOR?%>Q>P}UTCHARSPICBLEN9;;fname=11 chars)CURSORCOLESETPOSITION%>Q>PUTRECORD;;causes a$"X; carriage return after} name..SETPOSITION'CURSORCOL8X;BX;L$X;Tell the screen editor to printV$X;the 11-character file name from`X;the fi}le entry.jX;t PRINTFN~PICCOM9;;xreg=0QFENTRYPTR, O>FNPLACE PICBADR9QFENTRYPTRPICBADR9 C}IOX;X; X;Skip to next 16-byte entry.X; NEXTENTRYQFENTRYPTR ,O>ENTRYLENGTHM>(PFENTRYPTR2FRE }ADINSECTOR<HCHECKENTRYFX;PX;ZEXITBOOTDIRdX;n$X;If