O p   o! #@%)+-/1 3@5`79;=/oGI S@U_ac@e`gikmoq s@u`wy{} @` / @ ` @ ` @ ` @ ǀ ɠ o ׀ ٠  ` @`a !a!!#A%a')+-/1!3A5a79;=KMO/SAUaWY[]a!cAeagikmoq!sAua  o! #@%)+-/1 3@5`79;=/oGI S@U_ac@e`gikmoq s@u`wy{} @` / @ ` @ ` @ ` @ ǀ ɠ o ׀ ٠  ` @`a !a!!#A%a')+-/1!3A5a79;=KMO/SAUaWY[]a!cAeagikmoq!sAua  APL_READLST BDAPL_INITLST BDAPL_FINDLST BDAP_WRITELST BDAP_TRECDLST BDAP_TPLAYLST BDXMODEM LST BDhWIND_UPDLST BD hWIND_SETLST BD 4WIND_OPNLST BD5WIND_GETLST BDWIND_FINLST BD9WIND_DELLST BDWIND_CRELST BDWIND_CLSLST BDWIN_CALCLST BD6VDISAMP BAS BDATOSVERSNLST BD&RSUPEXEC LST BD'SPRITES BAS BD(WSORT PRG BD>LSORT LST BD?SORT C BDAySHELLINTPRG BDCSHELLINTC BDDSHELLIN4LST BDEz SHELLIN3LST BDH SETCOLORLST BDKRSC_SADDLST BDLRSC_OBFXLST BDMRSC_LOADLST BDNRSC_GADDLST BDORSC_FREELST BDPRMDIR LST BDQREZMASTRBAS BDRREVERSECPRG BDVREVERSECLST BDWREVERSECC BDXREL S BDYREL O BD[REFS TXT BD\READ ME BD]OPICDIS BAS BDbPIC_CLIPDAT BDhCPIC_CLIPBAS BDPHYSBASELST BDPALLETTELST BDOBJ_ORDRLST BDOBJ_FINDLST BDWOBJ_EDITLST BDYOBJ_DRAWLST BD`OBJ_DELELST BDOBJ_CHNGLST BDOBJ_ADD LST BDMKDIR LST BDMCOMMANDBAS BD`ICON PRG BDGRF_WATCLST BDBGRF_SLIDLST BD!GRF_SHNKLST BDGRF_RUBBLST BD^GRF_HANDLST BDGRF_GROWLST BDGRF_DRAGLST BDqGFR_MOVELST BD;GFATIP51PRG BDTGFATIP51BAS BDGFATIP05TXT BDGFATIP05PRG BDGFATIP05BAS BD8GFATIP04TXT BDGFATIP04PRG BD94GFATIP04BAS BD GFATIP03TXT BD4GFATIP02TXT BDpGFATIP01TXT BD  GFA_FX_MPRG BD GFA_FX_2PRG BDGFA_FX_1PRG BDGFA_FX BAS BD~GETREZ LST BD>FRM_DIALLST BD?FRM_CENTLST BD@FORM_ERRLST BDAFORM_DO LST BDBEVT_KYBDLST BDC=EV_TIMERLST BDD>EV_MULTILST BDEEV_MOUSELST BDF_EV_MESAGLST BDG#EV_DCLCKLST BDHJEV_BUTTNLST BDIERRREC02PRG BDJLERRREC02BAS BDPERRREC01PRG BDQ#ERRREC01BAS BDZEASYREC ME BD\DRV_MAP LST BD^DRV_MAP BAS BD_xDEMO PRG BD`[DATACONVLST BDwCUR_DRIVLST BDx}COPY LST BDyCCONWS LST BDzCCONRS LST BD{C_PRNOS LST BD|APPL_EXTLST BD} ' This procedure reads a message of specified length into the specified buffer ' Ref 1 pg 321, Ref 3 pg 41,43-44,107,109 ' Procedure Appl_read(Ap_rid%,Ap_rlength%,Ap_rbuff%) Dpoke Gintin,Ap_rid% Dpoke Gintin+2,Ap_rlength% Lpoke Addrin,Ap_rbuff% Gemsys 11 Return ' Appl_init is the call that registers an application with the AES ' Ref 1 pg 280, Ref 3 pg 108-109,157-160,260,275,277 ' Procedure Appl_init Gemsys 10 Return Y,' This procedure sends a message to a running application process ' Ref 1 pg. 322, Ref 3 pg. 43, 107, 111, 253 ' Procedure Appl_write(Ap_wid%,Ap_wlength%,Ap_wpbuff%) Dpoke Gintin,Ap_wid% Dpoke Gintin+2,Ap_wlength% Lpoke Addrin,Ap_wpbuff% Gemsys 12 Return ' Appl_trecord will produce a record of user activity with a particular application ' Ref 3 pg. 107, 110-111 ' Procedure Appl_trecord(Ap_trcount%,Ap_trmem%) Dpoke Gintin,Ap_trcount% Lpoke Addrin,Ap_trmem% Gemsys 15 Return ' This procedure replays a previously recorded batch of GEM AES activity ' Ref 3 pg. 107,109-110 ' Procedure Appl_tplay(Ap_tpcount%,Ap_tpscale%,Ap_tpmem%) Dpoke Gintin,Ap_tpcount% Dpoke Gintin+2,Ap_tpscale% Lpoke Addrin,Ap_tpmem% Gemsys 14 Return , Print Print At(10,3);"Receiving: ";Green$;Upper$(Filename$);Char$ Print Block%=1 Try%=1 ' Xmodem_part2: @Clear_modem Void Bios(3,1,Nak) Time_out=0 ' Xmodem_part3: Print At(10,7);Rv1$;"Block-->";Rv0$;Block%;" ";Rv1$;"Try-->";Rv0$;Try% ' Xmodem_part4: Print At(10,9);"Time out:";Time_out ' Xmodem_part5: Stat!=Bios(1,1) If Stat!=0 Then Goto Xmodem_part6 Else Goto Xmodem_part7 Endif ' Xmodem_part6: Inc Time_out If (TimPrint Print At(10,3);"Receiving: ";Green$;Upper$(Filename$);Char$ Print Block%=1 Try%=1 ' Xmodem_part2: @Clear_modem Void Bios(3,1,Nak) Time_out=0 ' Xmodem_part3: Print At(10,7);Rv1$;"Block-->";Rv0$;Block%;" ";Rv1$;"Try-->";Rv0$;Try% ' Xmodem_part4: Print At(10,9);"Time out:";Time_out ' Xmodem_part5: Stat!=Bios(1,1) If Stat!=0 Then Goto Xmodem_part6 Else Goto Xmodem_part7 Endif ' Xmodem_part6: Inc Time_out If (Time_out/128)=(128*10) Then Goto Xmodem_part11 Endif If (Time_out/128)=Int(Time_out/128) Then Goto Xmodem_part2 Else Goto Xmodem_part5 Endif ' Xmodem_part7: Da%=Bios(2,1) If Da%=Soh Then Goto Xmodem_part8 Endif If Da%=Eot Then Goto Xmodem_part12 Endif If Da%=Can Then Goto Xmodem_part11 Endif Goto Xmodem_part6 ' Xmodem_part8: Block_numb%=0 Block_comp%=0 Block_numb%=Bios(2,1) Block_comp%=Bios(2,1) Print At(10,11);"Block number: ";Block_numb%;" ";"Block Compliment: ";Block_comp% Print At(24,13);Space$(20) Check%=0 Block$="" Checksum%=0 Print At(10,13);"Byte received:"; For Byte=1 To 128 Print At(24,13);Byte Da%=0 Byte_data: Abort$=Inkey$ Exit If Abort$=Chr$(24) If Bios(1,1) Then Da%=Bios(2,1) Check%=Check%+Da% Block$=Block$+Chr$(Da%) Else Goto Byte_data Endif Next Byte Print At(24,13);"Got 128 bytes!" If Abort$=Chr$(24) Then Goto Xmodem_part11 Else Checksum%=Check% And 255 Endif Check: Abort$=Inkey$ If Abort$=Chr$(24) Then Goto Xmodem_part11 Endif Check_sum%=0 Print At(10,15);Space$(50) Print At(10,15);"Awaiting checksum. " If Bios(1,1)=-1 Then Check_sum%=Inp(1) Else Goto Check Endif Print At(10,15);Space$(50) Print At(10,15);"Our check: ";Checksum%;" Their check:";Check_sum% If Checksum%=Check_sum% Then Goto Xmodem_part9 Else Goto Xmodem_part10 Endif ' Xmodem_part9: Print #1,Block$; Try%=1 Inc Block% Time_out=0 B_out=0 @Clear_modem Out 1,Ack Goto Xmodem_part3 ' Xmodem_part10: Inc Try% If Try%>10 Then Goto Xmodem_part11 Else @Clear_modem Endif Goto Xmodem_part2 ' Xmodem_part11: Out 1,Can Out 1,Can Out 1,Can Close #1 Kill Filename$ Print At(10,17);"Status: ";Red$;"XMODEM CANCELLED -- ";Char$; Print Green$;Upper$(Filename$);Char$;" deleted." Print At(28,20);"PRESS ANY KEY" Void Inp(2) Goto Xmodem_end ' Xmodem_part12: Out 1,Ack Close #1 Print At(10,17);"Status: ";Green$;"XMODEM COMPLETE. ";Red$; Print Upper$(Filename$); Print Char$;" received." Print At(28,20);"PRESS ANY KEY" Void Inp(2) Goto Xmodem_end ' Xmodem_end: Cls @Clear_modem Sput Screen1$ Clr Screen1$ Print At(Oldx%,Oldy%); Void Xbios(21,1) Return ' Procedure Clear_modem Rem --> Clears the modem of any extraneous data <-- Do Test!=Bios(1,1) Exit If Test!=0 Void Inp(1) Loop @Clear_iorec_buffer(1024) Return ' ' This procedure tells the AES to provide a lock to prevent user interaction ' during a redraw, or to tell the AES that a redraw is done. ' Ref 1 pg 301,302, Ref 3 pg 65 ' Procedure Wind_update(Code%) Dpoke Gintin,Code% Gemsys 107 ' If up_return = 0 an error occured | up_return = positive integer no errors Up_return=Dpeek(Gintout) Return r' Wind_set sets specified fields for a GEM Window ' Ref 1 pg 297-299, Ref 3 pg 64-65 ' Procedure Wind_set(Handle%,Flag%,Sw1%,Sw2%,Sw3%,Sw4%) Dpoke Gintin,Handle% Dpoke Gintin+2,Flag% Dpoke Gintin+4,Sw1% Dpoke Gintin+6,Sw2% Dpoke Gintin+8,Sw3% Dpoke Gintin+10,Sw4% Gemsys 105 Return ' Wind_open opens a previously created GEM window. ' Ref 1 pg 294, Ref 3 pg 63-64 ' Procedure Wind_open(Handle%,Initx%,Inity%,Initwidth%,Initheight%) Dpoke Gintin,Handle% Dpoke Gintin+2,Initx% Dpoke Gintin+4,Inity% Dpoke Gintin+6,Initwidth% Dpoke Gintin+8,Initheight% Gemsys 101 Return ' This procedure returns a number of values for GEM windows. See refs. ' Ref 1 pg 286-289, Ref 3 pg 61-63 ' Procedure Wind_get(Handle%,Flag%) Dpoke Gintin,Handle% ' Flag% is one of several options that can be used with Wind_get Dpoke Gintin+2,Flag% Gemsys 104 ' Example: ' If Flag%=4 { The coordinates of work area (x,y,width,height) } ' Following the Gemsys 104 call ' Xpos=Dpeek(Gintout+2) ' Ypos=Dpeek(Gintout+4) ' Width=Dpeek(Gintout+6) ' Height=Dpeek(Gintout+8) Return ' This procedure will return which window the mouse is currently over ' Ref 1 pg 300, Ref 3 pg 61 ' Procedure Wind_find(Wi_fmx%,Wi_fmy%) Dpoke Gintin,Wi_fmx% Dpoke Gintin+2,Wi_fmy% Gemsys 106 ' If what_wind=0 then the mouse is positioned over open screen space What_wind=Dpeek(Gintout) Return ' Wind_delete completely deletes a window and frees the memory used for it. ' Ref 1 pg 296, Ref 3 pg 60 ' Procedure Wind_delete(Handle%) Dpoke Gintin,Handle% Gemsys 103 Return E ' Wind_create builds a Gem Window ' Ref 1 292, Ref 3 pg 51-53,60,262,286 ' Procedure Wind_create(Wind_attribs%,Fullx%,Fully%,Fullwidth%,Fullheight%) ' Compute attribs by adding the Hex characteristics together ' &H001 Name Bar ' &H002 Close Box ' &H004 Full Box ' &H008 Move Box ' &H010 Information line ' &H020 Size Box ' &H040 Up Arrow ' &H080 Down Arrow ' &H100 Vertical Slider ' &H200 Left Arrow ' &H400 Right Arrow ' &H800 Horizontal Slider ' An example of a complete GEM window would be Wind_attribs%=(&HFFF) ' Dpoke Gintin,Wind_attribs% Dpoke Gintin+2,Fullx% Dpoke Gintin+4,Fully% Dpoke Gintin+6,Fullwidth% Dpoke Gintin+8,Fullheight% Gemsys 100 Return )' This procedure closes an open GEM window ' Ref 1 pg 295, Ref 3 pg 59 ' Procedure Wind_close(Handle%) ' Handle% is the number of the window Dpoke Gintin,Handle% Gemsys 102 Return >' Wind_calc calculates the work area in a window ' Ref 1 pg 303, Ref 3 pg 58-59 ' Procedure Wind_calc(Type%,Kind%,Calc_inx%,Calc_iny%,Calc_inwidth%,Calc_inheight%) ' Type = 0 to return the border area, or 1 to calc the work area Dpoke Gintin,Type% Dpoke Gintin+2,Kind% Dpoke Gintin+4,Calc_inx% Dpoke Gintin+6,Calc_iny% Dpoke Gintin+8,Calc_inwidth% Dpoke Gintin+10,Calc_inheight% Gemsys 108 ' Creturn=Dpeek(Gintout) ' Coutx=Dpeek(Gintout+2) ' Couty=Dpeek(Gintout+4) ' Coutw=Dpeek(Gintout+6) ' Couth=Dpeek(Gintout+8) Return GfABASIC8  d=>D>\?|?|?????@b@b@b@bSAEACXCYRADXRADYCRMODRMDOSNDREZOCHECK_OTOGGLE_SCHECK_NCHECK_A DUMMY_VARSTATUS1ATALL_DINEALL_DONETSTTST1ELEL1LTIEXIEYISXDSCREEN1AA1A2CSAEACXCYRADXRADYDRADYC3P1P2C1C2CX1CY1RADX1RADY1CX2CY2RADX2RADY2CCRADRMODCX3CY3CX4SNDSND1TXREZZEL1EL2ELYPLTLWTX1TX2YP1RZAXIZ1LT1LT2X1Y1LT3LT4XPIEWIEYIEXIEHISYISWISHISXTX3RCPCP1YP2TX4XRYRCP2CP3TX5XYMSTRIPMSTRINGAZYPXYYP1SPALETTEMEDREZHIREZ PROGRAM_DATAMENU_STRIP_DATA STRIP_DATACLEAN_UP PROGRAM_DATA1 PROGRAM_DATA2 DOELLTITLE DOTITLELLDOTITLE_FIL_ELL DO_TITLE_ELLDO_TITLE_FIL_ELLDO_TITLE_OVALSDO_TITLE_CIRCLES DO_TITLE_TEXT M_HANDLER CHECKMARK DROP_DOWN DO_SOUND1 DO_SOUND2 DO_SOUND3 LINE_TYPELINETYPE LINE_WIDTHLINE_END MARKER_TYPE MARKER_HEIGHT TEXT_SIZE TEXT_BASELINE TEXT_EFFECTS FILL_PATTERNS FILL_HATCHSHRINKARC_PIE BOX_CIRCLE ELL_ARC_PIE ELLIPSE_S LOW_REZ_MSGSAVE_ORIGNAL_COLORSSAVE_ORIGNAL_COLORR*N R* V.D.I. SAMPLER IN G.F.A. BASIC * R* Ver 2.0 By Jim Luczak 2/14/87 * R*N *pp@ F*  F*`` F&*`` !`` !@@ FE F GFu@)!V.D.I. Sampler| | Shift Into!! MEDIUM RESOLUTION !F-F F GJFRF: GF RFF FQ!&!'!=!B!GFRF GEG FQ F  GFGRFQ !!!!!!F-Q ! !!!FFQ!!!"! F-Q!!!F HpEG FQ F  H^FGEFEF EFMFp6!F6! !!@F.6!@!@!F6!`!!FR-# DRAW TITLE PAGE - # FMFHH!FEF!EFEF EFMFHE F E F EFEF EF EF EFMF-EF EFEF E@@F!MF@ !FE FEF EF EFMF EFMFkMFP- PROGRAM CONTROL LOOP - }F F^FFvLF,FLF JZF JF,R- CLEAN-UP END PROGRAM - |F}F!FEGpF-!`F!F@!FF!F!@ F!@ F-@!@ F-tF F[FqFR- SAVE ORIGINAL COLOR PALETTE - +F-EGpF-!PF!F@!F!F!FtF@ E3 F@ E3 F@ E3@ F F.FR- DO ELLIPSES FOR TITLE PAGE - +FH LB F M ! F!"F!!!!!Fz1!F0!FH"! F L:@JFEF0!F L6JFEF FE FE KF-z!F.FR- DO OVALS FOR TITLPAGE - +F-EppFEppF %! ! F!M Fp!!!F.FR- DO CIRCLES FOR TITLE PAGE - +F- %!! FM Fp !!F.FR- DO TITLE PAGE TEXT - +FEFEppFF!F( ! !!F-M F'!!V. D. I.F!F(!!!`FM F*/!f!//!SAMPLERF!F(!!!@@FM F0/>!!zz! Programmed InF( ! FM F.//!0! ! G F A BASICFn(!!!@@FM F'!9!BYF( !FM F"' !D! J. LuczakFM F {HFz!F.FR- MENU BAR HANDLER - +F-$ P6  About VDI SAMPLER FL)!4Let Your Imagination Soar| |Program In G.F.A. Basic!!Let's GO!F FF Px  Line Type FM @! FMF`MF F P  Width FM 0! FMF`MFF F P  Endstyles FM ! FMF`MF F Q6  Type FpM ! FMF`MF F Qv  Height FFM ! FMF`MFF F Q  Size FM `! FMF`MFF F Q  Baseline FM @! FMF`MF F R6  Effects FM ! FMF`MF F Rv  Pattern FM ! FMF`MF  F R  Hatch FM ! FMF`MF! F R  Arc / Pie FM ! FMF`MFH F S*  Box / Circle F/M ! FMF`MF, F$ Sn  Ell.Arc / Ell.Pie FM @! FMF`MFH F S  Ellipse FM 0! FMF`MF- F S   EXIT  FM ! FMF`FEF F Tj   STAY  FM ! FMF`YF6!F6! !!@F.6!@!@!F6!`!!F FF T   STAY  FF F.FP- SHRINK BOX ROUTINE - +F-! F!HF!F@!F!F !F@! F`!GF s# F.FR- SOUND ROUTINES - + ! Fy!@!!!Fz!!!} !F.F- + ! Fy!@!!!Fz!!!} !F-.F + Fy!!!!Fz!!!z !FF1!F1!F.F!R-" LINE TYPE -! +FYF$EF#E FE Line Type F6!!! F-6!@! !`F 6!`!@! F 6!!`!F( !!!&F(''! ! L I N E T Y P E F ( !!!&F#F Xp$`F EA$ F/ !#! !F $$!!!FF4 !##@ ! !##@ F-  !#! !#Fe4$F20#!HF  WF$!F.FR-" LINE WIDTH - +F-YF$EF#EHHFE Line Width F6!!!F6! ! ! F 6!`!!@F6!`!@!F( !!!&F*''! ! L I N E W I D T H F ( !!!&F#F Zf$F EA$ F/ !#! !F $!$!!FF4 !##  ! !##  F  !#! !#Fe0$!F0#!pF YF$!F.FR- LINE ENDSTYLE - +F-YF$EF#E FELine Endstyle F- E ( Arrow )F E ( Rounded )F E ( Square )F 6!!!F6!!@!`F6!`!@!F6! ! !F!( !!!&F8''H! ! L I N E E N D S T Y L E F( !!!&F \$F EA$ F*/ !##  !H~!$ F/ !#! !F$! !$!$F44!##  ! !##  F 4!#! !#F#4$F20#!HF [F$!F.FP- MARKER TYPE - +F YF$EF#E FE Marker Type F- E( Dot )F E ( Plus Sign )F E ( Asterisk )F- E ( Rectangle )F  E ( Cross )F@ E ( Diamond )F6!@!!F 6!!!`Fi6!!`!`F 6!!!F( !!!&F4'' ! ! M A R K E R T Y P E F( !!!&F _t$`F EA$ F*/ !##  !H!$ F/ !#! !F-EHHF _:EG@F  E-F E#F0-!pF  _ F U!$!F`T`! ! F4$F20#!pF ^F.FP- MARKER HEIGHT - +F-YF$EF.EF/EF#E FEMarker Height F- E( Dot )F E ( Plus Sign )F E ( Asterisk )F- E ( Rectangle )F  E ( Cross )F@ E ( Diamond )F6!!`!`F6! !! F6!!!F 6!!!F( !!!&F8'' ! ! M A R K E R H E I G H T F( !!!&F b>$JF EA$ F*/ !##  !H!. F / !#! !F-EHHF aEG@F  E-F E/ F0-!pF  aF U!.!$FT`! ! F0$! F4.F24/F20#!pF a8F.FP-# TEXT SIZE - +F-YF$EF.EFE Text Size F#EHHF6!!@!FI6! !!F6!!!F6!!!`F( !!!&F0'' ! ! T E X T S I Z E F( !!!&F d $`FV EA$ F/ !#! !F ( !!!.F*'\!#!V D I S a m p l e rF( !!!&F4$F20.!F0#!pF chF d$`F EA$ F/ !#! !F ( !!!.F*'\!#!V D I S a m p l e rF( !!!&F0$!F0.!F0#! F d F.F-R-! TEXT BASELINE - +F-YFRF2 e@EGF7Q ! F  e(F$EF.EHHF/EHHFEText Baseline = F6!@!@!F!6! !!F6!@!!F6!!! F( !!!&F8''4! ! T E X T B A S E L I N E F fEGa Ha F 0E$ F 1E$ F EA FH.!/F( !!!@F f-EGFo/0!1!.!F4 f$ JF00!pFF fF01!@F F1  f-FG4$F  f6FG(!!F.FR-! TEXT EFFECTS - +F-YF$EF.EFEText Effects = F E ( Normal )F E ( Bold Face )F E( Light Intensity )F E ( Skewed )Fn E( Underlined )F   E ( Outlined )F #E44F 6!!!F6! !!F6!@!@!F6!!`!F( !!!&F6''p!p! T E X T E F F E C T S F( !!!&F iV$Fd EA$ F( !$!!@Fd/p!#! !F /H!#! !. F i0$F2$!F i:F4$FF F$0#! F4.F hF.FP-! FILL PATTERNS - +F-YF$EF.EF#E F4EF6!@!! F 6!!!F6!!`!F 6!!!F( !!!&F8''p!p! F I L L P A T T E R N S F-( !!!@@F k$$HF % !!$F(4!#!4*!##H F '4 !##  !$F04!\F k. JF0#! F.EF4EF F4$F 4.F. jnF.FR-# FILL HATCH - +F-YF$EF.EF#E F4EF6!!@!F 6!!!F6!@!!F6!!!F( !!!&F:''p!p! H A T C H P A T T E R N S F-( !!!@@F l$PF % !!$F(4!#!4*!##H F '4 !## !$F04!\F l. JF0#! F.EF4EF F4$F 4.F. lBF.FR-# ARC / PIE - +F-YF E F- EF EF EF EF E<<F6! ! ! F 6! !!F6!! ! F 6!!!F%=!F L! ! F(!!!&F $''!p! A R C ' SF$'' !4! P I E ' SF(!!!@@F EF EF EF E<<F E F EF E F E<<F EF E<FK ! ! F#F$!F* H!pGHH!RF* [!*G[[!/F$!F* H!pG!pF* )!G !F'!|!0F' @ !!0F'>!@!90 0F'V!$!900F'x!|!1800F!'!!1800F!'9!f!2700F!'S!9!2700F! #F$!F0H!p!44!H!H F0H!p!44!z !T F0H!p!44!m !" F0H!p!44!/ !Z F%!!F!0[!!44!H!H F%!!0F0[!!44!z !T F%!!F0[!!44!m !" F%!!`F0[!!44!/ !Z F.F!R-" BOX / CIRCLE - +F-YF 6!!!F6!!@!@F6!`!`!`F6!`!`!F4E F#E F$EF%=!F#F$!F!! !<F !G!<F$!F( !!!&F! ''H!p!B O XF(''4!p! C I R C L E SF t$`F%!!$F"4!#!44!4F&4 !##  F04!HF0#!HF4$F tF$EF E,,F E//F E99F E%%F EJJF EF EcF EF  E F  ENF@ E F@ E F>E F #FE v$`F%!!$F $ !$ !>F&$ !$ F0>!F4$FF uF$!F.F!P-ELLIPTICAL ARC'S / ELLIPTICAL PIE'S - +F-YF 6!!!F6!@!!F6!@!@!F6!!`!F$EF?EF@EF #F$!F!! !<F$ !<G !<F$!F4EHHF#E88F(EFAE00FEFEaa FRF6 wEG`F3Q F  wFG x,$pF#?F$4!#!p!0!!FH!FH#!(FH?!@F (?!!!BF!'4!A!B$ FF04!4F4$F  wF@ E FP EF` E F4EHHF#EF(EFAE FE(( FEaaF$EFH?!@F yf$pF %?!!$F$4!#!p!@!!FH!FH#!(FH?!@F (?!!!BF!'4!A!B$ FF04!4F4$F  xF.F!R-&ELLIPSE - +F-YF 6!!!F6!@!!F6!@!!F-6!! !@F-?EF@EF$EF.EF4EF-#E<<F-CEF-DE<<F- z$HF-#?F@ %?!!.F4!#!C!DFH?!@FHE!FF1C! F1D!F4$FF4.FF z\F$EF?E F@EF  {$GF6!`!?!F6!`!@!F1?!F1@!F4$FF {^?F?E``F FE {|@F@E@@F FE{F zF$.FP-! PROGRAM DATA - -|F58,8,220,3,6,150 F|F106,12,170,0,8,1 F|F@DESK, About VDI SAMPLER ,~,-,-,-,-,-,-,"" .LINE, Line Type , Width , Endstyles ,"" MARKER, Type , Height ,"" *TEXT, Size , Baseline , Effects ,"" ~FILL, Pattern , Hatch ,"" JSHAPES, Arc / Pie , Box / Circle , Ell.Arc / Ell.Pie , Ellipse ,"" $QUIT,  EXIT  ,  STAY  ,"" "","" |F2,2700,900,1,105,638,93 3,319,47,150,25 4,163,250,3,1 140,163,30,490 20,40,75,105,140,180 |F 200,25,100,145,400,140,450,45 |F`,69,76,76,73,80,84,73,67,65,76,32,65,82,67 / { { }f | J } } K L M< M O Uހ V VX V X Z ]$ _ b e gB i k T mT r vp y   8' This next Gemdos call will return the current version of TOS that you have. ' At time of publishing 0.13 Disk Based ' and 0.19 ROM ' ' Ref 2 Pg. 115 ' @Tosversion Print Version$ ! &H1300=ROM &H0D00=Disk Based ' ' ' ' ' ' Procedure Tosversion Version%=Gemdos(&H30) Version$=Hex$(Version%) Return ' This next Xbios routine is not for Beginners! ' It will execute a routine in the 68000 supervisor mode ' The address must be passed in this manner: ' Prog_address=Varptr("function") ' For example you Bload a ML program in the variable Prog$, then you would ' use Prog_address=Varptr(Prog$) ' ' Ref 2 Pg. 204 ' Procedure Supexec Dummy=Xbios(38,L:Prog_address) Return }GfABASICDfTT^^jJ`MVTUVVXVXVVVVVWWWc8IXY SPRITE_HINTENTASTEDUMMYFELDVORNHINTEN SPRITE_VORNSHX_AKTIONSPUNKTY_AKTIONSPUNKT FOREGROUND OREGROUND FREGROUNDFOREGRNDBACKGRNDCOLRFCOLRBCOLORFCOLORFCOLOR0BCOLOR0 FORMAT_FLAGKEY_AXVAR1MCOLORJKSPRITE_BACKGRNDSPRITE_FOREGRND NEW_FCOLOR NEW_MCOLORRESXVALYVALXMAXYMAXCMAXXVAL19YXALMOUSE_XTASTENBAB1SHAPEKEYINKEY2INIXYTASTEY_AKTIONSPUNKTX_AKTIONSPUNKTDUMMY X_POSITION Y_POSITIONKEY_ASCKEY2_ASC FORMAT_FLAGBCOLORFCOLORMCOLORVAR1TYPE NEW_MCOLOR NEW_FCOLORIXSELECT SPRITE_VORN SPRITE_HINTENFELDATSPRITE_FOREGROUNDSPRITE_BACKGROUNDYVALSP_COLOR REAL_COLORSABFRAGE DRAW_SPRITE SPRITE_LADE DEF_SPEICHERN INC_SPEICHERNLOESCHENHUGO SPRITE_LADENZEIGEN ED_SPEICHERN SP_SPEICHERN MO_SPEICHERNINQUIRY SPRITE_LOADERED_STORESP_STOREMO_STOREERASE SET_COLOR0 SET_COLOR1 SET_COLOR2 SET_COLOR3WAITINQUIRY2INQUIRY1SET_FOREGROUND_COLORSET_BACKGROUND_COLORSET_MASK_COLORCREATE_FINAL_SPRITE IMAGE_TYPESET_BACKGROUND VIEW_FINAL FINAL_IMAGESET_IMAGE_TYPEN#J YN## Sprite Editor for Monochrome and Color ## YN#J YN## Original monochrome program written by : ## YN## Arnfried Griesert "## YN## Montanusstr. 8 ## YN## 5653 Leichlingen 1 ## YN## Translated into English, converted to low resolution ## YN## and enhanced by: Thomas F. Collins, Las Vegas, Nevada, USA ## YN## Modified to include all resolutions and all colors ## YN## by: Tim B. Cotton, San Diego, California, USA ## YN## F## YN## GFA BASIC distributed in USA by MichTron Inc., Pontiac, Michigan ## YN#J Y#E F #JF$EF%EF&EFF'EGGFF(EppFF &F #JF$EF%EF&E FF'EGGFF(EF "F$EF%EF&E FF'EGGFF(EF FE FE0*pp@p !pp@p !( F P=L Display Sprite Builder Screen P=M %!!Fr !!&!'F%!!F2$X!% !$!%HHF2$!%hh!$!% F2$!%!$!%==F%!F*$H!%!$!%88F2$p!%XX!$!%F2$p!% !$!%CCF2$\[!%((!$!%ttF(!!!FrB/$p!%!&#$p !Sprite & Mouse EditorF !F(!!!F:V/$H!%!$ !.GFA Basic Distributed in USA by MichTron, Inc.F2$p!%!$!%Fs !FDEGFR$H!#%( #%  !$R!#%( #%  FR$z!#%( #%  !$M!#%( #%  FT#$HH #$  !%(!#$H #$  !%tFT#$zz #$  !%(!#$z #$  !%tF F%!!Fz#$XX #$  !#%00 #%  !#$`` #$  !#%44 #%  Fz#$~~ #$  !#%00 #%  !#$ #$  !#%44 #%  F2$a!%<<!$!% F2$!%<<!$!% F% !!F2$a!%((!$!%jjF(!!!`F./$4!%!$ !SpriteF./$!%!$ ! MaskF "'$u!%!FinalF(!!!F,'$P!%!F1 = Load SpriteF2'$P!%!F2 = Save Editor-FileF2'$P!%""!F3 = Save Sprite-FileF0'$P!%**!F4 = Save Mouse-FileF.'$P!%22!F5 = Erase SpriteFF4'$*!%!F6 = Select image typeF2'$*!%!F7 = Background colorF2'$*!%""!F8 = View final shapeF&'$*!%**! F10 = ExitF2'$%!%22! = Select Hot SpotF2$p!%44!$!%44F|EG(FR$ #$ !%<!$#$ !%AF!%!F^$ #$ !#%<< !$#$ !#%AA F F EFEF EF #JF (!!!F F!(!!!F F!0'$0#$ !%:!M F0'$0#$  !%:! F F.'$h#$  !%:!B F EFEFDType% tells if you are working on a Sprite (1) or a Mouse (2) or #not selected yet (0) eEFF!FF, R Q#%(( Q#%rr JF#,FR F, 8RQ#%44 Q #%BB JF#,F F , nRQ#%44 Q #%BB JF#,F F ESF6 F E7< hF   JFw L !!!!!!!!Fb F  JF F6   `   00JFEFEF Z `JFE# F F  JFE# F F  JFE#p F FE  0JFE#p F F,F !@F%!!F EGFn$#XX  !%#00  !$#``  !%#00  Fn$#~~  !%#00  !$#  !%#00  F  F !F F  F >)!(Do you want to|exit this|super program ?!!Yes|No! Fe  F #F EG'F!!&!'F  F%!!F !!&!'FqFe P=L Load Sprites from *.SHP-File kP=L + F h!!FFf\*.SHP!!F 6 F  6 JF R JFE=@6  F7I!M!F :M!!F:M! F:M!F:M!F @EGpF :M!!F 6EGpF   #pp JFE #p F$@ EF  F@ EF F   #pp JFE #p F@ EF  ,F@ EF F  xFE  RFE 8MF     JF!2'#$00 #$  !%:! F2'#$00 #$  !%:!M B F F J JF2'#$00 #$  !%:! F2'#$HH #$  !%:!M F F   JF2'#$00 #$  !%:! F2'#$00 #$  !%:! B F F2'#$00 #$  !%:! F F F F P !JF!2'#$00 #$ !%:!MFB F F JF2'#$00 #$ !%:!MF F F  JF2'#$00 #$ !%:! FB F F2'#$00 #$ !%:! F F F F F EF   JF!2'#$00 #$ !%:! F2'#$00 #$ !%:! FB F F   JF2'#$00 #$ !%:! F2'#$00 #$ !%:! F F F  JF2'#$00 #$ !%:! F2'#$00 #$ !%:! B F F2'#$00 #$ !%:! F F F F &  "JF!2'#$00 #$ !%:!MFB F F n JF2'#$00 #$ !%:!MF F F  JF2'#$00 #$ !%:!M B F F2'#$00 #$ !%:!M F F F FEFJEGpF @EGpF,F 0F F F,)!Data does not exist.!!Continue!F  F# F.F P=L 0Store Sprites for later use by Sprite-Editor P=L +F h!!FFf\*.SHP!!Ft6 F  6 JFE=@6  F7O!M!FM"FM"FM" FM"FM" FEGpFEFEFEGpF  n@ JFE #p F" FE @ JFE #p F FE @FM"FM"F F@ 8MF F.F P=L DStore for final Basic listing (for the Sprite) P=L +F h!!!FFf\*.LST!!F6 F  t6 JFEFTC@\ F+E6 C@\ F E=@ FF@EC@. FW  JFE;@ F FE.LSTF FEE=@6  F7O!M!FM"'FS(M" ' Sprite-Convert data in string F2M"let ""$=MKI$(A )+MKI$(A )F *M"let ""$=""$+MKI$(A )F*M"let ""$=""$+MKI$(A )F*M"let ""$=""$+MKI$(A )FM"for i%=1 to 16FM"read foregrnd,backgrndF:M"let ""$=""$+MKI$(backgrnd)+MKI$(foregrnd)FoM"next i%F M"data "FPEG`FFEFEFEGpF  @ JFE #p F" FE @ JFE #p F FE FM"A ","A "F 6 `JFM","F FF MFF F jF`M"data"F6dEGpFEFEF EGpF  @ JFE #p F" FE @ JFE #p F FE FM"A ","A "F J pJFM","F ZF MFF F ~Fp 8MF F.Fp pP=L DStore the final Basic listing (for the Mouse) P=L +F h!!FAFf\*.LST!!Fv6 F   6 JFEFC@\ F+E6 C@\ F E=@ FF@EC@. FW 2 JFE;@ F DFE.LSTF FEE=@6  F7O!M!FM"'FS&M"' Mouse-Convert data in stringF2M"let ""$=MKI$(A )+MKI$(A )F *M"let ""$=""$+MKI$(A )F*M"let ""$=""$+MKI$(A )F*M"let ""$=""$+MKI$(A )FM"for i%=1 to 16FM" read backgrndF*M"let ""$=""$+MKI$(backgrnd)FM"next i%F M"for i%=1 to 16FM" read foregrndF*M"let ""$=""$+MKI$(foregrnd)FM"next i%F M"data "F EGpFFEFEGpF  @ JFE #p F FE F M"A "Fp  pJFM","F  F MF F dFpM"data "F EGpFEF EGpF   @ JFE #p F" FE  \F M"A "Fp  pJFM","F  F MF F  :Fp 8MFA F .F P=L &Erase the foreground and background P=L +F @)!*Are you sure you want to|erase the sprite?!!Yes|No! F! " JF"~EGpF "tEGpF@ EFJ@ EFJ,F "HFE ".FE F.F P=L .Determine mouse position and change pixels 8P=L +FR( $0P#$HH P#$PP JF"E#P#$H #$  F"E#Q#%( #%  F #R@ JF@ EF $"F $R@ JF@ EF F F,F %F( $P#$zz P#$LL JF"E#P#$z #$  F"E#Q#%( #%  F $R@ JF@ EF $F $R@ JF@ EF F F,F F F.F P=L 8Determine mouse position and change foreground color P= y=B +F)EG(FL )P#$  #$ P #$ #$ RJF &   JF!2'#$00 #$  !%:!M B F EF2'#$00 #$  !%:! F F (FF 'L JF2'#$00 #$  !%:!M F EF2'#$00 #$  !%:! F F (BF '  JF2'#$00 #$  !%:! B F EF2'#$00 #$  !%:! F F (>F2'#$00 #$  !%:! F EF2'#$00 #$  !%:! F F F F F ( JF!2'#$00 #$ !%:!MFB F )bF (JF2'#$00 #$ !%:!MF F )^F )$ JF2'#$00 #$ !%:! FB F )ZF2'#$00 #$ !%:! F F F F F EF)EGpF)EGpFEFEF,FF )FG )~FG F %FG.Fn P=L 2Determine mouse position and change mask color !P=L +F.EG(FL .P#$  #$ P #$ #$ RJF +  JF2'#$00 #$ !%:! FB FEFi2'#$00 #$ !%:!M F -F , JF2'#$00 #$ !%:! F FEFi2'#$00 #$ !%:!M F -F , JF2'#$00 #$ !%:! B FEFi2'#$00 #$ !%:!M F -F2'#$00 #$ !%:! FEF2'#$00 #$ !%:!M F F F F -V  JF!2'#$00 #$ !%:!MFB F .$F - JF2'#$00 #$ !%:!MF F . F - JF2'#$00 #$ !%:!M B F .F2'#$00 #$ !%:!M F F F FEF.~EGpF.tEGpFEFEF,FF .TFG .@FG F *FG.FnN=K 8 Determine mouse position and change background color P=L +F3>EG(FL 34P#$  #$ P #$ #$ RJF 0N  JF2'#$00 #$  !%:!MF F EFi2'#$00 #$  !%:! B F 1F 0  JF2'#$00 #$  !%:! F F EFi2'#$00 #$  !%:! B F 1F 1R JF2'#$00 #$  !%:!M F EFi2'#$00 #$  !%:! B F 1F2'#$00 #$  !%:! F EF2'#$00 #$  !%:! B F F F F 2 JF!2'#$00 #$ !%:!MFB F 2F 2` JF2'#$00 #$ !%:! FB F 2F 2JF2'#$00 #$ !%:!M B F 2F2'#$00 #$ !%:! B F F F F EF% !!F2$a!%((!$!%jjF F /zF(EF.F' 'P=L FCreates the actual sprite image and puts it in final sprite window P=L +!F 4|JF0)!Select type of image!! Sprite|Mouse!F 4Fe0)!Select type of image!! Sprite|Mouse!Fa F 56JF 4 JF*)!Select VDI format!! Normal|XOR! F 5(F *)!Select VDI format!! Normal|XOR! F F!  E F F!.F  P=L >Puts the sprite in the view window or shows the mouse image P=L +FC h!!F 6JFD)!(You must select an |image type first! !! Sprite|Mouse!Ft F! 9$JFRFf6EG(FQ F 6FG|Ff(0,3,1,2,4,5,6,7,8,9,10,11,12,13,14,15 Continue for type%=1 cEb b F Eb FEb F,Eb F,7EG`FFEFEF7EGpF  7@ JFE #p F" FE 7@ JFE #p F FE 7vFEb b Fa 7NF`8EGpFEFEF8EGpF  8h@ JFE #p F" FE 8@ JFE #p F FE 8:FEb b Fa 8Fp% !!F2$a!%((!$!%jjF~!$|!%::F# :F :JFEb b F Eb F Eb F Eb F9EGpFFEF9EGpF  9@ JFE #p F FE 9F Eb F 9|Fp:tEGpFEF:^EGpF  :T@ JFE #p F" FE :&F Eb F :Fp}FRF! :~R F}F F! F.Fe 'P=L "Display the Sprite in 3 windows P=L +FR ?n@ JF <@ JF%!!F*r$#HH  !%#((  !$#pp  !%#<<  Fr$#zz  !%#((  !$#  !%#<<  F#F$$#oo !%#` F#F$$#  !%#` F ?4F#Fr#$#H  !#%#((  !#$#pp  !#%#<<  Fr#$#z  !#%#((  !#$#  !#%#<<  F%!!F =JF%!!F Fz#$#H  !#%#((  !#$#pp  !#%#<<  Fz#$#z  !#%#((  !#$#  !#%#<<  F#F!$$#  !%#` F$$#oo !%#` F F  Color 0 & Plot xval*(239)+X%,yval*(64)+Y%  C"F#Fj$#HH  !%#((  !$#pp  !%#<<  Fj$#zz  !%#((  !$#  !%#<<  F A@ JF% !!Fz#$#H  !#%#((  !#$#pp  !#%#<<  Fz#$#z  !#%#((  !#$#  !#%#<<  F# F!$$#  !%#` F BF% !!Fz#$#H  !#%#((  !#$#pp  !#%#<<  F %!!Fz#$#z  !#%#((  !#$#  !#%#<<  F #F$$#  !%#` F F# F!$$#oo !%#` F$$#  !%#` F F DVJF( !@F% !!FDFEGFn$#XX  !%#00  !$#``  !%#00  Fn$#~~  !%#00  !$#  !%#00  F C`F !F F.F 'P=L 8Set the background color for the final viewing window P=L +F T)!6 |To select, Click mouse | on color below | !!Continue|Cancel!F EJFEFF, ERQ#%44 Q #%BB JF,FREF F EFm {HF F.FN#J !N# You have hardly reached the END # !N#J ! G@ d  I0O8U@6;d- df!#^%/l* E<6"48f`*ALJPfV0A "H//) "PJgBAёg|f`  _`BQNdNV0.H=@`t=n`R0.n=@`80.nЮ .0.Ю /NXJ@f0.nJnlRn0.nm0.H=@JnnN^NuNV n-Pg n0(`B@=@ n -Pg n 0(`B@=@Bn`RRSnSnJng"Jng nH"nHA=@gJg JgJnnJnfJng n-P n=h n"n n"n 1i n n 1n n "n2)HЁR @  n "n 2)HЁR @ B@`p`N^Nu`V ' ' Sort.Bas ' ' 05/1987 MichTron ' Timothy Purves ' & John Tal ' ' Interface to C subroutine to sort strings using C: call ' ' REL.O is linked with your C code and walks through the fixup table ' relocating the code. ' ' This method is used instead of Exec(3, ) ' ' In testing this method sorted 410 random length strings per second ' ' -F ' Dim A$(1000) ' Prog$=Space$(1000) ' Ensure Prog$ large enough to contain Bload'd program ' Prog_ptr=Varptr(Prog$) ' Work$="SORT.PRG" @Xec_load(Work$) ' Print "Creating Random strings" S_lim=23 For X=0 To S_lim A$(X)="" L=Rnd(0)*60+1 For I=1 To L A$(X)=A$(X)+Chr$(Rnd(0)*26+64) Next I Print X;" ";A$(X) Next X ' Base=Lpeek(Arrptr(A$()))+4 If Lpeek(Base)<>Varptr(A$(0)) Print "Somthing is wrong!" Stop Endif @Wait ' A=C:Prog_ptr(W:(S_lim+1),L:Base) ' W:number of strings to sort ' For X=0 To S_lim Print X;" ";A$(X) Next X End ' ' Procedure Wait Print "press key" While Inkey$="" Wend Print Chr$(13);" ";Chr$(13); Return ' ' Procedure Xec_load(A$) If Exist(A$) Then Else Print A$;" Not Found !!" Stop Endif Bload A$,Prog_ptr Return /*M * * shell sort function (standard K&R sort) * For interface with GFA Basic to sort an array of (strings$) * Program by Timothy Purves of MichTron Inc. * Compiled with Alcyon Compiler * To be linked with REL.O *M/ #define EVEN (~1L) typedef struct { char *address; int len; } VARPTR; main(number,base) int number; VARPTR *base; { int gap,i,j; for (gap = number / 2 ;gap > 0;gap /= 2) for(i = gap;i < number;i++) for(j = i-gap;j >= 0;j -= gap) if(stringcmp(base + j, base + (j + gap))) break; } stringcmp(s,d) VARPTR *s,*d; { char *sptr,*dptr; int slen,dlen,diff; slen = (sptr = s->address) ? s->len : 0; dlen = (dptr = d->address) ? d->len : 0; diff = 0; /* while data in both strings and chars are the same */ while(slen && dlen && (diff = *sptr - *dptr) == 0) { ++sptr; /* next token */ ++dptr; --slen; --dlen; } /* if first is NULL and second has data || if(first > second || same up to second lenght and first is longer */ if((dptr && !sptr) || diff > 0 || (diff == 0 && slen)) { sptr = s->address; slen = s->len; s->address = d->address; s->len = d->len; d->address = sptr; d->len = slen; *((VARPTR **)(((long)s->address + s->len + 1) & EVEN)) = s; /* back tracker */ *((VARPTR **)(((long)d->address + d->len + 1) & EVEN)) = d; /* back tracker */ return 0; /* we swaped don't breakout! */ } return 1; /* break out */ } `NV0. H=@`=n`0.n=@`L0n-P0n2n 0n 0.nJnm( n2.H 02n"nRn0.n mj0.H=@JnnJN^Nu/*M * * shell sort function for INTEGERS - Array%() * For interface with GFA Basic * Program by John Tal of MichTron Inc. * *M/ shell(array,elements) long array[]; int elements; { int gap,i,j; long temp; for(gap = elements/2 ; gap > 0; gap /= 2) for(i = gap; i < elements; i++) for(j = i-gap; j >= 0 && array[j] > array[j + gap]; j-= gap) { temp = array[j]; array[j] = array[j + gap]; array[j + gap] = temp; } } ~' ' SHELLIN4.BAS ' ' GFA Basic Program showing use of C: call ' ' Using Reserve & Poking Data into memory ' Data is Shellint.Prg ' ' 05/28/87 MichTron ' John Tal ' ' Dim A%(100) ' Data 96,26,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 78,86,255,242,48,46,0,12,72,192,129,252,0,2,61,64,255,254,96,0,0,178,61,110,255,254,255,252 Data 96,0,0,142,48,46,255,252,144,110,255,254,61,64,255,250,96,0,0,76,48,110,255,250,209,200,209,200 Data 209,238,0,8,45,80,255,246,48,110,255,250,209,200,209,200,209,238,0,8,50,110,255,250,210,238,255,254 Data 211,201,211,201,211,238,0,8,32,145,48,110,255,250,208,238,255,254,209,200,209,200,209,238,0,8,32,174 Data 255,246,48,46,255,254,145,110,255,250,74,110,255,250,109,0,0,40,32,110,0,8,50,46,255,250,72,193 Data 229,129,32,48,24,0,50,110,255,250,210,238,255,254,211,201,211,201,211,238,0,8,34,17,176,129,110,136 Data 82,110,255,252,48,46,255,252,176,110,0,12,109,0,255,106,48,46,255,254,72,192,129,252,0,2,61,64 Data 255,254,74,110,255,254,110,0,255,74,78,94,78,117,0,0,0,0 Rem Total bytes in data statements = 242 ' Reserve Fre(0)-1000 C_addr=Himem ' For I=1 To 242 Read I2 Poke C_addr+I-1,I2 Next I ' @Fill_random ' Print Print "Contents of A%() just before call" Print @Dump_array @Wait ' ' - Print Print "Calling C Subroutine" Print Int_addr=Varptr(A%(1)) ' ' Send Address of first element in Int_addr & number of elements to sort A=C:C_addr(L:Int_addr,W:100) ' Print "Back from C Subroutine" Print Print "Contents of A%() after call" @Dump_array @Wait ' ' - End ' ' Procedure Wait Print "press key" While Inkey$="" Wend Print Chr$(13);" ";Chr$(13); Return ' Procedure Dump_array For I1=1 To 10 For I2=1 To 10 Print Tab((I2-1)*5);A%((I1-1)*10+I2);" "; Next I2 Print Next I1 Return ' ' Procedure Fill_random Print "Initializing A%() to Random Order" For I%=1 To 100 Searching=True While Searching Searching=False C%=Trunc(Random(101)) B%=0 Looking=True While Looking Inc B% If A%(B%)=C% Then Searching=True Looking=False Endif If B%=I% Then Looking=False Endif Wend Wend A%(I%)=C% Print "A%(";I%;") = ";C%, Next I% Return ' ' SHELLIN3.BAS ' ' GFA Basic Program showing use of C: call ' ' Using Data from Shellint.Prg placed in Prog$ ' ' 05/28/87 MichTron ' John Tal ' ' Dim A%(100) Dim Prog$(300) ' Data 96,26,0,0,0,210,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Data 78,86,255,242,48,46,0,12,72,192,129,252,0,2,61,64,255,254,96,0,0,178,61,110,255,254,255,252 Data 96,0,0,142,48,46,255,252,144,110,255,254,61,64,255,250,96,0,0,76,48,110,255,250,209,200,209,200 Data 209,238,0,8,45,80,255,246,48,110,255,250,209,200,209,200,209,238,0,8,50,110,255,250,210,238,255,254 Data 211,201,211,201,211,238,0,8,32,145,48,110,255,250,208,238,255,254,209,200,209,200,209,238,0,8,32,174 Data 255,246,48,46,255,254,145,110,255,250,74,110,255,250,109,0,0,40,32,110,0,8,50,46,255,250,72,193 Data 229,129,32,48,24,0,50,110,255,250,210,238,255,254,211,201,211,201,211,238,0,8,34,17,176,129,110,136 Data 82,110,255,252,48,46,255,252,176,110,0,12,109,0,255,106,48,46,255,254,72,192,129,252,0,2,61,64 Data 255,254,74,110,255,254,110,0,255,74,78,94,78,117,0,0,0,0 Rem Total bytes in data statements = 242 ' Prog$=Space$(300) ' For I=1 To 242 Read I2 Mid$(Prog$,I,1)=Chr$(I2) Next I ' C_addr=Varptr(Prog$) ' @Fill_random ' Print Print "Contents of A%() just before call" Print @Dump_array @Wait ' ' - Print Print "Calling C Subroutine" Print Int_addr=Varptr(A%(1)) ' ' Send Address of first element in Int_addr & number of elements to sort A=C:C_addr(L:Int_addr,W:100) ' Print "Back from C Subroutine" Print Print "Contents of A%() after call" @Dump_array @Wait ' ' - End ' ' Procedure Wait Print "press key" While Inkey$="" Wend Print Chr$(13);" ";Chr$(13); Return ' Procedure Dump_array For I1=1 To 10 For I2=1 To 10 Print Tab((I2-1)*5);A%((I1-1)*10+I2);" "; Next I2 Print Next I1 Return ' ' Procedure Fill_random Print "Initializing A%() to Random Order" For I%=1 To 100 Searching=True While Searching Searching=False C%=Trunc(Random(101)) B%=0 Looking=True While Looking Inc B% If A%(B%)=C% Then Searching=True Looking=False Endif If B%=I% Then Looking=False Endif Wend Wend A%(I%)=C% Print "A%(";I%;") = ";C%, Next I% Return {' This is the Xbios call to set a color to an RGB value ' See the example below: ' Ref 2 Pg. 164 ' ' ' ' Example: Col_num=2 ! From (0-15) Rgb=&H117 @Set_color(Col_num,Rgb) ' Deffill 3 Pbox 0,0,100,100 Rgb=&H711 Pause 60 @Set_color(Col_num,Rgb) Rgb=&H272 Pause 60 @Set_color(Col_num,Rgb) ' You can delete the above example and just use the procedure ' ' ' Here is the actual procedure Procedure Set_color(Col_num,Rgb) Dummy=Xbios(7,W:Col_num,W:Rgb) Return ' Rsc_saddr will store values in an object tree ' Ref 1 pg 351, Ref 3 pg 92-93 ' Procedure Rsrc_saddr(Type%,Index%,Saddr%) Dpoke Gintin,Type% Dpoke Gintin+2,Index% Lpoke Addrin,Saddr% Gemsys 113 Return %' This procedure will convert character coordinates to pixel coordinates ' Ref 3 pg 92 ' Procedure Rsrc_obfix(Obj_index%,Obj_tree%) Dpoke Gintin,Obj_index% Lpoke Addrin,Obj_tree% Gemsys 114 Return -N' This procedure will load a Resource file ' Ref 1 pg 347, ref 3 pg 88,90-91,286,381 ' Procedure Rsrc_load(Rsc_name$) Rsc_name$=Rsc_name$+Chr$(0) Lpoke Addrin,Varptr(Rsc_name$) Gemsys 110 Return /' This procedure will grab the address of the resource data ' Ref 1 pg 349-350, Ref 3 pg 90-91 ' Procedure Rsrc_gaddr(Type%,Index%) ' values of 0 to 16 for type, see refs. Dpoke Gintin,Type% Dpoke Gintin+2,Index% Gemsys 112 Return ' Rsrc_free frees the memory used by a resource file ' Ref 1 pg 348, Ref 3 pg 88,90 ' Procedure Rsrc_free Gemsys 111 Return |' This Gemdos call deletes a directory for you so long as no files are currently ' in the directory ' ' Temp$ must always be null-terminated with chr$(0) ' ' Ref 2 Pg. 118 ' ' Here is an example that will delete a temporary directory with the name of TMP ' There must first be a directory by the name of TMP! ' Example Temp$="\TMP"+Chr$(0) D_addr%=Varptr(Temp$) @Wipe_directory End ' ' You may delete the example above and just use the procedure ' ' Procedure Wipe_directory Void Gemdos(&H3A,L:D_addr%) Return GfABASIC*0RRRXXXd h222888@TTTTINPRINT SETSCREENANSDUMMYREZSYSTABSPCMREZLOGBASEPHYSBASEGREZLOGBASSPACELOOPBEGININTRO SHOW_TITLE CHANGE_REZEND_ITMESSAGEP*M * REZ-MASTER *, by Steve Crunk A, March 29, 1983 e H A demonstration of the ability of GFA basic to Switch resolution H in the midst of a running program. See notes at end of program. rP*M Equates 0EF Resolution value; 0=Low, 1=Med, 2=High *2EF Logical screen base; all output goes here 6EF Physical screen base, what you see on screen *.EF Variable to store initial resolution  *P*M Main Loop |F MF MF MF MF -F  P*M Subroutines P-M +F-YF(E F Find current resolution E@ F6Y! ""BXX "p" * * * REZ MASTER * * * F-0Y! "BX "q"" by Steve CrunkF :Y@@!@ "This program will demonstrateF8Y@@!` "the ability of GFA Basic toF<Y@@! "change resolutions from withinF.>Y@@! " a running program. A neat trick!F .Y! ""Hit any key to continue...FFE VSF.FP-M +F-YFDY!  "BX "p" REZ MASTER DEMO ""BXX "qFY!` " TEST TEXT"F".FP-M +F- E( FE FE FE !!! Fl  !Fl  !FE FMFFE SF.FEP-M +F-E !!! Fw(E WOW!|Want to do it again?Fu)!!! Yeah!|Done!Fi JFqF F.FP-M +F- >JF 6!!!F&Y! "Test of switch to med REZ.FbY! "P12345678901234567890123456789012345678901234567890123456789012345678901234567890F\Y! "P0 1 2 3 4 5 6 7 8F6(Y! "Press any key to go onF F!6p!!!F$Y! "Test of switch to low rezF4Y! ")0 1 2 3 4F:Y! ")01234567890123456789012345678901234567890F*Y! "Press any key to go on...F F Y!@ "REZ="2  F.FP-M Notes to the reader: - oHNot all is sweetness and light with this routine. It does switch the -Hscreen resolution and allow you to control it very nicely from within Hthe confines of the program. However, GEM still gets a might confused Jby this resolution change, and, as a result, any windows that open are -Lslightly dislocated. Its not so bad going from low to medium resolution, -Hbut when switching from medium to low, any windows are split, half on Jone side of the screen, and half on the other. I conjecture that there ,Hmust be an X-Y coordinate for one corner of the window buried in GEM eLsomewhere that should be reset when the resolution is reset. Anyone have -Jan idea? I would be happy to hear from you. Upload a program with your ,Hsolution. The only way we are going to get the max out of this SUPER rBlanguage is for everyone to pitch in and HACK. So get with it! y a Enjoy! e S.Crunk h  zJ.``NVBn0. S@=@`> n2.H0H=@0n2n0.2nRnSn0.nmN^Nu' ' CREVERSE.BAS ' ' GFA Basic Program showing use of C: call ' ' 05/28/87 MichTron ' Tim Purves ' & John Tal ' With thanks to Frank at GFA via GENIE Conference ' ' Reserve Fre(0)-1000 Reverse_addr=Exec(3,"reversec.prg","","") If (Reverse_addr<0) Print "Load of reversec.prg failed" Stop Endif ' Reverse_addr=Reverse_addr+256 A$="12345" Print "Before Call A$ = ";A$ ' @Wait Str_addr=Lpeek(Arrptr(A$)) Str_len=Dpeek(Arrptr(A$)+4) If Str_addr<>Varptr(A$) Print "Somthing is wrong!" Stop Endif ' A=C:Reverse_addr(L:Str_addr,W:Str_len) ' Print "After Call A$ = ";A$ ' End ' Procedure Wait Print "press key" While Inkey$="" Wend Print Chr$(13);" ";Chr$(13); Return /*M * * reverse string function * For interface with GFA Basic * Compiled with Alcyon compiler * *N/ reverse(str,len) char *str; int len; { int c,i,j; for (i=0, j = len-1; i< j; i++, j--) { c = str[i]; str[i] = str[j]; str[j] = c; } } S* Rel.S * 05/87 Timothy Purves * MichTron * * Substitution for GFA's EXEC loader * Walks Fixup list for .PRG to relocate code * magic equ 0 text_size equ 2 data_size equ 6 bss_size equ 10 sym_size equ 14 headsize equ $1c xref _main text dynamic: lea init(pc),a0 tst.w (a0) bne init_done move.w #1,(a0) lea dynamic(pc),a0 move.l a0,d0 * text base move.l a0,a1 sub.w #headsize,a1 * points to header add.l text_size(a1),a0 add.l data_size(a1),a0 move.l a0,-(sp) * address BSS move.l bss_size(a1),-(sp) * lenght! add.l sym_size(a1),a0 move.l (a0),a1 * a1 = rel_offset tst.l (a0)+ beq clr_bss * no relocation add.l d0,a1 * address to relocate * * * a1.l = relocation address * a0.l = relocation table ptr * d0.l = adjust factor (text_base) * d1.w offset to next * * clr.w d1 relocate: add.l d0,(a1) * relocate! move.b (a0)+,d1 beq clr_bss * end of table add.w d1,a1 * move to next location cmp.w #1,d1 * special case (254) bne relocate add.w #253,a1 * case of 1 then add (254 - 1) bra relocate  init dc.w 0 clr_bss: move.l (sp)+,d0 move.l (sp)+,a0 bra over clr_loop: clr.b (a0)+ over: dbra d0,clr_loop init_done: jmp _main end u`d ALJPfV0A "H//) "PJgBAёg|f`  _`BQN_mainmagictext_sizdata_sizbss_size sym_sizeheadsizedynamicinitNinit_don^clr_bssPrelocate8overZclr_loopXXA list of the references mentioned within the .LST libraries: Ref 1: ATARI ST GEM Programmer's Reference ABACUS Software, Inc. Ref 2: ATARI ST Internals ABACUS Software, Inc. Ref 3: Programmer's Guide To GEM Sybex, Inc. C:Call interface for GFA BASIC MichTron Inc. Programmers John Tal, Timothy Purves 06/03/87 Files in ARC DATACONV LST Converts PRG file to data statments (for merge) READ ME This file README GFA Talks about MichTron's Easy Record interface for GFA REL O REL S Source code and object for Alcyon 'c' This file must be first in link list (i.e.) link68 [u] program.68k = rel.o,program.o relmod program.68k program.prg REVERSEC LST REVERSEC C REVERSEC PRG String reverse for GFA BASIC SHELLIN3 LST SHELLIN4 LST SHELLINT C SHELLINT PRG Integer Shell sort SORT LST SORT C SORT PRG String shell sort (1000 strings in 2.3 seconds) *D There are al least 4 ways to call a 'c' routine from gfa 1. Use exec(3,..) to load a module into memory and 'C:call' the address returned + 256 (do not link with REL.O!) EX: Reserve Fre(0)-1000 Reverse_addr=Exec(3,"reversec.prg","","") If (Reverse_addr<0) Print "Load of reversec.prg failed" Stop Endif Reverse_addr=Reverse_addr+256 ! add baspage A$="12345" Str_addr=Lpeek(Arrptr(A$)) Str_len=Dpeek(Arrptr(A$)+4) A=C:Reverse_addr(L:Str_addr,W:Str_len) Bugs: Exec(3) wreaks havoc with GFA memory managment. 2. Poke data statments into an allocated string area and 'C:call' the VARPTR() of the string EX: Data staments ... Prog$=Space$(300) For I=1 To ... Mid$(Prog$,I,1)=Chr$(Read) Next I C_addr=Varptr(Prog$) A=C:C_addr(...) Bugs: requires the program to exist as data statments 3. Poke data statments into an reserved memory and 'C:call' the VARPTR() of the string EX: Reserve Fre(0)-1000 C_addr=Himem Data staments ... For I=1 To 242 Poke C_addr+I-1,Read Next I A=C:C_addr(...) Bugs: Multiple runs wreak havoc with GFA memory managment. 4. BLOAD program in to allocated string area (SORT.LST). Recommended method. EX: Prog$=Space$(1000) Prog_ptr=Varptr(Prog$) If Exist("SORT.PRG") Then Else Print A$;" Not Found !!" Stop Endif Bload "SORT.PRG",Prog_ptr A=C:Prog_ptr(...) Bugs: Requires disk access on each run of the program (so what!) *C * Rel.S * 06/87 Timothy Purves * MichTron * * Substitution for GFA's EXEC loader * Walks Fixup list for .PRG to relocate code * magic equ 0 text_size equ 2 data_size equ 6 bss_size equ 10 sym_size equ 14 headsize equ $1c xref _main text dynamic: lea init(pc),a0 tst.w (a0) bne init_done move.w #1,(a0) lea dynamic(pc),a0 move.l a0,d0 * text base move.l a0,a1 sub.w #headsize,a1 * points to header add.l text_size(a1),a0 add.l data_size(a1),a0 move.l a0,-(sp) * address BSS move.l bss_size(a1),-(sp) * lenght! add.l sym_size(a1),a0 move.l (a0),a1 * a1 = rel_offset tst.l (a0)+ beq clr_bss * no relocation add.l d0,a1 * address to relocate * * * a1.l = relocation address * a0.l = relocation table ptr * d0.l = adjust factor (text_base) * d1.w offset to next * * clr.w d1 relocate: add.l d0,(a1) * relocate! move.b (a0)+,d1 beq clr_bss * end of table add.w d1,a1 * move to next location cmp.w #1,d1 * special case (254) bne relocate add.w #253,a1 * case of 1 then add (254 - 1) bra relocate  init dc.w 0 clr_bss: move.l (sp)+,d0 move.l (sp)+,a0 bra over clr_loop: clr.b (a0)+ over: dbra d0,clr_loop init_done: jmp _main end GfABASIC4VvvvXXOFFSETJUNKANUAPALAAASCRASYXBIOSZZEOFCCOLDATANAMEXASCRBFLAGCMDSAVANUAPALASCRAASDUMMYAZZZIPDDISPLAYSCRXBIOPALCOLSAVSCRSAPALZZMAIN GET_NEO_FILEERARESTARTJUMP GET_COLORS GET_FILENAMEGET_FILE PUT_COLORSGET_TYPE GET_NEO_FILEGET_DEGAS_FILE SLIDE_SHOWRECOVER TITLE_SCREEN GET_COLOR PUTCOLORSMAINSCRIPT SCRIPT_FILERECOVERYvFL*I L*** C*** L*** NEO/DEGAS Picture Displayer Using GFA Basic *** L*** C*** L*** Written by: Richard Noe )*** L*** EAFB, Alaska (*** L*** 5 January 1986 &*** L*** Version 5.2 )*** L*** C*** L*I     *pp@ ! F-F  DThis procedure uses the VDI call to get the current screen colors BIt load them into an array so that when we exit the program or r2between pics we can restore the default colors  e+FREGpFF!PF!F@!FF!F!FtF@ E3 F@ E3 F@ E3@ F RF.F e eFThis procedure uses the VDI call to restore the colors we had saved in the above procedure  n+FSEGpF!`F!F@!F!F!@ F!@ F@!@ FtF S(F.F n nDGet's the type of file that we want to display and set's certain evariable accordingly e a+F\2)! What type of File !! NEO | DEGAS !F TdJFENF TpFEDF FE TNJFE *.NEOFi TF:E *.pi1Fi FE.FE a eProcedure to get a neo file  r+FU EGpF 6 !!!Fp T FF! FiE xxFiU`EGpF  E3 F EFF U@FFUEGpFE`!! F UtF{ zFYF.F + F,F`!FUEGpFB 6!!!Fp UFFVL EG FB( `!!!X F(' #  ! #  !GFAF U FV EG F( `!!!X F*' #  !pp#  !BasicF V` FW EG F( `!!!X F6' #  !HH#  !Picture DisplayerF V FW EG F( `!!!@F#<'p#  !#  !Programming By Rich NoeF W4 FWEGF6@!!!F WF,6` !`!`!`F {F#(!F$6p!`!`!`FYF!$'H! ! Instruction'sF 6'@! ! This program will display eitherF8'@!H!!NeoChrome or Degas Low ResolutionF 8'@!p!"Picture's.The program also has theF*'@! !following feature's:F,'@!4! Select Type of PicF6'@!H! Script Files or Display AllFD0'@!\! Choice of Drive to useF2'@!p! Adjustable Display TimeFA8'@! !"Ensure Write Protect is OFF beforeF4'@!!Picture Disk before ContinuingF6'@!*! ( For More info see the Docs )Fr {HFs2'H!>!Click RT Button to ContinueFyF! ZRFERF.F!  +F ! FE F*[DEGpF*  E3 F EFF [$FF[zEGpF*E`!! F* [XF{ zFYF.F E+ FvLF7I!M!  Script.datFy:M!FEF \ F:M!F E F \NEOJF,FF \F,F F[F  Era: 8MF.F+FvLF VG Temp.datFe7I!M! Temp.datF \ F:M!F E FF \NJF,FF \F,F F\hF8MF.F r+FF ]4LJF,FN@)!-No files of that|type exist in|this Directory!! OK !FvLF FF F ]\PJF8MF,FF  F ]ʘ JF,F>)!'No Script File| Exists|On This Disk!!!Carry On!FvLFFN F ^8JF,F>)!&No files of that type| On this Disk !!Carry On!F8MFvLFFN F ^PJF,FW4)!!Write Protected|remove protection!! OK !FvLFFW F.F|F ^ JF.)!You must be in | Low rez !!uh oh!FqF F!, F YF L)!5 This program is written | Completely in GFA Basic!!Carry on!FF|J)!- Select Delay Time | For Pictures in Secs !! 5 | 10 | 15 ! F8)! Select Drive | To Display !! A | B | C ! F6)! What Type Of Display !!All Pics|Scripted! F ` JFgF EA:\F FE `8 JFgF EB:\F FE `V JFgF EC:\F FE,F `x JF, F-F F,F\|F ,FuF|FF 6!!!F$6p!`!`!`FD a JFD)!#No More Scripted|Files On This Disk!!Carry On| Quit !F  a`FoB)!" No More Files | On This Disk !!Carry on| QUIT !F F 6!!!F$6p!`!`!`F bBJFvLFA temp.datF,F 6!!!Fb EG F2 ! ! !GG  HF a F%!!F!!!GFrF F_DF +FFvLFF.FF^``R STTZ\4\U [bPl4878,34,102,86 wveC2!fUD3"fV0s5L#0.w`Lܩ\@#LD ?2KOtc$'Xa45u*0PU/_6ln"\/ &0f{GZ`[Ji{Щ-4f4B$K :4wPbaQ׎/sJfG1<2Lϣ=/@!> z3 IlR2I:6>Bÿ~?F77ZȜ: iAwWB:|}?Aݹ77#Ȃn4(U 72? KB 4r|X .Z8~ߏp&ߠY ?Sst(WGBx" I2H-Y$D`08zzGxō` ;3 FnAmY & Q0Zzz~dG @}@b?C/`9?BP޽=@B!7|Pi)Qz?.{ #5?5@I]O3<܆>B~s%ݵ~B=/$FzH,F g?6ۂ|jgI @pk<@`@~B>T <yM#DbvTKo|m'ÿ@ `> _{8)ApF ZX]ߠ ȷXτMPmsC$~ H@tՀ &%9%05 n'hhgEw݀I p<`}pDx 1hRԀ 8@m Lx==4ր :&@?L'|f~DQ=L0AFF ?:`88#1 t KWY$*0$CQ<. cyw${? m"0 t{@ `chOP/##9 4n@>9_:? @cٜ&u|@ W{3 Oq@a4a˞lnt,@%E ,D `T P G9x hOo@HHݷ"~PwƠ5|"33HOOPP $g?bq<05  j*p b)!؏pp 3ma@%w<ػ@ |{qphL 2SL`X %^K9tl J6TX$xd| Wܦ 8hpT< 5Y#YܦȞP, 2Zp`W($``ۯp'x@ X @)?ePP紿pQ00`u(3t52;@`@ p|(<Q @ aVLh?z Xv_ + P8 /8F `, >PL0AX  R ^Kvb/ @p! @L D I[H 6>`@k05158,34,103,91 weTC2!`P@UD2!0g[10׀|ldZ/l r $H׀?gؠ$ { m  (x( qy~~aHQK~s}``qppd$?$4+ xAj9Dsa_D?h_$$? o@}@h`c`a???+"Og|?= m_C?0ؾh2 D "1B?Q9P_ W  #a~G@` q0gF,,X@a><8DCك?0?kC<0X_9͠`?d 2m6 |@4π'0? }R- ] OG Z|_4,//@(c#@ : Hwu @??? c`@#Zooe{}'᐀zA?/9&bp_?(1'Ԁ+?1>ynbX8[</KK=<AXjq vm| A$OF`pwC0oH`㚀s Gq#w>91{)aןlX!Ǟ79xxO80Ϗ "0?_0wyB3O=3/-5O \_0>8ϟ0+d~S2$|D~A0~ǻ̸?r n/s`\ A Aɘ  8V(x/80enbݘ݉ k Ǣ|Gp|u1jI@*6t|g7 =z-0,?{~f90Hy<Sv(< n3@(xoo`(8=H>;``u{fG(ʟ 4(`f(7c쟓B0e zH( &dn gh: {jUh&v 8@@U]_D;6AA`_f//sw`?Q~?j'_A?A(T?I /44:  a_M)q;h(aaa)@ϰ36aaolhIkIGӰ 7``qq!G;4c+BBqw|v pp@5ޏ@$YBo o`` $K 3Ā%@Avvh'(+P.aX&&3MK?ȋ74lr@@c `O0u??uj'؀?Ig?UYGx|. a?@Cμ@apx"~]`aAx<?|H Aܪ'~=x}:j7 `'?Rؚ'ԃ 0_K}#?K ͒؂'&<S @mA?? ?8?,ߠX 3ֿy@G'?д'mт2y`'W_Ilgl`ܗ` yч7ހ!_? _J3a _O`s?;xP~Fxw,Ðoaov  pfoH(@gLPg</9@4@(0Ge"9VHCn'5rH Toߟ@_`0;_'_ b@p+HGsp!@w5?W?=tx_aoSpP?OD f'Tt@^0 p, ">?A <70& xC)B KL""D#&@_0Avo`515662,34,107,100 wRRB1!P@fUD3"0kd13 07ÀXPЀ,0`/?'Y߇<'@4@пЀgoc̟ /p0 >/>&>P>Ѐo"_xxEo^nqxв\Ѐ_.O__IJ/ ?b{tO?>>޿!@nu<^ ;ᾝyb8 w|LV﷝7~6<.C(|6W6wv76HqM]z?+ oon_-?ſݿ?Z~oݟ[0/_Ͷ_wWۀ_oooo }  ??oq Tx ? ?? P` /_o/|p @h} Y]@oo|߼\?oo???[G><=Jr w@ Ё?~d/>cל.@ߏ _@PIf[ ׊?d} i 5?[K6 ~'7913!a} loh??))+ q?:z?//d.$z_xD!@7yf>(03Q^hs<<0[<@_ߢ!o` WP|4ywwࡰ` ?_X @؟'OO޷z``  !y x@??qaz ?~ޟ=B;=LJ? ?c oB0a!0!=/O?7;A<8w?0p H|R.~#x00X@4300|7??p`0 `<380ux]h>   p *Ծeh L=x<?,|x>8  Q`X}DHmom=<=GD|xx#oogѾgvpŽA(wogѿǾ98p 8-uq!ߐkN~q kԴ( !ms!ߐ%1sC 1& ?~v6߰߰!?3o_`2{t<0ߐpCHs!ސPМ΀#~:1~;NPP!'l{ocA>\?|ߐ"/#Ї{ >?^yXА@AciiI^o ОIɀ/ttdAeGП?I//9['ʁٱA3Ѥ}qAoBᝆ={1ݕaͮÞkj`ooǧַ7?r`8<z#G?=wp= ww'ۀ/q` {y'ǀ?ጉys`/Э_ πsqac1`#WQmV3@1a!g omLq``y| ; À?}8 7gow^Nt?0<?1ۀ ~;06v>x_ s`uˀ?{;9ygh=7'ـ?q=@pog.߀m`=p`8`p09pl@X0[~8 pR_ Otn@09^j0|"@?|_'Ypp {o 'G ܌cp0O\W?Pp_?N0[|žϿ0p0nT1/XP:<7on:0H7 nqO ,a 0R|;"k ;]o { S#?u-O@@ ?la џ`.WE G?}?}8@sWpx[/n?U`}t CKswcOT~ÈH;!.`2=NCԠH>H=ma#!  F8 ݒzm\@`<fMM/ pp`t0`0f ? "Io80?8/l_3Ae#8OƌXoyW^p~L Dwj+Tƽpr <`<?=`O6_6`JOtuF6#0 7 [o/@c'CB?>_ ÿ{ SSR110750,34,268,157 w0 $!$!"":**5ߵj֝4JR1޵Ui  n-U] xpmڶSU$ 'wnmUO WW[ko" mmm$jv{n !ݻ<0!+o/ǻu`!c !o!w!oݿmU %wvj%wl%jm+%w{m8(wwmݷ~j(o{op0?)nm0?)kimwvp)m`){mZڪ`)mfjdP,I0`0,??m^Z0@ -mkkL0 0,-YUR8`1swmn)01:[iN4-d-̲J@4{2"1%UͪF0[[B*[թV@e) D JJMY*V*;[mڤ%[%v*RRMiBoJVZ )RS%RڭU*ZEUUM)~$3U̪dQEU*UJVUUIUUd ͵2JUTSZJnڵ%JUUUUZե*mRfkjՕ*ZX{LLJUUUUUUUmVJUUU׍(RmDkU̩3V)TUUUUUVU$Zeժ*UJ$mJUUp*fZUiUV5RUjm(kUI%UQj$U*XV *UURjZRU*[kTT5ZʥURkj-[Ҥm[USUkRZե*ULURMU̪3UUUڵ%JU*VVS)*֕*j՛Zdl)"*Rme23*ժ2UͪUU5TUee S)MJjR3*DfUmKֶ)IRj*TeUUUpj 7k5Lֳ)ZU̒3mFiRV@UTJUjVթ*UVU8 k*3J̵ֳ)L3U̪)R֭SU R@jlZeUUfU\ UiQLR5ST5*Zգ*\%vT Rfe%ZeUZ UUL2TV2RJJV35E*S(ek**Ug) *K"ݤ[5UjUU*Tի*VՍUrSTD2J͵%RڭkTUf UkUURjTRRZU5UZUShV)jIJRe =i%Iڶ).RTj""Q%LjU*ՔkuRk4Z˩Ve` v V*JRk0 5%UJ$v*JյVnJIIJRmVZ@ &$ZHURRJmmw%uI"$DۻI"$Z)T֫kVxڲ%MJjR߭ DH).JWW]$kJZRnRV"RݭRZʫ5TJVDkmR!kWu")HmQTI{(vהEk*[d2͕Tj-ZHmRB""݊uu"v*QծIDRJUERRS(Tʫ5QHfu)wwR$ۈw^ E!$ےDmBu)nJkT)JDD v "R%{Dk[KHk](]%%")KJ6U }@wJQwn ")R֭E$ IE(הkvJ]RfQE ߈!w"DݻB!$H۷$wz$"H$ۑ$nTVR-*jI龜[w"w{ID"Ȑ7oow$mJU%)=eI"Dݻ!m!D(אDowJ Z"!z)DZH=jP~HE w!uBE!{) ߉vD]BD*kS=dWu!"m}B {zT$BIHIE]%`ڀ}j"DݻB{*oB" B߽"B:vWvPmvuO)IֶvD"HD BwwDR@wB"$J۵HTR(@}]}B$B۽{@B!B"(R$ۈwwnBJH]~HU$%oB! D߻DD!D}{!) B%J )!~ E@{A $D D߻Bk"{)@^B[HDA@! !@BBwwDuIp~V@w%" w!@w Bw D߻"J""j% ~BZkwo{}"D} B wPwpj^WoB"D {Dno!}D w"u!J޵J >:DHD!} {w!k,@BkB"~{wBo }!B%!j^(V׈w}}DD@{@!@{@"o{uR@>6!H !!B{"BB)Q֮H@>[^{@  ߀@(wE{"@>DVHDmA{!@w@"}"H!o"!`u>ZwA${ ߀ " v %)`ր?QDA! m"" D߻oB!oD{A"uDW@[>[ow{!}nw@{B@@!!H޷PBU`>RU"{^{"!@B o}A"!{IT@>Vw}J ߀w"H@ AE?[U!HBw!mnDA {{IQmD'>"5݄D{AB"DBB"!@!"!DR UTwQZ)B)Eֺ D@o"D@wB{Uv)ր?R][BD{IBDPB"w}"  "%RWuZTE$) IJ"w}"DݻB@D[HkJb"PEoHD QBDB!_ B߽mRI2ʒ5mIE%!BnTQ(׊"u$z !D޻$I۶BEJZUVDPwD{P[E$J۵"w"vJ((ג$m!Rޭ%kY[TmRjQ)QEJ"݈w]"Hݷ][{Z)%I $kZ)DI$DIJDu$QۮH)]I%H"mEI$]Q%Wmj"Z$ID"mݒmkE$jەHjTmkw$mۊ(uהkj_dkkTn$Qۮ(mDIJ"u$Rۭ$B۽BUHm$uBRHUJVJDmkRHDm%z(]v)vHv"HݷIm)m֒H$R%$mJ%I"I$m]kE]"DݻRRI"ݒEm%Vک V*mmmWn%RڭIEQ(׊Ru(Wm([TkI몫UT|JIIIJ"EݺI)I"I")(׊"u(T׫JIJQ%QڮJj {jT[Q(׉$vۤ[j$T۫Jv$J۵"v%%"[Ek4$@ S)5DJ[mHm!m([$nۉ"v݈wwD]kuQTKWh *R]"j*Jյ)"EIHmJH!]J]D[Z5Mʲ YkURW(ZהkvIu%RRuDI$QۮJRnY =TeJ(uJmJ%DuQ$ۈEwD(ב*n)%(ZY[ ?JUT"jH^)T֫Qn$WmnDDn%R[mjU[ mURJ["k"]$Dۻ v$Q$vDDkE%UJ JUJ(n׊JuHvZ*Dջon$T۫QD%vE*V۩$ YTZ]$V%DDnJ$ۉ%vQDRIQFj֕( 6Uɪ)*$mIkTQJDmTvEQ)TTEU( R,kwHm$ZۅzEZ$QBDkBRfkh$ [$UT*ZI%nEI$vDnR"Iݶ)Jֵ%*խR@ U*ՔkZ$mHTHnE$nQDB*ՉIv%"ݒmU@J JJ)jRHmv%$ےBm$I۶Q)Iֶ%IkJUpR ;jVRZ)"J"ݑJnJ뵑nEJ!$I۶E$ۨWU@J ڦ%YJRkv$H۷DQI$ۤ[oE]EmZ*URkU%)J$ۑ)n) "!E(W[m*QծHkZZJ *Ւmj)R֭I"H[k[RJJ"mIEU+UԪnINHZRI$vB  JmJ]"RݭUZP )RuI)*[UmDZUtI$m"v)%)JֵZI U)Z"v"$wRHD$QD]wkmj[)@N&T[J$ۑInJQ)vQ*BIDYY[`JE(mI$P{mH]EJBI$۩JVmjTTI]$jUID)]EI$m%%UTJUD$vے!mDD"$ۈwzTQH[JmmV%nڐwU$ZH["nݔkURkz몒UmI)HkXd"k5(mג)m$H۷D"݈"w"Jݵ$Eۺ$[FJ*;j)I%({% )Iֶ"kW]*vRv$ZVЩ̤3[J{BP{[ mߔQk"wRBRf@R Mn"Qݮ RDz!J)!D޻%(׉Kv^ [wA[BQE{{Pw n%Uڪ|" RB]$A)BRnDmR D"ݔmk $@.[IBD{A D!@nwIWA ! R") %"k {""wB"EW(I)UJ (w@@ !8!"DD R)3IBw pH@!E-زMPTD)B(5 _RQ("Rjm e$ mWoZH "UV__$ۨWJR@J8"""Dݻ[_d@( emշwwvjZTQB@RHDDJD"RI"ITTHI$!"DHI(D$%"HHRHI(HHB! B( !@@@+t14328,34,0,0 wDD@T(KrVfU$gloo[uU[[nU;9晷NU&Uf΀fYemn{uU]U WRVU3sMS՚-;}uf̜dٲvoUYUuQUZbTͿRU3g.MRS[Z*iufܘLӳm_TUReeUUUvfUm_RU#g̳lLWVnګvJ*jefܹL%]ۻeTUeUfemUUl[;[^U'F̳iLVTumfJjbᵦefٹL%=ۻYTUeUfMUEmY;njU&N̷emVf*b:ianӕefٳIe~[]ԙgUfMY[FYU&L̶]դkFj(F2eeefٳM;Re{]ٔUl YYfr{U&L̷Ƶ[qnnNbiL"eY.ɯ5efٳMyZms{U3,eQ[v}f{U&L̻ŤYݵnYDb&dY5efٳN:smgv瑆Vb8Yei]ls{NU&L̵Ŝ[nxniHƩ6FDSi ݳefٳNy:ۻf69Td&alU&L̳\[uViIɆ+12LLњI˦K}s*befٳL;ev&il32,eo[5WUU&L̳ l~iLٔcc"ɓKK'ZbefٳL:mvݖ2$K64d$wVUU&L̳Ź[w;nʰF6&2=eZّfefٳL2Vc2MIjeLUߒflEU&L̳6;o}{]٘ɒLdf%Vn푓2FefٳL2ͶŷLܷlf2e)illͱU&L̳43[k]әHfD)fmާͳ"N*dfٳL2ͦw|dc,c313THّ՛&L̳42[s[7ȌL2wW&lJdٳL6ͥMͼl(6c1T)_I55&L̳4"[cS611LD?UfdDٳL6٤٬LadkqL)~kM)5&L̳4&[#{fSc*3cHdrLDLٳLfɤ٪Ոe )?{ 31e&L̳46[%IvU23@E۷IXȌLٲLfɥk4MV1KW(nM6c2e&M̳44Zg{3vS3s5i2L&Mg2ͭ,Sͮ-`vۑYfc(&̳̀413f&B7o{"߁ٿI&2L&̛gSY&dȵ;h"-bMe24&̳̀t37fٙ7["O*I11Y2MfʛgKY&ح@+dIfe6)dɦ̀T35m$I33f&OLHc36Y2mf͛}lY̹;n}L3f̀T6oړ3I&'BHf.k},fTY2mfmɵlY$IQEmnѶd"1f&ɀVړUS.,Mwl۶IJDD6mi5Y ˮI_!-ݳ&f2d$-IS[ER,'kL LĶnMuYK &j#,03ISwMb%$JoۿIU5H}fMvݲcH)$F,HbI6kl;Kz W[%{o©S&ɔFvrWPݿ5Jk&cݬ36JZ}ϱ-o$WvHJ2sln1@NrBP ;%D2ecdfݜ36jJ `wyR*1&cllբ"@ o9uITel̀ۜq:HQKvRR$T"I2cf0`7߻T3w{جJ(FIs6]mT]E`R|RV$dF1 b߬f\ɶ2QAkwoۺm#kz֬$JaYvkviݗ "yRK)$Jެvݦa+kvK7f@m֩$DHK1%QSY5wSi<4gmb}RI*I%F0Ȧw]ܬ¯˶ ED۔*$$)K"&Qqo{W4~7ݴ$_`$JeRьwnmE$ݶX@.%$IJ"&Rn̷W~E$Ȓ&2%m>3KR@ym%IH&JݖɅdζx#:dp $I%K$1&t{3= @hN";II$$$ʑۖٞdh$$xi$IReIfdv- $D I+$I$&c1[@@pd/{ "I$TI^ʮ H>@ ȣI"DJWD|$/m"JDI$)1gI ߯o@? A)$HZN@@}W7~%݀_ I*I%LLRTzޯͿ f?h @HI$!"ev  }W _І "IT$Twʟ@@ @ $I$Jdۿl7 y5g ?ܑ $I$TIŷn9?^ڟvD IJI"JYot@{v֭g?xD$E$m;g@9iVDn B$$JB(s~m#zH$JRH/-ݠMY"'_ I H)$$T]6~$}nIDI;,ۀ}-Kf Q$$$^ni%S}ARHTIflQtg߲߫"=dR$HI$@y%uEnܐBߑ$ $%FuDfsrJ?d$IW_~q%{A.̹Q^JRRII$IM@XfmN$Iw I$$mڳ~ v&{vMR_@ "R$RISvM@?Yl|?^/) $$޶݅Bֱfv?MQ_@%"D$V3{q C{Nٙyۼݲ_$/K="@HFRI!uѡ&fVn~ͶWE$ $ĚSq/jnٙ}_J7 !$DE"ܳ䑳{&f[pRM_Q"I)!3~j.&VOʗʷd"! HRJL䤻@)uk&fݻ/d_Q$Y^Y-V3v oG~D"Dlk$ַBkK6f͸Hoٵ+2@ H!)"IY+Ѐ/VO$"HH:%V&Ʃm?ٷK7aB($ K1VrM'4($$:֍G7R-Y?YK3! I"I>lb6ὒc&r o&NRHr6[z͘эUn홿D"B$$Y=lw2e,cw ۶f%$ɦcmY+_{mٙCqJDQJ"I"Y5di(3w̶D! HɦeQW3[u 2HA$Y5iHc;htAȀEI$eb3Wms/d$PD"Ȓ';mfj$llRf|[ؒD%jB(ݩQ4jd@w.$PBBkz[kg[je$LlSbf[B!D"i!ܹ$f嬙0/b RD HO+]cjEI$\feS " ]z圕$BCfmD!v@ DBH$H+&kJdD4FBBpH D A F?fĘ)2DfMBNB"D H,ޛm;gI9Ty2FR@@ A "&?ĸE0K&MOCW "BI ̟3E$JH4{2LD6z*dB!HF'v̺Q1&T&̳2 @_@H$O7EIs2L v@BB(EH"RRLL2$ɳ*?"@BB}F|U$Ic2HāϠ}VAA!DIDHVLLd%23 $B! IohTD32IcM@MoDJDB"8SVHʹ̜IP-!  ő ̇I$2K%cq$M`%n@[RA Pobwq&iɰ̑7 ,@DB!!"Ca8$ɖ4M%c2FM(WDDHBL sbL6aʢJ͑7 $-BHA`t1IUg2D?mI@ AD"H!߱shlcJJͲu$[cD3@r3IT mI)$m#!H3ۻ!k쀒#&@&ȔI2ȫ-D( $ FAm$K ̚[B#knP%IiҥI2t3N-(R" -ݶi"IހSR Ϸo~ EB I{lf6yLu 7@$ l{iD&'t.7ݐ  #M̒o򒖰>`@ڶݿ{3IdGwov0.gn( 35MȦoԀ횛B@"ڷ%XY'Caԅomp/flrmʦoY=U n "߶5Y1aD m ddl[~ʦc5 vْ!B7[۬5_2"@Km[;  l@S]Ӛcdl yB (e32!+3@ ;d@ Úv䈀dM@ Bnle5m2۲BD@H ;d@ Ӛw(&d  g@!Bodefo"  9PDM$3D N".neM'ڐ )Hf)`@CQMLA}ֈ@D E=[{fM䳀H5HΥ)e!"SOLOޑJ֐DHD;V]gYB7 )7dܵ)mDIͻӛOL| ֲMDv{lٵ1YH)]HTFi[6o刀t/wz\I)flɷT WZbk5Tim]s96Ƣt {c)gvwG~ā_5:lf6g3ڷ6b k2/9nճc)&ɘ}_i!'[=zl3&ٶgv6CX+YKJ"s߷w9w&Io麀'+mfٶg_km66MMBJFkmuXOe&Iݲ%d˲@/6D4n~duɶ_f^ڿu]Z2YBfvڻ-6I%ާ/JS4)ۛmTjeɦ{v;}`xm},6Y$׀.*+$Io۽o\heۿkdw@QAHI$m,V[w.*H&%$wviej߿߀A[IolF[;.@dfvc%1;)D۷S+Ss[옒ݮě &B ,fofe362fkCQS3ԑݿ{k@LDK5ܴ_ݿfe3vjd~1HTc3{vHL;ͮ{ewfflm2"BgkSru޵F˂YzHesݍndof1}u߿2&Hf;9fruYؑ=K[=HeR۝m{Ne&glc׿Ǭnr*Hg9?aɘu8S-E}b=m3J"elc{tǭo&:XNq7}eS$d8nYͦKf=2I$emc}4,i6I4c.dSL$Ad8R{ٖ,2Mmf[4l ܄vI$߼;'IdLIAmxv{c{٤$"Imڒ[5lm؅vJ$&oIdHH[mn{߀f{5S7ULٿL$"!uVds&oe#(II['9nfnLc7լٛT$$wfVd[ofoeH$ {nn[JmJUe7mF70on[ݗfgeHFAvګ);]ZlLEe5홝Tb1]ۿvuŷ%3}ZnguISfvկ[ک;m{LUe6ebT_}nmV͛~ ⱒnnnI9,&fo[TMe-oĒT[ml[[ "[ZI9Ljmvi#2e-mw;[rf^ݻv{2کԯݻY9o}նk9w߀&e5k^mfWnuݻwbt]1k[l{fum߀/6e5]&۶fW7ݶuݹݷv@"{ٲnٛkfkj߻߀ +&e3׷[%ۮ]vnk{&wf׻wjk{߀]4e39[nTﭷ:kB.ov*YV5zٶ￀$36uۻզ[nۭ;nw>22kk]*Y3ivsum~߀)37ݯzզvݞ۫wmE7Norm Bold Lite Skwd Undl Outl Size Spacing RedoF*EP I C C L I PF&+ECreates Picture Clips That CanF&,EBe Used By GFA Basic Programs.F0-E)Press LEFT Mouse Button For Instructions.F0/E)Press RIGHT Mouse Button For The Program.F0EBy Jim LuczakFe ] F R FoFE>Load Pal Pic Type LIST M-Col F-Col Clr Move HELP T-ColFF)E>Load Pal Pic Type LIST M-Col F-Col Clr Copy HELP T-ColFEFEFEF&EFAEFKEFbE FEFE00F  _FoR FoHE@Load Pal List Data M-Col F-Col Clear Move HELP T-ColFH)E@Load Pal List Data M-Col F-Col Clear Copy HELP T-ColFEFE00FEPPF&EFAEFKE@@FbE FEFExxF  FEEFEFTMF  Eb! F_REGJFQ F _@FG_xEGF Q F _fFG_EGF5Q F _FG$Eb b b b b FRF_EGFiQF %E%b F _F`EGFiQF &E&b F `F$E$%&FRF `VEGpFQ  F `DFGRF a,EG FDQ ! ! ! ! ! ! ! ! ! ! FnQ ! ! ! ! ! ! ! ! ! ! ! !# !$ !% !( !) !* F `pFGE F9EF:EF>EFOEFE%F-@EFEFREFSEF`EF_EFEFEFE@@FE@@F E``F EFEFEFE FIEF#EKF!"EKF(ERRFH+E)FM(Ft%!!FM5` 5p FE``FM.FE FE@@FM+FFF|FYF M(FF1EF3EF'EF%EF#EKF!"EKF!EFEFEF6!!!F 6%!!!F!HO!FM@F(%FEFM#FF rfF rb/EG`HF r/@F0E#/ / ``F3 FE r./`F2E#/ / F FE$/ !!/ !)! F4F q/F F4Y! "'DELETE - Deletes Char UNDER CursorF6Y! "'BACKSPACE - Deletes Char LEFT of CursorF "F! ! F,Y ! "- Moves Cursor LEFTFo "F! ! F,Y ! "- Moves Cursor RIGHTF "F! ! F<Y ! "- Cursor To BEGINNING of LineF "F! ! F6Y !  "- Cursor To END of LineF$!KF(! )!&! )F$!F4Y! " Enter Text. "b" Characters Maximum.F*Y! " After EntryF6Y!  "!RIGHT Button - Return To Picture.FF,F `blF u6 F6!`!`!`FMF F-F6 F(%!!!KF5'!()!F uF! "!!F u)FM)F uFEF F(%! !!"F/!()!$! F(%!!!!#F/!()!%!F E!F!"E#F!$E%F! F uFEF FEu:Fp vF-F F6!`!`!`F-MF F~EF!F { FFF.E## )FF v~F "-!,!F v,.F,E.F FE/-!,!%!F/-!,!%!F v FF~EF FEvdF/-!,!%!F!F@EFE FE``FM,F`|F6HO!FM@F (O!!!KFFFEFM#F- F# { F.FR- CHECK MENU CLICK TWO - +'F - wFFH`!_F5E`  F, F>.' Load Color Plaette  x5 5 FEFM2FE@@FE FM+FREFMF5M#F5E@@FE@@FM,F` F# #:.& Low Rez Pic Type  yd5 5 FEFM2FE00FE FM+F y8 F { F MF FE00FE@@FM,F`M#F F .H.) Save File As Data Statement " z5 5  FE FE FM+F zZ@FEFM2FEF E.LSTFSEFMFSEFYF9EF:EFM#F EFT FEE FE@@FM,F` FE E:.& Menu Text Color " {P5@ 5` FEFE FM-F {@ FF4OFo {*O%FOEF FE(OFOM#FM@F- F { F FE .6.& Frame Color l" |:5 5 FEFE FM-F |69F #>F4>F {>%F>EF FE !! !F !! !!F !!FF { F F  FE E8.( Clear Screen " |5  50 FE``F.E FM-F F.YFM#F. F# 8.( Copy Toggle e" }5@ 5P FE@@FE FM-F H!FH!FH!)FH!(FH`!_F }`FFEFF }FFEFF FEM#FFEF F 8.( Help Screen o" <5` 5p FE FE FM-F FYFE6!!!F 6%!!!FF(%FEFHO!FM@FM#FFM7F { FEF F "!!F 0)FH!FEFE``FM,FH!F FEFF FFEFF FEYFM#FFM7F { F F# p)F bFM9F lF4M8F F F )FEFE@@FM,FYF#EF FE~F!6!`!`!`Fo 6%!!!F!HO!FM@FMF!(OFFEFEFEFFF 8FM#FEF FE F66.( Text Color " "5 5 FEFE FM-F  6 F!F4FF %FEF FE (!!!!#F/-!,!%!F!F (O!!!KFo { F F FE { FF.FR- HIGHLITE MENU CHOICE - +.F- 2!F !! !)F!F.F/ 2+2F 2!F !! !)F!F.F/ +3F 2!F !! !)F!F.FE E+4F 2!F !!#F!F.F/R- CHECK RESOLUTION - +F   F  EF E.CL1F%EppF-)EFE@@FE00F) EV F& EWWF' EbbF& EF' EXXF0& E>>F,' EFFF, F0*-E"Press LEFT Button For Instrucions.F2*/E#Press RIGHT Button For The Program.F FEMF FE 2 FN E\*.PI2FO E.CL2F%EF)EFE@@FE00F)EFF FE  FF E\*.PI3F E.CL3F%EF)EFE``FE@@F)E FF F.F-R- DO ALERT BOX - +F- 2)!Load .NEO or .PI1 Format|!! .NEO|.PI1! F b FE E\*.NEOFE FTEFT F  E\*.PI1FOEFEFT FEM@FF.F! - -+*F -6!!!F 6%!!!FF6)!Ready To Leave| | PIC CLIP|!! STAY|EXIT!FE EFM,F5FR6!`!`!`F-MF!M@FF.F-R- SOUND ROUTINES - ++F , y!!!Fz!!!z F.F! , ,+,F , y!!!Fz!!!; F-.F! , ,+-F , y!!!Fz!!!F.F!R-" LOAD PICTURE - +F -M?F f !!F5M@F- F-F- F RFMF FRYFE&EFIEFMFsMFsMF- F|F-6!`!`!`FMF6REF.FR- FIND FILE ROUTINE - +?F -6!!!F 6%!!!F!  F--F F"EF#EF #F-g"F #E F-4"F  "pF-#EF FEF|FF.F|R- LOAD COLOR PALETTE - +FE  7I!M!FE_!M FE?@@ F8MF.FR- INSTALL COLOR PALETTE - -+FE @!z F.FR- LOAD AND DISPLAY PICTURE - +F E F !FF-"!!&!)!"F@EFEF.FR- GRAB PICTURE SEGMENT - +F FMFF!!! !F4FIEFFM$F.F$P- DISPLAY PICTURE SEGMENT - +$F YFC F EF EF F EF EF FE  FE FEF "FEFE F FE `)FE)FE)F lFEF FE !!F' E( F E( F&EFF.FR- DO CROSS HAIR / BOX ROUTINE - +F- !FEF EFE&FEGG)F F@F EF ZF@ E)F F5EPF6EQF5! !5!F !6!!6F "F! "!!F  FE F FE  5F5! !5!F! !!F5EF F  6F !6!!6F !!!F6EF F F! !!F !!!FEF t@F Y! "FBX "K"F  F7EF8EF nF! "! !F   F E F FE  7 8F!!7!8F!!! F7EF8E F FE f@FBX "b"B O "F,Y! " W = "( W" H = "( W"FBX "b"B% F FF!!! F!F.F)R- SAVE SEGMENT AS PICTURE FILE - +F -E F E\*FEF 6!!!F 6%!!!F! f !!F5M@F- >F- Fo F3EC@. F z3FFE?@@6 F EF F =@ F!6 ! EF FE?@@3 F F 9FEF F 7O!M!F SFM F :FSuM!6 !6 !!! FM!z !6 FM!z !6 Ft F8MFf&EFIEFYF| |Fo6!`!`!`F EFMF!.FR- SAVE FILE AS DATA STATEMENT - + F- VM!1'- PICTURE LOADER FOR "" -F2 M!'FY<M!3Read Clip_len,Colr_len,Clip_width,Clip_hite,Res_picFM!For I%=1 To Colr_lenFM! Read RdFTM! Colr$=Colr$+Chr$(Rd)FM!Next I%FCM!For I%=1 To Clip_lenFM! Read RdFo"M! ""$="" $+Chr$(Rd)FM!Next I%F"&M!Void Xbios(6,L:Varptr(Colr$))F, M!'Fi.M!%' =#F0M! Put 10,10,""$F2.M!%' =#F0 M!'Ft:M!Data "A6 ","A6 ","A ","A "r,"A FM! ' Color DataF EData FxEG6 FEA7?@@ ,F, TFGE?@@6  FM!FM!' Picture DataF EData FEFEF|FD 6 F-F F>4FEA7?@@ ,F,4F4F 66 FE88FF FEFaE?@@6  FM!F EData FEF-FD|F.FR-! LOAD CLIP ROUTINE - +F-E F E\*FM?F f !!F5M@F- F-F F 7I!M!F:M!!!!!aF E! F! E! F!M!z !FZM!z !FZ8MFz&EFIEFMF-!)!F(!)!!#) !Fp EFE)F EFE#) FF-@EF|F6!`!`!`F EF @6 F`MF6 F .F!R- RESET TEXT COUNTERS - +(F-cEFdEFeEFfEFkEFgEFlEFhEFmEFjEFnEF.F(R- TEXT MENU CONTROLLER - +)F- 6.' Normal Text     FEFE FM-F M(F4EF/EG HF E/F #E4 FM4F44F /F F4.' Bold Text    FEFE FM-F Hd!eF dFEFM3F! FEF #E FM4FF FE Fd4.' Lite Text " v   FEFE FM-F Hf!kF PfFEFM3F! rFEF #E FM4FF FE Ff6.' Skewed Text " D@ ` FEFE FM-F Hg!lF gFE@@FM3F! @FE@@F #E FM4FF FE Fg:.' Underlined Text "   FE FE FM-F Hh!mF hFEFM3F! FEF #E FM4FF FE Fh8.' Outlined Text "   0 FE@@FE FM-F Hj!nF jFE FM3F! FE F#E FM4FF FE Fj4.' Text Size " @ P FE``FE FM-F 0#!F!41F@ # F#EKF1EFE@@F#E  FM4F F!F0@@ !!@@ #01 !)F!F FE FE8.' Text Spacing " x` p FEFE FM-F 'F%EF Fy%E&FF FE 'F %E(% F FE 'F %E%F FE4'F43F` 'F'EF F3 63F E``F!#E@ FM4F3EF tF!F0`` !!`` #23 !)F!F FE FE4.' Redo Text "   FEFE FM-F EFM(FF#EKF"EKF!EF!EF FE!EcdfghjF { F.FjR- INTRO SCREEN - +:F- 6!!!F2Y! "&PIC CLIP - A Picture Clipping Utility.F<Y! "(With PIC CLIP You can load .NEO or DEGASFF8Y!  "$Format Pictures in Low Res. or DEGASFG:Y!@@ "&Format Pictures in Medium or High Res.FS8Y! "$After The Picture is loaded, you canF.6Y! "#CLIP Any Portion of the Picture andFY!  " Store it.F8Y!@@ "%The CLIP is stored as a File that canF:Y!PP "'be loaded and used with GFA Basic's PUTF8Y!`` "$Command. The CLIP can also be storedFu:Y!pp "&as a Data File. The Data File containsFF:Y! "'the CLIP in Data Statements, and can beF,Y! "Merged with any Program.Ft<Y! "(PIC CLIP can also load Previously storedFF:Y!  "'CLIPS, Frame a CLIP, Add TEXT to a CLIPF<Y!(( "(and Load Color Palettes from other Pics.FF0Y!88 " Press Mouse ButtonFa.F -R- HELP SCREEN -" +7F 76Y!  "!PIC CLIP Used Two Main Menu Bars.F<Y!`` "&Pressing the RIGHT Mouse Button on theFa<Y! "&Menu Bar will Toggle between Menu BarsF:Y!  "$For HELP on Items on the Above Menu,F8Y!00 ""Press the LEFT Mouse Button on theF, Y!@@ " Menu Item.FE8Y!`` "#Press the RIGHT Mouse Button on theF8Y!pp "#Menu Bar for HELP with Items on theF$Y! "other Menu Bar.F6Y!  " Press the Mouse Button Below theFL&Y!(( "Menu Bar to Exit.F.F7R- HELP MENU ONE CONTROLLER - +8F- .8.' Load Pic Help    FE@@FE``FM+FYFM#FEFM.F Y!  " LOAD PICTUREFi8Y! "%Loads Any NEO or DEGAS Format PictureF&Y!  "in Low Resolution.Fy<Y!@@ "(Loads Any DEGAS Format Picture in MediumFe&Y!PP "or High Resolution.F:Y!pp "'When a Picture is Loaded, it will ERASEF&Y! "the Current Screen.F F:.' Load Clip Help    FE00FE@@FM+FYFM#FEFM.FY!  " LOAD CLIPF<Y! "(Loads Any Previously Saved Picture CLIP.Fe8Y!00 "$The CLIP is placed in the Upper LeftFC(Y!@@ "Cornor of the screen.F8Y!`` "%The Current Screen is NOT Erased whenF$Y!pp "a Clip is Loaded.F F:.' Save Clip Help " v   FE FE@@FM+FYFM#FEF!M.FY! " SAVE CLIPFe6Y!@@ ""Saves Picture CLIP as a Clip File.Ft8Y!`` "$The Clip File can then be Loaded andF,2Y! "used by any GFA Basic Program.Fd:Y!  "&The Following Code can be used to LoadFm<Y!00 "(the Clip File into any GFA Basic ProgramFp$!KF(!>)!&!>>)F$!FBY!`` "Open "B "I"B " ,#1,Filename$F:Y!pp "&Input #1,Clip_len,Colr_len,Clip_width,Fl.Y! " Clip_hite,Rez_picFC,Y! "Pic$=String$(Clip_len,0)Fc,Y! "Colr$=String$(Colr_len,0)F2Y! "Bget #1,Varptr(Colr$),Colr_lenF_0Y!  "Bget #1,Varptr(Pic$),Clip_lenFY!(( "Close #1Fa0Y!00 "Void Xbios(6,L:Varptr(Colr$))F"Y!88 "Put Xx,Yy,Pic$F F4.' Redo Help " @ ` FEFE@@FM+FYFM#FE@@FM.FY!  "REDOF8Y! "$This Function 'Un-Does' the last TwoF6Y!  "#Functions that have been Preformed.F8Y!@@ "$This is very handy when ExpermentingFd(Y!PP "with Different Clips.F F6.' Frame Help e" "  FEFE@@FM+FYFM#FEFM.F$Y!  "FRAME CLIP TOGGLEF4Y! " Toggles a Frame On or Off AroundFd8Y!  "$the Last CLIP that has been Grabbed.F F<.' Copy - Move Help "   0 FE``FE@@FM+FYFM#FE F!M.FY! "COPY MOVEF<Y!  "(Copies the last picture segment that hasFY<Y!@@ "(been Grabbed, To Anywhere on the Screen.F48Y! "%Press the LEFT Mouse Button where theF(Y! "Copy is to be Placed.F8Y!00 "%Press & Hold The LEFT Button, and theF:Y!@@ "&CLIP Can be Dragged Around the Screen.Ft8Y!`` "%If the CLIP is Being MOVED, it ErasesF,Y!pp "Everything Underneath it.F8Y! "$If the CLIP is Being COPIED, NothingFF,Y! "Underneath it is Erased.FE8Y!  "$When a CLIP File is Loaded, the CLIPFF6Y!(( "#is automatically Placed in the COPYF:Y!00 "'Buffer. The CLIP Can be Copied AnywhereF<Y!88 "(on the Screen by using the Copy FunctionF F4.' Grab Help " @ P FE@@FE@@FM+FYFM#FE@@FM.F0Y! "#GRAB CLIP GRABS A Picture SegmentF :Y!  "'The CROSS HAIRS that you can move aboutF8Y!@@ "%the Screen help to determine where toF Y!`` " Start a Clip.F6Y! "#Where the Lines Cross is One CornorF Y!  " of the CLIP.Fe:Y!@@ "'Press & Hold The LEFT Mouse Button. NowF:Y!PP "'as you Move the Mouse, a Variable SizedF8Y!`` "%BOX will Appear. When you Release theF8Y!pp "%Mouse Button, Whatever was within theF2Y! "BOX, becomes the Picture CLIP.Fi6Y! ""The W= and H= on the Menu Bar showFh6Y! "#Current WIDTH & HEIGHT of the CLIP.F8Y!  "%Usefull for making equal sized Clips.F8Y!00 "%The WIDTH & HEIGHT Do NOT Appear whenF<Y!88 "(Grabbing a Clip From a Newly Loaded Pic.FFE@F@EFFMFF@EFM#FFE@@FM.F { F F4.' Text Help " r` p FE FE@@FM+FYFEFM#FF2Y! "&TEXT Applys Text to a Picture ClipF:Y!  "&The Text Function Uses the Above Menu.F6Y!@@ "#For HELP on Items on the TEXT Menu,F6Y!`` ""Press the LEFT Mouse Button on theFFY! " Menu Item.FE8Y!  "%The TEXT Screen has Full InstructionsF"Y!00 "For Text Entry.F$!KF(!H)!&!HH)F$!FEF <F "!!F) )F<.' Normal Text Help    FEFE FM-F M#FEFM3F! Y!pp "BX "J"FN&Y!pp "Sets Text to NORMALF F:.. Bold Text Help p   FEFE FM-F M#FEFM3F! Y!pp "BX "J"FN,Y!pp "Toggles BOLD Text On/OffFE F:.' Lite Text Help p"    FEFE FM-F M#FEFM3F! Y!pp "BX "J"FN,Y!pp "Toggles LITE Text On/OffFE F<.' Skewed Text Help " @ ` FEFE FM-F M#FE@@FM3F! Y!pp "BX "J"FN.Y!pp "Toggles SKEWED Text On/OffF  F@.' Underlined Text Help "   FEFE FM-F M#FEFM3F! Y!pp "BX "J"FN2Y!pp "Toggles UNDERLINED Text On/OffF- F>.' Outlined Text Help p" v  0 FEFE FM-F M#FE FM3F! Y!pp "BX "J"FN0Y!pp "Toggles OUTLINED Text On/OffFf F:.' Text Size Help e" P@ P FEFE FM-F M#FE@@FM3F! Y!pp "BX "J"FN&Y!pp "Increases Text SIZEF F<.' Text Spacing Help " ` p FEFE FM-F M#FE``FM3F! Y!pp "BX "J"FN&Y!pp "Sets Text Spacing.FD&Y! "1 - Normal spacingFD4Y! "!2 - Fits Text to Width of CLIP byF2Y!  " Spacing between CharactersFb4Y!00 "!3 - Fits Text to Width of CLIP byF,Y!88 " Spacing between WordsF F:.' Text Redo Help l"   FEFE FM-F M#FEFM3F! Y!pp "BX "J"FN4Y!pp "!Resets All Options & Text Buffer.F F { F F 4)FEF FEF!YFEFM#FFE``FM.F { F F.FR- HELP MENU TWO CONTROLLER - +9F- .<.' Load Palette Help  F  FE@@FE FM+FYF#M#FEFM2F&Y!  "LOAD COLOR PALETTEFM0Y! "Loads the Color Palette fromFa&Y!  "Any other Picture.Fe4Y!@@ "!The Color Palette that is Loaded,F6Y!PP "#Replaces the Current Color Palette.F F<.' Picture Type Help  X  F T F E00FE FM+FYFM#FEFM2F Y!  " PICTURE TYPEFa8Y! "%Toggles between NEO and DEGAS PictureFY!  "Formats.Fe F F:.' List Clip Help l" ɢ   FE FE FM+FYFM#FEFM2F0Y!  "SAVE CLIP AS DATA STATEMENTSFo4Y! "!The Clip is saved as a .LST File,F2Y!  "That can be Merged with any GFAFY!00 "Program.Fb8Y!PP "$The File that is Saved, Contains AllFy8Y!`` "$the Basic Code Necessary to Read andFy*Y!pp "Set-Up the Clip String.F:Y! "&The PUT Command can be Used to DisplayFo$Y! "the Clip String.Fa F>.' Menu Bar Color Help " ˰@ ` FEFE FM-F YFM#FE@@FM2F(Y!  "ROTATE MENU BAR COLORF:Y! "&Occasionally when a Picture is Loaded,F4Y!  "!the Menu Bar becomes hard to see.F:Y!@@ "'Clicking on the M-COL Function, RotatesF.Y!PP "the Color of the Menu Bar.Fa8Y!pp "$Hopefully, you can choose a Color toFF4Y! " make the Menu Bar more Visiable.F  F<.' Frame Color Help l" ̢  FEFE FM-F YFM#FEFM2F&Y!  "ROTATE FRAME COLORFu*Y! "Rotates the Frame ColorF F<.' Clear Screen Help " J  0 FE``F.E FM-F YFM#FE FM2F Y!  " CLEAR SCREENF&Y! "Clears the Screen.Fl:Y!00 "&Whatever Image that was on the screen,FF6Y!@@ "#is maintained in the Screen Buffer,F4Y!PP "!and can be Recalled with the RedoFY!`` " Function.F FD.' Copy - Move Toggle Help " @ P FE@@FE FM-F YFM#FE@@FM2F&Y!  "COPY - MOVE TOGGLEF:Y! "&Toggles between COPY Mode & MOVE Mode.Fn8Y!00 "$The COPY Mode will Copy the Image inFi<Y!@@ "(the Copy Buffer Without Erasing anythingF6Y!PP ""Underneath the Image being Copied.Fn8Y!pp "$The MOVE Mode wi ll MOVE the Image inFi$Y! "the Copy Buffer.Fo8Y! "%As the Image is Moved, Anything UnderF:Y! "&the Image being Moved, will be Erased.Fa F<.' Help Screen Help l" ` p FE FE FM-F YFM#FE``FM2F Y!  " HELP SCREENSF2Y! "Provides Information about eachFY!  " Menu Item.Ft4Y!@@ " You are in the HELP Section NOW.Fe F:.' Text Color Help " <  FEFE FM-F YFM#FEFM2F$Y!  "ROTATE TEXT COLORF6Y! ""Rotates the Color of the Text thatFu0Y!  "was last applied to the Clip.F F.F9R- PROGRAM DATA -!  |F->0,44,45,99,100,129,130,164,165,206,207,242,243,279,280,319 D0,42,43,92,93,122,123,158,159,191,192,218,219,248,249,277,278,319 B0,25,26,54,55,84,85,116,117,153,154,189,190,225,226,279,280,319  |F,>0,96,97,219,220,285,286,351,352,429,430,491,492,551,552,617 F0,94,700,700,95,214,215,290,291,361,362,430,431,486,487,544,545,619 F0,54,55,120,121,185,186,254,255,318,319,385,386,452,453,550,551,639 |F"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Z32768,49152,57344,61440,63488,64512,65024,65280,65408,64512,52224,35840,1536,1536,768,0 |F(0,15,1,2,4,6,3,5,7,8,9,10,12,14,11,13 |F . Title 1 0,0,4,17,8,13,1,6,7,0,4 @110,10,200,5,95,250,65,108,250,0,185,210,0,195,210,240,45,80 7. Title 2 215,0,4,17,8,13,1,4,15,0,4 1D0,10,200,0,95,-200,120,108,-200,106,185,-220,106,195,-220,0,45,80 . Title 3 30,0,4,17,6,13,0,4,15,0,4 @150,10,170,0,110,180,0,120,180,0,185,180,0,195,180,240,45,80 . Title 4 10,10,2,17,12,1,4,6,3,0,6 F320,30,300,320,100,300,320,110,300,50,185,550,50,195,550,430,60,180 .Title 5 10,10,2,17,12,1,4,6,3,0,6 F340,30,290,340,100,290,340,110,290,50,185,550,50,195,550,490,60,140 @@G@$@ReZ@* p@ @@G@  0P@' @@   @0x([@@``@@=QPQZ" }Q8Q)h%8B@L7P J  8@8))oi 7v 8`(Px@h0X p H V  bVӘbvq*wմ2d`!h rgx f&izwR 8 4cJ ~f *' This Xbios Call will return the Starting Address of the screen ' ' Ref 2 pg. 159 ' Procedure Phys_base Phys_base%=Xbios(2) ' The address of the screen is returned in Phys_base% ' To see in Hex use Print Hex$(Phys_base%) Return  ' This procedure will place the current pallette into the Sav% array ' so that it can be restored with the Replace_oldpallette procedure. ' ' This procedure should be called before any Setcolor Commands if ' you wish to restore the screen to the original settings when exiting ' to the Desktop. ' Procedure Sav_current_pallette Dim Sav%(15,3) ' If this procedure is to be called more than once in an application ' you must first Erase Sav%() For X=0 To 15 Dpoke Contrl,26 Dpoke Contrl+2,0 Dpoke Contrl+6,2 Dpoke Intin,X Dpoke Intin+2,0 Vdisys Sav%(X,0)=Dpeek(Intout+2) Sav%(X,1)=Dpeek(Intout+4) Sav%(X,2)=Dpeek(Intout+6) Next X Return ' ' ' ' This procedure restores the Old Pallette to the current pallette ' You should use this call to return the Desktop values back to ' their original settings before exiting an application ' Procedure Replace_oldpallette For X=0 To 15 Dpoke Contrl,14 Dpoke Contrl+2,0 Dpoke Contrl+6,4 Dpoke Intin,X ' The values in the Sav% array must be predefined with the ' Sav_current_pallette procedure. ' Dpoke Intin+2,Sav%(X,0) Dpoke Intin+4,Sav%(X,1) Dpoke Intin+6,Sav%(X,2) Vdisys Next X Return ' Objc_order repositions a child within the object tree ' Ref 3 pg 86 ' Procedure Objc_order(Object%,Newpos%,Obj_tree%) Dpoke Gintin,Object% Dpoke Gintin+2,Newpos% Lpoke Addrin,Obj_tree% Gemsys 45 Return #' This procedure finds which object is under the mouse pointer ' Ref 1 pg 337, Ref 2 pg 84-85 ' Procedure Objc_find(Obj_start%,Depth%,Mx%,My%,Obj_tree%) Dpoke Gintin,Obj_start% Dpoke Gintin+2,Depth% ' X and Y coordinates of the mouse Dpoke Gintin+4,Mx% Dpoke Gintin+6,My% ' Lpoke Addrin,Obj_tree% Gemsys 43 Return ' Obj_edit allows the entry of G_Text or G_Boxtext in an object ' Ref 1 pg 340, Ref 3 pg 83-83 ' Procedure Objc_edit(Object%,Obchar%,Char_idx%,Kind%,Obj_tree%) Dpoke Gintin,Object% Dpoke Gintin+2,Obchar% Dpoke Gintin+4,Char_idx% Dpoke Gintin+6,Kind% Lpoke Addrin,Obj_tree% Gemsys 46 Ednewindex%=Dpeek(Gintout+2) Return ' Obj_draw displays an object. This one best left to references. ' Ref 1 pg 335, Ref 3 pg 82-83 ' Procedure Objc_draw Dpoke Gintin,Obj_start% Dpoke Gintin+2,Obj_depth% Dpoke Gintin+4,Objx_clip% Dpoke Gintin+6,Objy_clip% Dpoke Gintin+8,Objwidth_clip% Dpoke Gintin+10,Objheight_clip% Lpoke Addrin,Obj_tree% Gemsys 42 Return ' Obj_delete removes an object from the parent tree ' Ref 3 pg 81-82 ' Procedure Objc_delete(Object%,Obj_tree%) Dpoke Gintin,Object% Lpoke Addrin,Obj_tree% Gemsys 41 Return E' This procedure changes an object's current state ' Ref 1 pg 342-343, Ref 3 pg 81 ' Procedure Objc_change Dpoke Gintin,Object% Dpoke Gintin+2,0 Dpoke Gintin+4,Clip_x% Dpoke Gintin+6,Clip_y% Dpoke Gintin+8,Clip_width% Dpoke Gintin+10,Clip_height% Dpoke Gintin+12,New_state% ' redraw if 1 | don't if 0 Dpoke Gintin+14,Redraw% Lpoke Addrin,Obj_tree% Gemsys 47 Return l' Obj_add adds an object as a child to the parent object tree ' Ref 3 pg 80 ' Procedure Objc_add(Parent%,Child%,Obj_tree%) Dpoke Gintin,Parent% Dpoke Gintin+2,Child% Lpoke Addrin,Obj_tree% Gemsys 40 Return !a' This Gemdos call creates a new directory for you ' Temp$ must always be null-terminated with chr$(0) ' ' Ref 2 Pg. 117-118 ' ' Here is an example that will make a temporary directory with the name of TMP ' Example Temp$="\TMP"+Chr$(0) D_addr%=Varptr(Temp$) @Make_directory End ' ' You may delete the example above and just use the procedure ' ' Procedure Make_directory Void Gemdos(&H39,L:D_addr%) Return UGfABASICHN>>> ^ : : | | ,IX0MYXYBMXMYMBNXBQCHECKHITPAT1CITIESJRNLWAITAGUNMKAXBYBMXMYMBHITSLLNNLSENSORTESTWAITTLEVELSCOREXYX0MXBYBCHECKCOLORCITIESZWXBYBX0MCHECKCITIESSENSORSTARTNOEXPLKEYPRESSRESTARTNODBLNODRAWGOONSTART1 STARTAGAINBOMBS MOUSEBUTTON EXPLOSIONHITCITYLASER2E*MISSILE COMMAND|Bill Destler|February 1987FYF)!!! Continue?! F2* ! !  !  FV*HH !HH !HH !HH !HH !@@ !HH F EF E%%F E%%F EF  EF E))F E))F E==F E==F  E)F EF EF EF EhF  EhF@ EF` EF EF EF EF EF EF EF  EF@ EF` E F E F EF|F"YFEEFEF%!!FL! ! m!)F$L! ! mp!)F$L! ! mp!)F$L! ! m4!)F$L! ! mp!)F$L! ! m !)F%!!FL ! ! FY!H "score=0"FE&Y!H " cities left=6"F Y !H "LEVEL 1"FfEFJ !FJ !FEFEF EFEAre You Ready?F)!!!YES! F EF } FyF $!!!FEGF EV  F E#U F N  F E F  F v  F E F FE EV  F FFF EGF  F#F F#F FF  F E F F E F F E F EF  E   F L F-FZ dF ! G!F F,F / F E FE44F,F,F 4 F$! !!F#F ! G !F !G  !F $!!!F F|FZ F NZF 8 F4 F F  NZ F F EFEG@F  F4 F F hF4FEFY!H "score=""F10Y!H " cities left="@ "F"Y !H "LEVEL ""F" f @FiE Another Game?F)!!!yes|no!F/ ^Fe-F FqF F4F J !FJ !FEF EFF+F "!!F F,F,FE,F F  EGz  F  FG F.F+FE%!!F!! !F%!!`F!! !F%!!F!! !F!! !F.F+FEGFV v#   #   #   #   F4F#F$! !!F  ! G !F !G  !F $!!!F#F  EF4 F F FG.F +F EG@Fs< # p# p F  EF F F! 9FEF FE.F+F#F $!!!F !)G!F#F$! !!F !)G!F.FP0'   `` ;=   Fn $7`VQ`` Efv*oM m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NN""""""JrBjNuHz?<&NN\N8CAp$L Qp N$9lrBlJpNN$pMN$9@pdAr 0Q0tr Nr9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu    -pa2|a>:><|a4g RGj`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@Nt?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dJf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C\fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\ v)ld` lp ,BQjNup(NV"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`N\pr N.NSample Icon ProgramNN\prN.NPress the Right Mouse ButtonNN\pr N.N To Quit...NN\p r N.N6This Demo Taken From The GFA Basic Companion LibrariesNN\p r N.N# By John B. HolderbNANXNNANXBmBmBm pNNA NTN ANTNANTA N&<x*<NgNAN&<x*<N8pJBgp/AN&<x*<N>pJBgp/AN&<x*<N8pJBgp/AN&<x*<N>pJBgp/A N&<x*<NpJBgp$VHgA N&<x*<NfN&AN&<x*<N&fNAHNXN&ANXA N&<x*<NgjN~A 0pN6pN:pN>pNlpNpfrfNz <"<NpfrfNz <"<NpNbpNlpNpnrxNzp}rsNTp}rsNzp}"<NTp}"<Nzpn"<NTpn"<NzpnrxNTpNlpNp~rtNzp~"<NTp~"<Nzpo"<NTpNlpNA 0 <r$<&<x*<ANANroN| <r$<ANNNrqNVN`NqNqpNlpNp{r{Nzp{"<NTpNbN\prN.NIcon is now selected 4NpNN~BmpN6pN:pN>pNlpNpdrdNz <"<NpdrdNz <"<NpfrfNz <"<N <rPNz <"<N <rPNz <"<NpnrxNzp}rsNTp}rsNzp}"<NTp}"<Nzpn"<NTpn"<NzpnrxNTpNlpNp~rtNzp~"<NTp~"<Nzpo"<NTpNlpNA 0 <r$<&<x*<ANANroN| <r$<ANNNrqNVN`NqNqpNlpNp{r{Nzp{"<NTpN*pN.pN2pN~N\prN.NIcon is not selected 4N <rZNzNFloppy Drive ANTN~N\" ' A quite complex AES call Graf_watchbox the description is best left to the ' references. ' Ref 1 pg 380-381 Procedure Graf_watchbox(Object%,Instate%,Outstate%,Obj_tree%) Dpoke Gintin,0 Dpoke Gintin+2,Object% Dpoke Gintin+4,Instate% Dpoke Gintin+6,Outstate% Lpoke Addrin,Obj_tree% Gemsys 75 Return ' Graf_slidbox is used to move a box within a box with the mouse ' Ref 1 pg 382, Ref 3 pg 118 ' Procedure Graf_slidbox(Parent%,Object%,Slide_flag%,Obj_tree%) Dpoke Gintin,Parent% Dpoke Gintin+2,Object% Dpoke Gintin+4,Slide_flag% Lpoke Addrin,Obj_tree% Gemsys 76 Return ' Graf_shrinkbox does just the opposite of Graf_growbox. It draws a shrinking box. ' Ref 1 pg. 378-379, Ref 3 pg 112,300 ' Procedure Graf_shrinkbox Dpoke Gintin,Gr_sfinx% Dpoke Gintin+2,Gr_sfiny% Dpoke Gintin+4,Gr_sfinwidth% Dpoke Gintin+6,Gr_sfinheight% Dpoke Gintin+6,Gr_sstx% Dpoke Gintin+8,Gr_ssty% Dpoke Gintin+10,Gr_sstwidth% Dpoke Gintin+12,Gr_sstheight% Gemsys 74 Return d;' This procedure will draw a box from the time the left mouse button is depressed ' until it's release. ' Ref 1 pg.370, Ref 3 pg.112,117-118 ' Procedure Graf_rubberbox(Gr_rx%,Gr_ry%,Gr_rminwidth%,Gr_rminheight%) Dpoke Gintin,Gr_rx% Dpoke Gintin+2,Gr_ry% Dpoke Gintin+4,Gr_minwidth% Dpoke Gintin+6,Gr_rminheight% Gemsys 70 Return ' Graf_handle identifies the open workstation ' Ref 3 pg 113,149,159-160,261,279 ' Procedure Graf_handle Gemsys 77 Return ~' Graf_growbox displays an expanding box with starting and ending points and ' parameters. ' Ref 1 pg 376-377, Ref 3 Pg. 112 Procedure Graf_growbox Dpoke Gintin,Gr_gstx% Dpoke Gintin+2,Gr_gsty% Dpoke Gintin+4,Gr_gstwidth% Dpoke Gintin+6,Gr_gstheight% Dpoke Gintin+6,Gr_gfinx% Dpoke Gintin+8,Gr_gfiny% Dpoke Gintin+10,Gr_gfinwidth% Dpoke Gintin+12,Gr_gfinheight% Gemsys 73 Return e' This procedure moves a rectangle on the screen ' Ref 1 pg 372, Ref 3 112-114 ' Procedure Graf_dragbox Dpoke Gintin,Gr_dwidth% Dpoke Gintin+2,Gr_dheight% Dpoke Gintin+4,Gr_dstartx% Dpoke Gintin+6,Gr_dstarty% Dpoke Gintin+8,Gr_dboundx% Dpoke Gintin+10,Gr_dboundy% Dpoke Gintin+12,Gr_dboundw% Dpoke Gintin+14,Gr_dboundh% Gemsys 71 Return ' Graf_movebox draws a moveable rectangle ' Ref 1 pg 374, Ref 3 112,115 {As Graf_mbox} ' Procedure Graf_movebox Dpoke Gintin,Gr_mwidth% Dpoke Gintin+2,Gr_mheight% Dpoke Gintin+4,Gr_msourcex% Dpoke Gintin+6,Gr_msourcey% Dpoke Gintin+8,Gr_mdestx% Dpoke Gintin+10,Gr_mdesty% Gemsys 72 Return K`,Ql` Efv*oM m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NN*......N ,`NuJrBjNuHz?<&NN\NrCAp$L Qp N^9lrBlJpNN^pMN^9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu    -pa2|a>:><|a4g RGj`a(0GVfA1G<ap??<?<NM\Nu??< NMXNuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dJf`CfSH j-D@Hd0H@H 0H@0`fSC\fS , @a"C\fApNNNHHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\)ld` lp ,BQjNup(NV"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`pNxpN|pNp Np2r2NN  Using EXEC by John B. Holder NN~pr#N.N. Options are:NN~p rN.N.The GFATIP51.BAS ProgramNN~prN.N<1Run the GFA Basic Companion Icon Demo = Press F1}NN~pr(N.N.ORNN~prN.N.,To Exit This Demo Program Press The SpacebarNN?<NNTANzANzNfNHxN"For Med or High|Rez ONLY!gHPN OK r"_ N +@*NHANpNALNXAN&<x*<NfNFNH`NHNpNANzAN&<x*<NfN$NzNICON.PRGCNJNN~H <r$<L8N*NNBgHmA HPA N|NN~&<x*<N.H <r$<L8N*NNNN\ANN~NHV&>GfABASIC &*******0000ZAREZYKPROGNAMETEMPUSE PROGRNAMEOUTMAIN: GFATIP51.BAS Using EXEC by John B. Holder , June 14,1987 ( V 1.0  N You will be able to understand the EXEC command by studing this code and Jby reading the accompanying GFATIP05.TXT file. It really isn't tough.  y y.This Program's Main Screen and body follow l hLPlease run this demo in ONLY Medium Resolution or High Resolution or the n"Screen will be distorted! d c(!!!FM6'H!H!  Using EXEC by John B. Holder F$Y !p " Options are:Fu0Yh!0 "The GFATIP51.BAS ProgramFlHYp! "1Run the GFA Basic Companion Icon Demo = Press F1FY ! "ORFDY!( ",To Exit This Demo Program Press The SpacebarF XFE F F(,)!For Med or High|Rez ONLY!!! OK !FqF! F!FF{FMF FqF FF+FX FEa F ;F  F1 Pressed eF 6You must close all of the windows to exit the demo.  o0EICON.PRGFa A compiled GFA Basic Program m e eJX $F We reserve enough for the program and the Stack to Fit.  n6In this instance we choose to Load and Go, Option 0  nD!!!F You may have to experiment a bit to find the right B combinations to work with your programs.  @X $Fs Take it all back except the Basepage. YFFF F.F; } }} h 2June 14,1987 GFATIP05.DOC by John B. Holder Senior Software Engineer Marathon Computer Press Asst. Sysop on GEnie's MichTron Roundtable USING THE EXEC COMMAND IN GFA BASIC This is the fifth in a planned series by this author on getting the most out of your GFA Basic Investment. In this Tip file we will briefly cover the EXEC command and some of it's possibilities and peculiarities. There are several possibilities with this command, however I will brush on just a few. With the EXEC command you can either load and execute or load and wait for a subsequent execution time. Since the upcoming book by GFA Systemtechnik will go into detail of how to load a program and execute it on call, I will skip over that option. The immediate load and go is the most common usage of the EXEC command so that will be the mode discussed in this doc file and in the GFATIP05.BAS and GFATIP51.BAS files. 1. To simply load a program and execute it from a running application we would do something like this: Reserve Fre(0)-Spaceneeded Exec 0,"Your.Prg","","" Now you may ask how much is needed? Well, you must reserve enough for the entire program you are loading to fit into a block of memory & you must also allow enough room for it's stack and data storage area as well. This is a process of dynamic memory allocation for your called program. So now you might ask, what is the point that I start at? How much do I give it? Well, once again you have to experiment a bit here to find just the right amount. Start out a little higher than you think you need first, and then run your basic program and work the reserved memory down until you have the minimum required to execute it successfully. If you have not allocated enough memory the load and go will fail, and the program will not run. In that case, just allocate more memory and try a run again. Now once you have successfully accomplished the allocation of memory and the execution of your called program, YOU MUST return the memory to the memory pool by doing this: Reserve Fre(0)+Spaceneeded-255 If you do not return the memory, it will be retained by the system and will continue to reduce itself if the program is called repeatedly. Not only that, the parent program will not have the memory resource following the return of control without the restoration function mentioned above. The GFATIP05.BAS and GFATIP51.BAS files will show you how this MUST be done. 2. Other Possibilities: If you would like to call a TTP program and pass in a command to it you must use the following calling convention: Suppose the command is ah new.arc *.bas (For ARC.TTP) Command$="ah new.arc *.bas" Command_length=Len(Command$) Command$=Chr$(Command_length)+Command$+Chr$(0) Reserve Fre(0)-Spaceneeded Exec 0,"Your.Prg",Command$,"" Reserve Fre(0)+Spaceneeded-255 That's all there is to it. Essentially, what we did was formulate a command in our mind (it must be a legal one for the program you are passing it to), place the command into a string variable, find out the length of the string, reconstruct the command as this: Length of the command, Actual Command, A null Byte for Padding Other than that, the format is the same as that which the other flavor of EXEC command uses. 3. Peculiarities: If you are calling a compiled GFA Basic program from a parent interpreted Basic program, many times following the return from the child (compiled basic program you called), you will be presented with an alert box asking if you would like to continue or quit. This is because the compiled GFA Basic program is passing the interpreted program a signal that says "Let's end". It is sort of like pressing the Control+Shift+Alternate keys. This peculiarity goes away if you compile the program. In other words, if all of your programs are compiled (Parent, and Child), then you will not have this problem. This is not a problem if you don't mind having your program interrupted during development. Now you see why I have included a Demo Program written in Modula 2 for an example. This way those of you using Interpreters only can run the GFATIP05.BAS file without interruption. Since Modula 2 uses a different exiting sequence, this "Break" does not arise. To see the Break example run GFATIP51.BAS. You will see the difference as ICON.PRG is a compiled GFA Basic program. The Icon Demo came from the GFA Basic Companion's Source Code Libraries. The GFA Basic Companion will be available at a Software Dealer near you or directly from MichTron soon. I hope this helps many of you out. If you are interested in getting some questions answered on a live basis, why not stop in for one of our weekly GFA Basic Conferences on GEnie at 10:00PM EST, 7:00PM PST every Saturday. A lot of GFA Experts and Enthusiasts stop by each week. We'll be looking for you. H`Ql` Efv*oM m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NN*......N ,`NuJrBjNuHz?<&NN\NzCAp$L Qp Nf9lrBlJpNNfpMNf9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu    -pa2|a>:><|a4g RGj`a(0GVfA1G<ap??<?<NM\Nu??< NMXNuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dJf`CfSHj-D@ 8Hd0H@H 0H@0`fSC\fS , @a"C\fApNNNPHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\)ld` lp ,BQjNup(NV"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`pNfpNjpNnp Np2r2NN:  Using EXEC by John B. Holder NNlpr#N.NR Options are:NNlp rN.NRThe GFATIP05.BAS ProgramNNlprN.NR(Run the Marathon Demo Program = Press F1NNlpr(N.NRORNNlprN.NR,To Exit This Demo Program Press The SpacebarNN?<NNTANANzNfNHxNFFor Med or High|Rez ONLY!gHPN: OK r"_ N.+@*NPANA4NXAN&<x*<NfN.NP`NPNpNANAN&<x*<NfNN|AN&<x*<NfNpNrpNvpNzA G0NA G0pNrpNvpNzprNA N"<NNzN:DEMO.PRGCN`NNH <(r$<L8N2NNBgHmA HPA NjNN&<(x*<N6H <r$<L8N2NNN|N\ANN~NPP&>&&BGfABASIC &*******0000RAREZYKPROGNAMETEMPUSE PROGRNAMEOUTMAIN: GFATIP05.BAS Using EXEC by John B. Holder , June 14,1987 ( V 1.0  N You will be able to understand the EXEC command by studing this code and Jby reading the accompanying GFATIP05.TXT file. It really isn't tough.  y y.This Program's Main Screen and body follow l hLPlease run this demo in ONLY Medium Resolution or High Resolution or the n"Screen will be distorted! d c(!!!FM6'H!H!  Using EXEC by John B. Holder F$Y !p " Options are:Fu0Yh!0 "The GFATIP05.BAS ProgramF @Y ! "(Run the Marathon Demo Program = Press F1FtY ! "ORFDY!( ",To Exit This Demo Program Press The SpacebarF XFE F F(,)!For Med or High|Rez ONLY!!! OK !FqF! F!FFMF FqF FF+FX FEa F ;F  F1 Pressed eYF 4JF%!!FEGGF  VFEGGF %!!F F!!! !FF 6You must close all of the windows to exit the demo.  oEDEMO.PRGFG e. Marathon Demo.Prg O& was 6 Developed using TDI Modula-2/ST 8 0272-742796(UK), (214)340-4942(USA)  H Note: It is a run time requirement to make the above Notification. n a oLWe need to reserve quite a bit since we are dealing with a lot of windows  eJX  (F We reserve enough for the program and the Stack to Fit.  n6In this instance we choose to Load and Go, Option 0  nD!!!F You may have to experiment a bit to find the right B combinations to work with your programs.  @X  (Fs Take it all back except the Basepage. YFFF F.FG } }}  49 June 1987 GFATIP04.ARC Welcome to the fourth in the planned series of GFA TIP files by this author. This archive will contain the following files: GFATIP04.TXT This doc file GFATIP04.PRG Compiled source GFATIP04.BAS GFA Basic Source Code file About the Tip File: In this file you will learn how to construct a rudimentary two column directory listing that is paged on demand. It will support and list up to 1,000 files contained in the current directory. Files are sorted by means of a quick Shell Sort routine. The Shell sort was chosen since it is relatively easy to understand and is suitably fast for sorting arrays of this size. Most disk directories will not exceed 1 page. Files are listed in the following format: Normal Files contained in the current directory Directories - denoted by an asterisk before their name (Ex. *MYDIR.DIR) Lastly a text line will be displayed showing vital disk stats. Also included in this file is a technique to get vital disk statistics and display them within a running program. While not intended to be a 'Power User' demonstration, this Tip File will display the benefits to be derived from sorting information and at the same time it will show you an alternative to the GFA Basic command, "FILES". I hope that you get some benefit from the source code and concepts contained therein. John B. Holder Senior Software Engineer Marathon Computer Press & Asst. Sysop on GEnie's MichTron RT `4Q` Efv*oM! m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HN2Hx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHN(ALNHz2?< NA\pdAxr0XQ)K\NN :><|a4g RGj`a(0GVfA1G<ap??<?<NM\Nu??< NMXNu&8*:EENuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|V  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</N JFkSFk&aQN `Ha"FFaQL8N6.VJgtBnVNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNAXJ@jNNu~c0NQNu?Hl?<6NAP0,NuA C Hp` A C Hp?H, NA @e0<J@g @f ):f 0 *.*`QB FJhf N9|(`rONHl?<NAHh?<NA\NA\Jj @g @g ?N20NTN2AECJWg *g|*fSJWg:p QA *aFJk|0 0*N I 0*N I  CN?<ONAT`V'/ra H@HaHda H aNqJfJg0P H@HNuvN)@p `H@)@prtN AHplrtN B 2pNpNpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtN papap9@p`pvNv`v`vj`v `v`v`v`?Aa*` Al 2l 4)lVH)lRprtN Al 2l 4HVNu(* 9AJA)H@@[000][ˈN Evz`* [g" ]g |g QSz` zQSpQ][ɈN Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NHNur|<N @xepw2A$JBjDFHB t`0QBl9F)lVTAtp 9| N 2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN "l`dpNAtrdJhk\QpaNH ld$l`"Hg: k&@0+R`g k#&@0+S@H3 Q&f)I`LNuApNnN $N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0Nu _0HpNn _0HpNnp"_0HqNp"_0HqNE ұeHHQ0)N$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%pr Y2dP.gRG,D!p4Ae4v`VfANuN8SHNu(* 0(iN$E 4R`Q$D 4R`QˈN DN ENu0H 0 0H@Nu"H2X@N:0H@?N:AAN"H2H@N/0@N/YdNHANpA` p9`p:`p;?N>J@fCAHPBHQ?NA\ _JjNNuH&NրN묶jNuHRp` HRpJQfpNNq Y Qfd ЀЀNuNN$_& if"QdփփHRNNN~,Nq8DRzXEEg"7PNqR$HBJBgpNJgJigp`eetЂ`"ЀeЁdp`ЀeЀe"Ѕe$W.H@@N L"2` NqR YEjrd0` SjN YQf "_Nq*eNN*< NqbІSGfN @$P "t402g YRBB%(4g $`RBB%(Nu~$_NЀЀ N" KC`e N `d \NV l\Ӭ\ NupNd d3 d# d# # d# # # # d# # # # # # # # dB` # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # QNu?k?<NM"UAf J@fH@NuDW?<NMXNuPj0,lf$J,nk l*fp?Np N9|nNA0,l2J,jk 0"fZRAR@ 0"g 0 f` 0 g 0,f9@lTll`BllA"H"g"A4`Q"AA 0! NuS@R@ 0 g 0,f9@lRll`R@ 0 fQj`<,*?Hj\F FfN`H FfN`RGFc8>`4A g6 g0 g` gTlfelhgFf2pRGRFa`a,` `?~ap ap a 0NuCpE`bf`FgRGJGgRSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nu?<?<NMXNur9A(HNLNu0,^2,`NzEfpaRppaNAEg0PaľEfa4RE`p a2a*Efp a(NldeS@f lbfSl`9Ab9FdNupapqr`p`ak NupNuakfpNupNtddA0oH?<?B?<BNA Jk.,?<?B?<BNA *kBg?/?<BNA JkNuNp`pJ@gHzZ?<&NN\NuB?< NA\Av ACLElp"Jg X\QC"C!/:@?< NA\NuLH!Nu$Hx`(Hx`"Hx`Hx`Hx`Hx` Hx`Hx !4VxH A6@ Ni LHL|1R/:?< NApdK`HaJLxNNu)H9@Jp4NP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8N  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C\fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\)ld` lp ,BQjNup(N Division by zeroOverflowNumber not integer|-2147483648 .. 2147483647Number not byte|0 .. 255Number not word|0 .. 65535Square root only|for positive numbersLogarithm only for|numbers greater than zeroUndefined error Out of memory Function or command|not yet implemented String too long|max. 32767 characters Not GfA-BASIC V1.0 program Program too long|memory full|NEW Not GfA-BASIC program|file too short|NEWArray dimensioned twiceArray not dimensionedArray index too largeDim index too largeWrong number of indicesProcedure not foundLabel not foundOn Open only|"I"nput "O"utput "R"andom|"A"ppend "U"pdate|allowedFile already openFile # wrongFile not openInput wrong|not numericEnd of file reachedToo many points for|Polyline/Polyfill/Polymark|max. 128Array must have|one dimensionNumber of points too|large for arrayMerge - Not an ASCII fileMerge - Line too long|aborted ==> Syntax error|program aborted!Undefined label"Out of data#Data not numeric$Syntax error in data|unpaired quotes%Disk full&Command not allowed|in direct mode'Program error|Gosub not possible(Clear not allowed in|For-Next-loops or|Procedures)Cont not possible*Parameter missing+Expression too complex,Undefined function-Too many parameters.Parameter wrong|must be a number/Parameter wrong|must be a string0Open "R"|Record lenght wrong2Not an "R"-File3Only one Field per|Open "R" allowed4Fields larger|than record lenght5Too many Fields (max. 19)6GET/PUT|Field string lenght changed7GET/PUT|Record number wrongMENU error?RESERVE error@Pointer (*x) errorZLOCAL error[FOR error\Resume (next) not possible|Fatal, For oder Locald GFA BASIC V 2.0| Copyright 1986|GFA Systemtechnik GmbHf2 bombs - bus error|Peek or Poke possibly wrongg3 bombs - adress error|Odd word adress! Possibly at|Dpoke, Dpeek, Lpoke or Lpeekh4 bombs - illegal instruction|executed in machine codei5 bombs - divide by zero|in 68000 Machine Codej6 bombs - CHK exeption|68000 interrupted by CHKk7 bombs - TRAPV exeption|68000 interrupted by TRAPVl8 bombs - privilege violation|68000 interrupt by|execution of a|priviliged instructionm9 bombs - trace exeptionGeneral errorDrive not readyUnknown commandCRC error|disk check sum wrongBad requestSeek error|track not foundUnknown media|boot sector wrongSector not foundOut of paperWrite faultRead faultGeneral error 12Write protectedMedia change detectedUnknown deviceBad sector (verify)Insert other disk|(request)Invalid function numberFile not foundPath not foundToo many open filesAccess deniedInvalid handleOut of memoryInvalid memory block adressInvalid drive specificationNo more filesGEMDOS range error|seek wrong?GEMDOS internal errorInvalid executable file formatMemory block growth failure"l`Yd&-KNN "l`YepN?<NNTA6NA6N<&<x*<NpfN-XHxNFor High or Med Rez!HPNSorryr"_ N+@HNNprNN@Sorted Columnar Directory Listing by John B. Holder For GFATIP04N <CLNNprNNWriting a Temp file first. NA HPN tempfile.tmp"_NpIN^HPN tempfile.tmpr"_NLBmpNA N8/N CLNA N<&<x*<NA NPpN$VHgN.`C A 0NN tempfile.tmpNZAN > > >$SHELL FILE1SIZECOUNTPASSNUM1XEOFINLOOPAREZTEMPFILE1OUTFILE1FILNAMESFILNAME SORTJUMPOPT2 SORTJUMPOPT1P* GFATIP04.BAS *!  * *2 By John B. Holder *, GRIFJOHN r F Designed to display the possiblities with displaying 4 Disk Directories e < Includes a Fast Shell Sort Routine  RWarning: No Error checking routines are installed with this version. You must Pinstall your own. For example if a disk is write protected, the program will crash.  rT A Good project for an enterprising GFA Basic Programmer would be to incorporate : Tim Purve's Sort Routine to this procedure. Have fun!  E F  @ JF()!For High or Med Rez!!!Sorry!FqF! F! T TRY`! "@Sorted Columnar Directory Listing by John B. Holder For GFATIP04F.J*zz F Up to 1,000 file names. Only Hard disks could go higher. c.Y8! "Writing a Temp file first.FWG tempfile.tmpF7I!M! tempfile.tmpFEFFHNow let's read the file that has the listing of current files in it. . o =`M! F EFF !ZrM F!HFEF8FF(Now let's get rid of the pesky thing!  oA tempfile.tmpFT*% Shell Sort of the Directory *  * *actual sorting  * E% FiLThis next series of periods on the screen shows the activity of the sort.  h$Y !  " Now Sorting."FF #ZF#EGF."F#EGHFSEFE F |F# #jJF -F F ## JF-F# FH# ! Fg EF-F|FH ! F #6F #F E% F "FFF:5 We are fully sorted now.F {pFp for effect only. n(!!!FFYF FLet's display the directory in columns and in Graphic text format. &EGH@F!%0EG@F'!# ! F&'>!# ! F EF $FG %@JFeBY!H "*Please Press a key to display next page..."FEa F &F BHere is where we find out some goodies about the current disk! a e eTY!H "< Please Wait Because I'm Calculating Vital Statistics."F {pFnY !H " Total of A  files Free Disk Space = A  Press space bar to quit..."FEa F FYF $FFqFe of program. NThis is not supposed to be a screamer. As a matter of fact the program has Vbeen slowed down a bit to allow you to see what is happening. It works just great Pwith hard disks as well as floppys. You can speed it up by taking out all of @the unnecessary narration print lines and the sort periods...  hR There is a fast way to do a columnar sort, but it is a bit above the level of eP this GFATIP file series. You may prepare the directory totally in memory if R so desired, but the concepts are a bit complicated. Perhaps in a future file?  sB This file should help you to build on some sound fundamentals. N*K SSRpDP* * #R#D 2May 31 1987 GFATIP03.ARC Handling Errors Gracefully by John B. Holder GRIFJOHN This is the third in a series of planned GFA Basic tip files. It seemed that several people had been experiencing some trouble with handling errors, so I felt it best to demonstrate with a couple of source files in .BAS and .PRG form. Pointers on using the Compiler: 1. If you want to use the Resume Next option, always select the following options: A. Stop - Ever B. Trapv - + C. Errors - Text D. Bombs - +  By doing so, you will invoke all of the compiler's error trapping capabilities. If you would like to later experiment with deleting some of the options, do so with caution. This is the most protected mode available with the compiler. 2. If you choose to use a Label: to return to, no special options are necessary. Since this reduces the size of the overall program, it may be the method of choice. However, you may need to set up Local error trapping routines for each major I/O procedure. I know that this Tip File is a bit scanty, but I am working Full Bore on an RCS for GFA Basic at the moment and time precluded a more wordy, and example filled Doc File. Sure hope this helps those who have been experiencing problems with Error Trapping with the Compiler. GRIFJOHN  7May 25 1987 GFATIP02.DOC Constructing a System Drive Map By John B. Holder Senior Software Engineer, Marathon Computer Press This is the second in a planned series of tips on how to get the most out of your GFA Basic Interpreter/Compiler. The topic is Mapping your System. What this means in plain english is: "Determining how many logical drives are connected to the system". Why do we need to know that you may ask? Unless you will never write programs for anyone besides yourself, this will be a good technique to learn for reasons described below. What will this do? Well, it will give you a binary presentation of your system's drive status. Imagine each drive hooked up to the system as a single digit. By this I mean that if you have 3 drives attached to the machine the drive map will be represented by the symbols 111. If there were 10 drives connected to the system the drive map would be 1 . Starting to make sense? Now it gets a little complicated. So you say, Wow! that's great; all we have to do now is call the Drive_map procedure and get Len(Num$) to find out which drives are attached. Not completely true. If the user has 4 drives attached and they are in the sequence of A B C D then you could do that. But the first problem comes into play when you consider that the BIOS always returns a value of 11 for drives attached. That's so you can make those handy dandy full disk backups by dragging Icon A to Icon B and sit back while it copies all of the files for you. So if it always returns a signal that says that Drive B is connected whether or not it really is, how do you get around it? Well, the answer is you don't. The operating system handles this condition by telling the user to insert disk B into Drive A and vice versa to get around it. So not all's bad with this condition. Ok, so we can now accept the fact that we'll always get a return of at least 11 no matter what. Now how do we tell if another drive is missing or out of order? At this point we must go back to the above analogy of 1 digit per drive. Take the following configuration: A B C D _ F The underscore is represented above to show that the user has somehow managed to install a Ram Drive or something in Drive F's slot, thus bypassing drive E. Now if you call the Drive_map procedure and use: Print Len(Num$) You'll see a 6 appear on the screen, but we know right off that it's not right {because we cheated and saw which drives were connected, after all we own the machine right?}. But if you use: Print Num$ You will now see the system as it really exists. The following will appear on the screen 101 Pretty handy if you don't want your latest and greatest program to hopelessly crash because Joe BetaTester had a Ram Drive out of Normal Sequence. Now getting an actual picture of the system is as simple as: @Drive_map ! Gosub Drive_map For X =0 To Len(Num$)-1 step 1 If Mid$(Num$,Len(Num$)-X,1)="1" Print "Drive ";Chr$(Asc("A")+X);" Is Online" Else Print "Drive ";Chr$(Asc("A")+X);" Not Connected!" Endif Next X I hope this little routine and explanation of how it works will assist you in getting the most out of your investment in a wonderful Interpreter and Compiler. Comments are welcome, good or bad. I've included the sample source code in a Basic .BAS file in the archive for you to run as is. Have fun! John B. Holder GRIFJOHN Here's the actual procedure and some commented source code: ' Drive_map Returns two values for you; they are: ' Num% = a bit vector containing active drives ' Num$ = a binary representation of connected drives ' If you had drives A,B,C connected num%=7 and num$=111 ' In this way you can count up the active drives from A-P by ' looking at the resulting bit vector representation. ' If drives are not in order there may be zeros in between ' numbers. Example: You have drive A & B, plus a Ram Drive M ' M_ BA ' drive map = 10 11 ' ' Or the more classical situation: ' CBA ' drive map = 111 ' ' ' Example: @Drive_map Print Num% Print Num$ ' ' Procedure Drive_map Num%=Bios(10) Num$=Bin$(Num%) Return  GFA TIP01: By John B. Holder Senior Software Engineer Marathon Computer Press This short file will show you the two ways to tell if the printer connected to your system is ready to receive data or not. The first method, { The way discussed in the GFA Basic Manual} uses the OUT? command, and the second way utilizes the low level GEMDOS c_prnos System call. So without further ado let's take a look at the two methods and what they do for you. Using the OUT? Command: By using the following code snip you can determine if your printer is hooked up and ready to receive data. Out 0,0 If Out?(0) Ok=1 Else Ok=-1 Endif If Ok=-1 Alert 1," Printer is not on! ",1," OK ",reply% Else Alert 1," Everything's O.K. ",1," OK ",reply% Endif end Positive points: This method will work not only with the printer port, but also with the AUX (1) port and the MID (3) port. To check those ports just use Out?(1) or Out?(3). Bad Point: If the printer is not connected, you will have to wait for 30 seconds for the control of the console to be returned to the application. It is for this reason that this method may not be the one of choice for most applications. The c_prnos Substitute call: Try this procedure out: Procedure C_prnos Status%=Gemdos(&H11) Return If your printer is connected to the system and ready to receive data, the value assigned to the Status% variable will be a negative 1 (-1). If the printer isn't ready, you'll find a zero (0) in the variable upon return. Positive Point: This call only takes an instant to register an answer, instead of the 30 seconds recorded above if there is a problem. Weak Point: This call will function with only the printer port, and not MID port. I hope this small doc file has helped some of you. I will try to address questions in this manner in Future GFATIPxx.DOC files. Please U/L your own tip files to the MichTron Libraries if so desired. I ask that you use some other naming convention besides the GFATIPxx.DOC one though so there will not be any confusion. P`@ 6 *O.|*m - ЭЭм// ??<JNA NL/<NA"/0<NBNu#NA/9NuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNVH?BCB..,. f# <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD# D`# JLN^NuNV&=|L=|J-|?FB-|ZH>-|B:=|8=|6=|4=|82-| A.-|3;*N (.v/x/z/|N =@=|=|=|=|=|=|=|=|=|=|=|.//N P>N6>?.NT.?<?<?.N\.?<(?<?.N\Bn`Bn`0<@2.AA2.A=@0<rn2. A=@0.|H/NX-@0<ȐnH/NX-@Bn N2n1n0.ʐn"N4nRJ3@Rn nLmd.?<L?.NXRn nm6.?<w?<?.N\N >N6>?.NT.?<^?<?.N\=|@Bn=|@=|T.?<?.NX=|=|T=|=|.?<?.NX=|=|.?<?.NXBn`Bn`0<@2.AA2.A=@0<rn2. A=@0.̐n|H/NX-@0<n̐nH/NX-@/./.NP//./.NP/0<H/NX/NRP/NRP/0<H/NX/NP//./.NP//./.NP/0<#(H/NX/NP/NP//./.NP//./.NP/0<H/NX/NP/NP/NP/NrP/NZX=@0.ʐn=@JnlBn no=| N2n1n N2nRI1nRn nLm(.?<L?.NXRn nm.%?<w?<?.N\N >N6>?.NT.B?<2?<?.N\=|6/.:0.6H/NX/NP-@B/.B/.BNP-@B0n6@=P80.8D@=@4/../.B0.44H/NX/NRP/NX/NP-@>/.*/.>NP.N-@F/.F/0.LH/NX/NP/NP/NX/NP/NRP/0.2H/NX/NP/NZX=@J>?.NT0.4n6|@=@0<ȐnJn6=@=n=n.?<?.NXBW?.NT0.R@=@0.|2=@.?<?.NX>?.NT0.6n4|@=@0.S@=@=n=n.?<?.NXBW?.NT0.R@=@0.|2=@.?<?.NXRn4oRn60.6|@m.q?<w?<,?.N\N >?.NT>?.NT>N6BnBn=|=|=n=n=n=nBn`.=n.?<?.NX0.|=@Rn n@m=|Bn=|=|=n=n=n=nBn`.=n.?<?.NX0.|=@Rn n@m=|=|=|Bn=n=n=n=nBn`.=n.?<?.NX0.|=@Rn n@mBn=|=|Bn=n=n=n=nBn`.=n.?<?.NX0.|=@Rn n@mN >?.N T>N6=|=|Bn`,>?.?<?<@?.N`P0.|=@Rn nm=|=|Bn`,>?.?<?<@?.N`P0.|=@Rn nmN .?<w?<d?.N\N N N^NuNV3'0.|Hм@-@=|` nH2n'2RRn nm.'PN>B@09'BN^NuNV#'"#&"#'""#'B"#'n"#'v"#"'P> aF3'B'TpN^NuNV>a*pN^NuNV>N N^NuNV>MN n0'D n 0'F n0'H n0'JB@09'BN^Nu?/?<LNANu#'V"<psNBNu0/2/ҀgV 4<eHA4<|cRBA`B6<c4BfSB2C|gAC8be0Nu4`6`0Nur0/jDA4/BjDADB/&HCCjDCCBmA&Nu0/@kR@`S@@Nu0/@R@@Nu#'dNu#'hNu o 'hNuNV3 3 'VBy'X3'\3'bN 09 N^NuNV3'VBy'XBy'\3'bN N^NuNV3 "3 "3#3#3 'V3'XBy'\3'`3'bN N^NuNV3 "3 "Bn nH|2n2RRnJ@f3'V3'XSn3'\3'bN N^NuNV## .мZ#3d'VBy'X3 '\ n 3'bN n 0'b## #$#"N^NuNV# 3'V3 'XBy'\3'bN #"N^NuNV3 3'VBy'X3'\3'bN 09 N^NuNV3 3'VBy'X3'\3'bN 09 N^NuNVH..,. Nl LN^NuNVH..,. Nb LN^NuNVH..N@ LN^NuNVH..N LN^NuNVHJl| .D-@`BFJfB`^~` .-@R .f` .-@S. g .-@޼@ JFg .JLN^NuNVH .м<JgJFlB`V .:|oJEg <` <`0..μ|`RFJFm`SFJFnJEg D. JLN^NuNVH..,. N LN^NuNVH..,. NZ LN^Nu?<`$?<`?<`<bTJNuBgJk<8cH~$<cP<c <L~TNu,<>.N<<XDxB묈<΄,<CN,.NZ$(< .BJk<FD<c~䯾o$`<D<c~DDl`z,k^g>k^g2k8<d,&B<ރeNuRid~S<Nu.NuJNu:ڼ.gNugRghEDvi^E]HE:BB8HD&HC؃HF&؃BDHDHGHFHEބj ޼gNuSiex@ބއdRgNu~NujJ<Nu!T3~SUU???xBJg.jD<¼bHF<܆[Jj ܼdRNumc68343 floating point firmware (c) copyright 1981 by motorola inc.    -$,28=AFJMQTWZ]_bdfikmoprtuwyz{}~~}{zywutrpomkifdb_]ZWTQMJFA=82,$A simple flat planeDemo By Bob Ritter and Mike Tancsa...Press any key to continue...A surface where Z = fuction(X-squared, Y-squared)Press any key to continue...Complex surfaces are fun to make.And FAST!!Press any key to continue.Press any key to exit and return to desk-top..._ctrl_cn@_crystal>_trapJldivlmulZ_mainL_crys_if _appl_in (_appl_ex _evnt_ke _graf_ha _gsx1 _gsx2 _i_ptr _i_ptr2 _iioff_iooff_m_lptr2 _mul_div _SMUL_DI z_vec_len _MUL_DIV _pioff_pooff_umul_di __exit _vdi _vswr_mo _v_clrwk6_v_ellip`_v_gtext_v_opnvw _v_pline_vsl_col_vsl_typfpaddR_fpaddRfpdivr_fpdivrsin_sinsqrt_sqrt_fpltof_fpftolZfpmul_fpmulfpmult_fpmultfpsub_fpsubffpsin@ffpcos.ffptan(ffpsincs"ffpsqrtffpaddlffpsubZffpdivbffpmul2ffpthetaZffptnormffpcpyrt@_intin_intout _c"_ptsin"_ptsout$_global&_control'_int_in'"_int_out'B_ad_c'P_gl_apid'T_contrl'V_addr_in'n_addr_ou'v.vf b&j TZ .0$X    t  (  $  D.>.  Njjh  ,F  &      : b$ fBL` " $ *O.|H*m - ЭЭм// ??<JNA NL/<NA"/0<NBNu#@NA/9@NuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^NuNVH?BCB..,. f#D <`hlDRCJlDRCn8fzB`0l :HGH`xe`Jge`|fD#D D`#D JLN^NuB?< NA\O29TUA yVXHJgXHQ` #/?< NA\O?<NNTO|g3?</</<?<NN ?<NNTO#33A0<?/?< / $R*gD *Ъm $HB| mDЪ"*Ҫm $HB|mDҪ%@%Aa$_XJQNu *"*H@HA4<698<z"jaZ *м"*H@HA4<698<z"ja0 *"*ҼH@HA4<698<z"ja *м"*ҼH@HA4<698<z"j` *"*H@HA4* 698<z j "ja *м"*H@HA4* 698<z j("j,a *"*ҼH@HA4* 698<z jD"jHaR *м"*ҼH@HA4* 698<z j`"jd` |@"y0<2<4<698<z<<>< ?HHaLL|Q><<0<|QNu0<? yr QNu09|fb6<J9f6<0924C|KC|0KC|ABf `|3f3??<?<NN\ONuH069SCC0"4||6;0 bBL NuPPaBJ@fDN ` `(`0`<`BNu`H`P`X`d`n`t````|mP<<@@ ;RN `````Nu``` `@`\`j````<@ ;N B??`````Nu````0``H`d```Hp2QNu0QQNu0F@X2QNu2QNu0F@QQNu0QQNu0QQNu0QF@2QNu0F@QQNuFQQNu0F@X2QNu0F@2QNu0F@QQNu0QF@2QNup2QNuF2H@QqPQNut4qPHBQQNu2H@t4qPqPHBőQNu2H@t4qPqPHBQQQNut4FqPHBQQNut4qPHBQQNut4qPHBQQNu2H@t4qPB3PHBQB2QNu2H@t4qPqPHBQQQNu2H@qPQQNu2H@t4qPqPHBQQQNu2H@t4FqPqPHBQQQNut4FqPHBQQNu2H@t4qPqPHBQQQNu2H@qPQQNut4QHBqPQNu2H@t4캱QQHBqPqPQNu2H@t4캁QQHBqPqPQNut4FQHBqPQNut4캵QHBqPQNut4캅QHBqPQNu2H@t4캄QB2HBqPB3PQNu2H@t4캵QQHBqPqPQNu2H@t4캱QQHBqPqPQNu2H@t4FQQHBqPqPQNut4FQHBqPQNu2H@t4QQHBqPqPQNu""pRpR'wWw'""PrPr''UwUw````xH pP ?? ?? ????80 `@Ç@`0 8`p88pp88p`aq99qa_crystal>_trapJldivlmulZustkHretsav@~~lmulZ~sign~l1~l2 ~t1~t2~~ldiv~b~q~l1~l2~al1~al2 ~sign_ldivrDactflagxymode src dstdxdysizeZEROS_ANDANDNSRCNANDDSTXOR_ORNANDNNXOR NDST ORN NSRC NOR NORNONES_mainLmove`sprit_st vb_lpfvb_findrherepvblankvb_vecquitrez_savepal_saveps_lpcolor_ta "col1cleartile_scr$spc_lend*spc_lp(mdin_lp8spot0`square0tri0`delta_ta `del_lpcopy_lpsort_inispact_lpdonedemo_tasagainZdt_out_synccol_animwaitw_lp0w_lp1sprit_ptLcol_dirvb_cntbob grid@spot1spot2spot3square1square2 square3@tri1tri2tri3sphereeksspokes sync1si_lpsort*sort_lp08sort_lp1b2C ^b2D b2E b2F b2rmode 2b10_lp tb1F_lp 0b20_lp @b22_lp hb23_lp b28_lp b29_lp b2A_lp 0b2B_lp Bb2C_lp bb2E_lp b2F_lp b21r b22r b23r b24r b26r 8b27r Nb28r db29r b2Br b2Cr f b2Dr b2Er b22r_lp b23r_lp b28r_lp hb29r_lp b2Br_lp b2Cr_lp b2Er_lp .vf 8 (&0 hhf * 6t**0$..4J (;`4,^`0@(#) KAL -- kaleidoscope V0.4 Atari Corp. /jwt*O.|*m - ЭЭм// ??<JNA NaB9?<NNTO3 @W09R@@309R@@3S@3!|x!|x BEBF~By?<NNTO|#0a@:0a:<aaJ@gaJNA`00000aBgNAa, A*m AUTmR@ymyNuS@j09S@NuSyjRG2<49a3"9g Ag Ag A#HANuNqa DEaDFaDEaFaDFa DEaDFaFNuNq3x0J9g@y3x2y3zJ9gRyxNuAx0<0QA`0 0000aA`0M0000aAx3A`1|d1|1| Axp2< 0Q0aA`3 Ax33A`1|1|1|aA`1|!1|1|Ax1|1|arpCa~pCarpCapCaA`1|1|1|`*pCanpCadA`0e1|1|3lps"<4NBNu/ A`1|1|1|Ax00aAz"_222NuA`1|1|1|Ax0000`A`1|1|1|`p?< NATNu0<"<HNBNu Nu!|3 Nu`xxxx`xxxxx6.    "2 &0     *  4GfABASIC>R\\UxVy|z|}6}6}Z}x}~}~}~v~v~v~vALL_DONEDWIDTHHEIGHTMKMXMYMX1MY1REZBXBYWMODSXSYSWSHEXEYEWEHXYXWWOFFMX2MY2SW1SH1MK1DWDHBDXBDYBDWBDHSX1SY1BWBHKFTSAIESTCC1E41E42E43E44RDC2QWXYGG1FOREGRNDBACKGRNDPEF4EF5CXCYCRHRSECSEC1SEC2SEC3EXREYRIC1IC2IC3ZFGBGHZSPRMSPROSNDSND1PERDNUPDN1PREDURCDFDXDFMDFM1TV1TV2TVHXHYTOFTOF1MINTV3DFD DEFAULT_DRIVEATXSCREEN1EXTX1TX2TX3TX4ZGFASSPRITE GFASPRITESPRASPRBSPRCSPRDSPRESPRFCLM4SECMINREZZX1Y2YXY1Q0Q3Q6SMSFIMSTRIPCLKXCLKYINTCLXMCLYMMSTRIPBARMMOMO1SPALETTE STRIP_DATACLEAN_UPLO_REZMED_REZHI_REZ SHUT_DOWNZAP_OUTGFA_SPRITE_DATA CLOCK_DATATEMPLOW_OUT FIND_DONEGFA_MOUSE_DATASEC_DONECLOCK_SPRITE_DATA MENU_HANDLER DO_RUBBER_BOX DO_DRAG_BOX DO_MOVE_BOX DO_GROW_BOX DO_SHRINK_BOXDO_FANCY RUBBER_BOXLOW_REZ_MESSAGEGROW_BOX SHRINK_BOXDRAG_BOXMOVE_BOXSAVE_ORIGNAL_COLORSSAVE_ORIGINAL_COLORSFANCY_2 DO_FANCY_1 DO_FANCY_2 DO_EFFECT_2 DO_EFFECT_1 DO_EFFECT_3 DO_EFFECT_4 DO_EFFECT_5DEFAULT DO_WINDOW_1 WINDOW_MSG DO_WINDOW_2DO_EXEC_COMMANDDO_EXECUTE_COMMAND DO_WINDOW_ DO_EXECUTE_1 DO_EXECUTE_2WINDOW_GRAPHIC DO_SPRITEDO_CLOCK INTERMISSION DO_SOUND_1 DO_SOUND_2 DO_SOUND_3DO_TITLE_SOUNDMSHRINKMGROWFIND_PRGDO_MICEDO_HRSDO_MINDO_SECR* SPECIAL EFFECTS SAMPLER * R* Ver 1.0 By Jim Luczak 02/22/87 * R-N - > The Variable WOFF is a Vertical Offset L Used to Coordinate the GEM Y Coordinate & the Window Y Coordinate.  R-N  B Rez%=Xbios(4) determins the Screen Resolution > Rez% = 0 --> Low Resolution t>  Rez% = 1 --> Medium Resolution t> Rez% = 2 --> High Resolution t R-N  8 Default_drive=Gemdos(25) L Determins what Drive was Active at the Start of the Program. 8 Default_drive = 0 = A: 8 Default_drive = 1 = B: 8 Default_drive = 2 = C: 8 Default_drive = 3 = D: . &Ect.  P- SET UP PROGRAM PARAMETERS - * F*pp@ F2*00 !00 !00 !00 F* !` ! F kEH FE F غF<)!G.F.A. F/X| | Shift Into!! MEDIUM RESOLUTION !F- FG F F-RF FRFF F&Q!!!1!2!3!4!S!T!a!b!iFEp F@EFAEFR- READ MENU STRIP DATA - RF ٜ EGFsQ F  ي FGR- READ SPRITE DATA - RFw& Eb b b b bS F2$ Eb b b b b F$Eb b b b b F&Eb b b b bS F2$Eb b b b b F$Eb b` b b b F  EGFQP!QF E bQ bP F  F  @ EGFQP!QF E bQ bP F   F  x EGFQP!QFEbQ bP F  T F  ۰ EGFQP!QFEbQ bP F  ی F  EGFQP!QFEbQ bP F  F  EGFQP!QFEbQ bP F  F>R- READ USER DEFINED MOUSE DATA - R F8 Eb b b b b F( Eb b` b b bS F& Eb` b b b b F( Eb` b b b bS F < EGFiQQF  E bQ F   F> p EGFiQPF E bP F  P F= ݤ EGFQQF E bQ F  ݄ F EGFQPF E bP F  ݸ F EGFQQF E bQ F  F @ EGFQPF E bP F  F t EGFQQF E bQ F  T F ި EGFQPF E bP F  ވ F EG`F,Q F  ޼ FG EGFsQ F  FGR- READ CLOCK SPRITE DATA - RF-$Eb b b b b F ߢ EGFQP!QFEbQ bP F  ~ F EF M FVR-" DRAW TITLE PAGE - ^F 6!!!F6!`!@!F6!!! F6!@!!FE FE>>FJEzzFKE44FUEFVE F[Ezz F\EFXEF;EFEX=A  Y=A   X1=A   Y1=A  F(!F"/H! !M!F F FYFF6! !!FUE``FVE@@FM#F.FR- RUBBER BOX -" e+F-! F X Coordinate of Box "! F Y Corrdinate of Box <!F Smallest Possible WIDTH of Box in Pixels <@!F Smallest Possible HEIGHT of Box in Pixels 6s#  F A.E.S. Graphics Library Routine Op Code <E3 F Returned WIDTH of Box when User Released Button DE3 F Returned HEIGHT of Box when User Released Button -.F-R- GROW BOX ROUTINE - +F-YFEF6! !!F6!@! !FS 6!!!F6!!@!`F(!!! F*/!p!//!GROW BOXF(!!!@F>/!p!//!Press The LEFT Mouse Button.F@/! !//!A Box Will Originate And GROWFT>/!H!//!To An Area Around This TextFw(FP/! !//!-Press The RIGHT Mouse Button To EXIT The DEMOF-EFEFEFEFEppFEppFEzzFEFFE44FEF #F !!!F  , F- "!!F- $F-!F F#F!!!F FEF FE #F!!!FEFEF!FM$0!  FM F F  rFYFUEFVE@@FM#F.FR-" GROW BOX -" + F-4!FF X Coordinate of Box in it's Initial Size e8!F Y Coordinate of Box in it's Initial Size a(!F Initial WIDTH of Box p(@!F Initial HEIGHT of Box :!F X Coordinate of Box in it's Final Size -> !Fn Y Coordinate of Box in it's Final Size e2@!F WIDTH of Box in it's Final Size 4`!F HEIGHT of Box in it's Final Size i.s# F A.E.S. Graphics Library Op Code .FR- SHRINK BOX ROUTINE - +F-YFEF6!!@!`F 6!!!F6! !!F 6!!!F(!!! F,/!p!//! SHRINK BOXF(!!!@F>/!p!//!Press The LEFT Mouse Button.FB/! !//!A Box Will Originate And SHRINKF-P/!H!//!.To The Area Where You Pressed The Mouse ButtonF(FP/! !//!-Press The RIGHT Mouse Button To EXIT The DEMOF-EFEFEFEFE44F EF EzzFEFEppFEppF #F  !! !F   F- "!!DF- F-M FM$ !  F!F F#F!!!F FEF FE #F!!!FEFEF!F F  "FYFUEFVE@@FM#F.FR- SHRINK BOX -" + F2!F X Coordinate of Box in it's Final Size t6!F Y Coordinate of Box in it's Final Size e2!F WIDTH of Box in it's Final Size 4@!F Height of Box in it's Final Size i<! F X Coordinate of Box in it's Initial Size i@ !F  Y Coordinate of Box in it's Initial Size -(@!F Initial WIDTH of Box o(`!F Initial HEIGHT of Box .s# F A.E.S. Graphics Library Op Code .FP- DRAG BOX ROUTINE - +F-YFEF 6!!!F6!@! ! FS6!@! !F6!!@!F(!!! F*/!p!//!DRAG BOXF(!!!@FX/ !p!  !6Press & Hold The LEFT Mouse Button In The Smaller Box.FP/ ! !  !.A Shadowed Box Will Appear That Can Be DraggedF@/ !H!  !Anywhere Within The Larger BoxF(!FP/H! !aa!-Press The RIGHT Mouse Button To EXIT The DEMOFFEFEHHFE F E FE44FEF E F!E F"EXXF #F ! !!! "F !! !F   F! "!!F. #   # F M FM$!@ F!F#F !! !F #F!!!F EF EFF!F F  FYF 6!!!F 6!!!FUE@@FVE@@FM#F.FR-" DRAG BOX -" + F-&!F WIDTH of Box being Dragged D(!FW HEIGHT of Box being Dragged 0! F Starting X Coordinate of Box B4@!F  Starting Y Coordinate of Box a6!F X Coordinate of Boundary Rectangle -: ! Fo Y Coordinate of Boundary Rectangle .@!!F WIDTH of Boundary Rectangle 0`!"F Height of Boundary Rectangle a.s# F A.E.S. Graphics Library Op Code 8E3 F X Coordinate when Mouse Button was Released BE3 F- Y Coordinate when Mouse Button was Released .FEP- MOVE BOX ROUTINE - -+F-YFEF 6!!!F6!!@!F6!@!!F6!`!@!F(!!! F*/!p!//!MOVE BOXF(!!!@FV/ !p!  !3Press The LEFT Mouse Button Anywhere on The Screen.F R/ ! !  !0The Box Will Move To Where You Press The Button.F(FP/H!p!aa!-Press The RIGHT Mouse Button To EXIT The DEMOFrEF%EHHF&EHHF EHHFE44F #F  !! %!&F   F% "!!F FEFEFM FFM$@!  F!F#F !! %!&F #F!!%!&F EFEF!F F  FYFUE FVE@@FM#F.FR-! MOVE BOX -# r+ F$!%F WIDTH of Box being Moved r&!&FW HEIGHT of Box Being Moved @! F X Coordinate of Box in it's Initial Position eD@!F  Y Coordinate of Box in it's Initial Position >!F X Coordinate of Box in it's Final Position nB !F  Y Coordinate of Box in it's Final Position n.s# F A.E.S. Graphics Library Op Code .FR- SPECIAL EFFECT #1 - +FYFFEF6! ! ! F 6!`!!F6!!@!F 6!!!F#F EGF ~ FEF !F FE4FF!!!F!F  bF(!!!@F!F4/p!H!HH!SPECIAL EFFECT #1F2 {HFF!FYFUEFVE FM#F.FP- SPECIAL EFFECT # 2 - +FYFF 6!!!F6!`!`!`Fc6!!`!F6!!@!F!F-EGGF(EF)EF*EF +E(G)H*F H,EG H+F,!! ,!-F  (,F z,EG-H+F, !,!!-,F  Z,F!  +F!*E*F+E(F!(E)F!)E+F! F! {HF!YF F(!!! F!F4/p!H!HH!SPECIAL EFFECT #2F {HFF!FYF6!!!`FUEFVE FM#F.FP- SPECIAL EFFECT # 3 - +F-YFF 6!!!F6!`!!`F 6!!`!F6!!@!`F !FEFEGGF E F EF E F EF EGF ~ EG H F!! !F  f F!  EG H F !! !F   F  EGH F!! ! F   F!  EGH F !!! F   F!  TF!(!!! F !F4/p!H!HH!SPECIAL EFFECT #3F3 {HFF!FYFUE``FVE FM#F.FR- SPECIAL EFFECT #4 - +FYFF6! !!F-6!!`!F6!!@!FF6!! !F@ @F@@EF>E6You Can Terminate Effect #4| Before It Is Complete By|Fr6E, Pressing & Holding| The Mouse ButtonF)!!! Got It ! !FEM$@!  F F!!F/EF0E F.EF(EF)EF-EF fEGF- <+E(G)H.F ,EG H+F**E#),O4 4H 1F*&, !*4!, !*4F&, !2*!, !3*F  `,FH/!0F6!/! !/FM$@0!/ FERF 2FG+E)FGEF FE  J+F.E.F+E(F(E)F)E+F  8F(!!! F-!F4/p!H!HH!SPECIAL EFFECT #4F- {HFF!FYF6!`!!F6!!!`FUE FVE FM#F.FR- SPECIAL EFFECTS #5 - +FYFF 6!!!F6!`!@!F6!!`!F6!!@!`F zAF AEF>E6You Can Terminate Effect #5| Before It Is Complete By|Fr6E, Pressing & Holding| The Mouse ButtonF)!!! Got It ! !FEM$@!  F F!!F(EF)E F*EFEF dEGF- 6+E(G)H*F,6!V !V !V F .,EG H+F$,! ! ,!FFF  ,F  ,E GFH+F( !,!!FF ,F  N,F!.! ! !#F !F { FG  >EGVpp  F*V/ !VH !F0M&V@@  !V  !{ ! F  F!F(!!!@F*/!!! A Squadron ofFF(!!!@F'\!!Fe(!!!@F!./!"!![[ - Squares - ]]Fo!F { FYFFERF ,FG+E)FGEF FE  +FFYFF*E*F+E(FF(E)FF)E+FF  FF6!!@!`FF(! !! F!F4/p!H!HH!SPECIAL EFFECT #5F- {HFF!FYF6!`!!F6!@!!FUEFVE FM#F.FP-! DEFAULT WINDOWS - +F-YF!F6!@!@!@F6!@!!F6!!@!`F 6!!!F(!!!@FF[FYFF*\!" G.F.A. Basic Default Window # 1 Fi,]!$ Windows Are Easy To Use With G.F.A.F(\!! G.F.A. Basic Default Window # 2 F,]!$ Windows Are Easy To Use With G.F.A.FG(\!! G.F.A. Basic Default Window # 3 F,]!$ Windows Are Easy To Use With G.F.A.FG0\!! G.F.A. Basic Default Window # 4 FF2]!$ Windows Are Easy To Use With G.F.A.F^FEF8EFMFFE   F ERF  FwZ8F M$!  FM F-48F 8FEEF {HFa-F FE^8F8M$!  FMF- F7|F ~F8 >8EGFs[8F  .8FG^F FUEFVE FM#FF.FR- WINDOW MESSAGE - +F- ETo Open Window # A8 Fn 8FwETo End The DEMOF FE>/ ! !!Press The LEFT Mouse ButtonF"/H! !HH!F>/ ! !!Press The RIGHT Mouse ButtonF2/H!H!HH!To End The DEMOFM.FR- WINDOW GRAPHIC - + F-/EF0EF!F :EGHF%/F&*!! !:FH/!0F  `:F! 9E GH F%/F$*!!9!FH/!0F  9F!!F.F R-! EXECUTE PROGRAM 1 - +F-YFFEF 6!!!F6!`!@!F6!! !F6! ! ! F (!!! F 2/H!p!  !EXECUTE PROGRAMFA(!!!@FJ/ !p!aa!(This is a DEMO of G.F.A.'S EXEC Command.F`/ ! !  !=Almost Any Program Can Be Executed Directly From G.F.A. BasicFF/ !H!aa!#When You Exit The Executed Program,Fmj/ !p! !GControl Is Passed Back To The Program That Called The Executed Program.F(!FT/ ! !  !1The Program That Will Be Executed Is GFA_FX_1.PRGF`/ !4! !>To Exit The Program After It Has Been Executed, Press Any Key.F (FH/p!p!zz!%Press Any Key To Execute The Program.F:/*! !!Press HELP to Exit DemoFFESF  #F $t6 FE GFA_FX_1.PRGFE;; FM*F6!! !@Fz6!@! !F6!! !F 6!!!FM$@! FMF F!F 6!!!FUE00FVEFM#F.FR-! EXECUTE PROGRAM 2 - P+F-YFFEF6E/This Example Demonstrates That A Low ResolutionF@E9Program Can Be Executed From A Medium Resolution Program.F,E%The Program That Will Be Executed Is FE GFA_FX_2.PRGFEFE GFA_FX_2.PRGFEzz F2 &~FCEFEFE EFFEXECM.PRGFa>E6This Demo Program Takes Approxmatly 2.5 Minutes To RunF.E GFA_FX_M.PRGFE  FM FE EF 6!!!F6!! !F6!! !@Fz6!`!@!Fz(!!! F 2/H!p!  !EXECUTE PROGRAMFA(!!!@FJ/ !p!aa!(This is a DEMO of G.F.A.'S EXEC Command.F`/ ! !  !=Almost Any Program Can Be Executed Directly From G.F.A. BasicF"/ !H!aa!F"/ !p! !F(!F"/ ! !  !F"/ !4!  !F`/ !H! !>To Exit The Program After It Has Been Executed, Press Any Key.F (FH/p!p!zz!%Press Any Key To Execute The Program.FE:/*! !!Press HELP to Exit DemoFFESF  )`F )6 FM*FFM$ ! FMF  F!F6!!!FUEFVEFM#F.FR-! EXEC COMMAND CALL - +FbFE X F!!!FPX FFE.FR-" SPRITE CONTROLLER - +!FFFYFF 6!!!F6! !@!`F6!`!!F6!!`!F #F(!!! F*/H!p!  !SPRITESF(!!!@FzB/ !,!pp!Press Mouse Button To EXIT DemoF(!!!F0/*!!! A Six Pack OfFt(!!!F*/ !\!//!SPRITESFcEF7EF?EnF,EFRE F3  -F!ERF ,E,?F*E), 3336F /E*,7 FR*!#4 /F$~ !R*(!#4 /F$~ !R*(!#4 /F(~!R*(!#4 /TF(~!R*(!#4 /TF~!R*!#44 /F ~!R*!#44 /TFF ,~FYFUEFVEFM#FF.FR-# MOUSE CONTROLLER - 5++F-FYFF!F 6!!!F6!!@!F6!`!!F6!`!!F #F(!!! F./H!p!  ! Mouse FormsFO(!!!@FN/ !p!pp!,Press LEFT Mouse Button To Change Mouse FormF(!!!@FpH/ !,!pp!%Press RIGHT Mouse Button To EXIT DemoF-(!FEF_EF`EF&/p!H!HH!_ FL  1( F,ERF 1 F,4_FM&_!@!z ! F 0_Fi}_F {F'p!H!F&/p!H!HH!_ FL {@F 1F_}` F {F'p!H!F&/p!H!HH!` FL {@F4`F 1`F`EF_EF FE F F| /F_'p!H!F}FUE``FVEF 6!!!FM#F.FR-! THE CLOCK WORKS - +"F-FYF. 6!!!F6!`!!F6!!!`F6! ! ! FFEcEaF dE FeEHHFfE\\F(!!!@FB/z!<!HH!Press Mouse Button To EXIT DemoF.(! !! F /d!e !!HOURF(!F #F 39EG@F"d!e!dH!e F'd !ec!9F*d4!e!d !e F'df!ec!9@F0e!PF 39FfELLF FE  39FcEbFdE\\FeEHHFfEFgEF(! !! F"/d!e !*!MINUTEF(!!!@F 6r:EGFF 59EGpF"d!e!d0!e F'dfg!ec!9F*d@!e!d !e F.'df@!ec!9pF*d4!e!d`!e F.'df0@!ec!9pF*d!e!d!e F('df!ec!94F0e! F 59FgEF FE  4r9FdEaaFeEHHF(! !! FfEF!gEF"/d!e !*!SECONDF(!!!@F  4^:FEFM,F:M-F:  6FERFFE5?8@``@ FM.F8 6FFF 6!!!FUE@@FVEFM#F.F"R-" SECONDS ROUTINE - +.FFdEaa@FeEXXF 7FGF- F F 7FF0~!d!e# p iFM-Fd F- 8FFF"~!d!e# F iF F 8\FpFxxF4~!d@!e# #Fp iF F 8FpF88FF4~!d4!e# #Fp iF F 9F4FttFF4~!d!e# #F4 iF FM&!!} ! FGEFF |FF .F|R- MINUTES ROUTINE - -+-FFdE\\@FeEXXFhE5?8@@ F :hF0~!d!e# p iFM,Fd F, :LhhF"~!d!e# h iF F :hphxxF4~!d@!e# #hp iF F :hph88Fh4~!d4!e# #hp iF F ;Nh4httFh4~!d!e# #h4 iF F&M& ! !{ !  F.FR-! HOURS ROUTINE - -+,Fd$!F#FcEaFdEppFeEXXF = EGFF <4E@F EEE@F FE G.F.A.'S , Windows , Sprites , Mice , Clock Works ,"" -<EXECUTE'S , Execute Program 1 , Execute Program 2 ,"" &QUIT, EXIT , STAY ,"" "","" R.! SPRITE DATA . |Fw@640,0,4088,0,16380,0,32206,0,16387,0,56379,0,48765,0,10836,0 87800,0,576,0,1056,0,576,0,8580,0,4104,0,4080,0,2016,0 <63551,0,32769,0,48765,0,41541,0,44637,0,15996,0,0,0,992,0 <544,0,992,0,448,0,36873,0,36873,0,40953,0,33729,0,63519,0 <0,0,11892,0,22554,0,12300,0,8196,0,20082,0,20874,0,6072,0 83696,0,384,0,576,0,9156,0,4488,0,2064,0,2016,0,960,0 7@32382,0,33153,0,32190,0,33345,0,45657,0,45657,0,32190,0,384,0 >960,0,1056,0,18402,0,35889,0,38937,0,38937,0,19506,0,2016,0 >6168,0,13364,0,29298,0,16962,0,9252,0,6168,0,16962,0,8580,0 <4104,0,1440,0,0,0,62406,0,33289,0,45967,0,37385,0,61961,0 @38889,0,23610,0,61455,0,49155,0,39993,0,8772,0,11868,0,7224,0 >576,0,384,0,8196,0,17346,0,33825,0,34833,0,34833,0,18402,0 ,R.# MOUSE DATA .  |F8"0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 R1440,3024,1632,1056,15996,2064,1057,2066,4106,4106,4106,4106,2068,1064,592,480 "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \57735,65151,58983,64959,59799,2640,3504,3696,3696,3504,3504,60855,60855,64959,58407,58311 "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 P384,960,960,1440,1440,7608,24966,65535,65535,24966,7608,1440,1440,960,960,384 "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 V65408,43648,54656,43772,54780,43660,65420,6156,6655,6413,8189,8189,257,257,257,511 ,T Arrow ,Text Cursor (Vertical Bar), Bee ,Hand With Pointing Finger 1BFlat Hand - Extended Fingers,Thin Cross Hair, Thick Cross Hair JOutlined Cross Hair,User Defined #1 (Mouse),User Defined #2 (Race Car) r:user Definer #3 (Snow Flake),User Defined #4 (Squares) rR. CLOCK SPRITE DATA . -|F-:0,0,0,0,32766,0,65535,0,65535,0,65535,0,65535,0,65535,0 665535,0,65535,0,65535,0,65535,0,32766,0,0,0,0,0,0,0  > 6 > >B  @  C 90 G. J  x  $  Z V h  <   l   *6 X $ : * 1 ,  ր  .4 ; 9 7F ' This next call is used throughout this entire product ' It returns the Resolution of the Screen/Monitor ' ' Ref 2 Pg. 161 ' Procedure Getrez Rez=Xbios(4) ' 0 if Low Resolution, 1 if Medium Resolution, and 2 if High Resolution Return ' Form_dial handles a visual effect and memory storage for dialog boxes. ' You will have to define the variables prior to calling this function. ' Ref 1 pg 353, Ref 3 103,105,320 ' Procedure Form_dial Dpoke Gintin,Fo_diflag% Dpoke Gintin+2,Fo_dilittlx% Dpoke Gintin+4,Fo_dilittly% Dpoke Gintin+6,Fo_dilittlw% Dpoke Gintin+8,Fo_dilittlh% Dpoke Gintin+10,Fo_dibigx% Dpoke Gintin+12,Fo_fibigy% Dpoke Gintin+14,Fo_fibigw% Dpoke Gintin+16,Fo_fibigh% Gemsys 51 Return ' This procedure handles the centering of an object on the screen ' Ref 1 pg 355, Ref 3 pg 102-105,320 ' Procedure Form_center(Fo_ctree%) Lpoke Addrin,Fo_ctree% Gemsys 54 Return C,' This procedure passes control to the AES to process user input ' for a dialog. ' Ref 1 pg 352, Ref 3 pg 89,103,105-106,393 ' Procedure Form_do(Fo_dostartob%,Fo_dotree%) Dpoke Gintin,Fo_dostartob% Lpoke Addrin,Fo_dotree% Gemsys 50 Return '' Evnt_keybd waits until a key is pressed on the keyboard ' It works along the same principle as A=Inp(2) ' This procedure will not return the value of the key pressed, ' it just pauses the program until there is activity recorded ' on the keyboard. ' Ref 3 Pg. 40 ' Procedure Evnt_keybd Gemsys 20 Return ' This procedure causes the AES to wait for a specified period of time ' as represented by the Timr% variable in milliseconds. ' Ref 1 pg 317, Ref 3 pg 36,44,49,341 ' ' Example: Timr%=600 @Evnt_timer(Timr%) End ' Procedure Evnt_timer(Timr%) Dpoke Gintin,Timr% Lpoke Gintin+2,Timr% Gemsys 24 Return ' Evnt_multi: Probably the most difficult of all of the AES routines to ' master. See one of the references for details. ' Ev_mmgpbuff% is the address of a 16 byte buffer to place messages ' Ref 1 pg 319, Ref 3 pgs 47-49 ' Procedure Evnt_multi Dpoke Gintin,Ev_mflags% Dpoke Gintin+2,Ev_mbclicks% Dpoke Gintin+4,Ev_mbmask% Dpoke Gintin+6,Ev_mbstate% Dpoke Gintin+8,Ev_mm1flags% Dpoke Gintin+10,Ev_mm1x% Dpoke Gintin+12,Ev_mm1y% Dpoke Gintin+14,Ev_mm1width% Dpoke Gintin+16,Ev_mm1height% Dpoke Gintin+18,Ev_mm2flags% Dpoke Gintin+20,Ev_mm2x% Dpoke Gintin+22,Ev_mm2y% Dpoke Gintin+24,Ev_mm2width% Dpoke Gintin+26,Ev_mm2height% Dpoke Gintin+28,Ev_mtlocount% Dpoke Gintin+30,Ev_mthicount% Lpoke Addrin,Ev_mmgpbuff% Gemsys 25 Return ' Evnt_mouse waits for the mouse to enter or leave the specified rectangle ' Ref 1 pg. 315, Ref 3 pg.37, 47 ' Procedure Evnt_mouse(Ev_moflags%,Ev_mox%,Ev_moy%,Ev_mowidth%,Ev_moheight%) Dpoke Gintin,Ev_moflags% Dpoke Gintin+2,Ev_mox% Dpoke Gintin+4,Ev_moy% Dpoke Gintin+6,Ev_mowidth% Dpoke Gintin+8,Ev_moheight% Gemsys 22 Return ' Evnt_mesag waits until an AES report is placed into the event buffer ' Ref 1 pg. 318, Ref 3 pg 43-44,46,250 ' Adr% is the address of a 16 Byte buffer ' Dummy$=space$(16) Ev_mgpbuff%=Varptr(Dummy$) ' Procedure Evnt_mesag(Ev_mgpbuff%) Lpoke Addrin,Ev_mgpbuff% Gemsys 23 Return  ' Evnt_dclick allows you to set the double-click interval ' The default is 2 ' Click_speed% can be from 0 to 4 with 4 being fastest ' Click_set% = 1 to set a new value ' Ref 3 pg 39-40,45-46,354 ' Procedure Evnt_dclick(Click_speed%,Click_set%) Dpoke Gintin,Click_speed% Dpoke Gintin+2,Click_set% Gemsys 26 Return ' This procedure waits for the specified button state. ' Ref 1 pg 313 ' Procedure Evnt_button(Ev_bclicks%,Ev_bmask%,Ev_bstate%) Dpoke Gintin,Ev_bclicks% Dpoke Gintin+2,Ev_bmask% Dpoke Gintin+4,Ev_bstate% Gemsys 21 Return `$QT` Efv*oMh m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NN JrBjNuHz?<&NN\NCAp$L Qp Nt9lrBlJpNNtpMNt9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu    -pa2|a>:><|a4g RGj`a(0GVfA1G<ap??<?<NM\Nu??< NMXNuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N$6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N$<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNAXJ@jNNu~c0NhQNuvN)@p `H@)@prtNAHplrtNB 2pNpNpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtNpapap9@p`pvNv`v`vj`v `v`v`v`?(* 9AJA)H@@[000][ˈN Evz`* [g" ]g |g QSz` zQSpQ][ɈN Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NtHNu2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg: k&@0+R`g k#&@0+S@H3 Q&f)I`LNuApNN$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0Nu _0HpN _0HpNp"_0HqN,p"_0HqN,(* 0(iN$E 4R`Q$D 4R`QˈN DN ENu?k?<NM"UAf J@fH@NuDW?<NMXNu0,p2,rR@RANuS@SA9@p9ArNu9@pN4, 6fprta0,2,NuA4, 6f9@9Ap rt`, HHHNup`pNu)H9@Jp4NtP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8NX  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C\fApNNN^HP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\)ld` lp ,BQjNup(NV"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`/&#k gH`Nq-KNu)| :><|a4g RGj`a(0GVfA1G<ap??<?<NM\Nu??< NMXNuHn& 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|J  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8Nv6.JJgtBnJNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?Nv<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNAXJ@jNNu~c0NJQNuvN)@p `H@)@prtNAHplrtNB 2pNpNpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtNpapap9@p`pvNv`v`vj`v `v`v`v`?(* 9AJA)H@@[000][ˈN Evz`* [g" ]g |g QSz` zQSpQ][ɈN Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NHNu2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg: k&@0+R`g k#&@0+S@H3 Q&f)I`LNuApNN$Nl$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0Nu _0HpN _0HpNp"_0HqNp"_0HqN(* 0(iNl$E 4R`Q$D 4R`QˈN DN ENu?k?<NM"UAf J@fH@NuDW?<NMXNu0,p2,rR@RANuS@SA9@p9ArNu9@pN4, 6fprta0,2,NuA4, 6f9@9Ap rt`, HHHNup`pJ@gHzZ?<&NN\NuB?< NA\Av ACLElp"Jg X\QC"C!/:@?< NA\NuLH!Nu$Hx`(Hx`"Hx`Hx`Hx`Hx` Hx`Hx !4VxH A6@ Ni LHL|1R/:?< NApdK`HaJLxNNu)H9@Jp4NP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8N  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C\fApNNNHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\)ld` lp ,BQjNup(N Division by zeroOverflowNumber not integer|-2147483648 .. 2147483647Number not byte|0 .. 255Number not word|0 .. 65535Square root only|for positive numbersLogarithm only for|numbers greater than zeroUndefined error Out of memory Function or command|not yet implemented String too long|max. 32767 characters Not GfA-BASIC V1.0 program Program too long|memory full|NEW Not GfA-BASIC program|file too short|NEWArray dimensioned twiceArray not dimensionedArray index too largeDim index too largeWrong number of indicesProcedure not foundLabel not foundOn Open only|"I"nput "O"utput "R"andom|"A"ppend "U"pdate|allowedFile already openFile # wrongFile not openInput wrong|not numericEnd of file reachedToo many points for|Polyline/Polyfill/Polymark|max. 128Array must have|one dimensionNumber of points too|large for arrayMerge - Not an ASCII fileMerge - Line too long|aborted ==> Syntax error|program aborted!Undefined label"Out of data#Data not numeric$Syntax error in data|unpaired quotes%Disk full&Command not allowed|in direct mode'Program error|Gosub not possible(Clear not allowed in|For-Next-loops or|Procedures)Cont not possible*Parameter missing+Expression too complex,Undefined function-Too many parameters.Parameter wrong|must be a number/Parameter wrong|must be a string0Open "R"|Record lenght wrong2Not an "R"-File3Only one Field per|Open "R" allowed4Fields larger|than record lenght5Too many Fields (max. 19)6GET/PUT|Field string lenght changed7GET/PUT|Record number wrongMENU error?RESERVE error@Pointer (*x) errorZLOCAL error[FOR error\Resume (next) not possible|Fatal, For oder Locald GFA BASIC V 2.0| Copyright 1986|GFA Systemtechnik GmbHf2 bombs - bus error|Peek or Poke possibly wrongg3 bombs - adress error|Odd word adress! Possibly at|Dpoke, Dpeek, Lpoke or Lpeekh4 bombs - illegal instruction|executed in machine codei5 bombs - divide by zero|in 68000 Machine Codej6 bombs - CHK exeption|68000 interrupted by CHKk7 bombs - TRAPV exeption|68000 interrupted by TRAPVl8 bombs - privilege violation|68000 interrupt by|execution of a|priviliged instructionm9 bombs - trace exeptionGeneral errorDrive not readyUnknown commandCRC error|disk check sum wrongBad requestSeek error|track not foundUnknown media|boot sector wrongSector not foundOut of paperWrite faultRead faultGeneral error 12Write protectedMedia change detectedUnknown deviceBad sector (verify)Insert other disk|(request)Invalid function numberFile not foundPath not foundToo many open filesAccess deniedInvalid handleOut of memoryInvalid memory block adressInvalid drive specificationNo more filesGEMDOS range error|seek wrong?GEMDOS internal errorInvalid executable file formatMemory block growth failure"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`/\ga `6f -K. @Nua \dp\N&#k gH`Nu"Cփk փk2##`փk##`3#`$Y8gHRDD*D%H8#$c2g# HRDD%H` l @ , Ь R@"@E Tg`)J @N .)|" NSee ... We just recovered from an error trapping routine with the InterpreterNNNNL+or the Compiler as this demo clearly shows.aNNNNNNN>DNow that we know we have a disk error we can take appropriate actionNNNNNNprNNLPress any key to continue.pNNpNANNN"NNNNNNxNNANNHxN2)An Error Has Occurred! | The number is = 4HPAN0N"_NZHPN& |"_NZHPN& OK r"_ N\+@ N)|" We continue on our merry way with the body of the program. o  FqF i i"The ever ready error subroutine +FF8F|EFF)!)An Error Has Occurred! | The number is = A  |!! OK !F h4Have to turn it back on in order to use it again!  avLF aF aFO.K. Let's get back to the routine that caused all of the problems.  ..F!V Notice GFA BASIC programmers: EasyRecord, the Record Management System available from MichTron now includes an interface allowing GFA BASIC programs to access EasyRecord. Now you can create sophisticated data base applications using GFA BASIC. EasyRecord provides the functions needed to record and access data records in an orderly fashion. It allows: o Record management for up to 16 indexed records at one time. o 8 key fields per indexed record file with 8 subfields per key field. o 123 bytes per key field maximum. o Record access through a variety of logical functions. o Fast, b-tree(multiway), random-record storage method. o Transaction processing allows related files to be kept consistent with start, end and undo transaction functions. o Easy specifiaction of key fields. o Duplicate key field values. o Creation of files from existing open files. o Creation of files from definition files and/or blocks. o Integer, Unsigned, Long, Float, Double, String, and Case Independent String key types. - Order EasyRecord with GFA BASIC interface from MichTron 576 S. Telegraph Pontiac, MI 48053 (313) 334-5700 ' Drive_map Returns two values for you; they are: ' Num% = a bit vector containing active drives ' Num$ = a binary representation of connected drives ' If you had drives A,B,C connected num%=7 and num$=111 ' In this way you can count up the active drives from A-P by ' looking at the resulting bit vector representation. ' If drives are not in order there may be zeros in between ' numbers. Example: You have drive A & B, plus a Ram Drive M ' M_ BA ' drive map = 10 11 ' ' Or the more classical situation: ' CBA ' drive map = 111 ' ' Ref 2 pg. 153 ' ' Example: @Drive_map Print Num% Print Num$ ' ' Procedure Drive_map Num%=Bios(10) Num$=Bin$(Num%) Return GfABASIC ,XNUMTEMPNUM DRIVE_MAPMFpFpFp qEG6 HF qd?@6 @ 1F$Drive "B7A  " Is OnlineF  qFv(Drive "B7A  " Not Connected!F F  qF"+FpE  F Ep F.FE? q`XfhNW. _b ШNYN"pNGNuNV*x ڄ=E*P-E@-M-VNh-H ng nf-n*.P-ENB nf Nh-hN. nf BBN n e Nh-PN-n IXn8B,)n9n)n )n)n)n|.n 9Xj/@>,VNhYN`NsN^NuNVBn:.EIBtPRn nfI* -EI* -EI* -EI* -EI* -Ez-E=| Bn=|BnBn <I* "NB=|N=|=|=|Bn=|z-E <I* "NB=|4=|=|=|Bn=|(mI* -E <I* "NB=|Bn=|BnBn <I* "NBN pL?09XnNAN^NuNV/-+NI (Gz+WBn:.IJ4PgRn`=yXn n d:.I0PN(z:. HEBEHE HEx0D8.I@Rnz:. HEx0D8.I@RnI TGzWBn:.I8.nGP@Rn:.IJ4Pg`N+_N^Nu OAbrpNGNuF'/NNn-/=-/H"Q ,IL?/^>/^Nf,oNsF'/NNn-/=-/H"Q G*- =/^Nf,oNs/NNn-/=/-/H _"h$",HL?/^>/^Nf,oNsF'SSfWWNsSf>NsSfF NsSfNqNsSf N0NsNhBBB 9X!B*H$C! `N <L? <NAN`WNsNVH(. ,. dF<gBEVBBGVB0G|b.f ؆dRE`kgb|HDkSEjؼdREBJfBEJEnB`|mpN(-D LN^Nu |oNNVH(. ,..HD:|glM||HF>|gXO||G|~mF H@HFB@H@2Ё"HAHFЁHD؀kSEؼdREJEk|m pN(B` -D LN^NuNVH(. ,..BGg^<BEgV<✚G|HF⌈0BDHD8 H@∀HDkSEؼdREJEk|m pN(B` -D LN^NuNVH .g*2<bH@|bQAU-@LN^NuNVH .j g` BA<☒|lB`|DAlpN(-@LN^NuNVHLHD6HFC[40<@g6@gBC?ckp@@t?0H@26HFЃ6HGHACBCHCуHD6CHABCHCу6HFЃ6҃т6HGBDHD҄т6҃т6HFBCHCCтHE6҃тHFHAFHABFHFцHGBEHE҅тPт6xz gRDCB詂[ f ԂӁрC c&JCk*H@@CH@Jgv-@-ALN^NuTOpr`pN(NVHLHD2AgHF0@grA@?kz2A[FDHFHDrva$$rvar փՂkN@k,փՂ`@އ݆\Þ[j ޅ݄JA]NuTtvH LN^NupN(|Նd @kr2~ BHBB@HBJgp``NVHp".gH4X-_ N^NuNV-n/./<@NX-_/.N*=E/.z:./NN>X-_B. n>e> n?@e/./X-_N|/X-_/./.NLX-_/XaX-_ N^NuNV-n:.E E?TDEJ.g/X-_*.g :. E=E-n N^NuNVps"9]FNBN^NuNV3Y3Y3 Y 3 Y$3Y&N^NuN RNVIY2* #]6IZ2* #]:I[2* #]>I\2* #]BIY* #]J#]6]N#]:]R#]>]V#]B]ZI]J* #]FN^NNVBy]^3 ]`:9]^y]`n:9]^(nJ4PfN,:9]^(nx4P:9]^EIY29PRy]^`?<?<?9]^Bg?.NBO 3Z23Z4N0N^NuNV?<r?<BgBg?. NBO (n* #]RN0#]:]RN^NuNV3Y2?< Bg?<Bg?. NBO N0=y[2 N^NuNV3Y2?<Bg?<Bg?. NBO N0=y[2 N^NuNV3Y23Y4?<'Bg?<Bg?.NBO N0(n 8[2(n8[4N^NuNV3Y2?<Bg?<Bg?. NBO N0=y[2 N^NuNV3Y2?<Bg?<Bg?. NBO N0=y[2 N^NuNV?<dBg?< Bg(n ?NBO By]f:9]f(nE89]fDGY27P@Ry]f y ]ffN0By]f:9]fEI[289]f&nD7P@Ry]f y-]ff3-]f:9]fE-EI\289]f&nD7P@Ry]f y9]ff(n 8Y&N^NuNV?<eBgBgBg?.NBO N0N^NuNV?<?<?<Bg?.NBO 3 Y2By]f:9]f(nE89]fDGZ27P@Ry]f y]ffN0N^NuNV?<BgBgBg?.NBO N0(n8[2(n8[4By]jz]jREEI\289]j&nD7P@Ry]j y]jf(n 8\2(n8\6(n9y\:(n9y\>N^NuNVI]89n9n 9n 9n <I]n* "NB3]]=y]N^NuNV3 ]3]N^NuNV3]3 ]3 ]3]N^NuNV3]3]3]3]3]3 ]3 ]3]N^NuNV(n8](n8](n 8](n8]N^NuNrNVI]B BBBBI]nG]* (G]* )EG]* )EG]* )E G]* )EG]* )EN^NNV?.?.?. ?. NpP3]U?<d?<?<BgBgN O =_N^NuNV?.?.?. ?. NpP3]U?<e?<?<BgBgN O 3]N^NuNV3]U?<f?<?<BgBgN O 3]N^NuNV3]U?<g?<?<BgBgN O 3]N^NuNV?.?.NXXU?<h?<?<BgBgN O 3](nHT(nHT(n HT(nHTNON^NuNV?.?.?.?. NpP3 ]3]U?<i?<?<BgBgN O 3]N^NuNV3]U?<k?<?<BgBgN O 3]N^NuNV?.?.?.?. NpP3 ]3]U?<H?<?<BgBgN O 3]N^NuNV?.?.?.?.?.?. ?. ?.NOU?<I?<?<BgBgN O 3]N^NuNV?.?.?.?.?.?. ?. ?.NOU?<J?<?<BgBgN O 3]N^NuNVU?<MBg?<BgBgN O =_(nHT(nHT(n HT(nHTNO=nN^NuNV3 ]#]U?<N?<?<?<BgN O 3]N^NuNV3](n* #]U?<4?<?<?<BgN O =_N^NuNV3Y2(n* #]R?<m?<?<Bg?.NBO I]( 3Y(3Y*(3Y,3Y.N0#]:]RN^NuNV?9]NTN^NuNVXUHntHnrHntHntNXO3]3r^Bnr:.rEI9PRnr n rf=|HnHy]HnvNO Jy]f,U?<?<3HyNP=_rBy^By^N:.vRE3^:.xRE3^Bg?<HnrHnpHnnHnlN~O3r^3p^ 3n^ 3l^3^ y^WD^?9]HntHntHnbHnrHn\NjO3r^:9^nb3^BgBN\By^By^By^B9^Y/]3<]3:]38]36]34]32]30]3.]3,]3*]3(]3"]3 ]#$]U?<?<?<?<BgN O =_(nHT(nHT(nHT(nHTNO(n 8](n8]=nDN^NuNVBn(n :8. Dcx` f (n8:.p (n T|N^NuRn nfB.N^NuNVUHyeHnaPJg.:.EIcIP( &n* )E:.E=EN^NuBnN^NuNVUHyeHnaJPJg*:.EIe4IP( )n:.E=EN^NuBnN^NuNVBnBnBnBnJyegRnJyegfTnBn:9e8. Dcx` g::.IdIP:,no=l:.l=E:.l=ERn nf yeghXn:9eg$Id=l=l=l=l =l :9eg(PnIe=l=l=l=l =l JyegnJyeg`Nn =|=|Bn:9e8. Dcx` gF:. IetIP:,H8,Hpڄ8.H6.Hp؃c =l=lRn nf:.H8.Hpڄ-EJnfN^NuU?.?.?.?.?.?.?.?.?.?.?.?.?.?.I* /?.?.HnHnHnHnHnHnN.O<=_JnfN^Nu:.EJEgPJyegHBn:9e8. Dcx` g :.EIcIP&l6/ &TN(_Rn nf:.EJEg Jyeg`NlBn:9e8. Dcx` gB:.IdIP&l 6&l6&l6&l6&l6/ &TN(_Rn nf:.EJEg::9eg.Id&l6&l6&l6&l6/ &TN(_:.EJEg::9eg.Ie&l6&l6&l6&l6/ &TN(_:.EJEg Jyeg`NrBn:9e8. Dcx` gH:.EIe4IP-lBn:.EG$n8.D5P@Rn nf/ &TN(_Rn nf:.E JEg Jyeg`NpBn:9e8. Dcx` gF:. IetIP*,b":,H8,Hpڄ)E/ &TN(_N *.؛Rn nfN^NuNNVByeBye3eByeByeN^N)NV(nBT(n Tb*(n:EIe84Pn f |N^Nu(nRT`B.N^NuNV=y^ =y^U?.BgBg?.?.NO (n8(nJT\D(n(nJg`NU?HRB.NP| NF| N<|N2|N(|NN (2B.J.gNU?9f$Hna\Jg8:.EIeH?9f$.?.?.?.?.(tPNO L N^NuN#NVByf>:9f>EIe9PRyf> yf>fU/<'If* /NP3f>Jyf>fpN(N^N* N)NVB9fAByf:9fEIfB9PRyf yffN^N,NV/.?. NA*-EN^NuNVY?<H/. a\(n(N^NuNVY?<I/.a\JWDE N^NuNVzffUHx@B'a^\JfpN((yf*.JgR-l &n-S*. g2&n*+f$n $$n$)n N^Nu-n-S`*c&n &*.۬N^Nu&n*+c:*+'E*.ګ$n $zc$n$)S N)n N^Nu-n-S*. g`J,g z&n &N/ pN((_N^NuNV(yf*.JgR&n -Szb&n$l&'n&l&z&n &N^NuNVzfgU/9fN*~XJNq/. HnN*`PJfB.N^Nu#f(yfzڮ)E*.ڮ ()l)l *,P)En&l& B|N^NuN*NVz#fN^N-TNVHxNHxNNX*Y/N IgR((=|:.SEEIgB/4P/4P/9g/9gN`P:.EIgBIP((Rn nfN^NuN,NVYBN LIg((YHxN LIg((YHx N LIg((a*YHx N LIg ((YHxdN LIg((YHx'N LIg((/9g/9g/9g/9gN PIg"((/9g&/9g"/9g&/9g"N PIg*((/9g./9g*/9g./9g*N PIg2((/9g6/9g2/9g6/9g2N PIg:((/9g>/9g:/9g>/9g:N PIgB((/9gF/9gB/9gF/9gBN PIgJ((#A f#; f#Bf#:of#F@f#8Qf#L f#6Ŭf#Zf#57f#tŮf#3VgBgN^NTNVBn:.J,1g6|Bl" l$lRl$N/ ?<BgBgBgBg&l8NO (_?.<a4Xn N^NuNV?. B'aX:. ,.fz.E9E*|.N ,.fz.E9E,|.?. <a XN^NuNVB9gU?:.&nsP ,.gLJng0/ ?.?<PHn?.?.aO (_Bn=l"=l$/ ?..aVX(_N . dLJng0/ ?.?<PHn?.?.aO (_Bn=l"=l$/ ?..aX(_N&l:,$P8,"GP@:.GPRn:.GB3P/ U?.aT(_Jg0/ ?.?<PHn?.?.a2O (_Bn=l"=l$Rn`Jng / ?.?<PHn?.?.aO (_gN^NuNVN^NuNVU?.Hna\Jg`N:.Jlf*/ ?..?.?. ?. ?.&l4NO (_N&Sl/ ?.?,?,?,?,aO (_/ ?.aT(_N:,Hŋi=EzPnlf*/ ?..?.?. ?. ?.&l4NO (_N&Rl/ ?.?,?,?,?,azO (_/ ?.aT(_N\/ ?.?<?.?. ?. ?.NO (_:,yiSEHŋixPE:.Hŋ Hĉd9D/ ?.?,?,?,?,aO (_N/ ?.?< ?.?. ?. ?.NO (_:,yiSEHŋixE:.Hŋ Hĉd9D/ ?.?,?,?,?,a|O (_Nl/ ?.?.?. ?. ?.HnN&.O(_J.g`N/ ?.?<HlHlHlHlN~O(_/ ?.?<HlHlHlHlN~O(_:,Hŋi=Eznll zn9E:,Hŋi=EzPnll zPn9EN/ ?.?.?. ?. ?.HnN&.O(_/ ?.?<HlHlHlHlN~O(_/ ?.?<HlHlHlHlN~O(_N(N$ 8|<l\*N^NuNV?.aTN^NuNVBn:.?.BgHyXN%PN&N" .F^vN^NupN@NVBnHn?<:9i E?:9i E??<,?<Z?<HyXNAOJ9ggJRyi?./<UNDB\Bn?.?<HHyXNIP?.NHTRn nfRn nf^N^NuNU`pN@NVUHx@<N,\JfpN(ByiNVN Jyig`NNURN^Nu Marathon Demo Program At Marathon Computer Press, We Go The Distance For Creative Computing!<@ *lD P2         (           ** D 8D&"2         "            (    &     "     . . &     " 0       B& j6@  @ $$$ $ 2 R : :Z N ".N$< *6,6*>B&" 0@"$ : ,        dP L         D.,,<:4  :N^4  : P02   J4       & F  ,,  4|r $d(>&& 0X "4 <"(< x2* |(2(8,p J(|( ^ ^2&&>&&\ &   6   & BInput "File To Convert To Data Statements";I_file$ Print Input "OutPut File ";O_file$ Print ' ' If Instr(O_file$,".")=0 Then O_file$=O_file$+".LST" Endif ' ' Open "R",#1,I_file$,1 Open "O",#2,O_file$ ' Field #1,1 As F1$ ' Max_dt%=28 Dt%=Max_dt% ' Print At(1,10);"Working on byte "; Print At(30,10);"/ ";Lof(#1) While Loc(#1)=Max_dt% Then If Loc(#1)>1 Then Print #2 Endif Print #2,"DATA "; Dt%=0 Print #2,Str$(Asc(F1$)); Dt%=Dt%+1 Else If (Dt%0) Then Print #2,","; Endif Print #2,Str$(Asc(F1$)); Dt%=Dt%+1 Endif ' Wend ' Print #2 Print #2,"REM Total bytes in data statements = ";Lof(#1) Close #1 Close #2 ' End ' Determine_drive will return two values for you: ' In Currdriv% you will get a number from 0 to 15 for the currently ' logged on drive. And in Currdriv$ you will get the Ascii representation ' of that drive. Remember that GFA Basic requires you to increase the ' number of the Gemdos identifier for a drive when setting a drive to ' active status. A call such as Chdrive 0 will crash the system. To ' use the procedure use Currdriv%+1. If you are changing to drive B, ' use Chdrive 2. But keep in mind that Currdriv% returns the Gemdos ' value which is 1 less than what GFA Basic uses. ' GFA Basic Gemdos ' Drive A 1 0 ' Drive B 2 1 ' Drive C 3 2 ' etc. ' ' ' Ref 2 Pg. 111 ' Procedure Determine_drive Currdriv%=Gemdos(&H19) Currdriv$=Chr$(Asc("A")+Currdriv%) Return ' This is a Public Domain snip of source Code that is the starter for a Copy ' Utility ' Have fun with it. Downloaded from GEnie Procedure Copy(Source$,Dest$) ' By Boyd Roberson II Local Lf%,File$ Open "I",#1,Source$ Open "O",#2,Dest$ Lf%=Lof(#1) If Lf%>32000 Then Print "File to Large" Goto Copy_exit Endif File$=String$(Lof(#1)," ") Bget #1,Varptr(File$),Lf% Bput #2,Varptr(File$),Lf% Close #1 Close #2 Copy_exit: Return !' This procedure will write a specified string out to the console ' String used here is Temp$, please note that the string is padded with ' a null byte to prevent crashes! ' Ref 2 pg 109, represented there as Gemdos &H09 Print Line ' ' Here's a sample Temp$="Hi I've been printed to the console" ' @Cconws(Temp$) ' Procedure Cconws(Temp$) Temp$=Temp$+Chr$(0) ! Must always be null-terminated Void Gemdos(9,L:Varptr(Temp$)) Return @' This procedure asks GEMDOS to read a string of a specified length directly ' from the keyboard. Temp$ is the value returned, and Num% is the length of ' the string. ' Ref 2 pg. 111 depicted there as Conout Stat ' Print "Type in the word hello > "; @Cconrs(5,*Temp$) Print Print "Here's a five letter word returned from Cconrs => "; Print Temp$ ' Procedure Cconrs(Num%,Ret_word%) ' ' Junk variables are kept to a local status. ' You should not use them anywhere else in a program ' once you have assigned Local status to them. ' Local Junk$,Junk% Junk$=Chr$(Num%)+String$(Num%+2,0) Junk%=Gemdos(10,L:Varptr(Junk$)) *Ret_word%=Mid$(Junk$,3,Asc(Mid$(Junk$,2))) Return <' C_prnos will check the status of the Printer Port to see if a printer is ' on line. Temp% is the varible that the value is returned in. ' If Temp%=-1 then ready | If Temp%=0 not ready ' Ref 2 pg. 111 shown as Prtout Stat ' Procedure C_prnos Temp%=Gemdos(&H11) Return ' This is the appl_exit used by Gem Programs to properly exit to the desktop ' Unless you are doing some special programming, the interpreter/compiler will ' take care of this for you. ' Ref 3 Pgs. 107,157-159,161,264 ' Procedure Appl_exit Gemsys 19 Return