@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@W1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD` D  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLL&0") $G% }H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` dB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}} HE |||DDOS DOSDOS SYS }}}}CDOS SYS} 0`BDELV !B }`LVUQ   ]   TU J ]L!T  #      TU  } L ? .  t`GBJ V~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI   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;DELV䌚 !B y`@ʆ 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 V (` 9 V⪍ ઍ  -'}LLu DEHILV 9 .l 9 .l  `` s$B VBH(}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL)}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e*}1i1232435ޥ<<8} 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D,}UPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. LOCK F-}ILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES9!&x#!7&p))'&X*./)L''-؆莟.}R'S  vW DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i/}il ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 00}JB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE1}N !B 1L " 1 !BDED:}:1BJ|DE 1DEBH2}I 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L 3} BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWED493 FREE SECTORS COPYING---D1:TYPO4}ST.BASG# 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B5} 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#6}PdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%7} 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C}//3Hu ξL/L DRIVE TO WRITE DOS FILES TO?WRITING NEW DOS FILESTYPE "Y" TO WRITE DOS TO DRIVE 2.?}D2:DOS.SYSERROR - NOT VERSION 2 FORMAT. , &* բ( 1L `[) 0NΞ 0 L1M) 1@} L BAD LOAD FILELOAD FROM WHAT FILE?) 0 0#B 1L WHAT FILE TO LOCK?) 0 0$B 1L WHAT FILE TO UNLOCK?DUA}P DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO USE PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV. h  ,B}  `)  <0 2 2 0  ,   ,,ޢ* 1L ,K* 1 ~0 0C}FINSERT BOTH DISKS, TYPE RETURNERROR - DRIVES INCOMPATIBLE., 1 ~038  , 1L D}, &*  Lz+, 0 , 1 ~0 + Y,0!,0 ,L+ ,mm  v,"ǭE}0Ξ, 05,Lt+L +,Hh` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNF}INSERT DESTINATION DISK,TYPE RETURN`    `L,8,0( rG}L1(`ߢ) 1* 1 ~0Y`hhL S SL1) 8`NAME OF FILE TO MOVE?- 0 0|DLtH}% A., 1 <0 0 .@L# .BJ 1  DEHIB V L1 ,5 1 <0,L. I} JB|,A#Pd#DE 1 HI BDEHHII 1 B 1 , 1 <0,0Lf- B VJ},A#P, 1 <0 0L#L ߢ) 1* 1 ~0Yj383}mm ݭK}}`8}``|* ? ɛ,`|:(|/ 1L `DESTINATION CANT L}BE DOS.SYS0 0H{ $22Δ $28/L /) $2 Π $2 0 ξM}hAΞB,0 J 1 BޝDEHI,HDE 1HIHIDELSAVE-N}GIVE FILE,START,END(,INIT,RUN)O X0 1`BDEPHI V` X0H 1 L O}0 0 1L0`PLEASE TYPE 1 LETTER,0`hhL <0 1L0LA1 ,;ɛ7,"ɛ:ݦ1ݥP}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{Q}NAME TOO LONG B VL ` L1I H1EӝDL1|mDiE` V0`8d/8 i:"2!22 1R} L ERROR- 165ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4 uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4 uEiͩkΩ͙kCop j`j {j`Hi͝Νh`V}L"UNEM:D"NURͩkΩ͙kCop j`j {j`Hi͝Νh`!(ʝ  ` ``  } }  `8     `8   `    ^ ~ HX} e  e &` > &&8  > > ƀ` !  ` =   =  `   HY}   ` ]   ]  ` I  I `    U  M  E  `  2  (  ׽HZ} ͽ     `   } }  `  ` > } } H[}ȱ ` > } } Ƚ `} } ` 腋`8HH``膇`H\}H8     h}  }  `8           Ā фIJ)eeH]}慠ф$%Ɓ   ``` #Ji  ` #J #i  ` # #JJ H^}#JJ8   i L6#8    8  8 ȱ 8 ȱ   H_} }  }  %`   ȱ 8  8 ȱ L6# }  } 8ȱ僰 6#8H`}  ȱ   } Ƚ }  }  }  %`8  8 ȱ  6# ȱ  Ƚ Ha} 8倥偐 &&8  > > ƀ` !  ` =   =  `   ~}   ` ]   ]  ` I  I `    U  M  E  `  2  (  ׽ } ͽ     `   } }  `  ` > } } }ȱ ` > } } Ƚ `} } ` 腋`8HH``膇` }H8     h}  }  `8           Ā фIJ)ee }慠ф$%Ɓ   ``` #Ji  ` #J #i  ` # #JJ }#JJ8   i L6#8    8  8 ȱ 8 ȱ   } }  }  %`   ȱ 8  8 ȱ L6# }  } 8ȱ僰 6#8 }  ȱ   } Ƚ }  }  }  %`8  8 ȱ  6# ȱ  Ƚ } 8倥偐 $>  % }> `    1 8 Ѝ`    1 8  ? ` JH hJH hJ ?  }`W^M~L LLi0HW!NNi h` 80LMWL>M ^M~L } 8 NW!^N` !`l `! !)I! !! U!`l `!. ! 8LMN !ʎ  8 } ! !` $$%8    `ЍР` `CUTWLMpA"0H")!0!` "0 } ύ ߍ  ! Ȍ! ԩ>/Э   oo`B&L!%L! L "`<"l"0";"N"!" } ## MM"&`l"`&i&؛ " " " " &7& B V0B }D&EJ V0 e& B V`HL` 49CFKNUYbehoty~ },AWq #(-=S]diqv{ }%(*@EJPU\t  N#@#@##`M#L#JJJJH)J#h) JJK#L#: #HH#J# D#J#hHI#K# } D#K#h #J#H#K#I#8nL# @#M#Д`l `` #08;BGJOR_bgjwz}  Z#@#@## }y``W#Y#X# @#W#yX#riN#siR#X#Y#Y#ǩM#yN#M#NM#jNM#jN# }yR#N#NN#jNN#jI #Ђl `` */369>KX`ejquz  G#@#@##` }E# #8)HMF#      #h)F# @#E#`l `` *KQTW]  E#@#@#{#`D }# u#yJJJJ @#D#`l `` 8;E  P#@#@##`ccO#N#JJJJH) J }L#h)M#M#N#: #HJ#L# D#L#hHK#M# D#M#h #L#J#M#K#8nN# @#O#В`l `` %39 }<?FKNSVcfkn{~ D:MM.COM !11 !00 ! }00 !0000 ! ! R" !LY1 !00 !00 ! '(11 ! ! R" !L1 !00 !11 ! '( !L1 }1 ! ! '(`0123456789ABCDEF$xx !11)111JJJJ111 !11 !`L2Please type in two hex }1 ! !0 !00 ! 1LH2characters. There is no12 ! !0 !00 ! 1L2need to press Return: j2 ! ! }0 !00 ! 1L21122 ! 4' !11 !A ! f" !L2 !1 &!0 ! 5! !1L3 !1 &!A } ! 5! !11 ! ! f" !11 !1 !1 # !1 ! R'1182121L2 ! ! R' !1 " ! } ]! !1 " !`L3Please type a filename̠3 ! !0 !00 ! 1L4a }nd press Return: 4 ! !0 !00 ! 1 !3 ! ! e( !3333 ! ! R" !L43 !: ! 7"3 !: }! 7" ! !L4L4D:4 ! !3 ! %3 !3 !33 !3 ! $3 !33 !`L4333 !33 !` } !55 ! !44 !4L*5**5555&5'5Hȱh !44 &! ! ! &! ! !4 } &! !558&55'55L@5` !55 !55 !55 !5550 !55 !55 !55 ! } 50 !0 &! &! !+ !55 !55 ! '(0 ! K!55 !55 !55 ! 55` !^6Lw6Creating drive }rh6 ! !L6, please wait...6 ! ! 1 ! w' ! ! !ɠ0 !00 ! 'Ǡ( ! !\, !v ! 5^6 ! } ! &L7H- ! !- ! ! 5L7 ! &LH7. ! !Ӡ. ! ! 5L7 ! &Ls7/ !J !ՠ/ ! ! 5 }L7 ! &L7 / !b !o/ ! ! 5L7 ! &L7/ ! !0 ! ! 5L7 ! w'`x:+7+ ! ! }%" !L8L8(None)7 ! !0 ! %L28}Multi-Mouse v2.1c by S.8 ! !LL8 Trew 1991.A8 ! ! 1 ! ! R'L }8For help see section 5 ofk8 ! !L8 the manual.8 ! ! 10 !00 !0 !00 ! 1L8A. Start Page...... }.. Ԡ8 ! !0 ! &! 1 1L"9B. Device name....... 9 ! !ؠ7 !77 ! 1LZ9C. Driver filename... D9 ! }01bpDDIRFTMCCCCC6C12C7C8C76C70} %%LAZY L}OADER II by Frank Walters%%Modified for AC by Steve Hoffee _<;@,;@,;@,;A,;A6,H6}-@IU6.D1:*.*_6.D1:{6-6-@'6-@36-@?6-@dK6-A(W6-@pc6-}@o6-Ad{6-AU-@!-@567%,.>:AT,9 Q67%<%,.>:@),U / }@@9% @@/ A(]]67,.PACˠŠɭŠ}2cc67@,.P堣報󺠠κЮӠ<>;67Aa,.(}>$FD67A)<A2,.(F:,"D67A)<A2,.P( F:,"(6}7A)<A2,.CTRLZ,F:A,,67A)<A2,.INVSd:67@<@,.>:%,-67<,.>:,3-7(:}$n# Ap#@x5@!-@@5-@e@ G:7<,4+)7<@},4 F)7@<@,4 F='G Ap= "-@(+@ =-@ @&"(>:%,>:A},7@,& -@A" G:7<,4+)7<@,4 F)7@<@,4 F='G Ap}C"A!-@%(1@&C-@&@"A"AP""(>:%,>:A,7@,}C 6-&C7<@,4 F)7@<@,4 FApG-@@"'( more files...,6 B<}D6-&G$  B 6-&:-@@"(37@<@,4 :(T" (ORS$,I+}AR%AA7A IAAR6  A@AF:,"J L}AUNF:,"AUA4O;2@B@@--@1 ;2P"F:,"@`" A0}R"F:,"A$" A0TK:^@ ) 0+!@H* @S,)"@V66-@ Ah} "+.%m "+r8"AU!-@@.(>:A%,8 A|F @2)!A"} *(>:AS,8-AP< F A  @eA2!!!@* @A2!A2-@}@(>:%,($67A@<A@,.>:%,( % 6-&!@&%6-&@# Ap#@} - .   6.7@:,$$7@ <@ ,0 A0+-@ }7<,4 !'+ Ap67%@,.7<, -@7<,4 ' A`&67%@,.}7<, 0] 67%@<%@,..4-@ @A7<,0 Q67%,.7<,Y6-%] :K+67AB<AW},.G67AB<AA%B:,,.K D A%N F:A,@!ApX  }AbK:l2 )2@i*@v*AUA q"AU@0v"@iA}@w Aex`+F:AB&,"A)F:AAq,"A6<QF:AUv,"Ab`6-?:AUv,z'F:AB}&,"A'6-?:AX,|)  + @9)6-?:,~ AN(>:A%, &AR8-@}@B(N-@% B%(PRESS Π WHEND( TO)( ENTER >:@4,,(/(A( }RUND= AR'AAv9A @=  B6-@!@6( Ҡ}F:A,T 6-F:,-@!#(RETURN1-@0G"@)"@vJ'T AO -@!(},-@0B"@)"@vE'O A  AAAU%K A`!-@}@-,@9/@'= K,@'&K-@@ '( žҠ9-@@K( ̾Ġ}"-@&+B:,',@"(--@@*(ξϠ-$D:MENUa!ɠ0 !00 ! 1L9D. Foreground|9 ! !0 !00 ! 1L9E. Background9 ! !0 !00 ! 1L9F. Res }erved pages.... ۠9 ! !0 ! 1 1L":G. Dos 2.x file...... : ! !0 !00 ! 1L[:H. Make ST mouse driverD }: ! !0 !00 ! 1L:J. Make tablet driver}: ! !0 !00 ! 1L:K. Make joystick driver: ! !0 } !00 ! 1L;L. Make trakball driver: ! !0 !00 ! 1L@;M. Make Amiga mouse driver&; ! !0 !0 }0 ! 1Ls;N. Make core onlyb; ! !0 !00 ! 1L;Q. Quit; ! !0 !00 ! 1 ! ! R'` }N+S+N+ ! &! ! ! 4' !;; !A ! &L< 1 !00 ! ! ! ! 7" !LN+N+L?E ! &L>S+S+L?F ! &L> 1 !00 ! ! f" !L>L }[>You must reserve atH> ! !0 !00 ! 1L>least 6 pages for}> ! !0 !00 ! 1L>the driver.> ! } !0 !00 ! 1 1 !0L/>L?G ! &Lm? 3Ϡ; ! %Ϡ; !;; !L?? ! ! 3$ !Le?Ϡ; !;; ! }0 ! %0 ! !+ ! %+Lj?+L?H ! &L? ! _6L?J ! &L? ! _6L?K ! &L? ! _6L?L ! & }L? ! _6L?M ! &L? ! _6L?N ! &L? ! _6L?; !D ! f"; !E ! R" ! !L;; !`LF@You are ad }vised not to0@ ! !0 !00 ! 1L@use any drivers createdh@ ! !0 !00 ! 1L@on this run after@ }! !0 !00 ! 1L@this error occurred.Ԡ@ ! !0 !00 ! 1`0 ! ! R" !L,A00 ! } &! ! 5! ! ! !0` AؠA [# ! w' ! w' ! ! !LAK:~A ! ! ' 7 ;Q ! %" !LAGoodbye.A } ! !0 !00 ! 1 ! w' V#`ؠA [#LAError A ! ! ! 1 15 ! !LB -@5L*BPress any key: B } ! !0 !00 ! 1 ! 4' ! ]! !L\A V#`PAA ! ! ! 1 15 ! !LB -@5L*BPress any key: B =10 REM !------------------------------!11 REM ! TESTPTR BY SIZ 1991 !12 REM !------------------------------!13 RE}M ! This program demonstrates !14 REM ! some features of Multi-Mouse !15 REM ! in a BASIC environment. !16 REM !--}----------------------------!17 REM 18 REM !------------------------------!19 REM ! Set up a graphics 15 screen !20 REM }! with a text window. !21 REM !------------------------------!22 GRAPHICS 15:COLOR 123 REM !---------------------}---------!24 REM ! Read in the custom shape, a !25 REM ! crosshair. !26 REM !--------------------------}----!27 READ HEIGHT:DIM XHAIR$(HEIGHT*2+3)28 XHAIR$(1)=CHR$(HEIGHT)29 FOR LOOP=2 TO HEIGHT*2+330 READ IN:XHAIR$(LOOP)=CHR}$(IN):NEXT LOOP31 REM !------------------------------!32 REM ! Open the mouse driver and !33 REM ! set the maximum limi}t to !34 REM ! (159,159) so that the mouse !35 REM ! cannot enter the text window.!36 REM !--------------------------}REFORMAT 2.01 DOCUMENTATION Copyright 1991 by Thomas J. Andrews This documentation and theprogram REFORMAT 2.01 may b }e freelydistributed as long as they areunaltered and they accompany eachother. REFORMAT 2.01 will reformat textfile }s into records of 1 to 128characters, including a 40 columnform that can be used by PRINT STAR(a documentation printing pr }ogram),or printed to the screen from DOS(using option C). Other forms may beused by word processors, or uploadedto telec }ommunications services. Itwill handle files of any length, hasfull word wrap capability, and itwill treat the carriage r }eturn-linefeed combination of standard ASCIIfiles as an ATASCII RETURN so thatyou may format files created on anddownload }ed from other computers. Itcan output a file using the ASCIIcarriage return-line feed, so thatthe file may be ARCed and u }ploaded toanother brand of computer. REFORMAT2.01 is written in compiledTurboBASIC XL, so it requires an XLor XE compute }r and one or more diskdrives. A slower 400/800 version isavailable on request. To run this program, you willneed thr }ee files. The first isDOS.SYS. Please use DOS 2.0 or 2.5.DOS 2.5 is probably best. MYDOS 4.5also seems to work. The ob }ject filesused with this program are Atari DOS2.x compatible. Any DOS that willnot load DOS 2.x compatible programswill }not work. The second is RUNTIME.COM, theTurbo BASIC loader, required by allcompiled Turbo BASIC programs. The third } is REFRMAT2.CTB, whichis the compiled version of theprogram. If your computer has beenupgraded to over 192K, I recommend }the use of SMARTRAM 2.5, a RAMdiskprogram by Tim Patrick, which waspublished in the September 1989 AnticMagazine. Used w }ith DOS 2.5, it willcreate a full-sized enhanced densityRAMdisk at D8:, and it appears to befully compatable with Turbo BA }SIC. The easiest way to run theprogram is to set it up to runautomatically on power-up. To dothis, rename RUNTIME.C }OM toAUTORUN.SYS and REFRMAT2.CTB toAUTORUN.CTB, and put both on the diskin Drive #1. Upon power-up, DOS.SYSwill load an }d execute any file namedAUTORUN.SYS, which in our case willbe the Turbo BASIC loader. Theloader will in turn look for any } filenamed AUTORUN.CTB, load it, and runit. To run REFORMAT 2.01 from DOS,use option L to load RUNTIME.COM. Anerro }r message will appear whenRUNTIME.COM does not find a filenamed AUTORUN.CTB on the disk. ThisError massage may be ignored }. Whenprompted with a (D)os, (R)un, or(L)oad statement on the screen, press"L" and use REFRMAT2.CTB when askedfor a file!} name. The fileREFRMAT2.CTB must be in Drive #1.REFORMAT 2.01 will then load and run. When you run REFORMAT 2.01, the!}first thing you must enter is thefile name of the source file. To geta directory of the default disk,press just RETURN. !} To change thedefault drive, use "Dn:", where 'n'is the number of the new defaultdrive. When entering the file name,if n!}o drive is specified, the defaultdrive will be used. Second is the left margin of thesource file. Many files arepr!}eformatted for use with an 80column device, such as a printer.Frequently, such files start eachrecord with a certain numbe!}r ofspaces to provide a blank area, ormargin, on the left side of the page.This left margin will leave a zig-zagappearanc!}e to the output if it is notstripped away. REFORMAT 2.01 willremove the left margin for you, butyou must tell it how larg!}e thismargin is. To determine this fromthe program, press RETURN with noentry. REFORMAT 2.01 will then checkthe first f!}ifty records and reportthe largest and smallest marginfound. A source with records longerthan 128 characters will report ! }backa 0 for the smallest margin. You mayuse a number larger than the minimum,if you like. REFORMAT 2.01 willstrip away ! }only space characters, nottext. However, if you use a numberlarger than the minimum reported,paragraph indentation size wi! }ll bereduced. Next you need the filename forthe output file. You may change thedefault drive and get a directory of! }the disk as with the source filename.The source and destination defaultdrives are independent of each other,so each can b! }e changed withoutaffecting the other. The output filewill be close to the same size as theinput file, so be sure there is!}enough room on the disk for it. Thesource and destination may use thesame drive, and may use the same orseparate disks. !} There will be diskswapping prompts if needed. You must also tell REFORMAT 2.01the size of the output records. This!}may be anything from 1 to 128. Ifyou want unformatted text to beoutput, use a '0' for the answer. If you used a numb!}er between 1and 128 in the above question, youwill then be asked about the outputleft margin. This tells how manyspaces !}will be inserted at thebeginning of each line of output.This value will be subtracted fromthat above to get the actual lin!}elength. For example, to get a60-character line centered on an80-column piece of paper, use '70'for the first question, !}and '10' forthe second. Next, you will receive a menuof questions concerning some of theoperating features of the p!}rogram.These all require yes or no answers,and default conditions are set foreach one. Use the RETURN key to moveto the !}various questions, and theSPACE BAR to toggle the answers. Youmay go through the list as many timesas you like. When all!} features areset to your satisfaction, use the ESCkey to exit the menu. Here is anexplaination of each question: OU!}TPUT RIGHT JUSTIFIED: Thisoption adds spaces between words tomove the right side of the outputtext record so as to give s!}traightmargins on both sides. When this isturned off, the right side of thetext has a jagged look. This featureis autom!}atically disabled if WordWrap is turned off, or if unformattedoutput was selected. The defaultcondition is N. OUTPU!}T IN ASCII: When this isyes, instead of the normal ATASCII(Atari ASCII) CHR$(155) as anend-of-record, the standard ASCII!}carriage return-line feed (CHR$(13)CHR$(10)) is used. No othertranslation is done, and "CONTROLcodes" and inverse charact!}ers arepassed through intact. Unformattedoutput will be in ATASCII only. Thedefault condition is N. REMOVE NON-ESS!}ENTIAL EOR'S:Ordinarily, when text is formattedfor a device such as a screen orprinter, there is an end-of-record(EOR) on!} the end of each line. WhenREFORMATting, not all of these EOL'sare always necessary. For ordinarytext, the only "essenti! }al" EOR's arethose at the end of paragraphs. Ifthis option is set to Y, REFORMAT2.01 will check the charactersfollowing !!}the EOL for either anotherEOL (skipped line) or a spacecharacter (indicating anindentation). If one is found, thisis an !"}"essential" EOL, and remains inthe text. If one of these is NOTfound, it is a "non-essential" EOR,and is replaced with a !#}space. Thisallows you to make records longerthan those of the source, andeliminates an occasional 1 or 2 wordline in the!$} output. When set to N,the program acts as REFORMAT 1.0 did,leaving in ALL EOR's. Out-of-the-ordinary text, likeprogram !%}listings, are usually bestdone using N. The default setting isY. WORD WRAP ON: Most wordprocessors for the Atari 8!&}-bit useword wrap, where words at the end ofa line are not cut in the middle ifthey are too long to fit, but aremoved to !'}the beginning of the nextline. A "word" here is any string ofcharacters between spaces or EOL'sSometimes, like when forma!(}tting BASIClistings, it is better to have theword wrap off, so this feature isprovided. The default is Y. PROMPT FO!)}R DISK SWAPS: A Y herewill pause the program at the propertimes to allow disk swapping, usedmostly with single drive syst!*}ems. Ifthe same drive number and filenamewere used for both source anddestination files (NOT a recommendedprocedure!), d!+}isk swapping isautomatically activated, overridingthe menu choice. The default forthis one is N. FORMAT DESTINATION!,} DISK: Thisone is pretty obvious, and probablyneeds little explaination. Just beadvised that there are NO "are yousure"!-} prompts, so this is your lastchance. As a safety feature, if youchoose to format and you used thesame drive number for s!.}ource anddestination, disk swapping promptswill be activated. Disk formattingwill be done in the usual density forthe DO!/}S used, that is, DOS 2.5 willformat in enhanced density and DOS2.01 will format in single density.The default is N. !0}WRITE VERIFY OFF: Under standardDOS 2.x operation, when a sector iswritten to the disk, it immediatelyis read back in and !1}verified. Thiscan take a significant amount oftime, and most drives and disks arereliable enough that it really isn'tnee!2}ded. A Y here will turn off theverification, and restore it to itsoriginal condition at the end of theprogram. THIS MAY !3}NOT WORK PROPERLYWITH A DOS OTHER THAN ATARI DOS 2.0OR 2.5. If you use another DOS, besure to use N to avoid computerloc!4}kup. Defaults to Y. All options remain in effect forthe entire file. If you have a filethat you want reformatted in!5}to morethan one format, split the file intoseveral files, reformat each oneseparately, and recombine them. When all !6}options have been set,insert the disk(s) for the originalsource and reformatted files into theappropriate drive(s), and pr!7}essSTART. That's all there is to it -REFORMAT 2.01 will do the rest,prompting you to swap disks ifnecessary. While it i!8}s working, theunformatted form of the text will bedisplayed on the screen. The inverseescape symbols you see are the EOL'!9}s. This DOC file is an example ofthe output of REFORMAT 2.01. Theoriginal source was a SAVEd wordprocessor file, wh!:}ich was unformattedtext. It was formatted for screenreading using a line length of 37,and an output left margin of 0. Th!;}isformat also works very well withPRINT STAR. To reformat the file foran 80 column printer, use a linelength of 75, and !<}an output leftmargin of 5 for best results. This version corrects two bugsfound in version 2.0. One has to dowith p!=}roper handling of paragraphsthat are separated by skipped linesand have no indentations. The secondhad to do with the unf!>}ormatted outputoption, which wasn't workingproperly. This program is distributed asShareware. If you like it, and u!?}seit, a donation to compensate for mytime, efforts, and expenses would beappreciated. The suggested donationis $2.50. A!@}nyone who has made adonation for version 2.0 need notmake another for this version. Anyquestions, comments, and suggestio!A}ns,on REFORMAT 2.01 or a new program,would also be appreciated. To helpwith this, the last part of thisdocumentation is !B}an E-Z responseletter. All you have to do is printit out, fill in the blanks, and mailit to the address at the top of the!C}page. Those wishing to use E-mail maycontact me via the "Backstairs" BBS,run by ACE of Syracuse, NY. Thephone number is !D}315-458-0118 and myuser name is Tom Andrews. GEnieusers may use J.ANDREWS24 for E-mailto me. Atari 8-bit computers f!E}orever! Tom Andrews Easy-response letter: mail to: THOMAS J ANDREWS 7805 US ROUTE!F} 20 MANLIUS NY 13104 Tom, I used your REFORMAT 2.01program on my Atari__________computer with ___________________!G}____ diskdrive(s). I own a ______________printer that is( )/is not ( ) Epsoncompatable. I have used or plan to use REFOR!H}MAT2.01 for (please check) ( ) preparing files for Print Star.( ) converting downloaded ASCIIfiles. ( ) converting files !I}forscreen reading. ( ) converting filesfor telecommunications uploading ( )other(specify)_______________________________!J}__________________________________________________________________________________________ I rate this program in the!K}following ways: Ex. Good Fair Poor Ease of use ( ) ( ) ( ) ( ) Utility ( ) ( ) ( ) ( )!L} Speed ( ) ( ) ( ) ( ) Doc. clarity ( ) ( ) ( ) ( ) I found this program on thefollowing bulletin !M}board/pay service:_________________________________________________________ Phone Number (ifBBS):________________ I!N} would be interested inreceiving upgrades to this program (). Comments:_________________________________________________!O}__________________________________________________________________________________________________________________________!P}__________________________________________________________________________________________________________________________!Q}_____________________________________________________________ My name and address are:______________________________!R}_________________________________________________________________________________________________________________________!S}_______________________________________________________________________________________________________________________ AMULTI-MOUSE VERSION 2.1cBy Simon Trew, 1991.1.0 About This Manual.This manual documents the Multi-Mousesoftware versi%U}on 2.1c. Version 2.1cis a full release version and this isthe complete documentation.This release supersedes releases 1.0%V},1.1, 1.2 an 2.1b, which are now nolonger supported. 2.1b was a beta-test version. No comments werereceived as result of %W}sending beta-test copies, and so the software (butnot the documentaton) is identical torelease 2.1b. However some files ha%X}vebeen added to the disk.1.1 Contents.This manual is split into severalfiles so that it can be easily fittedinto most%Y} word-processors or texteditors. It was written usingTextPro, a very good public-domainword-processor, but it should bep%Z}ossible to use it on most othereditors with the minimum of effort.The document files are calledMMMANx.DOC where x is the %[}sectionwhich is in that file. For examplesection 5 is in the file MMMAN5.DOC.You should at least read up tosection 5 bef%\}ore using the program.The manual is written in a fairlysequential way so that the easy stuffis dealt with first and then t%]}heharder stuff, and sections 2 to 5just detail the program operation andhow to get started with it.A full contents list %^}follows: 1.0 About this manual 1.1 Contents 1.2 Files on the disk 2.0 General features 2.1 Basic oper%_}ation 3.0 New features 3.1 New CIO commands 3.2 PUT commands 3.2.1 NOTE actions 3.2.2 POINT acti%`}ons 3.2.3 Notes on NOTE and POINT 3.3 The RENAME XIO 3.3.1 Notes on the RENAME XIO 3.3.2 A sample s%a}hape 3.4 Old bugs 4.0 Configuration 4.1 Start page 4.2 Device name 4.3 Driver filename 4.4 Foreg%b}round colour 4.5 Background colour 4.6 Dos 2.x file 4.7 Reserved pages 4.8 Creating the files 5.0 Mu%c}lti-Mouse and Turbo-BASIC XL 5.1 Notes on Turbo-BASIC XL 6.0 Machine code access 6.1 Vectors 7.0 How Multi%d}-Mouse is configured 7.1 Generating data tables 7.2 Advantages & disadvantages 7.3 Other configuration 8.0%e} Device drivers 8.1 Mouse 8.2 Trakball 8.3 Touch tablet 8.4 Joystick 9.0 Endnotes 9.1 New tablet%f} driver 9.2 Other device drivers 9.3 Distribution 9.4 Over to You1.2 Files on the disk.The disk contains %g}files in anarchived form. Of course, a de-archive program is included in theroot directory. The READ.ME file notonly tell%q}B'DOS SYSB*+DUP SYSBUAUTORUN SYSBE|MMCONFIGCOMBTESTPTR BASB"MENU BTURBOMODTURHELP BASBiREFRMAT2DOCBTMMMAN1 DOCBzMMMAN2 DOCBmMMMAN3 DOCB"MMMAN4 DOCBMMMAN5 DOCB,1MMMAN6 DOCB"]MMMAN7 DOCBMMMAN8 DOCBMMMAN9 DOCB%WFILEDUMPCOMs you to read this and howto de-archive the files, but may alsogive update information which hasbeen written since this ma%r}nual waslast updated.The only files you need to generatethe Multi-Mouse drivers are in thePROGRAMS archive. The main pro%s}gramyou wil want is MMCONFIG.COM which isa binary file which configures thedrivers (see section 4). If you wantto use the%t} drivers with Turbo-BASICXL, you will also need TURBOMOD.TUR,which is detailed in section 5. Italso contains FILEDUMP.COM %u}which maybe useful you if you want to writeyour own drivers.The other files in the PROGRAMSarchive are BASIC demonstrati%v}onprograms. TESTPTR.BAS is just a basictest that allows you to draw lines ona screen. It is well commented andis worth l%w}ooking at to show how easyit is to use the drivers in programs.The SOURCE archive contains all thesource code for the dri%x}vers, for theMMCONFIG program and the FILEDUMPprogram, as well as the source codefor the Turbo-BASIC XL patch inTURBOMOD.%y}TUR.The DOCS archive contains thesedocuments, of course.ll as the source codefor the Turbo-BASIC XL patch inTURBOMOD.$>2.0 General Features.Multi-Mouse is a set of machine codeprograms for operating a pointingdevice within your programs. It){} isintended for use in mouse-orientedprograms (I do the P, you do the WIM)Because few people have mice fortheir Atari 8-b)|}it, Multi-Mouse hasbeen developed to allow a joystick,mouse, touch-tablet or trakball to beused. Your program need not kno)}}wwhich is being used.The word "mover" in this manual istaken to mean "mouse, trakball,joystick or tablet".The mover sh)~}ould be plugged into theport 2 on your machine, leaving port1 free for those of you who alwayshave a joystick connected. )}To create the screen pointerMulti-Mouse uses two players fromthe player/missile system. Thismethod allows the pointer to )}overlayanything on the screen. Two playersare used so that the pointer can bemade in two colours, which makes itvisible a)}t all times, regardless ofwhat colour screen you are using.2.1 Basic Operation.Multi-Mouse is installed as a CIOdevice)} having the title M:. It isloaded in during the boot process(see Configuration, section 4). Itprotects itself from Reset a)}nd sowill be avaiable until the computeris switched off or rebooted.To display the pointer, use OPEN #n, 12, 0, "M:")}Where n is the channel number withwhich to access the pointer. Issuingthe OPEN statement makes a pointervisible in the mi)}ddle of the screen.To allow the pointer to be movedaround, issue the followingstatement: NOTE #n, X, YThis will allo)}w the pointer to bemoved using the mover, until thebutton is pressed. It then returnsthe position of the pointer into the)}X and Y variables. The position isreturned as co-ordinates in thecurrent screen mode. For example, ifyou are in Graphics 8)} then X will bein the range 0..319 and Y in therange 0..191.You can force the pointer to acertain position using the POI)}NTstatement: POINT #n, X, Ywill position the pointer at thepixel given in X, Y. Of course insome modes the pixels ar)}e quite big.With POINT, the pointer is alwayspositioned at the top left of thepixel. NOTE will return the screenco-ordina)}tes of a pixel whenever anypart of the pixel is being pointedat. So the pointer may move slightlyif you do a set of statem)}ents suchas: NOTE #n, X, Y POINT #n, X, YTo get rid of the pointer from thescreen, use CLOSE #nPerforming a )}NEW or END in BASICautomatically CLOSEs all channelsexcept 0.You can change the colours of thepointer by POKEing locatio)}ns 704(foreground) and 705 (background).The value to poke into the bytes isgiven as: luminance + (16 * colour)atio(y3.0 New Features.Many new features have been added tothe Multi-Mouse driver. These do notincrease the amount of user memo-}ryrequired, because they sit in theunused portion of player/missilememory. In fact you can configure theprogram to give y-}ourself more usermemory than the last version. However,the extra features do mean that youcannot use any of the missiles f-}romthe player/missile system, becausesome of the code lies in that area.New features include: * Compatibility with Tur-}bo-BASIC XL. * Relocation and configuration. * Easy user-defined pointers. * New CIO commands. * More flexibl-}e NOTEing. * Pointer window definition. * A better tablet handler. * An easier interface for machine-code routin-}es.3.1 New CIO commands.You can return the status of thebutton using a STATUS command. If anybutton on the pointing de-}vice ispressed, it will return 0, otherwiseit will return 1. For example: STATUS #n, X IF X=0 THEN PRINT "You're Dea-}d!" IF X=1 THEN PRINT "Aargh! You Got Me!"You can also find out where theprogram is loaded, using a GETcommand. It -}returns a byte which isthe page number of the start of theMulti-Mouse program. This is usedmainly to POKE into the Multi-M-}ousedata table (see section 6). Forexample: GET #n, PAGE:BASE=PAGE*256 PRINT "Multi-Mouse loaded from address ";B-}ASE3.2 PUT command.There is also a PUT or PRINT command.This command is used to configure howMulti-Mouse responds to -}NOTE andPOINT.In the default mode, the NOTE commandwaits until a button is pressed,returning the position of the pointer-}; the POINT command sets the pointerposition. However you can changethese actions using a PUT command.There are seven upp-}ercase lettersthat you can PUT, each having adifferent action. If you use anyletter other than the seven allowed,it is ig-}nored. This lets you PRINTmnemonics which make the statement'spurpose more obvious. For example: PRINT #n, "Click" P-}RINT #n, "isWhere"Only the uppercase letters C and Whave any effect in these statements.The key letters are: C, U, W, T, -}P, Land M. The last three are used toadjust how the POINT action works.The first four are used to adjust howthe NOTE acti-}on works.You are not advised to PUT any otheruppercase letters as part of yourcommenting text, because futureversions ma-}y use them. Lower-caseletters are guaranteed to be unused,and are safe for commenting.3.2.1 NOTE actions.PRINT #n, "Cl-}ick"Putting a "C" to the channel makesall future NOTE commands wait untilthe button is being pressed, thenreturns the co-}-ordinates. If thebutton is being pressed when the NOTEis issued, it returns straight away.PRINT #n, "Unclick"Putting a-} "U" to the channel makesall future NOTE commands wait untilthe button is NOT being pressed, thenreturns the co-ordinates.-} If thebutton is not being pressed when theNOTE is issued, it returns straightaway.PRINT #n, "Toggle"Putting a "T" to -}the channel makesall future NOTE commands examine thestate of the button when the NOTE isissued. NOTE then waits until the-}button changes state, then returnsthe co-ordinates. So if the button ispressed when the NOTE is issued, itwill allow the-} pointer to be moveduntil the button is released.Otherwise it will allow the pointerto be moved until the button ispresse-}d.PRINT #n, "Whereis"Putting a "W" to the channel makesall future NOTE commands returnimmediately with the co-ordinates-} ofthe pointer. The NOTE will not allowany pointer movement.An OPEN of the M: device sets theNOTE mode back to "Click".-}3.2.2 POINT actions.It is now possible to set the windowinside which the pointer may be moved.The default is to set the-} windowedges the same as the margins at theedges of the standard screen. You maywant to alter this so that yourestrict th-}e pointer to a smallerwindow.PRINT #n, "Most"Putting an "M" to the channel makesthe next POINT command set the bottomr-}ight corner of the window. Forexample, the following statementsrestrict the pointer to the graphicswindow of a split graph-}ics 7 screen: GRAPHICS 7 OPEN #1, 12, 0, "M:" PRINT #1, "Most" X=159:Y=79:POINT #1,X,YPRINT #n, "Least"Putti-}ng an "L" to the channel makesthe next POINT command set the topleft corner of the window. Forexample, the following state-}mentsrestrict the pointer to the textwindow of a split graphics 8 screen: GRAPHICS 8 OPEN #1, 12, 0, "M:" PRINT #-}1, "Least" X=0:Y=192:POINT #1,X,YPRINT #n, "Position"Putting a "P" to the channel makesall future POINT commands work-} asnormal, setting the pointer position.The "Least" and "Most" commands onlyhave currency for one POINT afterwhich Multi--}Mouse returns to the"Position" state anyway. However thiscommand may be useful for cancellinga previously given "Least" or-} "Most"which has not been followed by aPOINT command. An OPEN of the M: device sets thepoint mode back to "Position".-}3.2.3 Notes on NOTE and points aboutPOINT. Whenever you define a window, thecurrent position of the pointer ischecked. I-}f the pointer is outsidethe new window then it is moved tothe nearest edge or corner.POINT and NOTE commands alwaysrestr-}ict the pointer to the window.The co-ordinates returned by a NOTEare always relative to the top leftcorner of a standard g-}raphics screen,not relative to the top of the window.If you would rather it was the otherway about then tell me. I couldn'-}tmake up my mind.You may set the window to includeparts outside the standard screen.Multi-Mouse will still produceco-or-}dinates. If the pointer is aboveor to the left of the standard screenorigin then it will return a largepositive value. (Ac-}tually it's atwo's complement number, so you canwork out the "real" co-ordinate valueby adding it to -256.) If the pointer-}is below or to the right of thebottom right of the standard screenthen the values just keep going in apositive direction.-}The use of a window outside thenormal screen area is not encouraged.It will not hurt Multi-Mouse butfuture versions may -}not support thisfeature in the same way, if at all.You are not encouraged to define awindow and then switch graphics mode-}s. If the new graphics mode is a lowerresolution than the old, the activearea may be half-way across a pixel,because the -}physical screendimensions and position of the activearea will stay the same. This couldbe quite frustrating for a user.-}3.3 The RENAME XIO.XIO 32 (RENAME from some languages)has now been defined so that you canchange the way your pointer loo-}ks.The pointer is stored as a series ofconsecutive bytes and it is intendedthat you store your own pointer in astring in -}BASIC, or as a char arrayin C. The format of the XIO is: XIO 32, #n, 12, 0, MYPOINT$Your pointer can be any length up -}to255 bytes. However, the longer thepointer is, the longer it takes toerase and draw, and the slower theresponse to a dev-}ice will be. Alength of 16 or so is enough for mostpurposes. (The standard pointer is 14bytes long.) MYPOINT$ (or whatever-}you happen to call it) should becomposed as follows:MYPOINT$(1,1) should contain CHR$(h)where h is the height of the poi-}nterin pixels.MYPOINT$(2,2) should contain CHR$(x)where x is the x offset. A pointerhas an associated x and y offsetwhi-}ch indicate the position of thedatum point relative to the top leftof the pointer. The datum point isthe point from which -}the co-ordinatesare calculated, and it is this pointwhich is limited to the window. The xoffset is the number of player/m-}issile pixels from the left edge ofthe stripe to the datum, and can beany number in the range 0..255. Ifyou need an x offs-}et to the left ofthe left edge of the stripe then useCHR$(256-n) where n is the offset,for example CHR$(256-3) would give-}you an offset 3 pixels to the left ofthe left edge.MYPOINT$(3,3) should contain CHR$(y)where y is the y offset. The y off-}setis the number of player/missilepixels from the top of the stripe tothe datum, and can be any number inthe range 0..255-}. If you need a yoffset above the top of the pointerthen use CHR$(256-n) where n is theoffset, for example CHR$(256-10)wo-}uld give you an offset 10 pixelsabove the top edge.MYPOINT$(4,3+h) contains theforeground shape data (h being theheight -}of the shape). These aredefined in the normal way forcharacters and player/missilegraphics (see section 3.3.2 for anexamp-}le).MYPOINT$(4+h,3+h+h) contains thebackground shape data. Shapes havetwo colours so that they are alwaysdistinguishable-}. However there's notmuch point, although it's possible,to have both background andforeground at the same pixel.3.3.1 N-}otes on the RENAME XIO.When you issue an XIO 32 the pointeris immediately updated on screen.However, you have not actuall-}y made acopy of the pointer into anyMulti-Mouse data area (just theplayer/missie stripes). The pointerdata only exists in-} your string. Thepointer on screen is updated withthis information whenever you performany of the following: Issue an-} XIO 32 command. Move the pointer vertically with a NOTE. Issue a POINT command. OPEN the M: device.Multi-Mo-}use keeps track of what iscurrently being displayed and so itcan work out what to erase and fromwhere, even though the cu-}rrentpointer is different from the one onscreen (it ain't so dumb as to erasethe whole stripe each time). Because the po-}inter data is only heldin your string, any changes in thestring will be taken into account thenext time the screen pointer-} isupdated. When switching betweenpointers, the new pointer is drawn sothat the datum point is kept in thesame place as b-}efore. Changing thecontents of your string is notencouraged; a much cleaner way is tokeep a different string for eachpoin-}ter and just XIO 32 with the oneyou want, for example: XIO 32, #n, 12, 0, XHAIR$ NOTE #n, X, Y XIO 32, #n, 12, 0, -}BUSYBEE$ NOTE #n, X, YWhen you OPEN the M: device, thestandard pointer is always restored.You can also restore it at a-}ny timein your own program. To do thisdefine a pointer of zero height. Forexample: XIO 32, #n, 12, 0, CHR$(0)You sho-}uld use a 12 as the secondparameter to any XIO. (That is, useXIO cmd, #n, 12, .....) This isbecause a bug in the operating-} systemmeans that this number is treated asthe number you used in your OPENstatement, and so using 12 means youOPENed for-} read and write. If you useanother number, the CIO may reportthat you have read-only or write-onlyaccess if you try to PRI-}NT or GETfrom the device. Some languages donot suffer this problem (Atari BASICworks OK with any number), but othersdo (T-}urbo-BASIC XL requires a 12). 3.3.2 A sample shape.This section shows how to define a-}crosshair pointer. It really is quitesimple.First, mark out your shape on a grideight dots wide and however deep youwan-}t, like this: ..bbb... 0 56 ..bFb... 16 40 ..bFb... 16 40 ..bFb... 16 40 bbbFbbb.-} 16 238 bFF.FFb. 108 130 bbbFbbb. 16 238 ..bFb... 16 40 ..bFb... 16 40 ..bFb... 1-}6 40 ..bbb... 0 40For each row, you have to addtogether a number for each of the'b's (background) and each o-}f the'F's (foreground) to get the numbersin the columns to the right of thegrid. Each column in the grid has anassociated-} number. The leftmostcolumn is worth 128, then 64, 32, 16,8, 4, 2, and the rightmost is worth 1.Add together the numbers f-}or all thecolumns with an 'F' in them. Forexample row 6 has 'F's in columnsworth 64, 32, 8, and 4, so the totalforeground-} for that row is 108.Similarly, row 6 has 'b's in columnsworth 128 and 2 so the totalbackground for that row is 130.The -}height of the shape is 11 rows.The datum is 3 columns from theleftmost column and so the x offsetis 3 (note that the leftm-}ost columnhas an x offset of 0). The datum is 5rows from the top row and so the yoffset is 5 (again, the topmost rowhas a-} y offset of 0). So the totaldata for the shape is: DATA 11,3,5 DATA 0,16,16,16,16,108,16,16,16,16 ,0 DATA 56,4-}0,40,40,238,130,40,40,40, 56You can then read this into yourpointer string with statements suchas: READ HEIGHT -}DIM XHAIR$(HEIGHT+HEIGHT+3) XHAIR$(1)=CHR$(HEIGHT) FOR LOOP=2 TO HEIGHT+HEIGHT+3 READ IN:XHAIR$(LOOP)=CHR$(IN) N-}EXT LOOPWhen defining your shape, rememberthat a player/missie pixel is twiceas wide as it is high. If you forgetthis, y-}ou may find that your shapeslook rather squashed.3.4 Old Bugs.All reported bugs from previousversions have now been co-}rrected.Details of these corrections follow.On version 1.0 there was a bug that aNOTE in Graphics 8 would return 255into-} the Y co-ordinate when thecursor was at the top of the screen.On version 1.0 theRe was a bug thatan OPEN would not alway-}s display thepointer. This has now been cured.There still remains the "bug" thatchanging graphics mode will upset the pl-}ayer/missile system. This isbecause of bad programming in the OSand cannot be avoided except byintercepting the GRAPHICS c-}all. Youshould CLOSE the channel and re-OPENit whenever you change graphics mode.If you do not, you will get an uglystrip-}e. You will not harm theMulti-Mouse software. The Break key is still not checked,so that Break has no effect until theha-}ndler returns control to yourapplication.e. The Break key is still not checked,so that Break has no effect until theha,,4.0 Configuration.Before you use the Multi-Mousesoftware you must configure it foryour application. Configuring allowsyo1}u to set your own preferences andto change the defaults. Configuringmakes the program operate with agreater variety of oth1}er software,because you can change it to fit inwith that software.Configuring is done by the programMMCONFIG.COM. This i1}s the onlyprogram yo need to create devicedrivers. All of the code for the fourdevice drivers is included in theMMCONFIG.2}COM binary file.To run MMCONFIG, use your DOS'sbinary file load option. You cannotBRUN it from Turbo-BASIC XL.The confi2}guration options areselected by pressing the appropriateletter key, and sometimes also typingin a value. The options are d2}escribedbelow:4.1 Start Page.Option A allows you to change thestart page. This is a hex numberwhich indicates where t2}he Multi-Mouseshould sit in memory. Normally youwill not have to worry about thisbecause it defaults to the lowestpossibl2}e value for the currentconfiguration of your system. You canchange it if you know that you wantMulti-Mouse elsewhere to wo2}rk withanother program.The best advice is to load in all theutilities you would normally use whenusing Multi-Mouse, then2} run thisprogram and leave this option at thedefault. Valid values are hex valuein the range 00-F8, but the startpage mus2}t lie on a 2K boundarybecause of the player/missilegraphics.4.2 Device Name.If you already have a driver whichhas the2} M: handle, you will want tocall Multi-Mouse another name. Youcan do this by selecting the devicename using option B. For 2 }example, ifyou chose H then you would use thefollowing command to open the device: OPEN #n, 12, 0, "H:"4.3 Driver 2 }filename.Option C allows you to change thename of the file that is written outby the program. You are asked to typea fil2 }ename. If you omit to include adevice specifier, D: is assumed.4.4 Foreground Colour.This option specifies the default2 }foreground colour of the pointer. Thecolour is that of the background ofthe screen, and pressing D cycles it.4.5 Backgro2 }und Colour.This option specifies the defaultbackground colour of the pointer. Thecolour is that of the border of thescre2}en, and pressing E cycles it.4.6 DOS 2.x file.If you are using Multi-Mouse underany Atari DOS 2 derivative then youcan2} get it to load another file afterit has loaded. You can use this toload a chain of files in an AUTORUNsequence. My other 2}device driversalso allow you to do this so you arenot restricted to one AUTORUN perdisk. Note that the filename is thatof2} a binary file (not a BASIC file)and must include the D: part. Seesection 5 on using Multi-Mouse withTurbo-BASIC XL if you2} wish to useTurbo-BASIC XL with Multi-Mouse.If you press Return in response tothe prompt without entering afilename, the2}n (None) will appear asthe filename. This means thatMulti-Mouse wil not load anotherbinary file once it is loaded.4.7 R2}eserved pages.Option G allows you to rseserve pagesof memory for your own use, forexample to use players 2 & 3 of thepla2}yer/missile system, or to reservermemory for a user-defined characterset. Multi-Mouse by default reservessix pages, and se2}ts MEMLO to thestart page + $06. If you reserve morepages, then those pages between(start page + $06) and (start page +re2}served pages -1) inclusive are freefor your own use.4.8 Creating the files.Options H-L allow you to create abinary fil2}e for any of the fourdrivers included. Alternativelyoption 10 allows you just to createcode for the CORE section. Thisall2}ows you to append your own machinecode device driver to it. Do not tryto run the CORE program on its own;you must append a2} binary file whichtakes care of the vectors detailed insection 6. You will only want to usethis option if you want to writ2}e yourown device driver.If you are using DOS 2.x, you willwant to name your file AUTORUN.SYS sothat it will load automat2}ically whenyou boot the disk. Or you may want tohave all four drivers on the disk andselect from a menu which one to load.2}lly whenyou boot the disk. Or you may want tohave all four drivers on the disk andselect from a menu which one to load.05.0 Multi-Mouse and Turbo-BASIC XL.Multi-Mouse can be configured for usewith Turbo-BASIC XL, but thefollowing notes must 6}be observed.Turbo-BASIC XL sits in low memory,whereas Atari BASIC sits in highmemory. Unfortunately this means thatyou m6 }ust have a different Multi-Mousebinary file for the different BASICs.(The only thing you need to change iswhere the progra6!}m sits in memory.Everything else can stay the same.)The starting page (option A from themenu) should be at least $38 for u6"}sewith Turbo-BASIC XL.Before you use your drivers, you mustalso modify your copy of Turbo-BASICXL. The standard copy has6#} a rathernasty approach to MEMLO. It setsMEMLO regardless of any other programthat is in low memory. The programTURBOMOD.6$}TUR allows you to create anew copy of Turbo-BASIC XL which onlyadjusts MEMLO if it is too low forTurbo-BASIC XL to operate6%}. This isgood programming practice, and all mydevice drivers use this method sothey can all be used together.TURBOMOD.TU6&}R is better than aprevious version of this utility,80TBMODI.TUR, which I produced for my80-column device. The new version6'}allows you to use the same copy ofTurbo-BASIC XL whether or not you arenot using another application thatsits in low memor6(}y. You can use thiscopy with the 80-column device, ofcourse. TURBOMOD.TUR is a Turbo-BASICXL program and you will need to 6)}runit under the Turbo-BASIC XLenvironment.Once you have modified Turbo-BASICXL, your altered copy can be usedwhether or6*} not you are using theMulti-Mouse utility (or any otherlow-memory utility).5.1 Notes on Turbo-BASIC XL.You cannot BLOA6+}D the Multi-Mousedriver (or any other application thatsits in low memory) from Turbo-BASICXL: it must be the other way aro6,}und.This is because your BASIC programsits in low memory it would be erasedby the newly-loaded driver. So if youwant Turb6-}o-BASIC XL to autoboot,rename the binary file to TURBO.COMand use option G on the MMCONFIG menuto load from it. Of course 6.}you canonly do this under DOS 2.x. If youhave another DOS (for exampleSpartaDOS X) then create a batch filewhich loads in6/} the Multi-Mouse driverand then loads in Turbo-BASIC XL.I have not tried Multi-Mouse withcompiled Turbo-BASIC XL programs60}. Multi-Mouse driverand then loads in Turbo-BASIC XL.I have not tried Multi-Mouse withcompiled Turbo-BASIC XL programs46.0 Machine Code Access.This section is intended for thosewho wish to add their own devicedrivers for such things as the:2}keyboard or a light pen. It does notdiscuss in general the way theprogram works. I hope that the codeis commented enough t:3}o make itunderstandable. Multi-Mouse is written in two parts.The first, CORE, contains theMulti-Mouse primitives such as:4} movethe pointer to a given position,convert player/missile co-ordinatesto OS ones, all the CIO handling, andso on. The o:5}ther part is thedevice-dependent part which handlesmovement and click operations for aparticular device. The two partscom:6}municate through three procedureswhose addresses are defined in atable along with many other things.The address of this t:7}able can beaccessed by performing a GET andmultiplying the result by 256. (Thetable always starts on a pageboundary.) I g:8}uarantee that thistable and the following callingmechanisms will stay the same forfuture issues. I do not guarunteeanythi:9}ng else. Do not call particularaddresses or assume that certainlocations hold certain values.You must decide for yoursel::}f where toplace your driver. You are notencouraged to use the player/missilearea, because future versions ofMulti-Mouse m:;}ay use it. You can update the table at any time,even from BASIC, and your changesremain until reboot, except for thoseth:<}ings that are always updated on anOPEN (detailed in sections 2 and 3).The table contains:Address Mnemonic Contents:=}------- -------- --------+0 and +1 calcxy Address ofpointer move routine.+2 and +3 movep Address ofd:>}evice move routine.+4 and +5 clickp Address ofdevice click routine.+6 and +7 saddr Address ofshape (i.e. add:?}ress of string passedto XIO 32, or the default).+8 xcoord Pointer xposition (P/M coord).+9 ycoord :@} Pointer yposition (P/M coord).+10 forecol Foregroundcolour on OPEN.+11 backcol Backgroundcolour:A} on OPEN.+12 minx Left edge ofactive area (P/M coord).+13 miny Top edge ofactive area (P/M co:B}ord).+14 maxx Right edge ofactive area (P/M coord).+15 maxy Bottom edge ofactive area (P/M co:C}ord).6.1 Vectors.The calcxy vector is supplied by theCORE system. By doing an indirect JSRthrough this vector you can :D}get andset the co-ordinates of the pointer.You are encouraged to use this vectorto get the co-ordinates rather thanlook u:E}p xcoord and ycoord in thetable. (All of the supplied devicedrivers use the vector.) The calcxyroutine should be called wi:F}th a valuein the A register. The lowest threebits when set cause the calcxyroutine to:Bit Function--- -------- :G}0 Set the x position to thevalue in the X register. 1 Set the y position to thevalue in the Y register. 2 For:H}ce a redraw of the pointer.The A register is unchanged by theroutine. X and Y are loaded with theactual co-ordinates of t:I}he cursor:these may be different from yourrequested co-ordinates if the pointerwas limited to the active area. Make sure:J} all "unused" bits of A arereset, because future versions mayuse them for other purposes. You arenot required to make sure:K} that X andY are in range: that is doneautomatically. Even with bit 1 set,the pointer is only updated if theactual y co-o:L}rdinate has changedsince the last screen update. If youmust have the screen updated then setbit 2. The only reason you sho:M}uldwant to set bit 2 is if you changethe pointer address (saddr) to a newpointer. For example with a light penyou may wan:N}t a completely blankpointer when the light pen is lifted.But try to leave things as you findthem, or your user may get ann:O}oyed.Example call to calcxy: LDA #%000 ; Get the status JSR indirect ; of the pointer. : :P} : indirect: JMP (calcxy)The actual values loaded into X and Yare player/missile co-ordinates ofthe position of the d:Q}atum point. The click vector should be providedby your driver. It is used todetermine the state of the button.Your routi:R}ne should set A to 0 if thebutton is pressed, and to 1 if it isnot pressed. You are not required tosave any registers or f:S}lags. End yourroutine with a RTS. Example (fromJOYSTICK): click: LDA stick1 ; Get stick value RTS :T} ; Simple eh!The movep vector should be providedby your driver. It is called by NOTEto allow the pointer to be movedarou:U}nd. On entry, the A register willbe set to indicate the exit condition.If the click function returns thevalue in this regi:V}ster your routineshould return. NOTE decides the valuedepending on whether it is in Click,Unclick or Toggle mode.Your mo:W}vep function should move thepointer around using the calcxyvector. It should return with a RTS.You are not required to sav:X}e anyregisters or flags. Good practicedictates that you should call yourclick function to determine the exitcondition, al:Y}though only a puristwould do this by going through theclickp vector. For example: movep: STA exit ; Save exitcondi:Z}tion loop: LDA #0 ; Main loop. : : LDA #%011 ; Set X and Y. JMP indirect ; update:[}screen. JSR clickp ; Done yet? CMP exit ; Check exitcondition. BNE loop ; No, loopb:\}ack. RTS ; Yes, done. indirect: JMP (calcxy)heck exitcondition. BNE loop ; No, loopb8E7.0 How MMCONFIG.COM was generated.MMCONFIG.COM was generated largelyautomatically, and it may be usefulto discuss the wa>^}y I did it.The 6502 processor does not make iteasy to generate relocatable code ofany size, because there are norelative>_} jump instructions and so on.It is therefore difficult to writecode that will relocate itself whenit loads. This is furthe>`}r hinderedbecause the standard DOS loader mustload programs into absolute addresses.My solution is to produce aconfigura>a}tion program which allowsthe programs to be configured to workat a particular place in memory. Ofcourse, this does mean th>b}at anyparticular configuration is thenfixed once the file is written out. The first time I used this method waswih my 80>c}-column driver. In thatinstance the configuration programwas written in BASIC, which made itrather slow, so this time I ch>d}ose towrite it in PL65 (which I used towrite Multi-Mouse itself, except thatI only used assembly language and nohigh-leve>e}l statements). 7.1 Generating data tables.The method I use is to compile all ofthe programs twice, at differentplaces>f} in memory. The first time theyare compiled at $2000, the second at$3000, although in fact the secondcan be compiled on an>g}y page boundary.The first object file is given theextension .20 and the second .30. TheFILEDUMP program is then run which,>h}when given the filename, takes thetwo versions and produces a .REC filefrom them. For example given thefilename CORE it t>i}akes CORE.20 andCORE.30 and generates CORE.REC. This.REC file contains PL65 statementsand can be directly included into th>j}eMMCONFIG program with no furtherprocessing.The .REC file contains two datatables: The first is just a hex dumpof the .>k}20 file. The second givesoffsets into this table where thedata bytes are different between the.30 and .20 files.Effectiv>l}ely the only differences willbe page addresses of data items andprocedures within the program. Byadding on a delta value t>m}o each ofthese values, the program caneffectively be relocated by wholepages.7.2 Advantages & disadvantages.This meth>n}od has the flaw that thecode can only be relocated by wholepages, although in this case there isno disadvantage because it>o} must starton a 2K boundary for the player/missile graphics to work. Also, itcannot cope with any arithmetic onaddresses >p}other than additions andsubtractions. That is, if an addresswas say multiplied by three then therelocator could not detect>q} it.However, it is very unusual (andthoroughly bad practice) to doanything to addresses other than addor subtract offsets>r} from them.The beauty of it is that therelocation is entirely automatic, andthat all that is needed to generate abinary >s}file is to dump the firstbuffer straight to disk. It alsomakes the configuration programstand-alone with no need to have a>t}nyother files to run the configuration.The write_code procedure in theMMCONFIG program actually performsthe relocation. >u}It calls add_delta torelocate the code, writes the buffer,and then calls add_delta again torelocate the code back to itso>v}riginal position, so that it can berelocated to a different place in thesame run. 7.3 Other configuration.The other p>w}art of the configurationis to configure items such ascolours, the DOS file to load, and soon. For these there are a set of>x}offsets into the CORE data table,which is then updated whenever theoptions are selected. The offsetshave to be worked out>y} manually, sincethere is no easy way to have themautomatically computed. But the jobcan be completed fairly easily armedw>z}ith a cross-reference and a listingof the program from which the dumpwas created. (That is, the COREsource code.)In fact>{} it is these miscellaneousconfigurable items which are the realproblems to program for; therelocation is very simple once >|}theprocedures have been written. I tryto offer a fairly reasonable set ofitems but it could be taken further,the idea is >}}to know when to stop. Ifyou think that a particular variableneeds to be configurable, for examplethe position of the point>~}er on anOPEN command, then tell me about it.ular variableneeds to be configurable, for examplethe position of the point<08.0 Device Drivers.This section describes data formatsof the four supported input devices.8.1 Mouse.An ST mouse returB}ns a four-bit valueinto the joystick pins. The value canbe read using STICK(1). My devicereads the hardware register direcB}tly,because the shadow register isupdated too slowly to keep up withfast mouse movement.The four-bit value is split intoB} twotwo-bit pairs. Bits 1 and 0 handlethe horizontal axis, bits 3 and 2handle the vertical axis.The two bit-pairs changeB} in a Graycode as the mouse moves. The Graycode order is thus: 00 01 11 10 00 again, and so on.If the mouB}se in one direction, thissequence is returned continuously asthe mouse moves. If it is moving inthe opposite direction, thB}e sequenceis returned in the opposite order.All that is necessary to determinemovement is to compare the two-bitcode agaB}inst the last read code. Ifthe two are the same, no movement hasoccured. If they are different, thecode is checked againstB} a tablecontaining the Gray code sequence. Ifit matches the value in this table,it is moved in the appropriatedirection, B}else it is moved in theopposite direction.The left button on the mouse isreturned like the joystick button, inSTRIG(1). B}The right button comes outonto the second paddle. When theright button is pressed the paddlevalue falls from 228 to about B}100.However I do not use this valuebecause I found it to be unreliable.Did you know you can play MissileCommand with a mB}ouse when in Trakballmode?8.2 Trakball.The trakball, like the mouse, returnsa four-bit coded value where two bitsare B}for the vertical axis and two forthe horizontal. As with the mouse, Iread the hardware register directly,because the shadoB}w is updated tooslowly for fast trakball movement.Bit 3 of the trakball output changeswhen there is vertical movement. IfB}the value of bit 3 has changed sincelast read, bit 2 indicates thedirection of movement, 1=down, 0=up.Similarly, bit 1 cB}hanges when thereis horizontal movement. If the valueof bit 1 has changed since last read,bit 1 indicate the direction ofB}movement, 1=right, 0=left.All trakball trigger values return inthe same way as the joystick, viaSTRIG(1).8.3 Touch TabB}let.The Touch Tablet returns two paddlevales. The horizontal axis isreturned in PADDLE(2), and thevertical in PADDLE(3).B}The axes both run from 0 to 228. Inthe horizontal axis, 0 is the left ofthe tablet, and 228 is the right ofthe tablet. IB}n the vertical axis, 0is the bottom of the tablet and 228is the tp of the tablet.I "trim" the values so that there isno B}need to have the pointer rightagainst the edge of the tablet.Notice that the vertical axis isinverted compared to that of B}thescreen.The touch tablet has three buttons,and each of these resets one bit inSTICK(1). Since I don't discriminatebetB}ween buttons I just check whetherany bit is reset by comparing thevalue of STICK(1) with %1111.8.4. Joystick.The joystB}ick returns a four-bit valuein STICK(1). Each bit corresponds toone of the directions. Bit 0 is setto 0 when there is up mB}ovement. Bit 1is set to zero when there is downmovement, bit 2 when there is leftmovement and bit 3 when there isright moB}vement.Diagonal movements set two of thebits to zero, for example up and leftsets bits 0 and 2 to zero. It ispossible toB} set both 'up' and 'down'bits, but it should never happen(Multi-Mouse will just cancel nothbits out so no movement will ocB}cur.)The trigger button is, of course,returned in STRIG(1).-Mouse will just cancel nothbits out so no movement will oc@A9.0 Endnotes.This section includes miscellaneousinformation concerning your beta-testrelease and also requesting your helF}p.9.1 New Tablet Driver.I have redesigned the tablet handlersince version 1.0 of Multi-Mouse. Theaveraging is now mucF}h better (it hada bug in it before). It also preventsthe shape from zooming to the topright corner when the pointer isremF}oved from the tablet. Instead itjust stays where it was.9.2 Other Device Drivers.I have written Multi-Mouse with theidF}ea of allowing people to add theirown device drivers. I hope that Ihave provided a good enough interfaceand documentation F}to allow this.However, if you have a device thatyou would like to use with Multi-Mouse, but don't feel up to writingfor F}it yourself, I can help. Contactme and I will try to arrangesomething.I have only programmed for thosedevices which I owF}n. I should beespecially interested if anyone haswritten a device driver for one thefollowing devices, or wants onewritteF}n: Koala Pad (should be just a new Tablet driver.) Light Pen Keyboard9.3 Distribution.YouF} may distribute Multi-Mouse at nocharge. The only condition is thatyou must not modify the programsbefore distributing theF}m. This issimply because otherwise I end upgetting technical questions frompeople who have a modified copy thatI don't knF}ow about. If you have anymodifications, include the details asa text file on the disk, and pleasesend me a copy.9.4 OveF}r to You.If you have written a device yourself,I would be very pleased to receive acopy of the source code. With yourperF}mission, I will then include it inthe configuration program anddocument it as part of Multi-Mouse.Of course, you will be cF}redited asthe author.If you spot any errors in thedocumentation, of either a technicalor a typographical nature, pleaseF}annotate the documentation and returnit. I need your support. As a user ofmy utilites, tell me what you thinkof them and hF}ow I can improve them.Phone me on (0438) 354652, or writeto:Simon Trew322 York RoadSTEVENAGEHerts.SG1 4HW.This prF}----!37 OPEN #1,12,0,"M:"38 ? #1;"Most":X=159:POINT #1,X,X39 REM !------------------------------!40 REM ! Display the cro}sshair, wait !41 REM ! for a click and plot the !42 REM ! point at the shape. !43 REM !---------------------}---------!44 ? #1;"Click":XIO 32,#1,12,0,XHAIR$45 NOTE #1,X,Y:PLOT X,Y:PRINT X,Y46 REM !------------------------------!47} REM ! Display the standard pointer,!48 REM ! wait for an unclick and draw !49 REM ! a line to that point. This !50 REM }! enables the line to be !51 REM ! "dragged". !52 REM !------------------------------!53 ? #1;"Unc}lick":XIO 32,#1,12,0,CHR$(0)54 NOTE #1,X,Y:DRAWTO X,Y:PRINT X,Y55 GOTO 4456 REM !------------------------------!57 REM ! }Data for the shape. The data !58 REM ! is made up as follows: !59 REM ! Line 63: height,xoff,yoff !60 REM ! Line }64: "white" data !61 REM ! Line 65: "black" data !62 REM !------------------------------!63 DATA 11,3,564 D}ATA 0,16,16,16,16,108,16,16,16,16,065 DATA 56,40,40,40,238,130,238,40,40,40,56------------------------!63 DATA 11,3,564 DP10 REM !------------------------------!11 REM ! TURBOMOD.TUR BY SIZ 1991 !12 REM !------------------------------!13 RE}M ! This program reads in your !14 REM ! Turbo-BASIC XL binary file !15 REM ! and creates a new one that !16 REM ! i}s compatible with some !17 REM ! other MEMLO-changing devices !18 REM ! including my 80:, M: and N: !19 REM ! device} handlers. This !20 REM ! program supersedes 80TBMODI !21 REM ! because the new binary file !22 REM ! will now lo}ad correctly !23 REM ! whether or not a low-memory !24 REM ! device is used, there is no !25 REM ! need to keep a s}eparate copy !26 REM ! of Turbo-BASIC XL. !27 REM !------------------------------!28 REM 29 REM !--------------}----------------!30 REM ! Read in the names of the !31 REM ! input and output files. !32 REM !-------------------}-----------!33 TRAP #ERROR34 DIM IN$(20),OUT$(20),BUFFER$(4000)35 INPUT "Input file: ";IN$36 INPUT "Output file: ";OUT$}37 CLOSE #1:OPEN #1,4,0,IN$38 CLOSE #2:OPEN #2,8,0,OUT$39 REM 40 REM !------------------------------!41 REM ! Modify the }first segment to !42 REM ! replace the fixed MEMLO with !43 REM ! MEMLO-checking code. !44 REM !-----------------}-------------!45 GET #1,MLL,MHH:REM file header 46 GET #1,MLL,MHH:REM Segment head47 GET #1,MLL,MHH:REM Segment tail48 GE}T #1,MLL,MHH:REM Memlo consts49 PUT #2,$FF,$FF:REM file header50 PUT #2,$02,$21:REM segment head51 PUT #2,$1A,$21:REM segm}ent tail52 PUT #2,$A0,MLL,$A9,MHH53 PUT #2,$CD,$E8,$02,$9054 PUT #2,$0F,$D0,$07,$CC55 PUT #2,$E7,$02,$90,$0856 PUT #2,$F}0,$06,$8D,$E857 PUT #2,$02,$8C,$E7,$02,$6058 PUT #2,$E2,$02:REM init segment59 PUT #2,$E3,$02:REM init segment60 PUT #2,$}02,$21:REM run new code.61 REM 62 REM !------------------------------!63 REM ! Copy the rest of the file !64 REM ! in }the usual way, making !65 REM ! a 4000-byte copy pass until !66 REM ! an EOF or an error occurs. !67 REM !---------}---------------------!68 REPEAT 69 TRAP #EOF70 BGET #1,ADR(BUFFER$),400071 # EOF:PB=DPEEK($0348+$10)72 TRAP #ERR}OR73 LAST=PB<400074 IF PB>075 BPUT #2,ADR(BUFFER$),PB76 ENDIF 77 UNTIL LAST78 REM 79 REM !------------------}------------!80 REM ! Error routine: If EOF then !81 REM ! the copy completed or the !82 REM ! user ended his input. } !83 REM ! Otherwise display the error. !84 REM !------------------------------!85 # ERROR:CLOSE 86 IF ERR=13687 } PRINT "Program finished OK."88 ELSE 89 PRINT "Error ";ERR;" at line ";ERL90 ENDIF 91 END OR:CLOSE 86 IF ERR=13687 aogram came from L.A.C.E.The London Atari Computer EnthusiastsSimon Trew322 York RoadSTEVENAGEHerts.SG1 4HW.This prDAH !I !II !H ! $H !I !II !H ! $ߠH !LiP.20eP ! !H ! $H !LP.30P ! J}!H ! $P ! 4' !LPLoading P ! ! ;( !H !HH ! ;(P ! ! !H !HH ! N'$Q [#P !J}( ! ! 'P HHIHP ! 4' !LQQLoading IQ ! ! ;( !H !HH ! ;(P ! ! !H !HJ}H ! N'P !۠8 !HH ! 'P ! 4' V#`D:R [# !LRInput file, eg 'CORE': Q ! ! ;H}