@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u[dEIn$X********************************x$X* E d i t M a g i c *$X* Version 2.0 *$X* T} By Bill Bodenstein *$X* For XL/XE systems only *$X* 1/23/87 *$X********************U}************X;X;This program will provideX;many simple utilities to"X;make editing BASIC and MAC/65 X;listings eV}asier and faster.X;X;X*** EQUATES ***X;INITCODEMAINCODE`"DISPLIST,MACLIST6 MISCW}@XITVBCODEJX;TINITADR^RUNADRhX;rLMARGINR|RMARGINS COLCRSU LOGCOLc OLDADR^X} OLDCHR] SAVMSCX DINDEXWX; BRKKEY CHKBCODE HELPFGKRPDELKEYREPY}CONSOLESCFLGDSPFLG&SSFLAG0X;: CIXD INBUFFNTEXTBUFFX ICSTAZ#b ICBALZ$lZ} ICIDNO.v ICPTLF ICCOMB ICBALD ICBLLHPAUSEFLGO CIOVX;SDMCTL/DMACTL[}SDLSTL0 NMIEN PORTBCOLOR1COLOR4COLPF1 X; TRAMSZ  DOSVEC *COLDSTD\}4X;>EHANDTABHKHANDTAB RX;\ PUTREC f SPACE p ESCz CLEAR} DELETE~ RETURN BREAK]} NOKEYX;X; INITCODEX;X*** INITIALIZATION ***X; --------------$X; Copy o.s. from ROM to RAM an^}d!X;disable ROM to allow rest of#X;Edit Magic code to load there.X;INITX;$Q;;Is o.s. from.R>;;XL/XE ma_}chine?8FDISABLED?;;Br if yepB GOEXITL!EXIT;;Else do nothingVX;` DISABLED?jQPORTB;;Is os ROM/RAM?t>;;Save ROM`} status~M>;;Make disabledRPORTB;;Is it already?FGOEXIT;;Br if yupP;;Save new statusX;Q>4;;Start a}copyingP;;o.s. fromQ>5;;$c000 to $ffffPX;QSDMCTL;;Save DMA status5Q>;;Disable NMIPNMIEN;;sb}o no VBI while PSDMCTL;;moving o.s.PDMACTL;;Turn screen off =;;No IRQ(X;2%>< COPYO.S.F&PORTB;;Enable ROMPc}Q@7;;Get a byteZ"PORTB;;Enable RAMdP@7;;Put o.s. theren3xHCOPYO.S.;;And move moreX;#;;Next pageFNd}MION;;Done if $0000Q;;Skip overR>;;hardware chips HCOPYO.S.Q>;;Set next pageP;;to $D800!COPYO.S.;;e}and loop backX; NMION.;;Re-enable IRQQ>@;;and non-mskablePNMIEN;;interrupts7;;And turn scrPSDMCTL;;baf}ck on"X;,Q;;Make ROM6PPORTB;;disabled@X;J"X;Let user know what's going onTX;with a short message.^X;h$>;;g}Use scr editorrQ>4INITMSG|PICBAL9;;Point to ourQ>5INITMSG;;messagePICBAL9PICBLL9;;Whatever lenQ>Ph}UTREC;;Print record PICCOM9 CIO;;CIO prints itX;"X;Save editor handler's vectors"X;for GET and PUT operations si}o$X;Edit Magic can call them later.X;QEGET;;Get vector PSAVEGETV QEGETPSAVEGETVQEPUT;;Put vectorj}& PSAVEPUTV0 QEPUT:PSAVEPUTVDX;NEXIT:;;Let DOS loadXX;b+INITMSG AInstalling ...A=lX;v k}INITADR INITX;X; MAINCODEX;X*** MAIN CODE ***X; --------- X; Edit Magic will be storedX;overl} unused o.s. code. X;(Intrn'l charset,warmstart,!X; and self-test screen data.)!X;There are four entry points:X;1) Fm}rom GET operationsX;2) Prior to every keypress X;3) From PUT operationsX;4) At the end of every VBI X;*X;GET editn}or entry:4X;----------------->!X; Handle features before andH!X;after getting a line of textRX;from the screen editor.o}\X;f GETENTRYpX;zQ> > ;;">" in listboxPLISTBOX;;says activeX;$>4MSG1MSGS  PUTMSG;;Display titlep}X;QSAVECNT;;Get # times,;;file SAVEdO>;;Conv to intrnal*SAVEDFLG;;If recentlyFPUTCNT;; saved,L>;; iq}nverse # PUTCNTPBAKUPCNT;;Put # on scr X; QEMFLG;;Is Edit Magic FGOGET;;on?$ X;. X;8 Q>;;Clear lnno cntrBr} PSTCKCNT;;for later useL X;V Q> ;;Shorter key` PKRPDEL;;repeat delayj Q>;;and delayt PKEYREP;;between repeats~ s}X; QXITVBCODE;;Has our jmp R>L;;been set yet? FGOGET;;Br if yes Q>;;Prevent VBI PNMIEN Q>L;;JMP op-code t}PXITVBCODE;;Put jmp to Q>4XITVBI;; our vbi exit PXITVBCODE;;routine Q>5XITVBI;; in place of PXITVBCODE;;syu}stem's Q>@;;Allow VBI again PNMIEN X; X; GOGET( $ICIDNO;;Get iocb index2  EGETCHAR;;Let os do work< 'ICSTAv}Z;;Save statusF )>BREAK;;Exit if P EGOCIO;;pressedZ R>RETURN;;Or not d FPUTEOLn GOCIO:;;Let CIO finishx w}X; PUTEOL $>;;Put EOL at P@ICBALZ6;;end of line X; QEMFLG;;Skip features FRETCIO2;;if E.M. off X; X; "x}X;A line of text is in the text !X;buffer. Save line and see if #X;it has a LOAD or SAVE command, X;or a line number. Xy}; QTEXTBUFF;;If blank line R>RETURN FRETCIO2;; do nothing" X;, X;6 $>;;Save inputted@ SAVCHR;line of textJ z}2T GRETCIO2;;Emergency exit^ QTEXTBUFF9;;Move lineh PSAVTBUFF9;;to storager R>RETURN;; until eol| HSAVCHR X; {}Q>;;For macro: a PSAVTBUFF9;;zero ends X; $> SKIPLEADING 2 GRETCIO2 QTEXTBUFF9;;Skip over R>RETURN;;|}until eol FRETCIO2 R>SPACE;;leading blanks FSKIPLEADING R> 0;;and leading 0's FSKIPLEADING X;& &CIX;;Save i}}ndex0 X;: LNNO?D QTEXTBUFF9N R> 1;;Is line begunX DLOAD?;;by linenum?b R> 9l ELOAD?v X; Q>;;Remind user ~}PSAVEDFLG;;program has !X; been modified QLNNOCNT;;Save linenum in P;;stack if room R>;;Only sav 2}4 #'s ERETCIO2 X; Q>4LNNOSTACK;;Is num in $>5LNNOSTACK;;stack? LOOKSTACK ";;Look thru stack GPUTINSTACK;};Br when done  CMPTEXT;;Compare nums GRETCIO2;;Exit if # there X; ,;;Each lnno in* O>;;stack is 5 chrs4 DLOOKS}TACK;;Loop back> 2H HLOOKSTACKR X;\ PUTINSTACKf P;;Save addr ofp &;;open spotz $CIX;;Index 1st char %> M}OVCHR1 3 )>;;Limit of 5 chrs FINCSTCK;;Br when done QTEXTBUFF9 P@7 2 R>SPACE;;Move 'til blank HMOVCHR}1 INCSTCK #LNNOCNT;;Inc stack size X; RETCIO2!RETCIO;;Exit to CIOX;$X;. LOAD?8Q>4LOAD;;Compare first} 5B$>5LOAD;;chrs to "LOAD "L CMPTEXTV)>;;Match if "LOAD"`DSAVE?;;Br if not matchjX;t FINDCOLON~2;;Find fil}enameQTEXTBUFF9GRETCIO;;Exit if R> :;;Colon precedesHFINDCOLONX;Q>;;Reset save cntr PSAVECNT}PSAVEDFLG;;File not savedPLNNOCNT;;and stack cntr%> CLRFIRSTPFILEBOX8;;Clear filebox3 )> ;;12 chars i}n box HCLRFIRSTX;( MOVFN2%>;;Transfer fname<MOVCHR2;to fileboxF2PQTEXTBUFF9ZGRETCIO;;Exit if d}R> ";;or quotesn FRETCIOx CONVCHAR;;Make internalPFILEBOX8;;And poke it3)> ;;Max 12 chars HMOVCHR2 FRET}CIOX;X; SAVE?Q>4SAVE;;See if "SAVE"$>5SAVE;;in text line CMPTEXT)>;;Blnk not neededDRETCIO;;Br }if nopeX;Q>;;Program saved PSAVEDFLG"X;,#SAVECNT;;Inc # of saves6QSAVECNT;;Make sure<9@R> J DRETCIOT}Q>;;Else reset to 0^ PSAVECNThX;rX;| RETCIOQ>SPACE ;;Remove ">"PLISTBOX;; prompt$>&CIX;;Reset }char indxQ>RETURN;;Last char=%ICSTAZ;;Set status:;;Return to CIOX;X;X;X;Get key from editor:X;}--------------------X; Before editor handles#X;keypress or , check for$X;Edit Magic keys, macro keys andX;c}onsole buttons.&X;0 EGETKEY:Q>;;Clear pauserDPROWCNTR;;for scr outputNPHELPFG;;& pressXX;bWAITFORKE}YlQ>;;So ctrl-1 doesvPSSFLAG;;nothingX;QCH;;Key pressed? R>NOKEYHCMPKEY1;;Br if yepX;$BRKKEY;; pressed?FRETEGET;;Exit if yepX;QHELPFG;;[HELP] pressed?R>FHELPUSER;;Br if yepX;QCONSOL;;Button }pressed?M> R>HCMPBUTTN;;Br if yep Q>;;Need to know if*PCONSOLREL;;console has4$X; been }released>!WAITFORKEY;;Loop if nopeHX;RX;\ RETEGETf!@EGETKV:;;Return to o.s.pX;z EXITEGET7;;Abort editor}7;;routine in o.s.Q>RETURN;;Print to EPUTCHAR;;move cursor%>BREAK;;And tell CIO'BRKKEY;; pressed}:X;X; CMPBUTTN%>;;Look thru E.M.CMPCONSOL;consol buttons3;;3-byte entries33$EMCONSOL8;;Ex}it if end$(>;; of entries.FWAITFORKEY8REMCONSOL8;;Match?BHCMPCONSOL;;Loop if nopeLX;VQCONSOLREL;;Console }been`HWAITFORKEY;;released?j#CONSOLREL;;Set flagtX;~ GOCONSOLQEMCONSOL8P;;If found,QEMCONSOL8}P;;jump to addr!@:X;X; HELPUSERQEMFLG;;Ignore FEGETKEY;;if E.M. offQ>4HELPMSG;;Print help}$>5HELPMSG;;info PRINTMSG !EXITEGET;;Abort inputX;X;( CMPKEY12%EMFLG;;If E.M. off<FCMPKEY2;;br over ma}crosF%>;;Look for matchPCMPMAC;in macro keysZ3;;3-byte entriesd3n3xGCMPKEY2;;Emergency exit $MACKEYS8}(>;;End of keys?FCMPKEY2;;Br if yupRMACKEYS8;;Match?HCMPMAC;;Loop if nopeX;$>NOKEY;;Clear keypress&}CHQMACKEYS8;;Get addr of$MACKEYS8;;macro msg PRINTMSG;;Print it!WAITFORKEY;;And go backX; CMPKEY}2%>;;Look thru E.M.CMPEM;special keys"3;;3-byte entries,363@$EMKEYS8;;Last entry?J(>TFRETEGET;;E}xit if yep^REMKEYS8;;Match?hHCMPEM;;Loop if noperX;|$>NOKEY;;Clear keypress&CHQEMKEYS8;;Jump to addr}P;; in entryQEMKEYS8Pո!@:X;X;X;If [START] or SHIFT-ESCX;pressed, enter LIST BOX.X;X*** }ENTER LIST BOX *** ENTERLBOXQEMFLG;;Exit if EditHCLRLBOX;;Magic off JBACK!WAITFORKEY;;Loop back&X;0 CLRLBO}X:$> ;;Blank out boxDQ>;;ie. clr scr memN CLRBYTEXPLISTBOX9b0;;Box = 12 charslICLRBYTE;;plus ">" promptv}X;MAKECURSOR$>;;Turn curs offQOLDCHR;;by restoringP@OLDADR6;;non-inv charQ>;;And put in boxPLISTBO}X;;pseudo-cursorX;STARTINPUTQ>;;InitializePCHARINDX;;index of charX; X;Receive input from keyboard}X;and display in LIST BOX.X;  GETINPUT KGETCHAR;;Get a keypress )>;;Check for error*GEXITLBOX;;Exit if 4}PSAVCHAR;;Save keypress>X;H NUMBER?RR> ,;;Allow comma\ FCHCKINDXfR> 0;;and 0-9 onlyp DDELETE?zR> 9;;in li}stbox EDELETE?X; CHCKINDX$CHARINDX;;Ignore key if(> ;; box is fullDPUTINBOX;;Br if not full!GETINPUT};;Loop if it isX; PUTINBOX CONVCHAR;;Put num/commaPLISTBOX9;;in box#CHARINDX;;Point nxt charHPUTCURS}OR;;and branchX; DELETE?R>DELETE;;Allow $HPUTCURSOR;;Br if it isnt.X;8 CLRCURSORB$CHARINDX;;Backs}pace ifLFPUTCURSOR;;chars in boxVQ>;;Erase last char`PLISTBOX9j"CHARINDX;;One less chartX;~ PUTCURSOR$}CHARINDX;;Put curs blockQ>;;in listboxPLISTBOX9X; RETURN?QSAVCHAR;;Done if  R>RETURNHESC?;};Br if notQ>;;Clr p-cursorPLISTBOX9!LISTLINES;;List contentsX;ESC? R>ESC;;Abort if FEXITLB}OX;;Br if yep!GETINPUT;;Else loop back(X;2"X;Leave input from LIST BOX and< X;move back to normal screen.FX;P EXI}TLBOXZ$CHARINDX;;RemovedQ>;;pseudo-cursornPLISTBOX9x!EXITEGET;;Abort inputX;X;X;If [SELECT] or CTRL-}ESC#X;pressed, list contents of LIST X;BOX by returning LIST+lnnosX;to CIO as inputted line.X;X*** LIST LINES **}*X; LISTLINESQEMFLG;;Exit if EM off HMOVLIST!WAITFORKEY;;Loop backX; MOVLIST$>;;Move "LIST ""M}OVCHR3;into text buffer, QLIST96PTEXTBUFF9@0J HMOVCHR3TX;^ MOVCHR4h(CHARINDX;;Put chars inrFMOVHILN}NO?;; listbox|QLISTBOX9;;after,;; "LIST "O> ;;Conv to asciiPTEXTBUFF92 HMOVCHR4X;MOVHILNN}O?R> ,;;If last chr=","HSETICB;;put "32767"$X; (sorry MAC/65 users)%> MOV32767QHILNNO8;;"32767}" inPTEXTBUFF9;;ascii code23&)>0 HMOV32767:X;D SETICBNA;;Tell editorX,;;where input isb O>l}PICBALZ;;Zero-page IOCBvQ>5TEXTBUFFPICBALZX; SETUPSCRQ>;;Clear esc flagPESCFLG;;in case pressed}PSSFLAG;;and ctrl-1 flgQ>CLEAR;;so screen will EPUTCHAR;;clear and listX;QLNNOCNT;;Save size ofPSTCKCNT;;}stack andX;Q>;;Reset stack ofPLNNOCNT;;lnnos edited 7;;Throw out7;;return addrs 7*74%>;;Set status t}o>'ICSTAZ;;no errorH!RETCIO;;Go right to CIORX;\X;f"X;If [OPTION] or SHIFT-CTRL-ESCpX;pressed, toggle Edit Magic}z X;on/off. When turned on, VBI X;routine will re-display topX;status line.X;X*** TOGGLE EDIT MAGIC *** TOGEDT}MAGQ>;;Toggle EditNEMFLG;;Magic flagPEMFLG;;on/offFEMOFF;;Br if now offX;EMON!WAITFORKEY;;Get s'm}oreX; EMOFFQSAVSDLSTL;;Restore oldPSDLSTL;; display list$QSAVSDLSTL.PSDLSTL8X;BQSAVCOLR1;;Res}tore charLPCOLOR1;;brightnessVQ>;;and black`PCOLOR4;;border colorjX;t!WAITFORKEY;;Go back~X;X;X;If key (SHIFT-<)#X;pressed and cursor not on leftX;margin, ignore it.X;X*** HANDLE SHIFT-CLEAR *** SHIFTCLR}QEMFLG;;Exit if EM off FCLRITX;QLOGCOL;;Start ofRLMARGIN;;logical line?HIGNOREIT;;Br if nope  CLRITQ}>6@;;ReplacePCH;;keypress(!RETEGET;;and exit2 IGNOREIT<!WAITFORKEY;;Ignore FX;PX;ZX;dX;Put charac}ter to editor:nX;------------------------x"X; Use faster print routine to!X;speed up screen output. AlsoX;allow paus}e, and check for X;line number preceding text.X;If lnno in stack, mark it.X; PUTENTRYPSAVCHAR;;Save charX;}%EMFLG;;Exit if EditFGO.OS;;Magic offX;%DINDEX;;If not txt mode FBREAK? GO.OS!EPUTCHAR;;let o.s. prin}tX;" BREAK?,%BRKKEY;;Abort if 6 HCTRL1?@!ABORTOUTPUTJX;T CTRL1?^%SSFLAG;;Loop if CTRL-1hHBREAK?;;}pressedrX;|!X;If start of text line, check$X;for linenumber. If line has one#X;and matches one in stack, markX;the }line.X;$LMARGIN;;Room to mark?FPAUSEON?;;Br if nope(LOGCOL;;Start of line?DPAUSEON?;;Br if nopeX;$S}TCKCNT;;Have any lnnosFPAUSEON?;;been edited?X;R> 0;;Is char part DPAUSEON?;;of a lnno? R> 9 EPAUSEON?;;}Br if nope& X;0 %>;;Skip over: SKIP0;leading zeroesD 3N Q@INBUFF7;;Points to #X R> 0;;Zero char?b FSKIP0;;Loop i}f yupl X;v Q>4LNNOSTACK;;We'll look P;; thru stack Q>5LNNOSTACK;;to see if P;; same lnno #X; } has been edited C;;Indxes 1st char , OINBUFF P;;Point to lnno QINBUFF O> P X; QSTCKCNT;;Save} counter!P !X;! LOOKLNNO !%>*!";;Done when all4!GPAUSEON?;;lnnos checked>! LOOKCHRH!Q@7;;Char from lineR! }>;;Save it\!M>;;In case inversef!R@7;;Char in stackp! HNEXTLNNOz!R>SPACE;;Done if blank!FMATCHLNNO!3;;Next char}!)>;;Max 5 chars!FMATCHLNNO;;Assume match!A;;Last # char?!ILOOKCHR;;Loop if not yet!X;!Q@7;;Is next char!}R>SPACE;;a blank?!HNEXTLNNO;;Br if no!X;!MATCHLNNO;Match found!!"OLDADR;;Mark line by"%>;;putting arrow"}Q> @;;left of cursor" P@OLDADR7$"#OLDADR." !PAUSEON?8"X;B" NEXTLNNOL",V"Q>;;Look at next`"O;;lnno in sta}ckj"Pt"Q~"O>"P" !LOOKLNNO"X;"X;" PAUSEON?" QSAVCHAR" %PAUSEFLG" FFASTPRNT"X;"%KBCODE;;If last} key='C'")>" HCOUNTLN#%>NOKEY;;clear keypress #'CH#!FASTPRNT;;Don't pause#X;(# CLEAR?2#R>CLEAR;;If c}har<#HCOUNTLN;;reset row cntrF#%>;;only if screenP#)DSPFLG;;will clearZ#HCOUNTLN;;Br if notd# )ESCFLGn#HCOUNTLN;;}Br if not againx#'ROWCNTR;;Clear # lines#!GO.OS;;and print #X;# COUNTLN#R>RETURN;;Keep count of#FINCLN;;l}ines printed# $COLCRS# (RMARGIN# DFASTPRNT#INCLN#ROWCNTR#X;##X;Every 22nd line printed, pause#"X;output and wai}t for keypress.#X;$ PAUSESCR?$ EPUTCHAR;;Print char$$ROWCNTR;;Time to pause?"$(>,$DLEAVE;;Br if no6$X;@$%>};;Reset # rowsJ$'ROWCNTR;;printedT$'CONSOL;;Click speaker^$X;h$ PUTPROMPTr$$>4MSG2MSGS |$ PUTMSG;;Put "press key}"$$X; msg on top line$Q>NOKEY;;Clear keypress$PCH$WAITFORKEY2$RCH;;Wait for user$HCONTOUTPUT;;}to hit a key$$BRKKEY;; or $HWAITFORKEY2$X;$$>4MSG1MSGS $ PUTMSG;;Clr prompt$X;$ABORTOUTPUT%%>}BREAK;; pressed% 'BRKKEY%:&%X;0%CONTOUTPUT:%PCH;;Clear keypressD%%>;;Clear ctrl-1N%'SSFLAG;;pauseX% CLR}PROMPTb%$>4MSG1MSGS l% PUTMSG;;Restore titlev%X;%LEAVE:;;Go back to CIO%X;%X;Put character directly in%#X;scr}een memory unless scrolling%X;or control character.%X;% FASTPRNT%$COLCRS;;Will it scroll?% (RMARGIN%EPRINTCHR;;}Br if maybe%>;;Save char%M>%R>};;Is char a&EPRINTIT;;non-control &R> ;;char?& EPUTIT &R>*& DPUTIT4&X;>& }PRINTITH&A;;Regain charR& PRINTCHR\&!EPUTCHAR;;Let o.s. printf&X;p& PUTITz&A;;Regain char& CONVCHAR;;Make internal}&%>;;Put char in&P@OLDADR7;;curs pos in& X; screen mem& MOVCURS&#COLCRS;;Move cursor&#LOGCOL;};pointers to&#OLDADR;;next column& HPUTCURS&#OLDADR&X;& PUTCURS&Q@OLDADR7;;Save char'POLDCHR;;under curs} and'N>;;inverse it' P@OLDADR7$'X;.'EXITPUTCHR:;;Return to CIO8'X;B'X;L'X;V'X;Handle VBI:`'X;-----------j'X;Be}fore exiting vert. blankt' X;int, make sure Edit Magic's~'X;settings are still intact.'X;' XITVBI'QEMFLG;:Edit Magic }on?'FEXITVBI;;Br if nope'X;'QSDLSTL;;If not using'R>5DLIST;;our disp list,' FSETCOLR'PSAVSDLSTL;;save a}ddr'QSDLSTL;; of theirs'PSAVSDLSTL'QSAVMSC;;Let dl know(PSCRMEM;;where scr is (QSAVMSC(PSCRMEM(Q>}4DLIST;;and use ours(( PSDLSTL2( Q>5DLIST<(PSDLSTLF(X;P(Q>;;Reset pause forZ(PPAUSEFLG;;listingd(X;n(QCOLOR1};;If new charx(R> ;;brightness( FSETCOLR(PSAVCOLR1;;save it(X;( SETCOLR(Q> ;;Brighten chars( PCOLOR1( PCOLP}F1(Q>;;Lighten border( PCOLOR4(X;(QEPUT;;Make sure our(PICPTL;;put char vect(QEPUT;;is used) PICPTL})X;)EXITVBI;Restore regs")7;;(Tracy DuMont,)?;;said she'd pay6)7;;me a dollar if@)>;;I put her nameJ) 7;;here.)T)9;};Leave vbi^)X;h)X;r)X;|)X*** SUBROUTINES ***)X; -----------)X;)!X;Jump to o.s. GET from editor)X;) EGETCHAR)}QSAVEGETV)5) QSAVEGETV)5):)X;)X;)"X;Compare start of entered text*X;with up to 5 characters.*X;* CMPTE}XT&*P;;Passed addr of0*&;;text to compare:*$CIX;;Indx of 1st chrD*%>N* CMPCHRX*3;;Check up to 5b*)>;;characte}rsl*FMATCH;;Br if donev*QTEXTBUFF9;;Char from ln*M>;;In case inverse*R>`;;Lowercase?*DSAMECHR?;;Br if no*;;;M}ake uppercase*S> * SAMECHR?*R@7;;Char from E.M.* HNOMATCH*2*R>SPACE;;Blank ends* HCMPCHR*X;* MATCH+%>};;Set N-flg +:+X; + NOMATCH*+Q;;Restore arg adr4+$>+)>;;Clear N-flgH+:R+X;\+X;f+X;Convert char from ASCII }top+X;internal (screen).z+X;+ CONVCHAR+&SAVREG;;Save xreg+5;;Acc=ascii char+M>;;Make non-inv+>;;Save in xreg+}7;;Restore char+(>`;;Lowercase?+ENOTRNS;;Br if yep+(> ;;Graphics char?+ETRNS2;;Br if nope+ TRNS1+,;;Conv grp}hic chr+O>@, DNOTRNS, TRNS2,;;;Conv uppercs$,S> ., NOTRNS8,$SAVREG;;Restore xregB,:L,X;V,X;`,X;Print a mess}age.j,"X;Passed: Acc&xreg contain addrt,X;of message. Print char by~,!X;char until zero value found.,X;, PRINTMSG,P;};Save lo addr,&;;Save hi addr,%>, PRINTCHAR,'SAVREG;;Save index,Q@7;;Get msg char,FEXITPRNT;;Exit if 0, } EPUTCHAR,)>;; pressed?,GEXITPRNT;;Exit if -%SAVREG;;Restore index -3-HPRINTCHAR;;Loop back-#(-}HPRINTCHAR2-X;<- EXITPRNTF-:P-X;Z-X;d-X;Print a single character.n-X;x- EPUTCHAR-?;;Acc=char-QSAVEPUTV;;Push} vector-5;; to stack- QSAVEPUTV-5-C;;Restore char-:;;Jump to o.s.-X;-X;- X;Put a message in MSG BOX in-X;E}dit Magic screen line.-X;- PUTMSG.%>. PUTBYTE.QMSGS9;;Xreg indxs msg". PMSGBOX8,.26.3@.)> ;;Msgbox=11 chars}J. HPUTBYTET.:^.X;h.X;r.X;Get a keypress.|.X;. KGETCHAR.QKHANDTAB;;Jump to o.s..5.QKHANDTAB.5.:.X};.X;.  .! AEDIT MAGIC CODE TOO LARGE!A..X;.X;/X*** SCREEN DATA ***/X;/ DISPLIST&/X;0/ DLIST:/ p=}P=BD/ EMLINEN/ =BX/SCRMEM b/ ======l/$ ==========v/ =====A/ }DLIST/X;/ EMLINE/LISTBOX A A/MSGBOX AA/FILEBOX A A/BAKUPCNT A0A/X};/X;/MSGS/MSG1 AA/MSG2 AA/X;0X; 0X*** MACROS ***0X; 0 MACLIST*0X;40X;Table for }macro keys.>0 X;Entries consist of 3 bytes:H0X;1st is internal value ofR0X;keypress, 2nd & 3rd are\0X;address of text to p}rint.f0X;Text is printed until zerop0 X;found.z0X;0 MACKEYS0 4@;;s-c-BS0 SHFTCTRLDEL0 7@;;s-c-INSERT0} SHFTCTRLINS0 (@;;s-c-R0 SAVTBUFF0 0X;0X;0X*** MISC STORAGE ***0X;0 MISC1X;1 EMFLG 1SAVS}DLSTL $1SAVEGETV .1SAVEPUTV 81SAVCOLR1  B1SAVECNT L1SAVEDFLG V1STCKCNT `1LNNOCNT j1ROWCN}TR t1SAVCHAR ~1 SAVREG 1CHARINDX 1CONSOLREL 1X;1LOAD ALOAD A1SAVE ASAVE A1LIST ALIST A1HI}LNNO A32767A1X;1EGETKV 1X;1SAVTBUFF 1 2X; 2 LNNOSTACK2   2X;(2X;22X;Table for function }keys.<2X;EMCONSOL/EMKEYS has 3-byteF2 X;entries: console button/keyP2X;plus address to jump to ifZ2 X;pressed.d2X;n2 EMCO }NSOLx2 ;; [start]2 ENTERLBOX2 ;; [select]2 LISTLINES2 ;; [option]2 TOGEDTMAG2 2X;2X;2 }EMKEYS2 @;; shift-ESC2 ENTERLBOX2 ;; ctrl-ESC2 LISTLINES3 @;;s-c-ESC3 TOGEDTMAG3 6@; }; shift-<"3 SHIFTCLR,3 63X;@3X;J3 HELPMSGT3$ A} 㠠ӺA=^3' A (s=shift,c=control)A== }h3- A[START] or s-ESC = Edit LIST BOXA=r3/ A[SELECT] or c-ESC = List #'s in BOXA=|30 A[OPTION] or s-c-ESC = Tog }gle EM on/offA=3, As-c-R = Recalls last line enteredA=3. As-c-BS = Deletes succeeding charsA=3' As-c-INSERT = } Inserts linesA=30 As-CLEAR = Cursor must be on lft marginA=31 AC = Continuous output (when listing)A==3( A } [HELP] = Prints thisA==3 3X;3X;3>SHFTCTRLDEL AA=3X;3 SHFTC }TRLINS AA=3X;4X;4 DISPLIST4$ AMISC. STORAGE AREA TOO LARGE!A&404X;:4]D4 EGETKEYN4X;X4 EHA }NDTABb4X;l4EOPEN v4ECLOSE 4EGET GETENTRY4EPUT PUTENTRY4ESTAT 4ESPEC 4EINIT 4 }X;4X;4!X;The code has now been stored4!X;in o.s. RAM. If loaded as an4"X;AUTORUN.SYS file,control will4"X;eventually r }evert back to the4!X;coldstart routine--which has4 X;been overwritten! So, check5X;for this situation, and do 5!X;coldsta }rt work so we needn't5X;return there. 5X;*5INITCODE;;Here again45X;>5RUNH5QCOLDST;;Powerup?R5HFINISH.COLD;;Br if } yes\5:;;Return to DOSf5X;p5FINISH.COLDz5$>;;Reset stack5 B;;pointer5Q>;;Successful5P ;;disk boot5 95Q> };;So no reboot5 PCOLDST5QTRAMSZ;;Lft cart?5FGO.DOS;;Br if no5Q;;Go to cart?5M>5FGO.DOS;;Br if no5!@ }:;;Jump to cart5 GO.DOS6!@DOSVEC:;;Jump to DOS6X;6X;$6 RUNADR.6 RUN to cart?5M>5FGO.DOS;;Br if no5!@PLӪ)ԩ֩׭/Hԍ/xӱӑ ؅L1X@h/ԍӢDEI B V }䍓­䍔­䍕­䍖`Installing ...%D` 9D )ll · LOA }D SAVE LIST 32767rs]\s̜]v} 㠠Ӻ (s=shift,c=control)[START] or s-ESC = E }dit LIST BOX[SELECT] or c-ESC = List #'s in BOX[OPTION] or s-c-ESC = Toggle EM on/offs-c-R = Recalls last line entered }s-c-BS = Deletes succeeding charss-c-INSERT = Inserts liness-CLEAR = Cursor must be on lft marginC = Continuous outp }ut (when listing) [HELP] = Prints thisŖpPBB }A􀀭􀀭 ?h`ʾϩŢ ϭi, ŭ }/© LԩL©Ս©΍©@Ԧ. ,τ#ɛ`$yɛr0mɛ¢0YɛR 0 }1D:@­…/70 50"iԆզ  L˩ 58轀0Q:  轀00 }", aϙ  5­ ©Ţ򩛤#``F)Llhh Ϡ` }Ⱦٯг¹ÅԹÅlƢ }Lˬ$0ƾ }LˠȾٹÅԹÅ }lLˢ ]^ũ 0S,0: L aϝ~ Ο®©ŭɛLL }̮©L˭Lˢ i ,i$%} ϭ©hhhh#L˩ML }01L˭cRvLLˍ¬WLϤLάRqcmh0d:`ȱ07Åei }…08)   _ߑ^_L*eiLͭ¬Oo L} ̢LɛUS@ } Ϯ2ŒТ ϩ Ϡ` `US)} Lϊ aϠ^Uc^_^]I^`L1, }­0¥XťYũ0ō1O © ЩFGhhh@HH`Ԇզ)`8  栀`Ԧ }`H)h` i@8 `Ԇՠ± 0 `HH`ř `%H$H`_ʙ]^ 栀`Ԧ o100 DIM MEMCLR$(36):MEMCLR$="hhhhhˈ`"110 PB=PEEK(740)-8120 POKE 106,PB-4130 GRAPHICS 0140 PM"}BASE=PB*256150 X=USR(ADR(MEMCLR$),PMBASE,2048)160 FOR BYTE=126 TO 130170 READ DAT180 POKE PMBASE+1024+BYTE,DAT190 NEXT B#}YTE1000 DATA 153,189,255,189,153,PMBASE,2048)160 FOR BYTE=126 TO 130170 READ DAT180 POKE PMBASE+1024+BYTE,DAT190 NEXT B"230 FOR VPOS=125 TO 14 STEP -1240 FOR BYTE=0 TO 4250 POKE PMBASE+1024+VPOS+BYTE,PEEK(PMBASE+1025+VPOS+BYTE)260 NEXT BYTE2%}70 POKE PMBASE+1030+VPOS,0280 NEXT VPOSTE=0 TO 4250 POKE PMBASE+1024+VPOS+BYTE,PEEK(PMBASE+1025+VPOS+BYTE)260 NEXT BYTE2)100 GRAPHICS 0:? "Make sure you have saved a copy of":? "this program before RUNning it":FOR X=1 TO 1050:NEXT X110 ? :? 120'} DIM LN(2):FOR X=1 TO 2:READ DAT:LN(X)=DAT:NEXT X130 DATA 41,657140 FOR X=1 TO 2:TOT=0:N=0:GOSUB 1000150 FOR N=1 TO LN(X):(}READ DAT:TOT=TOT+DAT160 IF N/25<>INT(N/25) THEN 190170 T=TOT:TOT=0:READ DAT:IF DAT<>T THEN ? "...ERROR":STOP 180 GOSUB 100)}0190 NEXT N:READ DAT:IF DAT<>TOT THEN ? "...ERROR":STOP 200 NEXT X210 RESTORE 20000220 FOR X=1 TO 2:L=29500+500*X:GOSUB 1*}010230 FOR N=1 TO LN(X):READ DAT:? CHR$(27);CHR$(DAT);240 IF N/25=INT(N/25) THEN READ DAT250 IF N/90=INT(N/90) THEN GOSUB +}1020:L=L+10:GOSUB 1010260 NEXT N:READ DAT:GOSUB 1020270 NEXT X280 END 1000 ? :? "CHECKING LINE ";19000+1000*X+10*INT(N/25,});:RETURN 1010 GRAPHICS 0:POSITION 2,4:? L;" MLANG$=";CHR$(34);:RETURN 1020 ? CHR$(34);":RETURN":? "CONT":POSITION 0,0:POKE-} 842,13:STOP 1030 POKE 842,12:RETURN 20000 DATA 104,104,133,207,104,133,206,104,133,209,104,133,208,104,170,160,255,138,208.},2,104,168,177,206,145,371920010 DATA 208,136,192,255,208,247,230,207,230,209,202,224,255,208,233,96,334021000 DATA 104,104/},104,141,188,6,104,104,141,228,6,141,231,6,141,234,6,141,237,6,238,237,6,141,240,323521010 DATA 6,238,240,6,169,127,141,199,0}6,162,9,160,4,173,47,2,41,16,240,9,169,255,141,199,6,276521020 DATA 162,19,160,8,140,200,6,160,9,189,206,6,153,189,6,202,1361},16,246,169,7,174,240,6,160,296921030 DATA 108,32,92,228,96,32,238,6,189,152,6,24,109,200,6,168,205,199,6,144,3,172,199,6,182}9,280921040 DATA 152,6,56,237,200,6,141,201,6,136,177,204,200,145,204,136,240,5,204,201,6,176,242,169,0,345021050 DATA 145,3}204,96,32,238,6,189,152,6,56,237,200,6,168,176,2,160,0,189,152,6,24,109,200,6,275921060 DATA 141,201,6,200,177,204,136,145,24}04,200,204,199,6,240,7,204,201,6,144,239,240,237,169,0,145,385521070 DATA 204,96,138,72,162,4,32,238,6,104,170,189,160,6,56,5}237,200,6,168,176,2,160,0,189,160,293521080 DATA 6,24,109,200,6,141,201,6,136,177,204,61,202,6,145,204,200,200,189,202,6,73,6}255,49,204,320621090 DATA 136,136,17,204,145,204,200,200,204,199,6,176,7,204,201,6,144,221,240,219,189,202,6,49,204,37192117}00 DATA 145,204,136,189,202,6,49,204,145,204,96,138,72,162,4,32,238,6,104,170,189,160,6,24,109,299421110 DATA 200,6,168,205,8}199,6,144,3,172,199,6,189,160,6,56,237,200,6,141,201,6,200,177,204,61,315221120 DATA 202,6,145,204,136,136,189,202,6,73,255,9}49,204,200,200,17,204,145,204,136,136,240,5,204,201,369921130 DATA 6,176,224,189,202,6,49,204,145,204,200,189,202,6,49,204,1:}45,204,96,189,189,6,133,204,24,344521140 DATA 216,173,188,6,125,194,6,133,205,169,0,133,77,96,162,0,188,128,6,48,106,185,120;},2,41,270721150 DATA 8,208,23,189,148,6,221,136,6,240,43,169,0,133,77,254,148,6,189,148,6,157,0,208,208,293121160 DATA 28,1<}85,120,2,41,4,208,21,169,0,133,77,189,148,6,221,132,6,240,9,222,148,6,189,148,265221170 DATA 6,157,0,208,188,128,6,185,120,2=},41,2,208,17,189,152,6,221,144,6,240,30,254,152,6,266821180 DATA 32,229,6,138,16,21,185,120,2,41,1,208,14,189,152,6,221,140,>}6,240,6,222,152,6,32,238521190 DATA 226,6,232,224,4,208,140,162,0,189,164,6,240,83,189,168,6,240,50,16,23,222,156,6,222,3182?}21200 DATA 156,6,189,156,6,157,4,208,201,47,176,32,169,0,157,164,6,240,53,254,156,6,254,156,6,295921210 DATA 189,156,6,157,@}4,208,201,208,144,9,169,0,157,164,6,240,106,208,196,189,172,6,240,57,16,320821220 DATA 23,222,160,6,222,160,6,32,232,6,189,1A}60,6,201,16,176,39,169,0,157,164,6,240,74,254,292021230 DATA 160,6,254,160,6,32,235,6,189,160,6,24,216,105,16,205,199,6,176,B}4,41,240,208,7,169,283021240 DATA 0,157,164,6,240,42,189,176,6,61,0,208,240,13,169,255,157,176,6,157,184,6,169,0,157,293821C}250 DATA 164,6,189,180,6,61,8,208,240,13,169,255,157,180,6,157,184,6,169,0,157,164,6,232,224,314121260 DATA 4,208,145,76,98,D}228,0,75964,6,189,180,6,61,8,208,240,13,169,255,157,180,6,157,184,6,169,0,157,164,6,232,224,314121260 DATA 4,208,145,76,98, 10 FOR BYTE=1 TO 4020 READ DAT30 POKE 1737+BYTE,DAT40 NEXT BYTE50 DATA 252,243,207,63,0,128,0,128,128,2,2,3,3,1,0,0,0,0,0F},4,5,6,7,3,76,128,64,76,80,64,76,177,64,76,5,65,7660 DATA 88,65,0100 DIM MEMCLR$(36):MEMCLR$="hhhhhˈG}`"110 PB=PEEK(740)-8120 POKE 106,PB-4130 GRAPHICS 0140 PMBASE=PB*256150 X=USR(ADR(MEMCLR$),PMBASE,2048)151 DIM MLH}ANG$(90),MOVMEM$(41)152 GOSUB 30000:MOVMEM$=MLANG$153 MEM=PMBASE154 FOR SEC=0 TO 7155 GOSUB 30500+10*SEC156 X=USR(ADR(MOI}VMEM$),ADR(MLANG$),MEM,LEN(MLANG$)-1)157 MEM=MEM+LEN(MLANG$)158 NEXT SEC200 POKE 54279,PB:POKE 559,62:POKE 53277,3205 X=UJ}SR(PMBASE,PB,PB)999 END (MLANG$)-1)157 MEM=MEM+LEN(MLANG$)158 NEXT SEC200 POKE 54279,PB:POKE 559,62:POKE 53277,3205 X=U160 FOR BYTE=126 TO 130170 READ DAT180 POKE PMBASE+1024+BYTE,DAT190 NEXT BYTE200 POKE 54279,PB:POKE 559,62:POKE 53277,32!L}01 POKE 1664,0:POKE 1665,255:POKE 1666,255:POKE 1667,255202 POKE 1668,49:POKE 1672,200:POKE 1676,34:POKE 1680,221203 POKE 1!M}684,128:POKE 1688,128205 X=USR(PMBASE,PB,PB)210 POKE 53248,128220 POKE 704,721000 DATA 153,189,255,189,153221203 POKE 1 o230 IF PEEK(1700)=1 OR STRIG(0)=1 THEN 230235 DIR=STICK(0):IF DIR=15 THEN 230240 X=USR(ADR(MISCLR$),PMBASE+768,255,252):PPO%O}S=PEEK(1688)250 POKE PMBASE+768+PPOS-1,3:POKE PMBASE+768+PPOS,3:POKE PMBASE+768+PPOS+1,3260 POKE 1696,PPOS:POKE 1692,PEEK(1%P}684)+2:POKE 53252,PEEK(1692)270 POKE 1704,0280 IF DIR<12 THEN POKE 1704,128290 IF DIR<8 THEN POKE 1704,1300 POKE 1708,03%Q}10 IF DIR/2=INT(DIR/2) THEN POKE 1708,128:GOTO 330320 IF DIR<>11 AND DIR<>7 THEN POKE 1708,1330 POKE 1700,1340 GOTO 2303${100 GRAPHICS 0110 PRINT "105 DIM MISCLR$(26):MISCLR$=";CHR$(34);120 FOR LOOP=1 TO 26130 READ DAT140 PRINT CHR$(27);CHR$(D)S}AT);150 NEXT LOOP170 PRINT CHR$(34)1000 DATA 104,104,133,207,104,133,206,104,104,168,104,104,133,208,177,206,37,208,145,20)T}6,136,192,255,208,245,96INT CHR$(34)1000 DATA 104,104,133,207,104,133,206,104,104,168,104,104,133,208,177,206,37,208,145,20(201 POKE 1664,43:POKE 1665,255:POKE 1666,255:POKE 1667,255:POKE 675,10221 IF PEEK(1688)=PEEK(1680) OR PEEK(1688)=PEEK(1676) -V}THEN POKE 675,5+5*(PEEK(675)=5)230 IF PEEK(1700)=1 OR STRIG(0)=1 THEN 221235 DIR=STICK(0):IF DIR=15 THEN 221340 GOTO 221 ,|ab"EESCCSPWFMEDAFBSLSPPPPPPPPPPP1LLLLLTSTWWBEE1X} 1Y} 1Z}!"#$%&'()*+,-./01[}1234567 ## BY FRANK MARTONE 1/87((COPYRIGHT 1988 BY ANALOG 1\}COMPUTINGe +@-@@A(@SYSTEM INITIALIZING SA@eAA5( AP21]}/%6-F:@,%AV$F:@,/ A <M +@!AV'AV;0@@M@wF1^}6-6-@=2I6-AU6-@a6-@ m6-@!y6-@6-@1_}6-6-6-6-A A0PAY76-P:H:,$@,%@Y6-P:1`}H:,$@,%@{6-P:H:,$@,%@6-P:H:,$@,%@6-P:H:,$@,%@1a}Z%6-P:H:,$@,%@G6-P:H:,$@,%@i6-P:H:,$@,%@6-P:H:1b},$@,%@dY%6-P:H:,$@,%@7-@Y(@ no-@"1c}7(@o-H:,$@%@H:,$@%@xC - A-# A1d})-3 A 9-C A0 - A@6-@ 6-@50@@A6-@M6-1e}@Y6-@e6-@q6-@w-(@ ^%%@ $@=21f}O-@^(@nAY@4M-H:,$@%@H:,$@%@\(@J1g}nAAέЛ%%6-F:@,%AV$F:@,I6-%%@ $72@1q}B%DOS SYSB*)DUP SYSBSEDTMAGICM65BEDTMAGICOBJB!GDW1 LSTB$GDW2 LSTB&GDW3 LSTBEGDW4 LSTBKGDW5 LSTBNGDW6 LSTBRGDW7 LSTBUGDW8 LSTBWINFERNO BASBpNUMED M65B]NUMED SRCBdNUMED2 BAS~kSTELLAR M65$STELLAR OBJI@w_6-R:,!6-T:,3A @VM0@@_A@!"@1r}!AAf-@"(@4-@A(@S-@f(@ 1s}-"@1#@Y- AP-"@1#@X- A-"@1#@c- 1t}A-"@1#@G- A@-"@1#@C- Ap;%2@1u}1"; A'0")"@)6-&@,)"@)6-%@6)"@1v})6-%@@)"@)6-&@J" A'0T 1 A^"1w}AP A h"@ A rb"@t,-@U@@6@P2$@@@T 1x}b6-%A|;6-%%@ $'A;@%A()!@)6-&@) @1y})6-%@7- @*!@* @*"@7 A@) @)6-%@1z})!@)6-&@2%H:,$A%A@X%AN2@@\6-1{}%@hAt"@6-@uF:B7p,  A@!@6-@@!@6-@1|}!@6-A%!@*"@%6-AU AĠƠέЛΛ1}}96-H:,$@96-H:,$@%@&z -(@.-%@%@=(@(S-%@1~}%@b(@v-@@z 0oA@@%,;/%@%@]2A1}@oA:$D"@Y,-@6@@-@ @3V2@1}Z ^ l6-%@x6-6-%@N "@Y6-%@ $X"@X,-@6@1}@-@ @3V2@Z ^ l6-%@x6-6-%@b "@X6-%@ $1}l"@c,-@6@@-@ @3V2@Z ^ l6-%@x6-6-1}%@v "@c6-%@ $"@G,-@6@@-@ @3V2@1}Z ^ l6-%@x6-6-%@ "@G6-%@ $"@C,-@6@1}@-@ @3V2@Z ^ l6-%@x6-6-%@ "@C6-%@ $1}$.-@@$(@. A(@;$(@:$(@?$(@1}/$(@+$A@V)-@@ M2$@@@Q s21}6-` -(@" A (-7(@A A G-V(@` A 1}>A!6--6-;6-%@>$ A@V)-@@ M2$@1}@@Q s26-` -(@" A (-7(@A 1}A G-V(@` A  >A!6--6-;6-%@>$*A@V)1}-@@ M2$@@@Q s26-4` -(@1}" A (-7(@A A G-V(@` A >>A!6--6-;6-%1}@>$HA@R)-@@ M2$@@@Q s21}6-R` -(@" A (-7(@A A G-V(@` A \>A1}!6--6-;6-%@>$fA@R)-@@ M2$@@@Q 1}s26-p` -(@" A (-7(@A A G-V(@1}` A z>A!6--6-;6-%@>$-@@p $Π1}ě%%@ $@^ -@6@4-@@J2@VAZ ^ 1}a0@@?2a2@6-&@f-@1}"(@4-@A(@S-@f(@ %%@ $@1}-@@;2@W2@@@s2@@@AAU1}A Ag%%@ $'6-@36-@G-@c21}g " A#0?-@@;2$@@@?  -(@1}  AV-@+(@=-@V(@ building -@@1}#-@2(@.F-@@0J l2@P@@x-@(@ $-1}@@0 .A A!8K%2A@@) K2B6-@1}(@.2-@AP6 L6-&@6-%@V+ +@!AV'AV+ @` A1}PjC +@!AV'AV-6-@9"@C AtWAY'A@9A@41}E6-WA@~3"@!AA53A@D3"@!A3A1}AU!@ A%=-/(@ =6-%@=-/(@1} @@@@=6-%@=-/(@ zzzz=6-%@+!@!!AY@41}+ A@ A ӛE +@!AV'AV-";6-%@E A06-@!A1}A53A @DEA@WA@y2@21}S-6-F:A`,%AV$F:Aa,%@A%@@SA@U-@@0(@1} floor securedB-@@U(@k-7(@____________________I-@1}k(@____________________ w-@-@,(@:6-%@W-@6@s21}@@w  .-@ @$(@. A(,-@@"(@, A1}2.-@@$(@. A<B-@@)-@@8(@$B AFF-@1}@*(@ >-@@PB F P 6-%$6-Z76-+@-AV'AV1}7 A0d^ -@6@<2@P@P-@@T X [$^$n[ -@1}6@<2@ @P-@@T X [$x! +@!AV'AVc6-@61}-@-AA?A @DQA@cA@A-6-F:A`,%AV$F:Aa,%@1}A%@@9-@@9(@ building  secured56-%$A!6-%@5-@@1} -6@%@%@G2O:,%@5@@VA O:,Z ^ 21}X-@A --@N(@ 1 FREE MAN *X Aq-@-&(@1}46-%@Q-@6@m2@@q )"@6-@)6-%@1} 3-@@)(@ 10003 AH-@@)-@@>(@A$H A1}J-@@.(@ B-@@PF J "@5 A&P*-@@1}*(@A$>"@5!-@@>(@A$%Bt -@6@<21}AU@X2@AT@l-@@ p t "` -AUA@6@,A8A 1}DAPA\A` ,M6-6-%@)6-@76-%AC6-@!M A061} A@ #A@JY "%2@@A2@@@U-@@ Y T"@1}$^ Ah6660,144,182,68,0,243,72,182,0,81,193,0,91,217,1,1rŠӛ|J$6-+F:A,&@,1}$AV8-@F%J .-A*%F:BsD%,.  #AP" 1}$A1-@"-%$@%1 A%@P AҠ1} 10,24,36,60,25,62,88,20,54""1,16,157,74,60,126,57,80,13214,0,4,6,255,6,4,0,04,0,0,4,0,16,8,64,05,1,61}6,0,34,8,64,20,1286,0,0,4,80,8,20,0,058,8,8,24,28,54,38,108,56##2,215,215,0,215,0,215,215,215&##55,56,56,11}44,124,58,56,40,1080((42,124,254,186,186,170,170,198,124:##27,56,56,144,124,58,56,40,108D49,16,64,8,1,20,64,2,16N1}5,0,146,84,0,198,0,84,146X((32,255,129,129,255,129,129,189,255b29,0,6,39,23,86,124,18,48l30,0,0,8,11,159,2551},0,0v12,1,64,8,32,57,60,124,56##11,56,56,144,124,58,56,40,108##31,56,56,144,124,58,56,40,108##15,56,56,144,11}24,58,56,40,108##26,56,56,144,124,58,56,40,1087,0,0,126,0,0,126,0,028,0,66,36,24,24,36,66,08,0,2,80,56,1}24,4,64,0''9,255,171,255,171,255,171,255,255-1ŠśE +@A3AV'AVE1}AAE-6-F:A`,%AV$F:Aa,%@A%@@U-@@`(@d x%@1}@%@@(@ ..(@ BY FRANK MARTONE 7-@1}7(@____________________I-@ 7(@____________________IA@ A1}Ar2-@6? N2AU@j2@AT@~-@@ B2t1}%@0*: -@@:(@YOU ARE THE FIREMAN4=-@@%(@* 9-@A01}= >C-@@C(@ YOU MUST SAVE THE TRAPPED PEOPLEH-@@((@ :-@@1}K(@W W]-@@p(@ -@@Ry-@ @$(@.8-@1}@@< N-@ @](@ q-@@@u y \x-@@H(@%BEFORE THEY ARE1} KILLED IN THE INFERNO\-@A` l6-@x6-@f` -(@," A (-7(@=1}A A G-V(@>` A p'6-%@"@' A!z A!P~-@N(@1}+ PRESS FIRE TO USE EXTINGUISHER Z6-@f6-@z-@A@~ w-&@ (@1}Q.-&@=(@QK-%@Z(@Qh-%@w(@Q-@A@{ -&1}@$(@ 2-&@A(@ O-%@^(@ l-%@{(@ -@1}A f-@N(@+TO REFILL EXTINGUISHER PICK UP CANISTER b-@Af <-@1}@$(@J8-@A< p-@@((@ :-@@K(@ ]1}-@@p(@ {-@@)(@) ) ) ;-@@R(@ ) ) ) d-@1}@{(@ ) ) ) b-@J(@' COMPLETE ALL 3 BUILDINGS ^-@AP1}b g-@O(@, PRESS START c-@@ g "F:B2y,1}"@" A$"T:,"" A$ f-@N(@+ 1} b-@@ f  A" ^ -@6@4-@@J2@VA1}Z ^ $ I-@@#-E(@ I . A-6-F:A`,%AV$F:Aa,%@1}A%@@8 -@ (@+(@I(@ f-AU6@1}rB2t2@@B Y2@@@# 5AGAAUYA@1}L 6-V G%2G2@` '-@AP '6-1}j 0(@0(@ t v-@@% -ARAH:,$@1}%@``6-%@l"@$v A$`~ "F:B2y,"@" A$ "T:,"" A$ A$ 1} j -@"6@,-N(@b-@@f j  j -@"1}6@,-N(@ b-@@f j  A  Q +@/21}A(@@Q2@A0@@ }-@@-(@ A-@AM1}B2tQ s2@} @p E +@!AV'AV3AAEAY1} 'A@'A -@@ 4-@0(@)) ) ))) )))) )) ))4  (-@1}@((@) ))) -@@! 4-@0(@ 4  7-@"1}7(@____________________ h%6-F:A`,%AV$F:Aa,9%@@K-@@h(@1}( X(@<(@ you have saved the cityNAY@4X A2 U(@*(@1} ̠ <-@@K(@U A< -@A ,B2tF:B7p,a2H:1},$@%A@@ -H:,$@H:,$@%@(@!F }3-H:,$@H:1},$@%@B(@ WAF:B7p,[ }2P j -AUA@6@1},A8A DAPA\A` j @PZ A +@!AV'AV3AA1}A6-%Bd `A@)-@@;-@@V(@ PERFECT SCORE` An >-@1}@0(@ : A> x V%27-@@V(@EXTR1}A BONUS  3 A-@@3(@HURRAY N-@@$(@*6-@@ N(@1}  -@Au $ Šқ 412AU@@4$ 1}w-&@ (@Q.-&@=(@QK-%@Z(@Qh-%@w(@Q w-1}&@ (@ .-&@=(@ K-%@Z(@ h-%@w(@  X6-&@1}32@@@U2@@@@X$ D:INFERNW.BASw(@  X6-&@0_]6 =  = =ANUMBER EDITORA(X*2X* File name is NUMED.M65<X*F&X* This is a subroutine called fromP5}X* BASIC. Its purpose is toZ$X* simulate the BASIC PRINT USINGdX* statement.nX* SAMPLE CALL:x$X* X=USR(ADR(SBR$)):PRIN5}T E$,A,BX*"X* The routine in SBR$ looks at#X* E$ to determine how to formatX* A and B.X* X* E$ contains the ed5}it mask.#X* A & B in this example are the$X* variables to be printed. There"X* may be one or more variablesX* and/or5} numeric constants.!X* Strings other than the editX* mask are not allowed.X*"X* Expressions are not allowed,X* e5}xcept that a variable orX* numeric constant may be"X* preceded by a minus sign.,X*6#X* The edit mask may be preceded@5}X* by an IOCB specification,J X* using either a variable orTX* constant.^X*hX* All parameters must ber#X* separated5} by commas; the line|"X* may end with a semi-colon toX* suppress the line feed.X*X* See the BASIC article and"X* 5}documentation for details on"X* the uses of this subroutine.X* Zero page usage X* $CB and $CC are used as anX* un-n5}amed pointer.X*EDIT.MASKEDIT.MASK.LOEDIT.MASKEDIT.MASK.HI OUTPUTOUTPUT.LOOUTPUTO5}UTPUT.HI&0 SAVEY:EDIT.LENGTHD FLOATNEDIT.DECIMALSXEDIT.PTRbNUMBER.PTRl STATEv5} SIGNMINUS.FOUNDFIRST.DIGIT.VALUEX*X* Printer related equates.X*CASSETTE.BUFFERPUT.CHA5}RACTERS PUT.RECORD CIO.ROUTINEVLINE.FEED CARRIAGE.RETURN EDITOR.DEVICESCREEN.DEVICE 5}X* X* ATASCII charactersX*  SPACE *NUMBER.SIGN #4DOLLAR.SIGN $>PERCENT %HASTERISK *R COMMA ,\5}MINUS.SIGN -fDECIMAL.POINT .p SLASH /z ZERO 0Z Z RETURNX*X* BASIC token valuesX*STR.CONST5}ANTSEPARATORSEMI.COLONIOCB.IND MINUS6$X* Normally, subroutines pull the!X* number of 5}arguments off the"X* stack; however, we are goingX* to use the current stack X* element as the IOCB number$X* for pr5}inting. Since this."X* subroutine has no parameters8X* passed to it, we areB X* defaulting to IOCB #0, theLX* Screen E5}ditor.VX*`"X* No error checking is done tojX* verify that the number oftX* arguments is zero.~X*$X* Use the Casset6}te Buffer as theX* Print Buffer.X*Q>4CASSETTE.BUFFERPOUTPUT.LOQ>5CASSETTE.BUFFERPOUTPUT.HIX*X* In6}itialize work areas.X*$>&EDIT.DECIMALS2  &STATEX*!X* $8A, $8B (STMCUR) points to(X* current BASIC lin6}e.2#X* $A7 contains the displacement<X* of the PRINT statement.FX*P!X* To use Y as an offset, loadZ#X* $A7. Get the d6}isplacement ofd!X* the next BASIC instruction,nX* and store this value backx X* into $A7, causing BASIC toX* think he 6}has executed theX* PRINT statement.X*%Q@7PX*!X* Increment Y to point to the X* PRINT statement, s6}ave this X* value, and let's go do theX* printing ourselves.X*3 'SAVEYHPOINT.TO.NEXTX*"STRING.CONSTAN6}T ,X*6X* Assume this is edit mask,@#X* since this is the only stringJX* constant allowed.TX*^X* Set state to 0.h6}!X* Increment Y to point to ther#X* string length, then move this|X* pointer to A. Add in theX* string length, and A no6}w X* points to the last byte ofX* string. Save this value.X* "STATE3CO@7 PSAVEYX*$X* Point to 6 }first byte of string.!X* Move to A, add in the base,"X* and we have the base pointerX* to the edit mask.X*3&C06 }O:PEDIT.MASK.LODQNO>XPEDIT.MASK.HIbX*l!X* Now point Y back to length,v!X* retrieve the length, and go6 }X* examine the edit mask.X*1Q@7IGET.MASK.LENGTHX*X* Continue long branchX*STRING.CONSTANT.A 6 }FSTRING.CONSTANTX*X*VARIABLE.TOKEN "X* Turn off hi byte of token #, X* then shift 3 times to"X* multiply by6 } 8 and get offset X* in A and $CC.*X*4M>>$>HVAR.LOOP RT?\Uf0p HVAR.LOOPzX*$X* Now add 2 to poin6}t to 3rd byte!X* of variable entry in table.!X* This will be the offset for#X* the edit mask or the exponentX* byte 6}for a variable.X*,O>DPOINT.TO.VALUE#X*X*POINT.TO.VALUE  X* !X* Offset is in A (lo) and $CC6} "X* (hi). Now add in base. If we$ X* are processing a variable. X* token, the above code left8 X* X=0, so the base is VVT6}PB X* ($86).L X* If the token is a numericV X* constant, then the base is` X* STMCUR ($8A), and thatj X* routine set X=46}.t X*~ , O9 P˜ Q̦ O9 P̺ %> X* #X* At this point, Y=0 to be used X* as an offset. #X* $CB,$CC is 6}pointing to either X* the displacement of the X* string value for the edit #X* mask, or to the exponent byte X* of the6} numeric variable or X* numeric constant. X*( X* Now check the STATE to see2 X* whether this should be an< !X* IOCB num6}ber, the edit mask,F X* or a number to format.P X*Z "STATEd FFIND.EDIT.MASKn GFORMAT.NUMBERx X* X* The number is t6}he IOCB. X* Make Y point to byte after "X* exponent, since a valid IOCB X* should not be large. "X* Get that byte and p6}ut on the X* stack for later retrieval. !X* Then go process next token. X* SAVE.IOCB 3 Q@7 5 IPOINT.TO.N6}EXT X* NUMERIC.CONSTANT.TOKEN  X*" !X* Note that CARRY is clear on, X* entry to this routine.6 X*@ #X* A numeric co6}nstant was found.J X* Transfer the offset valueT "X* into A and add 6 to point to^ X* the last byte of theh X* constant. T6}hen save thisr X* pointer.| X* C O> PSAVEY X* X* Increment Y to point to #X* exponent, transfer to A, then 6}X* set X to point to base. !X* Go add in the base address. X* 3 C $> HPOINT.TO.VALUE X* IOCB.TOKEN  X*&6} X* The # token was found,0 #X* indicating the presence of an: X* IOCB specification.D X*N "X* Discard the default from th6}eX "X* stack (the new value will beb X* added when we look at thel #X* next token), set the STATE tov X* to indicate next t6}oken is X* an IOcB spec, and then go X* check out the next token. X* 7 #STATE HPOINT.TO.NEXT FIND.EDIT.MASK6} X* $X* A variable was found and state !X* was decremented to zero, so X* we assume this is the edit !X* mask. $CB, 6 }$CC is pointing #X* to offset of value, so add in X* base at STARP ($8C, $8B). $X* Then count the number of digit X* po6!}sitions (#) after the X* decimal point in the edit* X* mask.4 X*> ,H Q@7R O\ PEDIT.MASK.LOf 3p Q@7z O P6"}EDIT.MASK.HI 3 X* X* Get the string length and "X* subtract 1 to convert to the X* max offset value. X* Q@7 6#}GET.MASK.LENGTH ? 1 'EDIT.LENGTH X*$X* Count number of decimal placesX* in the edit mask.X*$$>.FI6$}ND.DECIMALS 8Q@EDIT.MASK7BR>DECIMAL.POINTL FFOUND.DPVR>NUMBER.SIGN`HNOT.DIGITjX*t$X* Increment X only when 6%}# found.~X*2NOT.DIGIT 1IFIND.DECIMALSX*#X* If we fall through here, then!X* no decimal point was foun6&}d,X* so there are no decimal X* places. Set X to indicate X* this.X*$>FOUND.DP &EDIT.DECIMALSPOI6'}NT.TO.NEXT X*(#X* Examine the token to see what2X*<!X* First, init some variables.F#X* Clear the high byte of a work6(}P"X* pointer, indicate a floatingZ"X* $, and reset the minus founddX* indicator.nX*xX*%>'̖ 'FLOAT'MIN6)}US.FOUNDCHECK.TOKEN X*$X* This is the loop that examines X* each token. First, get theX* last pointer to the B6*}ASIC$X* line, increment it to point to#X* a new token, save this value,X* and get the token.X* %SAVEY3 'SA6+}VEY"Q@7,GVARIABLE.TOKEN6X*@ X* If this is a comma, we canJ X* ignore.TX*^R>SEPARATORhFCHECK.TOKENrR>STR6,}.CONSTANT|FSTRING.CONSTANT.AX* X* If carry clear, then valueX* must be 14.X*DNUMERIC.CONSTANT.TOKENR>IO6-}CB.INDFIOCB.TOKENX*X* If carry clear here, thenX* token is EOS, EOL, or ;X*DDONE.EDITING.AMINUS.TOKEN6.} #MINUS.FOUNDHCHECK.TOKENX*&X* Continue a long branch0X*:POINT.TO.NEXT.A DDPOINT.TO.NEXTNHPOINT.TO.6/}NEXTXFORMAT.NUMBER bX*l"X* On entry Y=0, $CB,$CC pointsvX*Q@7 PSIGNFA5X*X* If minus sign was found60},X* reverse the sign and saveX* this result.X*$MINUS.FOUNDFA2N> PSIGNA2 X* "X* The number w61}ill be formatted#X* from right to left. To align "X* the decimal points, subtract*#X* $3F out of the exponent byte,4X*62} mult by 2, and add in the>!X* number of decimal places inH#X* the edit mask. The result isR#X* the pointer to the first 63}byte\X* of the number that shouldfX* print in the right-mostpX* position.zX*#X* If the result is < 0 or > 10,"X* 64}then zeros will be forced to"X* print, depending on the edit X* mask.X*M>;S>?T?,OEDIT.DECIMALS65}A5 PNUMBER.PTRX*"X* Get the first digit and save"X* it. This will be used later$X* to determine if the first66}.X* digit is an insignificant8 X* zero.BX*L3VQ@7`M>jPFIRST.DIGIT.VALUEtQEDIT.LENGTH~ PEDIT.PTRDIGI67}T.LOOP X* X* Process the number for theX* length of the edit mask.X* %EDIT.PTRQ@EDIT.MASK7X*#X* Space68}, percent, decimal pointX* and slash print as-is.X* R>SPACEX* FD10 R>PERCENTFD10(R>DECIMAL.POINT2F69}D10< R>SLASHFHD20P D10 Z %EDIT.PTRd P@OUTPUT7nX*x#X* Decrement pointer to the edit"X* mask. If non-negativ6:}e, keepX* looping.X* "EDIT.PTRIDIGIT.LOOPX* X* If number ptr > 0, then an#X* overflow occurred. Place al6;}lX* asterisks in output area.X*%NUMBER.PTRGINCREMENT.OUTPUT.BASEFINCREMENT.OUTPUT.BASEQ>ASTERISK%ED6<}IT.LENGTHOVERFLOW.LOOP " P@OUTPUT7,16IOVERFLOW.LOOP@X*J#X* We are done with this number,T!X* so we will reset6=} the output^!X* base pointer and go get thehX* next token.rX*|"X* We have to add the length of"X* the edit mask to th6>}e current X* output base to get the new!X* value. Since the edit mask X* length was converted to an#X* offset by sub6?}tracting one, we!X* will set the carry first toX* add in 1 extra.X*INCREMENT.OUTPUT.BASE ;QOUTPUT.LOO6@}EDIT.LENGTHPOUTPUT.LODPOINT.TO.NEXT.A#OUTPUT.HIX*&X* This will always branch.0X*:HPOINT.TO.NEXT.ADX*N6A}X* Continue a long branch.XX*bDONE.EDITING.A lDDONE.EDITINGv D20  R>COMMAHD30X* X* If comma in the 6B}edit mask,"X* and there are more digits to#X* print, then insert the comma.X*X* If there are no digits toX* prin6C}t then:X* Print a comma if the next#X* position will force a zero toX* print (edit mask = #).X* Print a space if t6D}he next!X* position will zero suppress X* (edit mask = Z)."X* If neither of the two above, !X* assume $ and print it, 6E}then*#X* turn off the float indicator.4X*>$NUMBER.PTRH GD20ARHD10\ D20A f1pQ@EDIT.MASK7zR>NUMBER.SIGN6F}HD21 Q>COMMAHD10 D21 R>Z HD350 D22  Q>SPACEHD10 D30 R>MINUS.SIGNHD35X*#X* If 6G}number is minus, print the#X* minus sign, else print space.X*$ $SIGN.GD108ID22B D35 LX*V"X* Check the ptr 6H}to the number.`$X* If it is negative, force zero.j$X* If it is zero, check edit masktX* for #,$, or Z.~X*%NUMBER.PT6I}R GD300 FD300"NUMBER.PTRX*#X* If pointer out of range, then!X* we have more digits in editX* mask then in6J} the number.X* Force to extras to zeros.X*)>  ED200X* !X* If processing second digit, X* check if first di6K}git is anX* insignificant zero.(X* If it is, decrement the2X* counter to bypass.<X*F)>PHD40ZQFIRST.DIGIT.V6L}ALUEdHD40n"NUMBER.PTRx D40 X*"X* Convert number pointer to anX* offset into value. Then"X* increment by 1 6M}to adjust forX* the exponent byte.X*1CV??3Q@7X*X* Check shift result.X*DLEFT.DIGIT"6N}RIGHT.DIGIT ,M>6ED45@LEFT.DIGIT JX*T!X* Move hi nibble to lo nibble^X* for processing.hX*rV?|V?V?6O}V? D45 L>0 D46 HD10X*X* D200  Q>ZEROHD10X*X* D300 R>NUMBER.SIGN FD200&R>6P}Z0FD22:X*DX* Process dollar sign.NX*X D350 b %FLOATlHD22v #FLOATHD46X*X*DONE.EDITING X*6Q}X* Save the token for later.X* Get IOCB # from stack andX* mult by 16, put it in X.X* Set up for character I/O.6R}X*?7T?T? T?T? >*Q>PUT.CHARACTERS4PB9>X*H X* Get token, set Y as outputR X* offset, then test t6S}oken to\#X* determine if the line feed isfX* suppressed (token = ;).pX*zC%>R>SEMI.COLONFE10X*$X* Now6T} check for Screen or Editor#X* device open for the requested!X* IOCB. If so, use record I/O!X* and forget about line fe6U}eds#X* and carriage returns (but add$X* the ATASCII return to output).X*Q@9R>SCREEN.DEVICEFE1R>EDITOR6V}.DEVICEHE3$E1 .Q>PUT.RECORD8PB9B Q>RETURNLHE5VE3 `X*jX* Move printer line feed.tX*~Q>LINE.FE6W}ED P@OUTPUT7X*"X* NOP next instruction if your!X* printer is set to auto line"X* feed when carriage return isX6X}* received."X* This will cause the carriage X* return to overlay the lineX* feed character.X*3Q>CARRIAGE.RET6Y}URNE5  P@OUTPUT73 E10 (X*2"X* Adjust output buffer pointer<"X* to account for line feed andF!X* carriage 6Z}return characters.P!X* Then subtract out beginningZ"X* buffer address to get bufferd X* length.nX*xC,OOUTPUT.LO6[};S>4CASSETTE.BUFFERPH9Q>PI9X*X* Set up buffer address.X*Q>4CASSETTE.BUFFERPD9Q>5C6\}ASSETTE.BUFFERPE9 CIO.ROUTINE:"I9X*X* Set up buffer address.X*Q>4CASSETTE.BUFFERPD9Q>5C4.27000 DIM SBR$(467)27010 SBR$(1,90)="ϩТڤȄ~ȘqȘeͥiΈM) &iu˥u̠:^}0h"27020 SBR$(91,180)="H9iȘh)eȱeȱ˨բ. #נ̄քܤȄԱ0"27030 SB:_}R$(181,270)="dױ˅I)8? eׅȱ)ݥՅؤر %./&ؑ0 *Ցψ"27040 SBR$(271,360)=:`}"8eՅϐРf,0Ј#,ZE н-00+) وJȱː)"27050 SBR$(361,450)="JJJJ 0Ј0:a}Є#Zзh B@  B  ȩ Șe8H"27060 SBR$(451,467)="IDE V`"2707:b}0 SBR$(426,426)=CHR$(155)27080 REM REMOVE NEXT LINE IF YOUR PRINTER DOES NOT HAVE AUTO LINE FEED27090 SBR$(433,433)=CHR$(23:c}4)27100 RETURNCHR$(155)27080 REM REMOVE NEXT LINE IF YOUR PRINTER DOES NOT HAVE AUTO LINE FEED27090 SBR$(433,433)=CHR$(238  E EMSBR$$TEST NUMBER EDITING SUBROUTINE>e} ;@%, Bpabcd#6.ZZZZZ,ZZZ.##- # An#6.$$$$$,$$$.##- # Ax>f}"6.#####,###.## " A%6.ZZZZZZZZZ.####- % AA( DATE EXAMPLE "6-?:C:,,A( ##/##/## B &>g}B%6(OVERFLOW EXAMPLE &6-?:C:,,6(###A#-@@">h}6-?:C:,,( \($(PRESS ANY KEY TO CONTINUED@@K:Q)@\@&$>i}100,.5094567.34,123456723,.5678923.456,98.63.17,.0006 24,190$ 17.5,0. -1,25830>j}90,3081B800,1040 D:NUMED2.BAS,.5678923.456,98.63.17,.0006 24,190$ 17.5,0. -1,25830<*7= X; STELLAR ARENAX; COPYRIGHT 1988X; BY ANALOG COMPUTING(EI2 X;ӽ< AF X;ӽP CHAZSBl}d X;ӽŷn PCHBx HPO VPO APO HMO VMO AMO  HSP  VSP ASPBm} XLA XPL BPL XPO BIT+ XSH= BSHA DIRE" X;, = ===,=6Q><@Bn}PJ,T:^ Q>4RUNhP r Q>5RUN|P :X;Ġ' =========' =#=0/=29=')=Bo}4(====& ==j=ho=n=ro=it=z==-TS1 h=gi=h=s=oc=er=Z===) ======Bp}===-TS2 s=Z====s=Z===( ===!====== X;̣ ê' p=p=p=Bq}p=p=p=G=6=A=p=p=p' p=F=J=A=p=p=F=^=A=A==A X;̣ ê$ p=p=p=F==9==F==:=- F==9Br}==========F=* :==========A==A& X;0 =======: ===Bs}====D =======N =======X ====8=p==b ==p=8====lBt} = ==<=|=|==v =0=8=<=>=>== ==>=>=<=8=0= ==|=|=<== = =@====Bu}== == ===== ======= ======= ======= ==Bv}===== ===== == ======@= =U===U=== B==Z=<=<=Z==BBw} ===<=<=== =="===="=  ====>=== ==$==X=$==  =`=~==Bx}=~=`=* ==~===~==4X;ñ>%VC1 =========H =======RX;ò\"VC2 By}========f X;ɣp DLI1=z5A5 Q>B;;ê$>NOMNP P &7>7.Bz}9X; VBI#$#.#8#B#L#V#`$>j A1Q9tP9~0HA1QP ԦQ>PԺB{}Q>$> E5R9 FE5"90HE5A %VPO1P<8( %VPO21<P=8F$VMOPQ;9ZM>dPB|};9n $VMOxQ;9M>P;9Q>Pͪ G2$APOQHPO, OVC19PHPOP2QVPO, OVC19PB}}VPOQ"R> ,DG16#@QJR>TFG2^ G1$AMOhQHMOr,| OVC19, OVC19PHMOPЮ2QVMOB~}, OVC19, OVC19PVMO>Q;9L>P;9Q&R>0FG4:QDR>NFC6XQ>bPlG4$APOB}v QHPO, OVC19 PHPOPШ2 QVPO, OVC19 PVPOQR> DG3#Q R>FB}G4 G3$AMO* QHMO4,> OVC19H,R OVC19\ PHMOfPp2z QVMO, OVC19, OVC19 PVMOB}>Q;9L>P;9 X; C6QR> ED2 !D6 Q> P$ D2$ASP. QHSP8 ,B OVC19L PHSPV B}P` 2j QVSPt ,~ OVC19 PVSP ? $> D3QPCH9 P>8 1 0 HD3 # Q R> DD6 Q R>B} FD2 Q( R> 2 DD6< D5$ASPF QHSPP ,Z OVC19d PHSPn Px 2 QVSP , OVC19 PVSP B}? $> D4QPCH9 P?8 1 0 HD4 # Q R> FD5 X;" D6Q, R>6 HA4@ Q>J PT %B}>^ $>h Qr R>| FD7 $> D7QPCH9 PCH8 0 1 HD7 A4Q> P $> QVPO9 P9 0B} HA4 Q R> FA5& Q>Z0 P: PD Q>N PX Pb $>l QPCH9v %ˀ P<8 "˔ %̞ P=8 "B}̲ 0 # Q R> DA4& !_ A5Q> P P Q>Z P P* Q>4 P> $>H !A4&R X;B}\ IRQAf 5p $z (> FQ2 $ (> FP9 0 0 0 & & Q> P !J3 P9#Q>PB} !J3$ Q2$.(>8EJ3B2L2V&`&jQ>tP~ !J3 J3Q>PҜQ:R> HQ3$>3B}&$(>FQ5$(>FEQ5 22&(&2Q><PFQ>PPZ!Q3d Q5Q>nPx$B}(>  DJ300&&ҾQ>P!Q3Q>P Q3$(> EJ4(>FJ4"2,&6&B}@Q>JPT !J4^ J4Q>hPr$|(>3 FJ5EJ52&&ҸQ>P !J5 J5Q>B}P7>79X; JOY$>&%> 0 RJOD8: FJOYD2N2X1b HJOYl:v X;РÀ FAQ ҊM>B}R> HFA L>:X;̠ LEVC$0 QLCT9P QATD9P QMTD9 P QLPD9 P*B} QXMO94P>AH,RO>!\P:f PUTp:zX;ˠԄ H3(> FH3 $>;S>ȶ:$>,O>:B} X;CTB =\===0"LCT ======h=j=l ===H=J=LX;̠'ATD ===B}====$'MTD  ===== =$"=&.'LPD $&= "===== = 8'XMO (*=$&= "===B}==BXAL *=9==L X;٠V"JOD  = = = =====` X;ӠjLVC ===tLMN G=H=I=B}J====~LSV =======҈+CLS ===========ϒX;ĠSTB <===3XB};ΰ RUNQ>ºP0 Q>A;;êP1Q>>P90 HRUN PPQ>(P2P<PFQ>PPoB}ZQ>8dPnQ>xPЂQ>>P/ Q>4DLI1P Q>5DLI1PQ>PQ> $>5VBI %>4VBI \B} eQ>&P X;Ԡ"Q>,P6P@Q>JPT Q>4IRQ^Ph Q>5IRQrP|QL>PPB}ҤQ>Pܸ$>J6QSTB9P90HJ6 A7QR>DA7Q>P0 Q>A;;ê&P10 X;:QB}>D>N A6P9XP;9bP<9lP=9vP>9P?90HA6% Ԩ)>p DA6P99P:90 HA6B}Q>PPP Q>P  X;*$>(4A8QTS19>P99H QTS29RP:9\0fHA8pQ>zP:B}P:Q,O>P: X;$> Q>P99P:90 HA8#$>w%>Q>P99$P99.A8B};BS>L>VQ>`P99jP99tA~,O>'>1 HA80%>$> A9Q>P99Ps:9Q>@2PB}s:90 0P992(A2,<O>F>P1ZHA9d%>n$>xQ>P99PU:9Q>@2P9900PU:B}92A,O>>1 HA9 $>"&d9,26&c:@Q>J$>TPCH9^0h HA9Ir X;|$> QCTBB}9P90 HA9QQ>PPQP LEVC$>9 &S2 &SQR>& FSTART 0B} X;: B1QDPNPXR>b FSTARTlR>vFOPTR>FSEL!B1 SEL$2(> DC3$> CB}3&&&M LEVC!B2 OPT$ &M(>  FB2*04&>AH,RO>\P:f!B2p2z !OPT  B2B}Q,O> $>&ж&RFB1 !B2 X; STARTQPQ>P !A6Q>$P.B}P8Q>BP:L$V(>`FB3jP:t B3Q>d~PHPOQ>PVPO(> FB3 PVPOQ> PHPOB}$> Q>P90 HB3Q M>,O>(P2Q<R>F DG5P$>Z&d%> nPASPxR>  B}DG5&%>  PASP% G5 PX1HG5%>Q>P:8P:8 PTS28 PTS2 81 HG5B} "Q,P6X;Π@ MLQJR>T HML ^ !STARThR>r EML| !A6Q>PMQ>P:QB}R>-DQ1 SE Q1 SUVQR>FN9 !PAUSE N9Q V? EB5& Qx0  JOY: (>D FB5N QX B}R>b FB5l Q>v PAMO PAPO %VMO Q;8 M> P;8 QHPO O> PHMO QVPO S> PVMO &AMO Q>B}!P ! !B5! B5&APO !Q*!R>4! HB6>!QH!V?R!V?\! EB6f!Qyp! JOYz!(>!FB6!Q!R>!FB}B6!Q>! PAMO! PAPO! %VMO!Q;8!M>!P;8! QHPO!O>" PHMO" QVPO"S>$" PVMO."B} &AMO8"Q>B"PL" !B6V"B6&APO`"Qj"Rt" EMLA~"!C2"Q>"PϜ"X;ҠŦ" MLA%>" QXLAB}8"R>"HI1"1" HMLA"!C2" I1$>")># EI1 #$>#PS9# QLMN8(#P@S62#&<#Q F#M>P#)>B}Z#FI2d#)>n#FI2x#,#O>#I2,#O>#Pª#># QXLA8#,# OLVC9#$#PS9#Q@S6# RLMN8# FI4B}$$$(>$FI4"$(>,$FI46$0@$AJ$ !I2T$I42^$ !I4h$QS9r$ PXLA8|$ QLMN8$P@S6$ !MLA $ B}C9!E4$X;ҠŮ$ C2Qָ$R>$EC9$Q$R>$DC9$Q$R$DC9%Q>%P%Q&%R>0% FC2:%"B}D%%XPLN%$BPLX%'S9b%Q>l%P@S6v%C%R>%HC7%Q>%PXPL%$>%&BPL% !C7 % C7R>P% HC7 %$>B}%&BPL%QXPL%,&O> &PXPL&PS9 &Q>Y*&P@S64&Q>&R>H&DC9R& %XPL\& $BPLf&'S9p&Q>z&P@S6&CB}&R>&HC8&$>& &BPL&Q>& PXPL& !C8 & C8R>w& HC8 &$>& &BPL& QXPL';'S>' PB}XPL$'PS9.'Q>Z8'P@S6B'X;ҠL' E4QV'R>`' ED8 j'!CSt'Q~'R>'FD8'!CS' D8Q֦'R>'FB}D9'R>'FE1'#'Q>2'P'Q>'P(Q> (P(Q>(P((!CS2( D9Q<(R>F( FD9 P(!CSZ(Q>d(B}Pn(#x(Q>ӂ(PČ( E2$BPL(%XPL(3('S9(C(%>(Q(P@S6(#S9(1( HE2(Q>)P)Q)R>B}")EB4,)!CS6)B4$BPL@) %XPLJ)1T)'S9^)%>h)Qr)P@S6|)"S9)1) HB4 )!CS) E1Q׮)R>)HCS)B}P)P)Q )M>),)O>)P*!E2*X;Š* CSQ&*R>0* ECS :*!E3D*%>N* QHSP8X*R>3b*DEB}7l*R>v* EE7 * QVSP8*R>ٔ* EE7 *R>O* DE7* !E6 * FA*R>*HE6*,*O> *!E6* E7 FA+, B}+O>+!E6 + FA*+,4+O> >+!E6H+ FAR+,\+O>f+ E6$8p+(>z+ FE6 + PASP8+Q+R> +DE3+3+)>+B} FCS +X;Ϡ+ E3Q+R+EF1+!E8+ F1Q>,P,%, QXPO8$,R>., FF28, $BIT8B,PS9L,Q@S6V,B}R>`,FF2j,Q>t, PXPO8~, PBIT8,",1, HF1,!E8, F2$DIR8, QXPO8,,, OVC29, $BIT8,R>,DF3, B}H3- F3PS9 -Q@S6-R>-FF5(-Q 2-M><-,F-O>P- PDIR8Z- !F2d- F5QS9n-Px-&‚- QXPO8- $BIT8-PSB}9-Q>-P@S6-Qþ-$-PS9- PXPO8-A- PBIT8-Q>-P@S6. !F2. X;Ԡ. PXQ".R,.DG66.:@. B}G6Q>J.PT. QXPO8^.R>h. FG6 r.:|.Q ҆.M>.>. PBIT8.Q Ү.M>.(>.FF6.,.O>. PXPO8. !F6B}.F6,.O>/ PXPO8/PS9/Q@S6&/R>0/FF7:/Q>D/ PXPO8N/"X/Qb/R>l/ HG6 v/Q Ҁ/M>/,/O>B}/ PDIR8/:/ F7#/Q>/P@S6/:/ E8%/ PX/1/ HE80X;ԠӠ 0 PLS%>0 QXSH8 0R>*0FH4401B}>0 HPLSH0 !CMLSR0H4QXLA8\0R>f0 FPLS p0,z0 OLSV80$>0)>0DH50$>0 H5PS90Q@S60R>0 B}HPLS 0QS90 PXSH80A0 PBSH80 QLSV81P@S61 !PLS 1X;ȠӠ$1 CMLSQ.1R>81 FCMLS B1!CCL1$B}>V1%>`1 G7)j1 EMLSt13~1313101!G71&ذ1X;ŠӠԺ1 MLS%>1 $BSH81 QXSH81PS91Q@S61 RB}CLS81DH62Q> 2 PXSH82 PBSH821(2 HMLS22!CC<2H6RCLS8F2 EH6P2 !H6Z2 RCLS8d2FH7n2)>x2B} EH72,2O>2P@S62 !H62;2S>2P@S62 !H62 H7Q>2P@S62 QXSH82,2 OLSV83 $BSH83R>B}3DH8"3 H3,3 H8PS963Q@S6@3R>J3 FH8 T3 !H6^3Ah3 PBSH8r3QS9|3 PXSH83 QCLS83)>3EH93P@S63 B}!H63H9,3O>3 !H93X;ˠ3 CCQ>3P3Q3R>4FK14PHPO4 K6&4 K1Q 04R>:4FK2D4B}PHPON4 K6X4 K2Qb4R>l4 FK2 v4 PHPO4 K84Q Д4R>4FK34 PHPO4 K84 K3%>4Q84R>4 B}FM14V?454DK45 LOC 5Q>5P@S6 5$> *5&45 ADS>5Q>H5PR5K47\5V?f5DK5p5 LOCz5Q@S65R>K5B}EK55;5S>G5>5 QLMN9555Q>5 PXLA9575$5P@S65$>26&6 ADS6Q>$6P.6 K5#86Q>B6 PAB}MO8L6 PHMO8V63`6)>j6 FK3t6 M1%>~6Q86V?656DM26)>6HM26Q6V?6EM26'HPO6 K66%>6$B}>7& 7 ADS7Q>7P(7M2727V?<75F7DM3P7)>Z7HM3d7Qn7V?x7V?7EM37 'HPO7 K87$>7&޴7 B}ADS7Q>7P7M377V?757DM47Q>8PASP8PHSP8PVSP"8P,8 PHMO868 PAMO8@8$>dJ8&T8 ADS^8Q>h8B}Pr8$>|8A8P>9808 HM48#8M478V?8DM58Q>8 PASP8 PHSP8 PVSP8P8 PHMO9 PAB}MO9$>d9&&9 ADS09Q>:9PD9$>N9AX9P?9b90l9 HM5v9#9M539)>9 HM59 !M19Q9R>B}9 FM59P9 X;Ҧ9Q9R>9EO79!CD: O7Q> :P:Q: :R>*:FO84:":>:!CDH: O8Q:R:R>B}\:FO9f:":p:Q>z:P::!CD: O9Q:R>: EO9:#: LEVC:Q>:P::P:: CDQ::R>: FCD B}: !P3;Q:;R>; HP3$;!BD.;$>8;P3QHMO9B;R>/L;DP2V;R>`;EP2j; QVMO9t;R>C~;DP2;R>ߒ;B}EP2;0;HP3;!ML; P2Q>; PAMO9; PHMO9; !P2; X;; LOCQ>; PAMO8<# < QHMO8<;<S>/(B}<$>2< L1R><<DL2F<;P<S>Z<2d<!L1n< L2&x< QVMO8<;<S>@<$><R><DL3<;<S><2< !L2 < LB}3&<(> <EL4<Q>=P=Q=(>"= FL4,=L5,6=O>@=0J=HL5T=$^=PS9h=:r= L4Q>|=P=A=;=S>B} =>= !L5=X;Ԡ= K6#=Q=V?= EK7=Q>=P=P>$:>(>> FK7&>00>&::>QD>LB}>N>PX>%VPOb>$>l>Q>v> K7P<8>1>0>HK7>PAPO>$:>(>> FK7>Q>d>PHPO>Q>>PVPO>:>B}Q>d?PHPO ?:? K8# ?Q*?V?4?V?>? EK9H?Q>R?P\?Pf?$:p?(>z? FK9?0?&:?Q?L>?PB}? %VPO?$>?Q>? K9P=8?1?0?HK9? PAPO@$:@(>@ FK9$@Q>.@ PHPO8@Q>B@ PVPOL@B}:V@Q>`@ PHPOj@:t@X;Ԡ~@ SEQ@V?@DL7@Q:@R>@DL7@Q@R>@HL7@Q@M>@P@ L7B}QAR> AHL6AQAV?(AV?2ADL6PADL6ZAQdAR>nAHL6xAQAM>APAL6:AX;ӪAADS5B}ACA5AR>AFN1A%>A'A N2QA5BQ:8BR>BEN3"BO>,BP:86B)> @B FN6JB)>TBFN5^B%hB0B}rB HN2|B$ކB"B HN2B7BPB7B?B7B:B N1%>B !N2B N3Q>BP:8B)> C FN3 C1C HN2B}&C%0C !N2:C N5%>DCQ:8NCR>XCFN6bC,lCO>vCP:8CQ>CPCQ>CPC N6!N2C%>C !N5B}CX;ŠРC SUVQCR>C FSUVC:CQDR> DFP1DR> DFP1*DR> 4DFP1>D:HD P1Q>RDP\DQfDB}V?pD5zDEN4D$>D%>D&ޢD ADSDN47DV?D EN4 D$>D%>D&D ADSD:DX;E PUT$>E QXLAB}9ER>$EFO1.E08E HPUTBE!O2LEO1QXAL9VE PXLA9`E !PUT jE O2QtER>~EDO3EQXPLER>EHO4EQB}BPLER>EFO4EQ>dEPXPLE O4QER>EDO3E QXPLFR> FHO5FQ>cF PXPL(FQ>2F PBPLB}FF QHSP9PFR>ZFHO6dFQ>HnF PVSP9xFQ>F PHSP9FQ>FP9FPЪFPдFO62F(>FEO3FQFR> F EOB}5FO3:F X;G PAUSEQ>GPGQ"G5,GQ>6GP@GQJG5TGQ>^GPhGQ>rG$AMO|G %AMOGPAMOG PB}AMOGQФGR>GHN8G7GPG7G !STARTG N8R>G EN8 G7GPH7H !A6HQy&HR>0H FN8:H !B}BDDHQxNHR>XH FN8bH&AMOlH 'AMOvH7HPH7HPH!N9HX;H BD%>HQ:8HR98HDP4B}HHP5H3H)>H DBDI P4%> IQ:8IR98 IDP6*IHP74I3>I)>HI DP4RI!P6\I P5%>fIQ:8pIP98zI B}PTS1 8I1I HP5I!P4I P7%>IQ:8IP98I PTS1 8I1I HP7I P6%>IQ:8I PTS28IQ:8J PB}TS2 8J1J HP6$J !A6.J8J RUNBJP98I PTS1 8I1I HP7I P6%>IQ:8I PTS28IQ:8J P@2 AB ,<` F `#/092)'(4johnortizhighscoreZF}sZsZ!ppppppG6AppppFJAppF^AAApppF9F:F9F:AAF}BC8pp8 <||08<>>>><80||< @ F} @UUBZ<$X$`~~`~~xHHBEO%N ԍ ԎhF}hX@CD ԩԩ<=;); ;);ͮ}B}BF} ͥ׮ }B}B}B}B; ; Yͮ}B}B ͥ׮ }BF}}B }B}DEB ; ;LDɮ }B }BB>ɥ <ʥ 0 }B F}}BB?ɥХԠBBʈ͢/ZЍЍB˙<ˤ̙=ͥF} L_䩆ЍZЍE FLDHʆҩLWELWEȰ膽ҩLWEҭ:<3FF}ҩҩLE ʆҩLEҦ膾ҩLEҦ3膿ҩLEhh@ مF` F}) `ʽ3FBFRFbF FGrFi!: Q`8`i`\0hjlHJL  "$&&$"F}  *(&$" *9 GHIJ<30A1o8ԩЩF}>/BԩC \ e&GHҍҩȍҩE ҩܢFڍ0A1;<=>?F} p9:҅(qA9A:::i: 9:w99899i'9s:@sF}:ʝ9i9U:@9ʝU:iHH䢃d9c:A-Fⅰ E9ȥeЍЍMF}LAH M ELHM ʆi:LHLwHi ЎLHⅰLCG::dF} )iե    II[L::AA񥰅LHLCGM:- 1P PF}L|QJAx E4- ;);i LIGJJAy E4-  ;);F}i  LIŴLWJϠLWJIJŹFņí )iiª}FÕšٖF F}ʊLJL=JřFLILJŴΥլũŘɴ LJPiũYťũF}Ř ۍLJw8ũZťL}KL}JKKc֩2שȍҩҩL}KL}K֩ӅĮF}ȔŘāňL}KŠāňL}Ką֭ )iL-KLK 3İ$ٰO"LK Ei LK F}EiLK Ei LK Ei ŵLLۤ+KLš+ƸLLE}B+Ȑ Fš G})iELLŅƹ+ũťæ•ř+LLŷ`ù` )+ ) iLLišåʭ G})iE`温` [L=LLyFšߵř=LMAFLLLMİLMؠA=šG}٢F=ALM٦FL%M٪FiL-M8L-MŹ=yFAȐ FšL%MAř=FL-MiLMG} O  O O  OJJH LOŢ kPhJ& LMNOK8GFHhŢ2 kPG} JHJ O kPhJHJJ O kPhJH)  d kP>G}hJ)  d kP?L!NХLO::LNOO: ::LO EG}:::L#O:LQ/̰C ߰LI L;O 8/8L[O¹8@8LpO G}i`8 LOJ::,ʎ: <: d`OPd`JJ::,ʎG}: =: ``J: )JJ: )`HH-ݥH:G }$i: F(ưhhh`LtP: ɤLyP:i:LPLP`PQ  `ڥJH G } kPhJ  kP`L#QFLQR d9 c H ЍG } `HH    hhLHhhLCGyLQx֎  hhLLI:Q-R9:G }9)LR:9~ALQ:9~A:A:ALCGFLQx֎  hhLLI:Q-R9:DG