@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}}}- |||DDOS DOSDOS SYS }}}<}S}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ޥ<<8C} 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 ALLOWED029 FREE SECTORS COPYING---D1:LINK4}LINE.EXE# 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 1.?}D1: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- 128ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uEiͩkΩ͙kCop j`j {j`Hi͝Νh`V}L"UNEM:D"NURͩkΩ͙kCop j`j {j`Hi͝Νh`Y? N XLAPNB0D +26-?:C: X}hhhԩ`,<A6,DAdAUuAA'A @9A@&K@@]@ Y}@7c(}uAR@++(#++(#| Antic Monthly Disk, Jan. 1987 | Z}++(#( | Side 'B' |++(# @  [}-@A $ GG;@@,;@ ,;@@,;A,;@,;@@, "D1:MENU" &&@ \}@D:*.* 6,6." 6 @0i6-%@(6.7@<@,A67@ ]}<@ ,..i67@<@,.7@<@,3 6.|67B:,%@,.367B:,%@,.G67@< ^}@,.(--@B:,:7<,4 G67<,..] 6.=:, @D67@<@,.7@<@,]6 _}7@<@,.0$@(''7@<@,4FREE@- @ 2() <@ `}F''7@<@,4FREE@K @ P(7@<@,)|U @0W'!-@6+'@,% a}@' |Z++(#| |[ ( |  |\++(# b}d**(" Select HELP.BAS for information.xAR[@@9'-@@#C( FI c}LE NUMBERM A0Q[ BP:,A00"@&6.7@<@,0 AELB6.7+&@,$ d}@%@<+&@,$@%@,L B37@<@,4 36.7@<@,!7@<@ e},4DOS!.0 6.-@B:,07<,4 AH67B:,%@,.7<,   6.! 6.D1:!67B:,% f}@,.?AR@'-@@"?  LOADING ? A@@91@@5% g}? B[-@@"-  CANNOT RUN 7 @LF:A,"@![% D:HELP.BAS B A0 h}D1:MENUXLAPNB0D +26-?:C:   "LINEAFxxy &&;A ,;@,;@,W (} ( (1) HELP file#(@(j}(2) How to 'port' filesW( to an ST diskB(%((3) ROULETTE instructionsB( (8-bit Bonus file). (k}( SELECTION""(+41)42)43,@ ,6. D:DOC.TXT42,6. D:PORT.TXT 43 6.D:ROULETTEl}.DOC1 (}@1@@ A(@2vB:,!@-7@<@,4Xm}XX0(3(E-@@"Y(ӠΠf@l(}v @@<( @@dj@ B*-@n}@"R("ΠҠՠҠˠҠ_@j%D:MENU D1:HELP.BAS} ( (1) HELP file#(@(]` *O.|r*m - ЭЭм// ??<JNA NJ/<NA"/0<NBNuNVaaJygaHNp}^NuNVNZ./</</<N $ 3>.j/<>/< N&P. ?<NTByByN^NuNV. <q}?<NT3 yfa< yfa. ?<NT3 yf3N^NuNV. r?<NTBy<`Ryr}< y>Naa>>NN^Nus}NV. ?<NTah09,|3f09,|@3:. ?<NTD:*B9./</<t}NPJyg">>N>a&a>>NN^NuNVBy`By<`Ry< y?<?<N vu}X>f?<?<N vX>:?<?<N vXByd`*0yd"|00H>?<?<N vXRyd09dy,m>?<?<Nv} vXN^NuNV32>N 3h09h|A:*.*B9B9./</<NPJyw}gv>>N>/<?<=N \32 y2o$.0/9 n?92?<?N P3,>2?<>N T>>NNx}^NuNV>>NBW/<?<2?<>N T>>NN^NuNVy}>>N>aa>>NN^NuNV>?<N vT3& y&f>?<N vT3f>?<N vT3:09:z}@yf3.Byd`* |02yd/?<?<N vX _Ryd09dy.m3d,N^NuNV>?<?<N vX nf>{}S?<?<N vX nf>L?<?<N vXBy`> |2y \g$0y"|0H>?<?<N vXRy |2y|}J(nBy`*0y"|0H>?<?<N vXRy |2y n> ?<?<N vXN^NuNV. :?<N}}T>>NNN^NuNV3eBByDByH3NNN^NuNV3{BByDByH3NNN^NuNV#z#~} .мZ#3dBByD3 H n 3NN n 0N#z###~N^NuNV3 3}zBByD3H3NNN^Nu#Bv"<vpsNBNuNV30.|Hм -@=|` nH2n2}RRn nm.4N>B@09 N^NuNV#### #Z##4> aF3} @pN^NuNV>a*pN^NuNV3# Z>4NN^NuNV#Z# ^>ZN n0"B@09 N^NuNV>}MN n0" n 0$ n0& n0(B@09 N^Nu#NN/9Nu#NM/9Nu#NA/9Nu} }}[1][ Welcome to LinkLin}e/ST | v.041286 ][ Perform ][3][ Load: 8Bit->ST Save: ST->8Bit ][ Load | Save ][3][ Enter the 8Bit file to load. ][ Selec}t ][3][ Select the ST file to transfer. ][ Select ][3][ Select the new device:filename.ext ][ Select ][3][ Want to tran}sfer another file? ][ Yes | No ][3][Thanks for using|LinkLine/ST|v.041286][ Exit ]}_crystal>_ctrl_cn _workin} _hialert _typeale <_loadler r_saveler _devaler _moreale _tksaler :_max_len n_main}J_initiald_communi_termina_load_fi8_save_fi_load_8B_write_tL_read_thX_send_}co_send_fi_get_fil_v_clsvw_v_hide__v_opnvw&_v_show__gsx1_gsx2_iiof}fz_iooff_pioff~_pooff_vdi_crys_if_appl_inZ_appl_ex_form_al_fse}l_in_graf_ha $_gemdos _bios v_xbios f_intin_intout_org_pal_c_mx}_my_finishe_new_pal_i_j_k_l_hi_word_w}rite_b_ptsin_path_ptsout_write_h_global_inchar&_lo_word(_pressed*_}bytes_r,_bytes_t._text_bu0_control_int_in_int_out _read_ha._dum0_file_ha2}_ad_c4_resolut8_lenhi:_delay<_gem_han>_gl_apid@_contrlB_addr_inZ_charact}b_file_ind_lenlof_driveh_workoutj_button_filenam_for_rea_action__addr_ou}_color.$            }            }$    .|r*m - ЭЭм// ??<JNA NJ/<NA"/0<NBNuNVaaJygaHN WELCOME TO THE ANTIC MONTHLY DISKMost of the pr}ograms on this side of the disk are for the ATARI 520 ST.We recommend you refer to thecorresponding issue of ANTIC forco}mprehensive documentation. If youwish to order a back issue, or needsubscription information, contact usat (415) 957-0886 }or, for credit cardorders, dial (800) 227-1617, Ex. 133.In California,(800) 722-3545, Ex. 133XXX *** BONUS FILES * BONUS} FILES ***HOLIDAY.PC1 is a picture created byPatrick Bass, Antic's ST ProgramEditor. It was drawn with DEGASELITE, fro}m Batteries Included, andfeatures two levels of animation!To see it, transfer this file to anST disk, run DEGAS ELITE, lo}ad thisfile, and enable the animationsequence, (but don't rent the room!).NOTE: This picture will NOT WORKwith the origi}nal DEGAS program.(Color monitor required.)XXX *** MORE BONUS FILES ***Whenever there is sufficient room,we will be }including TYPO-ST andLINKLINE on the monthly disks.Please see the HELP files on thisside of the disk for LINKLINEinstruc}tions.XXXThe menu that appeared on the screenwhen you booted the disk will onlyRUN programs with a .BAS extender.}(NOTE: The menu WILL NOT RUN ST BASIC programs!)If you try to run a program and theresponse is 'cannot run Filen}ame',then check the file extender withthe following list:XXX.SYS Reserved for DOS system files..DAT Data file. Usu}ally accessed by another program..TXT Text file. Usually accessed by another program..PI2 A Med.-resoluti}on DEGAS picture file.XXX*** Files for the 520 ST ***.C C Language source code. Must be ported to an} ST disk. See the corresponding article for complete details..BAS An ST BASIC program. WILL NOT RUN }on 8-bit computers!!! Must be ported to an ST disk. See the corresponding article for complete de}tails.XXX.PRG A compiled ST program which uses GEM. Must be ported to an ST disk. See the correspo}nding article for complete details..TOS A compiled ST program which does not use GEM. Must be ported} to an ST disk. See the corresponding article for complete details..S 68000 Assembly language sou}rce code. Must be ported to an ST disk. See the corresponding article for complete details.XXX Whe}never possible, we will try toadapt our programs to work with asmany configurations of C as possible.But we think ANTIC's }published Clistings should come as close aspossible to the industry standard. At this time, only the Lattice,Alcyon, GS}T and Megamax C packagesdo this.XXXAll programs from ANTIC issues datedprior to August 1984 were reproducedfrom ANTIC}'s Archive. We've updatedthem from our HELP columns andmost are compatible with the XL andXE machines. We have worked to }insurethat our programs operate aspublished, but we consider all oursoftware listings to be works inprogress which we enc}ourage you topersonalize and enhance.Good luck, and ENJOY!-ANTIC EDMost of the prJST LISTINGSON MONTHLY DISK...and how to get themby CHARLES JACKSONAntic Technical EditorFor those ST owners who do no}t yetown a C compiler, but are eager totry out Antic's C language listings,we are now including the executableobject code} on the Antic MonthlyDisk.XXXAll disk files with extendersof .PRG, .TOS, .TPP and .ACC arecompiled ST programs, ready }to betransferred to an ST disk andexecuted. Given enough disk space,we will also include the sourcecode. 'C' source cod}e files willhave a .C extender, assemblylanguage source code will havean .S extender.XXXPORTING FILESBefore using an }ST program, you musttransfer it to an ST disk. Thisprocess of transferring filesbetween computers is called"porting."X}XX To port a file from the AnticMonthly disk to an ST disk, you'llneed the Linkline programs fromthe August 1985 issue}.(LINKLINE.PRG and LINKLINE.EXE are both included on this disk).XXXIf you don't have Linkline, youmay also use: }- A telecommunications programfor the ST which supports XMODEMfile transfers.FLASH or PC/InterComm will work).XXX - }A similar program for your8-bit Atari which supports XMODEMfile transfers. Chameleon orBackTalk will work. Unfortunately},HomeTerm won't do the job because ittranslates all carriage returns intoATASCII value 155. Also, don'texpect to succeed} at ST porting withany version of AMODEM.XXXA - 8-bit Atari computerB - An Atari 850 Interface Module with a modem }cable (RS-232 to D-9.)C - Null modem connectorD - Gender changer (if required)E - Your ST   } | A |=>| B |=>| C |=>| D |=>| E |     Sample porting configurationXXX IMPORT}ANT: If you're not usingLinkline, both modem programsmust be configured similarly. Ifyour 8-bit software is set for 1200}baud, your ST software also must beconfigured for 1200 baud. Additionally, BOTH programs mustbe set for 8-bit (binary) }filetransfers.XXX Once both computers are linkedtogether you may begin the filetransfer. You can also reverse this}procedure to transfer files from STdisks to your 8-bit machine.XXXWALK-THROUGH DEMO1) LINKLINE:Once both LINKLINE pro}grams arerunning, place the monthly diskinto the 5-1/4" drive, and sitdown at the ST. Choose theLOAD A FILE option and t}ype inthe name of the file you want totransfer. LINKLINE will pullthe file off of the monthly disk,and save it to an ST }disk.That's it. You're done.XXXWALK-THROUGH DEMO2) MODEM PROGRAMSLet's walk-through a sample filetransfer. We'll }use BackTalk on an8-bit machine, and FLASH on the ST. Configure BackTalk for 1200 baud,with Full Duplex and ASCIItrans}lation. Press [SELECT],choose the XSEND option, selectXMODEM protocol and enter the nameof the file you wish to port.X}XX From the ST desktop, double clickon FLASH.PRG. Make sure FLASH isrunning at 1200 baud. Type -Bto change baud} rates, if necessary. Now type -R (for RECEIVE).When the file selector box appears,press [ESCAPE] and type the name }ofthe file to receive. Press [RETURN]or click on OK. To begin the transfer, press the[START] button on the 8-bit Atar}i.XXX Occasionally some versions ofXMODEM will append extra "garbage"characters to your files. Textfiles, such as C} listings, areparticularly susceptible to thisproblem. If your implementation ofXMODEM appends garbage characters toyour} source code, you must removethose characters with a text editorbefore compiling the program.or those ST owners who do noa 1000 ' TYPO/ST 1010 ' (c) 1986 Antic Publishing 1020 ' Written by Patrick Bass and Bill Marquardt 1030 ' Version 050 }286 1040 '----------------------------------------------------------------- 1050 ' 1060 DISK=1: OUTPUT=2: TRUE=(-1): F }ALSE=0: CHECKSUMMING=TRUE 1070 TV=FALSE: PRINTER=FALSE 1080 ' 1090 print "File to Check:": input FILENAME$ 1100 pr }int "Output on:" 1110 print "(S)creen or ": print "(P)rinter ": input DEVICE$ 1120 if( DEVICE$="p" )or( DEVICE$="P" )th }en PRINTER=TRUE else TV=TRUE 1130 ' 1140 if TV then print "Checksum for file: ": print FILENAME$: print 1150 if PRINT }ER then lprint "Checksum for file: ";FILENAME$: lprint 1160 ' 1170 '----------------------------------------------------- }------------ 1180 open "I", #DISK, FILENAME$ 1190 ' 1200 while CHECKSUMMING 1210 LINENUMBER=0: CHECKSUM=0 1220 } ' 1230 gosub GETALINE 1240 ' 1250 DECIMAL=CHECKSUM: gosub DECTOHEX 1260 OUTPUT$=str$( LINENUMBER )+" :" }+HI$+LO$ 1270 if PRINTER then lprint OUTPUT$ else print OUTPUT$ 1280 wend 1290 ' 1300 close DISK 1310 end 13 }20 ' 1330 '----------------------------------------------------------------- 1340 GETALINE: 1350 BLINE$="": on error }goto 1300 1360 GOTALINE=FALSE 1370 ' 1380 while not GOTALINE 1390 line input#DISK, BLINE$ 1400 if len( BL }INE$ )>1 then GOTALINE=TRUE 1410 wend 1420 ' 1430 LINENUMBER=val( BLINE$ ) 1440 for CHAR=1 to len( BLINE$ ) 1450 } OK=TRUE 1460 CHARACTER$=mid$( BLINE$, CHAR, 1 ) 1470 if CHARACTER$=" " then OK=FALSE 1480 if OK then C }HECKSUM=CHECKSUM+asc( CHARACTER$+chr$( 0 )) 1490 next CHAR 1500 return 1510 ' 1520 '-------------------------------- }--------------------------------- 1530 DECTOHEX: 1540 DECIMAL=abs( DECIMAL ) 1550 HI=int( DECIMAL/256 ): LO=( DECIMAL }-( HI*256 )) 1560 HH=int( HI/16 ): HL=( HI-( HH*16 )) 1570 LH=int( LO/16 ): LL=( LO-( LH*16 )) 1580 HI$=chr$( 48+HH- }( 7*( HH>9 )))+chr$( 48+HL-( 7*( HL>9 ))) 1590 LO$=chr$( 48+LH-( 7*( LH>9 )))+chr$( 48+LL-( 7*( LL>9 ))) 1600 return 50 {*------------------------------------* * Atari ST Talkin' Typer * * (c) 1986 Antic Publishing * * Ver$}sion 090886 Monday * * Written by Patrick Bass * *------------------------------------* GEMDOS $} equ 1 cr equ 13 lf equ 10 esc equ 27 *GEMDOS calls: Term equ $} 0 Conout equ 2 Pconout equ 5 Conin equ 7 Readline equ 10 Constat equ 11 Setb$}lock equ 74 *------------------------------------* start move.l sp,a5 move.l #my_stack,sp $} move.l 4(a5),a5 move.l $c(a5),d0 add.l $14(a5),d0 add.l $1c(a5),d0 add.l #$100,d$}0 move.l d0,-(sp) move.l a5,-(sp) move d0,-(sp) move #Setblock,-(sp) trap $} #GEMDOS add.l #12,sp *------------------------------------* _main move.l #titlemess,a0 bsr $} message *- - - - - - - - - - - - - - - - - -* * Watch for any keystrokes. When * encountered, decode keypress. $} mainloop bsr scankey tst.l d0 beq mainloop bsr decodekey bra $} mainloop *- - - - - - - - - - - - - - - - - -* * Decide which key was pressed. decodekey * Was the Escape Key pressed$}? * Branch if it was... cmp.b #esc,d0 beq terminate * Was the Return key pressed? * Branch if it w$}as... cmp.b #cr,d0 beq talk_default * Was the key between "a" & "z"? * If lower, try UpperCase. * $}If higher, split. cmp.b #"a",d0 blt try_uppercase cmp.b #"z",d0 bgt alp_over *$} Else adjust value for index. * ...and speak the letter. sub.w #$61,d0 bsr say_alphabet rts t$}ry_uppercase * Was the key between "A" & "Z"? * If lower, try Numbers. * If higher, split. cmp.b #"A",d0 b$}lt try_numbers cmp.b #"Z",d0 bgt alp_over * Else adjust value for index. * ...and speak the l$}etter. sub.w #$41,d0 bsr say_alphabet rts try_numbers * Was the key between "0" & "9"? * If $}not, split. cmp.b #"0",d0 blt alp_over cmp.b #"9",d0 bgt alp_over * Else adjus$}t value for index. * ...and speak the number. sub.w #$30,d0 bsr say_numbers rts alp_over$} rts *------------------------------------* talk_default * Say the Default Phrase. movea.l #speech_table,a$}0 move.l #0,d0 bra talker *- - - - - - - - - - - - - - - - - -* say_alphabet movea.l #alphab$}et,a1 bra talk_out say_numbers movea.l #numbers,a1 * As we enter: * a1=address of table. * d0=c$}haracter (to speak) number. * First multiply d0 by 4 to index * on long addresses. * Then move speech address pointed * $} to into register a0. talk_out asl.w #2,d0 movea.l 0(a1,d0.w),a0 move.l #0,d0 *---| $} |------------* talker * Examine next speech word. * Is it a zero? * Branch if not, must be speech. move.w $}0(a0,d0.w),d2 tst.w d2 bne talk_more rts *- - - - - - - - - - - - - - - -* talk_more mo$}ve.l a0,-(sp) move.l d0,-(sp) * Push speech word out printer port. move.w d2,-(sp) move.w #P$}conout,-(sp) trap #GEMDOS add.l #4,sp move.l (sp)+,d0 move.l (sp)+,a0 add.l $} #2,d0 bra talker *- - - - - - - - - - - - - - - - - -* speech_table dc.w 27,7,45,15,53,4,4 dc$}.w 24,6,3 dc.w 26,16,3 dc.w 26,11,13,12,41,3 dc.w 16,26,34,15,43,19,11,43,3 dc.w 13,23,8,12$},11,3 dc.w 13,6,9,51,3 dc.w 3,3,3,3,0 *------------------------------------* alphabet * A table of lette$}r addresses * in letter order. dc.l alph_a, alph_b, alph_c dc.l alph_d, alph_e, alph_f dc.l $} alph_g, alph_h, alph_i dc.l alph_j, alph_k, alph_l dc.l alph_m, alph_n, alph_o dc.l alph_p%}, alph_q, alph_r dc.l alph_s, alph_t, alph_u dc.l alph_v, alph_w, alph_x dc.l alph_y, alph_z%} *- - - - - - - - - - - - - - - - - -* * A table of letter sound descriptions * in letter order. alph_a dc.w 20,1,0%} alph_b dc.w 63,19,1,0 alph_c dc.w 55,55,19,1,0 alph_d dc.w 21,19,1,0 alph_e dc.w 19,1,0 alph_f dc.w 7,7,%}40,40,1,0 alph_g dc.w 10,19,1,0 alph_h dc.w 20,1,2,50,1,0 alph_i dc.w 24,6,1,0 alph_j dc.w 10,7,20,1,0 alph_%}k dc.w 42,7,20,1,0 alph_l dc.w 7,7,62,1,0 alph_m dc.w 7,7,16,1,0 alph_n dc.w 7,7,11,1,0 alph_o dc.w 53,1,0%} alph_p dc.w 9,19,1,0 alph_q dc.w 42,49,22,1,0 alph_r dc.w 59,1,0 alph_s dc.w 7,7,55,55,1,0 alph_t dc.w 1%}3,19,1,0 alph_u dc.w 49,31,1,0 alph_v dc.w 35,19,1,0 alph_w dc.w 33,15,1,63,62,49,31,1,0 alph_x dc.w 7,7,2,41%},55,55,1,0 alph_y dc.w 46,6,1,0 alph_z dc.w 43,19,1,0 *- - - - - - - - - - - - - - - - - - * numbers * A table o%}f number addresses * in number order. dc.l alph_0, alph_1, alph_2 dc.l alph_3, alph_4, alph_5 d% }c.l alph_6, alph_7, alph_8 dc.l alph_9 *- - - - - - - - - - - - - - - - - - * * A table of number sound % }descriptions * in number order. alph_0 dc.w 43,60,53,1,0 alph_1 dc.w 46,15,15,11,1,0 alph_2 dc.w 13,31,1,0 alp% }h_3 dc.w 29,14,19,1,0 alph_4 dc.w 40,40,58,1,0 alph_5 dc.w 40,40,6,35,1,0 alph_6 dc.w 55,55,12,12,2,41,55,1,0 % } alph_7 dc.w 55,55,7,7,35,12,11,1,0 alph_8 dc.w 20,2,13,1,0 alph_9 dc.w 11,24,6,11,1,0 *-----------------------% }-------------* titlemess dc.b "--------------" dc.b "--------------",cr,lf dc.b "ST Talkin%}' Typ" dc.b "er " dc.b cr,lf dc.b "(c)1986 Antic " dc.b "Publishing %} ",cr,lf dc.b "Written by Pat" dc.b "rick Bass",cr,lf dc.b "--------------" dc.b %}"--------------" dc.b cr,lf,lf,lf,lf,lf,lf dc.b "Press 'Esc' to quit." dc.b cr,lf,0 ev%}en *------------------------------------* * Exit current program * and return to GEM/desktop... terminate move.w %} #Term,-(sp) trap #GEMDOS * Whoops! addq.l #2,sp rts *------------------------------------*%} message movem.l d1/a0,-(sp) clr.w d1 mess1 move.b (a0)+,d1 beq messx %} bsr charout bra mess1 messx movem.l (sp)+,d1/a0 rts *-------------------------------%}-----* * Write character in d1 to console. charout movem.l d1-d7/a0-a6,-(sp) move.w d1,-(sp) move%}.w #Conout,-(sp) trap #GEMDOS add.l #4,sp movem.l (sp)+,d1-d7/a0-a6 rts *-----------%}-------------------------* scankey move.w #Constat,-(sp) trap #GEMDOS add.l #2,sp tst.l%} d0 bpl skipkey getkey move.w #Conin,-(sp) trap #GEMDOS add.l #2,sp rt%}s skipkey clr.l d0 rts *- - - - - - - - - - - - - - - - - -* bss ds.l%} 256 my_stack ds.l 1 even end * * (c) 1986 Antic Publishing * * Ver$I1000 ' 1010 ' ST Super Trek 1020 ' (c) 1986 Antic Publishing 1030 ' Version 100286 Thursday 1040 ' Written by Paul )}Pratt and Steve Everman 1050 ' 1060 HANDLE=2: fullw 2: clearw 2: BELL$=chr$( 7 ): A.BLANK$=chr$( 32 ) 1070 TRUE=1: FALS)}E=0: NONE=0: LEFT=1: RIGHT=2: BOTH=3 1080 ARROW=0: FINGER=3: HOLLOW.CROSSHAIR=6: FILLED.CROSSHAIR=7 1090 randomize 0: QX=)}294: QY=64: PLX=32: PLY=4: EMPTY=0 1100 STAR=42: KLINGON=221: STARBASE=5: ENTERPRISE=224 1110 ACTIVE=TRUE: HOME=OFF: CO=2)}: option base 0: RED.ALERT=FALSE 1120 dim MAP%( 8,8 ),SECT%( 8,8 ),KOL%( 6 ),KLING%( 3,3 ) 1130 restore 6560: POINTER=ARR) }OW: gosub KOLOR 1140 PLAYING=TRUE: DOSET=OFF: BON=ACTIVE 1150 GRAF.SHRINKBOX=74: GRAF.GROWBOX=73: GRAF.MOUSE=78 1160 co)!}lor 2: restore AUTHOR.STRING 1170 for X=0 to 16: read Z: gotoxy 2,X: next 1180 AUTHOR.STRING: 1190 data 189,32,80,82,65)"},84,84,32,38,32,69,86,69,82,77,65,78 1200 GX=10: GY=4: gosub SETUP 1210 ' 1220 color 1,2,2,1: PN=6: X=0: gosub POLYLINE)#} 1230 color 1,2,0,1: for X=1 to 30: gosub POLYLINE: next 1240 color 3,2,3,1: PN=2: X=10: gosub POLYLINE 1250 gotoxy 40,)$} 17: print "%Energy %Shields %Date"; 1260 gotoxy 40 ,13: print "%Phaser %Photon %Computer" 1270 ' 1280 c)%}olor 1,1,3,1: for Y=1 to 73 step 9: linef 13,Y,157,Y: next 1290 for X=13 to 157 step 18: linef X,1,X,73: next 1300 color )&}2,1,3,1: for Y=1 to 73 step 9: linef 175,Y,318,Y: next 1310 for X=175 to 319 step 18: linef X,1,X,73: next 1320 ' 1330 )'}color 3: gotoxy 45 ,6: print "Phaser Photon": color 2,2,3,2 1340 for X=0 to 98 step 98 1350 restore PUSH.BOX.DATUM )(}1360 read X1,Y1,X2,Y2 1370 linef X1+X,Y2,X2+X,Y2: linef X1+X,Y1,X2+X,Y1 1380 linef X1+X,Y1,X1+X,Y2: linef X2+X,Y1,X2+X,Y))}2 1390 fill X1+X+2,Y1+2 1400 next 1410 PUSH.BOX.DATUM: 1420 data 400,65,455,85 1430 ' 1440 restore LIB.BOX.DATUM )*} 1450 read X1,Y1,X2,Y2 1460 linef X1,Y2,X2,Y2: linef X1,Y1,X2,Y1 1470 linef X1,Y1,X1,Y2: linef X2,Y1,X2,Y2 1480 LIB.BO)+}X.DATUM: 1490 data 13,81,319,155 1500 ' 1510 restore STAT.BOX.DATUM 1520 read X1,Y1,X2,Y2 1530 linef X1,Y2,X2,Y2: l),}inef X1,Y1,X2,Y1 1540 linef X1,Y1,X1,Y2: linef X2,Y1,X2,Y2 1550 STAT.BOX.DATUM: 1560 data 350,50,606,1 1570 ' 1580 )-}color 1: restore PSTRING.001: gosub PRSTRING 1590 color 2: restore PSTRING.002: gosub PRSTRING 1600 ' 1610 MAIN: 1620).} while PLAYING 1630 DATE=0: PI=0: SHE=0: COMP=0: PHASE=0: PHOT=0: TMPDAM=0 1640 gosub CLEAN: gosub ALT.XREPAIR 1650 go)/}sub ALT.LIBRARY: gosub ALT.GALAXY 1660 color 2: gotoxy 42,1: print "Sir, there are";FOE;"Klingons" 1670 color 2: gotoxy 4)0}2,2: print " and 360 days to kill them." 1680 color 1: gotoxy 45,4: print " G O O D L U C K !" 1690 ' 1700 while BU)1}TTON<>BOTH and PI<3600 and DATE<3600 and FOE>0 1710 gosub GET.MOUSE: IN.RANGE=FALSE 1720 if MY<95 and MY>22 and BUTTON=LE)2}FT then IN.RANGE=TRUE 1730 if MX>13 and MX<157 and IN.RANGE then gosub GALAXY 1740 if MX>175 and MX< 319 and IN.RANGE t)3}hen gosub MOVESHIP 1750 if MX>13 and MX<319 and MY>102 and MY<178 then gosub LIBRARY 1760 if MX>498 and MX<553 and MY>86 )4}and MY<107 then gosub PHOTON 1770 if MX>400 and MX<453 and MY>86 and MY<107 then gosub PHASER 1780 wend 1782 ' 1790 c)5}olor 2: restore COLOR.STRING.3: gosub KOLOR: gosub CLEAN 1800 IT=( FOE=0 )*-1+( DATE>=3600 )*-2+( PI>=3600 )*-3 1810 on I)6}T gosub SUCCESS,FAILURE,INCOMPETENCE,SUCCESS,FAILURE 1820 for X=10 to 16 step 2 1830 gotoxy 2,X: print " )7} " 1840 next 1850 gotoxy 2,11: print " Will you accept another commission?" 1860 color 3: gotoxy 2,)8}13 1870 print " Left Button for ";: color 1 1872 print "YES " 1880 color 3: gotoxy 2,15 1890 print )9}" Right Button for ";: color 1 1892 print " NO " 1900 gosub GET.MOUSE 1910 while BUTTON=NONE or BUTTON=B):}OTH or FALL=FALSE 1920 gosub GET.MOUSE 1930 wend 1940 if BUTTON=RIGHT then PLAYING=FALSE 1950 if BUTTON=LEFT then gos);}ub MORE 1960 wend 1970 end 1980 ' 1990 SUCCESS: 2000 restore COLOR.STRING.4 2010 for X=0 to 12 2020 gosub KOLO)<}R 2030 gotoxy 2,9 2032 print " Congratulations! Invasion Stopped! ";BELL$ 2040 next 2050 restore COLOR.STRING.0: go)=}sub KOLOR: HCAP=HCAP+5 2060 return 2070 ' 2080 FAILURE: 2090 gotoxy 2,9: print " You Failed. ";FOE;"Klingons remain. )>}" 2100 HCAP=HCAP-6 2110 return 2120 ' 2130 INCOMPETENCE: 2140 gotoxy 2,9: print " Found drifting: Systems Dead " )?} 2142 HCAP=HCAP-6 2150 return 2160 ' 2170 MORE: 2180 gosub CLEAN 2182 gotoxy 43,4: print "Stand By for Assignment)@}";BELL$ 2190 gosub ALT.LIBRARY: gosub SETUP: color 1,0,0,0 2200 for Y=3 to 72 step 9 2210 for X=15 to 155 step 18 2220)A} fill X,Y 2230 next 2240 next 2250 return 2260 ' 2270 PIE: 2280 color 1,1,2,1 2290 pcircle 383, 140, 25, 0, P)B}I 2300 pcircle 573, 140, 25, 0, DATE 2310 pcircle 573, 103, 25, 0, COMP*36 2320 pcircle 383, 103, 25, 0, PHASE*36 2330)C} pcircle 478, 103, 25, 0, PHOT 2340 pcircle 478, 140, 25, 0, SHE*36 2350 return 2360 ' 2370 GET.MOUSE: 2380 GINTO)D}UT=peek( A#+12 ): gemsys( 79 ) 2390 MX=peek( GINTOUT+2 ): MY=peek( GINTOUT+4 ) 2400 BUTTON=peek( GINTOUT+6 ) 2410 if OL)E}DBUTTON<>BUTTON then FALL=TRUE else FALL=FALSE 2420 OLDBUTTON=BUTTON 2430 return 2440 ' 2450 ENGY: 2460 gosub CLE)F}AN 2470 color 1: gotoxy 44,4: print "Energy Level too Low!";BELL$ 2480 return 2490 ' 2500 GALAXY: 2510 X=2*int( MX)G}/18+.27 ): Y=int( MY/9-.5 )-2: gosub CLEAN 2520 DIST=int( sqr( ( ( X-GX )/2 )^2+( Y-GY )^2 ) ) 2530 TDIST=DIST*500: if DI)H}ST=1 then TDIST=30 2540 if PI+TDIST>3599 then gosub ENGY: return 2550 PI=PI+TDIST: DATE=DATE+DIST*4 2560 gotoxy GX,GY: )I}print A.BLANK$: color 1,0,2 2570 if MK=ACTIVE then MK=OFF: color 1,2,2 2580 for E=-2 to 8 step 5: fill int( GX*9 )+E,int()J} GY*9 )+2: next 2590 GX=X: GY=Y 2600 MAP.SPOT= MAP%( GY,( GX-2 )/2 ) 2610 ALT.GALAXY: 2620 if MAP.SPOT<0 then MAP%( G)K}Y,( GX-2 )/2 )=MAP.SPOT*-1-1 2630 color 2: gotoxy GX,GY: print chr$( ENTERPRISE ) 2640 gosub SHRINKBOX 2650 gosub GROWB)L}OX: gosub REC: gosub GROWBOX 2660 if RED.ALERT=TRUE and PI>0 then gosub REBUTAL 2670 gosub SET 2680 return 2690 ' 27)M}00 GETSHIP: 2710 if BON=ACTIVE then BON=OFF: gosub CLEAN 2720 gosub REBUTAL: gosub SET.MOUSE.SHAPE: gosub SHOW 2730 w)N}hile MX<175 or MX>319 or MY>95 or MY<22 or BUTTON<>LEFT 2740 gosub GET.MOUSE 2750 wend 2760 PI=PI+55: TX=2*int( MX/18+.)O}27 ): TY=int( MY/9-.5 )-2 2770 for Z=0 to 2 2780 if KLING%( Z,0 )=( TX-20 )/2 and KLING%( Z,1 )=TY then SHP=Z 2790 nex)P}t 2800 DIST=int( SQR( ( ( TX-PLX )/2 )^2+( TY-PLY )^2 )^2.3 ) 2810 return 2820 ' 2830 PHOTON: 2840 if BUTTON<>LEF)Q}T or FALL=0 or ( RED.ALERT=FALSE ) then return 2850 if PHOT>3100 then gosub CLEAN 2860 if PHOT>3100 then gotoxy 44,2: pri)R}nt "No Photon Bombs": return 2870 PHOT=PHOT+600: POINTER=HOLLOW.CROSSHAIR: gosub GETSHIP 2880 DAMAGE=25+int( RND*200 )-DI)S}ST*2: color 2: gosub ALT.PHASER 2890 return 2900 ' 2910 PHASER: 2920 if BUTTON<>LEFT or FALL=FALSE or RED.ALERT=FALS)T}E then return 2930 if PHASE>99 then color 1: gotoxy 46,1: ?"No Phasers": return 2940 DAMAGE=40+( rnd*200 )-DIST*4-PHASE/1)U}.2-( COMP/1.7 ): color 2 2950 POINTER=FILLED.CROSSHAIR: gosub GETSHIP 2960 ALT.PHASER: 2970 if SECT%( ( TX-20 )/2,TY )<)V}>KLINGON then DAMAGE=FALSE 2980 if DAMAGE<15 then gotoxy 40,4: ? " M I S S " 2990 if DAMAGE<15 then g)W}osub SET: return 3000 KLING%( SHP,2 )=KLING%( SHP,2 )-DAMAGE 3010 if KLING%( SHP,2 )<1 then NUMBER.KLINGONS=NUMBER.KLINGO)X}NS-1 3020 if KLING%( SHP,2 )<1 then gosub DESTROY: return 3030 restore COLOR.STRING.2: gosub KOLOR 3040 for D=0 to 20: )Y}next 3050 restore COLOR.STRING.1: gosub KOLOR: gotoxy 41,4 3060 HIT.AT=KLING%( SHP,2 )/2 3070 print using "Hit: Klingon)Z} at ##.#_% power";HIT.AT: print BELL$ 3080 ' 3090 SET: 3100 POINTER=ARROW: gosub SET.MOUSE.SHAPE 3110 gosub SHOW: go)[}sub GET.MOUSE: gosub PIE 3120 return 3130 ' 3140 CLEAN: 3150 for E=1 to 4 3160 gotoxy 40,E: print " )\} " 3170 next 3180 return 3190 ' 3200 DESTROY: 3210 gotoxy ( KLING%( SHP,0 )+10 )*2,KLING%( SHP,1 ):)]} print A.BLANK$ 3220 FOE=FOE-1: for X=0 to 8: gosub FLASH: next 3230 restore COLOR.STRING.0: gosub KOLOR: RED.ALERT=FALSE)^} 3240 for X=0 to 5 3250 CO=CO+1: color CO: if CO=3 then CO=1 3260 gotoxy 40,4: print " Klingon Destroyed ";B)_}ELL$ 3270 next 3280 if NUMBER.KLINGONS>0 then restore COLOR.STRING.1 3290 if NUMBER.KLINGONS>0 then gosub KOLOR: RED.AL)`}ERT=TRUE 3300 SECT%( ( TX-20 )/2,TY )=FALSE 3310 MAP%( GY,( GX-2 )/2 )=MAP%( GY,( GX-2 )/2 )-10 3320 if KEP=OFF then go)a}sub CLEAN: gosub SET else KEP=OFF: gosub SET 3330 gosub REDALERT 3340 return 3350 ' 3360 REBUTAL: 3370 if int( rnd)b}*12 )<5 and NUMBER.KLINGONS<2 then return 3380 if BON=ACTIVE then BON=OFF: gosub CLEAN 3390 sound 1,12,3,4,0 3400 CO=C)c}O+1: color CO: if CO=3 then CO=1 3410 DAM=int( rnd*11+SHE/4-DIST/5 ) 3412 if DAM<1 then DAM=int( rnd*5 )+1 3420 if NUMB)d}ER.KLINGONS>1 then DAM=int( DAM*( NUMBER.KLINGONS/1.4 ) ) 3430 on rnd*3+1 gosub HIT.SHIELDS,HIT.PHASERS,HIT.COMPUTER 3440 )e} sound 1,0,0,0,0 3450 return 3460 ' 3470 HIT.SHIELDS: 3480 SHE=SHE+DAM : if SHE>100 then SHE=100: gosub EMINENT: retu)f}rn 3490 gotoxy 40,2: print " Shields took";DAM;"% damage.": return 3492 ' 3500 HIT.PHASERS: 3510 PHASE=PHASE+DAM: )g}if PHASE>100 then PHASE=100 3520 gotoxy 40,2: print " Phaser took";DAM;"% damage.": return 3522 ' 3530 HIT.COMPUTER: )q}Cb'DOS SYSb*+DUP SYSbUAUTORUN SYSbWMENU biHELP BASb'oLINKLINEPRGbDOC TXTbPORT TXTbTYPOST BASb=TALKTYPES bSTARTREKBASb[ROULETTEEXEb 1ROULETTEDOCb <TALKTYPETOSbGFHOLIDAY PC1 3540 COMP=COMP+DAM 3542 if COMP>100 then COMP=100: gosub EMINENT: return 3550 gotoxy 40,2: print " Computer took";DAM)r};"% damage. ": return 3560 ' 3570 EMINENT: 3580 TMPDAM=TMPDAM+DAM: gosub CLEAN 3590 color 2: gotoxy 44,1: print "DA)s}NGER! Systems Weak";BELL$ 3600 X=int( RND*10 )+1: gotoxy 43,2 3610 print X;"Days used for repair.": DATE=DATE+X*10 3620 )t} color 1 3630 if TMPDAM>50 then gotoxy 40,3: print " DANGER! System Warning. " 3640 if TMPDAM>90 then PI=3700 3650 colo)u}r 2 3660 return 3670 ' 3680 REC: 3690 restore COLOR.STRING.0: gosub KOLOR: HOME=OFF: RED.ALERT=FALSE 3700 for X=0 )v}to 7 3710 for Y=0 to 7 3720 gotoxy ( X+10 )*2,Y: print A.BLANK$: SECT%( X,Y )=EMPTY 3730 next 3740 next 3750 SECT%()w} ( PLX-20 )/2,PLY )=ENTERPRISE: X=( GX-2 )/2: Y=GY 3760 TOTAL.BASES=int( MAP%( Y, X )/100 ) 3770 NUMBER.KLINGONS=int( MAP)x}%( Y,X )/10 )-( TOTAL.BASES*10 ) 3780 NUMBER.STARS=MAP%( Y,X )-(NUMBER.KLINGONS*10)-(TOTAL.BASES*100) 3790 Z=0: color 1 )y} 3800 while Z13 and MX<319 and MY>102 and MY<178 4150 gosub GET.MOUSE 4160 if BUTTON=LEFT then gosub DO.LIBRARY 4170 )}wend 4180 if WR=OFF then POINTER=ARROW: gosub SET.MOUSE.SHAPE: return 4190 ALT.LIBRARY: 4200 color 2 4210 gotoxy 2,9:)} print " L i b r a r y F u n c t i o n s " 4220 gotoxy 2,10: print "_____________________________________" 4230 goto)}xy 2,11: print " Status & Repair Scheduling " 4240 gotoxy 2,12: print " Cumulative Galactic Record " 425)}0 gotoxy 2,13: print " Long Range Galactic Scanning " 4260 gotoxy 2,14: print " Leave Marker Buoy Behind )} " 4270 gotoxy 2,15: print " " 4280 color 3 4290 gotoxy 2,16: print " Exit Librar)}y to clear Function " 4300 POINTER=ARROW: gosub SET.MOUSE.SHAPE: WR=OFF 4310 return 4320 ' 4330 DO.LIBRARY: 4340 )} if MY>120 and MY<130 then WR=ACTIVE: gosub REPAIR 4350 if MY>130 and MY<140 then WR=ACTIVE: gosub GALAXYMAP 4360 if MY>1)}40 and MY<150 then WR=ACTIVE: gosub SCAN.GALAXY 4370 if FALL=1 and MY>149 and MY<160 then gosub SET.MARKER.BUOY 4380 retu)}rn 4390 ' 4400 SCAN.GALAXY: 4410 gosub SCAN: gosub GALAXYMAP: gosub SCAN 4420 return 4430 ' 4440 SET.MARKER.BUOY:)} 4450 gosub CLEAN: gotoxy 50,2: print " Buoy Set ";BELL$ 4460 MK=ACTIVE 4470 return 4480 ' 4490 GALAXYMAP: 4500 )}if FALL<>1 then return 4510 for Y=9 to 16 4520 gotoxy 2,Y: print " " 4530 next 454)}0 color 3 4550 for X=0 to 7 4560 for Y=0 to 7 4570 if GY=X and ( GX-2 )/2=Y then color 2 4580 gotoxy 2+4*Y,X+9 4590)} if MAP%(X,Y)<0 then print " ..." else print MAP%(X,Y) 4600 IT=int( rnd*( 500-COMP ) ) 4610 if IT<5*COMP then gotoxy 2+)}4*Y,X+9: print " .?." 4620 color 3 4630 next 4640 next 4650 return 4660 ' 4670 SCAN: 4680 if PI+1200 >3600 th)}en gosub ENGY: return 4690 for Y=GX/2-2 to GX/2 4700 for X=GY-1 to GY+1 4710 if X>7 or X<0 or Y>7 or Y<0 then 4730 472)}0 if GY<>X or (GX-2)/2<>Y then MAP%(X,Y)=MAP%(X,Y)*-1-1 4730 next 4740 next 4750 PI=PI+600: gosub PIE 4760 return 4)}770 ' 4780 MOVESHIP: 4790 if FALL=0 then return 4800 gosub CLEAN: if RED.ALERT=TRUE then gosub REBUTAL 4810 X=2*int)}( MX/18+.27 ): Y=int( MY/9-.5 )-2 4820 color 1 4830 IT=SECT%(( X-20 )/2, Y ) 4840 if IT=STAR or IT=KLINGON then gotoxy )}44,4 4842 if IT=STAR then print "Sir, that's a Star.": return 4852 if IT=KLINGON then print "Sir, that's a Klingon.": ret)}urn 4860 QX=MX: QY=MY 4870 if HOME=OFF then gotoxy PLX,PLY: print A.BLANK$ 4880 DIST=int( sqr( ( X-PLX )^2+( Y-PLY )^2 )}) )^2.10: PI=PI+DIST 4890 PLX=X: PLY=Y 4900 if ( BX<>PLX or BY<>PLY ) and HOME=ACTIVE then HOME=OFF 4910 if IT=STARBASE)} then gosub DOCK 4920 if HOME=OFF then gotoxy PLX,PLY: print chr$( ENTERPRISE ) 4930 gosub SET 4940 return 4950 ' 49)}60 DOCK: 4970 PHOT=0: PI=0: gosub ALT.XREPAIR: gosub PIE 4980 HOME=ACTIVE: color 1 4990 gotoxy 44,1: print "Welcome t)}o Star Base";BELL$ 5000 if RED.ALERT=FALSE then restore COLOR.STRING.0: gosub KOLOR 5010 if RED.ALERT=FALSE then gotoxy 4)}6,2: print " Repair Available " 5020 BX=PLX: BY=PLY: BON=ACTIVE 5030 return 5040 ' 5050 REPAIR: 5060 CS=int( 100-C)}OMP ): PS=int( 100-PHASE ) 5070 TS=int( 100-TOR ): SS=int( 100-SHE ) 5080 CG=CS: SG=SS: TG=TS: PG=PS 5090 color 2 5100)} gosub STATUS 5110 gosub SHOW.STATUS.LINE 5120 gosub UPDATE.SHIELDS 5130 gosub UPDATE.PHASERS 5140 gosub STAT.UPDATE)} 5150 gosub SHOW.AUTHORIZATION.MESSAGE 5160 while MX>13 and MX<319 and MY>102 and MY<178 5170 color int( rnd*3 )+1 518)}0 if SG>90 or SG90 or PG90 or CG20 and TMPT>20 then gosub MORE.LEFT 5310 if MY>145 and MY<180 then gosub X)}REPAIR: gosub PIE: MY=10 5320 return 5330 ' 5340 MORE.LEFT: 5350 if MY>110 and MY<120 and CG<=99 then gosub C.LEFT 5)}360 if MY>120 and MY<130 and SG<=99 then gosub S.LEFT 5370 if MY>130 and MY<140 and PG<=99 then gosub P.LEFT 5380 retur)}n 5390 ' 5400 DO.RIGHT: 5410 if MY>110 and MY<120 and CG>CS then gosub C.RIGHT 5420 if MY>120 and MY<130 and SG>SS th)}en gosub S.RIGHT 5430 if MY>130 and MY<140 and PG>PS then gosub P.RIGHT 5440 return 5450 ' 5460 C.LEFT: 5470 CG=CG+)}C: TMPDAM=0: gosub STATUS 5480 gosub UPDATE.COMPUTER: gosub STAT.UPDATE 5490 return 5500 ' 5510 S.LEFT: 5520 SG=SG+)}S: TMPDAM=0: gosub STATUS 5530 gosub UPDATE.SHIELDS: gosub STAT.UPDATE 5540 return 5550 ' 5560 P.LEFT: 5570 PG=PG+P)}: gosub STATUS 5580 gosub UPDATE.PHASERS: gosub STAT.UPDATE 5590 return 5600 ' 5610 C.RIGHT: 5620 CG=CG-C: gosub ST)}ATUS 5630 gosub UPDATE.COMPUTER: gosub STAT.UPDATE 5640 return 5650 ' 5660 S.RIGHT: 5670 SG=SG-S: gosub STATUS 568)}0 gosub UPDATE.SHIELDS: gosub STAT.UPDATE 5690 return 5700 ' 5710 P.RIGHT: 5720 PG=PG-P: gosub STATUS 5730 gosub U)}PDATE.PHASERS: gosub STAT.UPDATE 5740 return 5750 ' 5760 STATUS: 5770 NPI=int( ( 3600-PI )/10 ): NDATE=int( ( 3600-)}DATE )/10 ) 5780 CE=int( ( CG-CS )*1.5 ) 5782 SE=int( ( SG-SS )*1.7 ) 5790 PE=int( ( PG-PS )*1.6 ) 5800 CT=int( ( CG-)}CS )*0.5 ) 5802 ST=int( ( SG-SS )*.34 ) 5810 PT=int( ( PG-PS )*.42 ) 5820 TOTE=int( CE+SE+PE+TE ) 5822 TOTT=int( CT+S)}T+PT+TT ) 5830 if HOME=ACTIVE then TOTE=0 5840 TMPI=NPI-TOTE: TMPT=NDATE-TOTT 5850 return 5860 ' 5870 SHOW.STATUS.L)}INE: 5880 color 2 5890 gotoxy 2,9: print " STATUS GOAL ENERGY DAYS" 5900 color 3 5910 ' 5920 UPDATE.CO)}MPUTER: 5930 gotoxy 2,10: print " Computer-> "; 5940 print using"###_% ";CS,CG; 5942 print using" ###";CE,CT: retur)}n 5950 ' 5960 UPDATE.SHIELDS: 5970 gotoxy 2,11: print " Shields -> "; 5980 print using"###_% ";SS,SG; 5982 print )}using" ###";SE,ST: return 5990 ' 6000 UPDATE.PHASERS: 6010 gotoxy 2,12: print " Phaser -> "; 6020 print using"###)}_% ";PS,PG; 6022 print using" ###";PE,PT: return 6030 ' 6040 STAT.UPDATE: 6050 color 2: gotoxy 2,13: print " New T)}otal ------------->"; 6060 print using" ###";TMPI,TMPT: color 3 6070 return 6080 ' 6090 SHOW.AUTHORIZATION.MESSAGE:)} 6100 color 1: gotoxy 2,14 6102 print " # AUTHORIZE # " 6110 color 1: gotoxy 2,15 6112 print " )} # REPAIRS # " 6120 color 2: gotoxy 2,16 6130 print FOE;"Klingons ";NPI;"Energy ";NDATE;"Days" 61)}40 return 6150 ' 6160 XREPAIR: 6170 if RED.ALERT=TRUE then return 6180 PI=PI+TOTE*10: DATE=DATE+TOTT*10: gotoxy 44,)}2: print BELL$ 6190 if HOME=ACTIVE then PI=0 6200 COMP=100-CG: PHASE=100-PG: TOR=100-TG: SHE=100-SG 6210 ALT.XREPAIR: )} 6220 color 3,3,3,1: KY=140 6230 for KX=383 to 590 step 95: pcircle KX,KY,28: next 6240 KY=103: for KX=383 to 590 step 9)}5: pcircle KX,KY,28: next 6250 return 6260 ' 6270 SETUP: 6280 for X=0 to 7: for Y=0 to 7: MAP%( X,Y )=-1: next: nex)}t 6290 for XX=0 to 450 6300 X=int( RND*8 ): Y=int( RND*8 ) 6310 if MAP%( X,Y )>-9 then MAP%( X,Y )=MAP%( X,Y )-1 6320 )} next 6322 FOE=0 6330 for XX=0 to int( RND*3 )+30+HCAP 6340 X=int( RND*8 ): Y=int( RND*8 ) 6342 IT=MAP%( X,Y ) 6350 )} if IT>-30 then MAP%( X,Y )=( IT-10 ): FOE=FOE+1 6360 next 6370 for XX=0 to int( RND*3 )+3 6380 X=int( RND*8 ): Y=int( )}RND*8 ) 6390 if MAP%( X,Y )>-100 then MAP%( X,Y )=MAP%( X,Y )-100 6400 next 6410 return 6420 ' 6430 FLASH: 6440 )}KOL=KOL+256: if KOL>1792 then KOL=0 6450 KOL%( 0 )=KOL: for A=1 to 3: KOL%( A )=KOL+1: next 6460 defdbl K: K = 1114: poke)} K,varptr( KOL%( 0 ) ) 6470 return 6480 ' 6490 KOLOR: 6500 A#=GB: CONTROL=peek( A# ): GINTIN=peek( A#+8 ) 6510 for)} A=0 to 3: read B: KOL%( A )=B: next 6520 defdbl K: K = 1114: poke K,varptr( KOL%( 0 ) ) 6530 return 6540 ' 6550 COLO)}R.STRING.0: 6560 data 2,1287,7,1891 6570 COLOR.STRING.1: 6580 data 1,1536,7,1891 6590 COLOR.STRING.2: 6600 data 160)}0,1600,1600,2 6610 COLOR.STRING.3: 6620 data 2,83,7,1891 6630 ' 6640 SET.MOUSE.SHAPE: 6650 poke CONTRL,78: poke CO)}NTRL+2,1 6660 poke CONTRL+4,1: poke CONTRL+6,1 6670 poke CONTRL+8,0: poke GINTIN,POINTER 6680 gemsys( GRAF.MOUSE ) 669)}0 return 6700 ' 6710 SHOW: 6720 poke CONTRL,122: poke CONTRL+2,0 6730 poke CONTRL+6,1: poke CONTRL+12,HANDLE 6740 )} poke INTIN,0 6750 vdisys( 0 ) 6760 return 6770 ' 6780 SHRINKBOX: 6790 poke CONTROL,74: poke CONTROL+2,8 6800 po)}ke CONTROL+4,1: poke CONTROL+6,0 6810 poke CONTROL+8,0: poke GINTIN,QX 6820 poke GINTIN+2,QY: poke GINTIN+4,6 6830 poke)} GINTIN+6,6: poke GINTIN+8,16 6840 poke GINTIN+10,24: poke GINTIN+12,142 6850 poke GINTIN+14,70 6860 gemsys( GRAF.SHRIN)}KBOX ) 6870 return 6880 ' 6890 GROWBOX: 6900 poke CONTROL,73: poke CONTROL+2,8 6910 poke CONTROL+4,1: poke CONTROL)}+6,0 6920 poke CONTROL+8,0: poke GINTIN,QX 6930 poke GINTIN+2,QY: poke GINTIN+4,6 6940 poke GINTIN+6,6: poke GINTIN+8,1)}77 6950 poke GINTIN+10,24: poke GINTIN+12,142 6960 poke GINTIN+14,70 6970 gemsys( GRAF.GROWBOX ) 6980 return 6990 ')} 7000 POLYLINE: 7010 poke CONTRL,6: poke CONTRL+2,PN 7020 poke CONTRL+4,0: poke CONTRL+12,HANDLE 7030 poke PTSIN,0+X)}: poke PTSIN+2,0+X 7040 poke PTSIN+4,639-X: poke PTSIN+6,0+X 7050 poke PTSIN+8,639-X: poke PTSIN+10,199-X: poke PTSIN+12,)}0+X 7060 poke PTSIN+14,199-X: poke PTSIN+16,0+X: poke PTSIN+18,0+X 7070 vdisys( 0 ) 7080 return 7090 ' 7100 PRSTRIN)}G: 7110 read ST,XST,YST 7120 poke CONTRL,8: poke CONTRL+2,1 7130 poke CONTRL+6,ST: poke CONTRL+12,HANDLE 7140 for X=)}0 to ST*2-1 step 2: read CH: poke INTIN+X,CH: next 7150 poke PTSIN,XST: poke PTSIN+2,YST 7160 vdisys( 0 ) 7170 return )}7180 ' 7190 data 23,226,8,9,0,0,0,70,0,85,0,69 7200 data 0,76,0,0,0,76,0,79,0,87,0,0,0,9 7210 PSTRING.001: 7220 data)} 23,226,8,237,0,0,0,83,0,84,0,65,0,82,0,84,0,82,0,69 7230 COLOR.STRING.4: 7240 data 0,75,0,0,0,237 7250 PSTRING.002: 7)}260 data 34,42,20,84,72,69,0,0,71,65,76,65,88,89,0,0,0,0,0,0,0 7270 data 80,82,69,83,69,78,84,0,81,85,65,68,82,65,78,84 7)}280 RED.MESSAGE: 7290 data 23,388,20,42,0,0,82,0,69,0,68 7300 data 0,0,0,65,0,76,0,69,0,82,0,84,0,0,42 ritten by Paul (n""Ld($&"!# &ՐeԐԥ`ԅ*ե` BHI Vl "` -} BHI " Vl "` B Vl "` إ˥ & "l "8 "" " "" "HH " "hh ")-}"H" "HH " "hhh""#$`B Vl "` "HH " DEIH ##hh ؐl " ِl "`-}HH g" "hhHH g""hh"- "l "HH g" "hhHH g""hhHH g" "hhHH g" "hh "ԭ "8 -}"ԥ"eԅԐբPԝH՝I "D$%"EB Vl "L#HHP B Vhh` "HH` B Vhh ")I "H-}H`"J "KBL$S:D$EIH Vl "hh``B Vl "``B Vl "`Fatal Error # ""-} "HH "hh "HH "hhHH$%&E֝D$I$H B Vl "hhHH"ԭ"թ " " "hh "H-}H "hh "HH "hhHHL%Push key to return to DOSD%EIH "hh %l HHHҩҍ2-}ҩ ҩ<  ҩҍ2ҩҭ&&hhh(` " "ˑ " " "" "" """"""-}""h"h-"H(ж`טH˄ֱˑh`H " " " " "" "" """"""""h"h-"H(мh`ȱ-}Ȍ"`&&b&&'''( 0@ 0i&&&&&Щ>/Y' \` '&н&-}&A'<&ν&ͽ&'' '˹'̽&͝&ˑ'Ь'0&Ωͨ&'&͠''-} '˩''l&()2 AtAt6;AFLQW\bgmrx}*8HVft`G0<<<p-}HH N$hhH ԩeԝhH ԩ eԝhH ԩeԝhH ԩeԝh@ $7/(-} ""(˩@̩(֩P &))0`1(X@Y" (# (f,, \d8j(((H(̩˨-}hH(̩˨hHH( +'hhH "m"hH "m"hoHʊЩ&hHʊЩ&h-}H&&'hH&&**'hH ('O'hH ('V'h2  ( ""˩P̩֩@ &(-}B(((&((H(&(&'hH(&(&'h"((~˩4̩ "" &˩5̩ "" &@$˩@-}̩ "" &$@ ,!(˩@̩ "*+" &H&u&'h!(&" "#( He$(He%(He(He-}(""""k "+!" v,(i (""""""""""8""""L+!"H "H` H8 O6 (-} " "(˩P̩(֩@ &2(+,(((LR*(2(0 (L?,(ԠM (MML (M-}(0(LW,I(((l (H ԩd ԩDh@((H(&(&'h((((((Ʃ(`x--}M  xL6- L- L.Lg/L9,-!!(L60L6-L-L.Lg/ L0 L0  `-}(L-L60L-(L60L-#(s"(L-C"(L-"(L-"(L-(0 "(L- 0 "(L-"(-}(&((L-( L60("(L.(L60("((L.(L-..L..(!(L60Lz.L?."(L.( L60("(L-}.(`("(L.((0 "(Lh. 0 "(Lh."(((&(((L.("(L."(L."((((&((-}((B((L60(L5/LN/()( "(L/ "(./L/"(L/ "(L/"( (B(((L-0-}L608"("((L-0(L608(("(L-0(L608(("(L-0(L/L0((B(("((L-0 "(-}(L-0=( "(L/ "(L/"((B(((L-0/0L60("(i"(L-0(L60(i("(L-0(-}L60(i("(L-0(&(( Y0 G9H(&(&'h`"(~4ԩ ة˩@̩ "" &ȱ0)_@)_@`-}ȹ$@ 󩛙 ةv4 f ة$˩@̩ "" &ȱ001)_$@)_$@`@oD("""-}" "1!" G9 8""""""""""8""""L\1!"H "H`ƍ(`$@%@ &@L0"(~4 6v-}4 ` 6 Y0 0"8(/((J8 (""""֍ "1!"(U (12T" "HH "hh (""""-}""""""8""""L22!"H "H`8 ( ((""""[ "2!"""""y""2#"(U (-}T" "HH "hh (""""""""""8""""L2#"H""H`8 (23 ((""""""""-}""8""""L3!"H "H` (i (""""B "3!"(U (T" "HH "hh (""""""-}""""8""""L3!"H "H`" ( (""""ƍ "3!"((U (T"3p4 "HH "hh""-}""""""""8""""L"4!"H "H`( ((U (T" "HH "hh ( ((U (T" "HH "hh -}8`56 $$$   $$$   $$$   $$$   $$$   $$$   $$$   $$$   $$$   $$$ -}  $$$   $$$$$ͩeΥͮ#(0 iL\6͠J~4t45u4Ht4ԭu4՘Hu4 &"h ٩v4 -} ݠ 6 67f 6hLm6`ȹ@ 󩛙 ` ة˩@̩ "" &ȱ0)_@)_@`   -}`{X`Ya0`1ХYXit΅͢7Ѝ (# 8  77 ȑͪ77 7ԩ ٩v4 .}ؠȱ0)_)78_ͭ (О 8 ""/˩a̩֩` &YXi΅͠ 7Ѝ (9 8  77 L.}'8 7͠7L7 (ж 8ȱ͙P`(  H(&(&'h({խM$(M%(ލ(H(&.}(&'h((89&(((B((H(&(&'h`ҩҍ2ҩҩҩҍ2ҩ ҩ  .}ҩҍ2ҩҩ  ҩҍ2ҩ`ҩҍ2jҩ ҩ  ҩҍ2ҩ`.}( ""˩P̩֩@ 9:&H&&'hH&&'h0`1˩`̩ "" & $7( ""˩P.}̩֩@ &0`1(X@Y ""(˩P̩(֩@ &@$@~˩4̩ "" &H(&(&'hH(&.}(&'hL,@@2/5,%44%c by"ill-arquardtPT?U.}?U@*?UTUU@?UP UU?UUCYPUT? UU>eC.}? UU@A;fVCYPÿYd;ﰅU  U;fVCYPÿUd;ﰀ  Y>jYCP. }>  Y?UUCUPUT? Y?UVC> j:jCeþYd;. }A UU;eVCABYÿUd; UU?UUCV> UU?UUCUPUT?. } ?UTUU@?UP PT?U?U@ T?U@UPU@TPU. } UUPU@?UTUPUUTUBC@ UUCUTUPUUUT?UUAUUUP UUCUTUPU>UiAjjP . }UUCUTUUUd;eAYU *ZVCUd;eAY eCYdUU>ZAiUP efC.}YdUPUUUT?UUAUUUP eZCCDYdUUYd>ZVAiYP *YVCYd;eAYeA UUC.}UTUYVd;efAU UUCUTUPUU>YZAeiVP UUCUTUPUUUT?UUAUUUP UUPU@.}?UTUPUUTU@ T?U@UPDEU@TPU PUT?UPU@ ?UTU@.}UU@?UTUP UUUPUUCUPUUUT?  UUPZiCiUd:  UUUeC.}eY?U  UUeVCYYEFUd? PYYCViUT: UUPUUC.}UPUUUT? UUUVCiY> jCeYYd;ﰁA UUUeVCY.}Ud; UUUPUUCVei> FGUUUPUUCUPUUUT? *?UTU@UU@?.}UTUPPUT?UPU@.}GH.} .} *** HI .} @ @@ T@ @@@ @@@ @@@ @@ @@ @@ .}@ @@ @ @ QP@ @ IJ @ @ @ .}EPU@ QPPU@ TPU@ .} *** JK .} *UUUUj* UUUUZ .}UUUUZ @@U UUUUZT@E@ @@@ UUUKLUZ@D@ @@@ .}UUUUZ@D@ AA@T UUUUZ@EA @@@ UUUUZU@@@ @@@ UU. }UUZA@@@ @@U UUUUZTU@@@ UUUUZLM UUU.!}UZ *UUUUj* ."}M7N.#} ! %'&#((! " $P'P!,,".$}%43``pp@ A`ppppF{`pppp.%}ppppAa`!.4)#-!'!:).%presents2/5,%44%bybillmarquardtchooseoptions#()06!,5%.&}`Baoption+%94/#(!.'%select+%94/!##%04"!.+2/,,ddUU  UU UUUU.'}UUUVYUVZUUUeUUUUUUUUYYZUUUUUeeeeUUUUUUUVYZYVUUUUeUUUUUUUVYVYVUUUeeUUUU.(}UUUYfffYUUUUUiYYYjUUUUUiVYejUUUUUiVYViUUUUUffjVVUUUUUjeiViUUdeUUUYeifYUUUUUjV.)}YeeUUUUUYfYfYUUUUUYfZVYUUUU*"""*          ! " %.*} ' #$&!((  ef .+}      !!"#.,}#$ !%&'+,-!"#%'()+-./#$%)*+/0+,-123789+-./134579:;+/0156fg7;<7.-}89=>?CDE79:;=?@ACEFG7;<=ABCGHCDEIJKOPQCEFGIKLMOQRSCGHIMNOSTOPQUVW[\]..}OQRSUWXY[]^_OSTUYZ[_`[\]abcghi[]^_acdegijk[_`aefgklghimnostugijkmog}hpqsuvw./}gklmqrswxstuyz{suvwy{|}swxy}~.0}"$&"!# &ՐeԐԥ`ԅ*ե` BHI Vl "` , *** BONUS FILE * BONUS FILE ***ROULETTEBy Bill Marquardt,Antic Technical AssistantROULETTE.EXE is a realistic La22}s VegasRoulette simulation which runs on all8-bit Atari computers. Roulette iswritten in machine language. To playthe gam23}e, you must first copy theprogram to another disk. (Make surethis disk has a DOS.SYS file on it.)XXXNext, rename ROULE24}TTE.EXE toAUTORUN.SYS. Finally, boot this diskwithout BASIC.PLAYING THE GAMEWhen the game begins, press the[OPTION] key25} to change the value ofyour "chips." Press [SELECT] toaccept this value and continue.Repeat this process to set youriniti26}al bankroll.XXXOnce the roulette table appears, pluga joystick into port one and move thebetting cursor to place your b27}ets.Anywhere the cursor lands is a legalbetting position, with the odds setappropriately. Maximum total bet is$200. Mak28}e your bet by pushing thejoystick button or pressing the[RETURN] key. Your bankroll, thenumber of chips at the current cur29}sorlocation,XXXand your total bet is displayed atthe top of the screen.To set the ball spinning, move thecursor to t2:}he bottom of the screenor press the [SPACE] bar.To clear the table and continue thegame, press the fire button or presst2;}he [SPACE] bar. Press the [ESC] keyto restart the game.quardt,Antic Technical AssistantROULETTE.EXE is a realistic La0:`X**O.|X*m - ЭЭм// ??<JNA |2aaJga`<g< g><am<zn06=}|aa8Nu<Am<Zn|Aa$Nu<0m<9n|0aNuNu |pr`"|4`"|@ qpr$H" 4JBfNu//??<NAX  _T`6>}-5 777 + )"+ +2  )6?} $,6<HPX`r?77!(( 6@}2 *> 5 *1;77 16A}#!?>1)77.+ &+<5.  6B}((:((#77 )777#    ---------------------------- 6C} ST Talkin' Typer (c)1986 Antic Publishing Written by Patrick Bass ---------------------------- Press '6D}Esc' to quit. ?<NATNuH@BAga`LNuH??<NAXLNu?< NATJj ?<NATNuBNu#\NN/9\Nu#\NM/9\Nu#6E}\NA/9\Nu_gemdosH_bios8_xbios(.b v g><am<zn04mw0@p!p3@@www:G} @?:H}?` ?x :I} O C?@ _:J}<??:K}  :L}:M}:N}????:O}     :P}     :Q}      :R}     n:S}0n   :T}<< @<<?<:U}B?<   0 3   :V}r? !  :W}!n n nl:X}l?plll ll<:Y}l=<'<  ' <:Z}' |?'?:[}8'l8p l:\}llp 0 l88llp0 :]}l||l0@6||6:^}81@6||683@6|I|:_}681?|d|?8p?Ǐ<:`}dǏ< 8`? pǟ<xd pǟ<x :a}? x2x  ;Ã ?c?<|:b}2?c?<|  p1p8~Á ?3ǁ<~?2?3ǁ<~? p0p0<:c}?<>???<>? 80?x0<>??>:d}?80xp>??>?`8x? ~:e} ~``8{`p> `p>` `:f} x x``p g 8 :g}8``xpg``8pc??:h}`<8O<8O8:i}O| ' :j}' ?'?l@l:k}ll@lllx@ll:l}<666I6:m}p~86I6$f8?? d :n}< 8>?:r}> ? ??>`  ? :s} ? `` À ?< ?<``:t}`OOO:u} ' ' 'l:v}lllll6 6:w}66 666 66:x}@ 6I6@ 6I6@ 6?:y}I6@ ?d  ?$:z} $  2      :{} ? ? ?`:|} `` ` >B``p>B:}}` ` ~  BO c:~} 8~O o~ BOp:}>B' ` ` >B':}'l`>Ollp>Ol:} l߷ HPl66>H\66:}6HP66p6>OI6 `:}>Od?d?$ ?2 :} 2  2 @?@ :}?@ ?  o:} `  o `  g ` :} O O :}O O O:} O ' :}' 'l :}ll ll l  :}  {l*www8