OeN'p N ON \:Ao   ! #@%`')+-/1 3@5`79;?A C@E`GIKM<QS@U`WY[]_a c@e`gikmoqs@u`wy{} @` @ ` @ ` p @ ` p ` ɰ @ ` ׀ ٠  @` @ Aa   !Aa!!#A%a')+-/a1!3A5a79?A!CAEGIKMOQ!SAUaWY[]:Ao   ! #@%`')+-/1 3@5`79;?A C@E`GIKM<QS@U`WY[]_a c@e`gikmoqs@u`wy{} @` @ ` @ ` p @ ` p ` ɰ @ ` ׀ ٠  @` @ Aa   !Aa!!#A%a')+-/a1!3A5a79?A!CAEGIKMOQ!SAUaWY[]DEMOSDEMOS  xt FASTBAS PRG t BSPEECH FST t DESKTOP INF t README 2 ct SEST DAT ot BROG1 BSC t CESKTOP INF 5 .  y t..  y tROLLER BSC Vt \LOADEGASASC t ^ WISHWASHBSC Yt ENCH3 BSC t ENCH4 BSC t ENCH5 BSC t "ENCH6 BSC t nENCH7 BSC t ENCH8 BSC t BEZIER BSC t BLITDEMOBSC t  RAGDEMOBSC t ~GEMDEMO BSC t ICONED BSC t =JAKEPMPLBSC t O MONATW NEO t R}NEOPROCSBSC t rkUTLINE BSC t PLANTBEEANM t "}OLLER BSC t \CRNANIMBSC t \SHADE BSC t HOWPMPLBSC t SIEVE BSC t PINNY BSC t J ISHWASHBSC t BARWORKSBSC t x RACTAL BSC t LANDSCRLBSC q t *`FILLDEMOBSC t NPJ   {ϐmӐܐ0J Screen Roller (Monochrome version)0J Jeremy RustonCODEl(PASSp(ZpCODE  "GPASSl*L-" BufferB0RollItBbjlG$GBuffer(ZflG $GblG@RollIt2BGlG GGlRollIt2 BbjlG (AbdzfxlG(PRollIt3BGlG GGlRollIt3 $GBuffer(ZflG$GblG`RollIt4BGlG GGlRollIt4 G pSpinItBbjlG(Abdz(fxlG(SpinIt2AblG GGlSpinIt2 G     4  0RollItpSpinItlLllLllLllLllLllLllLllLllLllLllLllLllLll(p| &Lp &Dl&l&4P&Ll&Dz(l&z(l&z(4   VEditPattern>xm%lym%lbut%lkey%>(J PrepareNPJ  (2<@r@ToLPx  '/%PPD*J Wishy-washy lo-res patterns*J Jeremy Ruston(vDLResetCols("ll@l""ll@l"&Hl(&Hpd&Hvfh,(jp&H 8 np&H 4 &Lp "&Ll&Ll&Ll"(x&Ll&Ll&Ll(  VMakeMasksVAssembleJ&,prJ The lengths of the trails (should always be odd)J.X%(&,flY%(&,f.&4p &Lp&, X%(&LfpY%(&Lfp   6  "&\l&`l&l&("&j 4  "&\l&`l&l&("@&h@VDoPixeld&\l&`f@&p  6 ResetCols"lll""lll"    (VDoPixeld&\l&`f(&l&&pX%(&4f&pY%(&4f4VPlotd&l&lSubBlockf4:VPlotd?x&l&lSubBlockf::VPlotd&lx&lSubBlockf:@VPlotd?x&lx&lSubBlockf@X%(&4fp&\Y%(&4fp&`4VPlotd&\l&`lAddBlockf4:VPlotd?x&\l&`lAddBlockf::VPlotd&\lx&`lAddBlockf:@VPlotd?x&\lx&`lAddBlockf@&4p&4v*&4t&,@&4p*  ,VPlotd&\l&`l&Df,"&l&l&l& "bd&\nffd(\t?ffd&`nffd&`tf@b&p :d&`v fr@&px&`:<&pjvd&`zfvdd&\|fzf<4& pLeft&(&\hlf4Gp&Gp&G p& &D,&\rd@xf@,&p&v6& pMiddle&(&\hlf6Gp&Gp&G p& &D,&\rd@x f@,&p&v4& pRight&(&\hlf4Gp&Gp&G p& &D  VAssemble&CodelPass&Codel(Passp(ZpCode  $GPassl*L-W-$.J" Add D0.w to the four words at A0.AddWordAGlGAWGlGAGlGAGlGAWGlGAGlGAGlGAWGlGAGlGAGlG G ,J Add the D7 words at A1 to the,.J" screen words at A0 and downwards.AddBlock1AGlGC\AddWordAUbxlGAddBlock2"GGlAddBlock1" G AddBlockAGlGCmAddBlock2*J Subtract D0.w from the four*J words at A0SubWordAGlGAWGlGAGlGAWGlGAGlGAWGlGAGlG G .J" Subtract the D7 words at A1 from.$J the screen words at A0$J and downwardsSubBlock1AGlGC\SubWordAUbxlGSubBlock2"GGlSubBlock1" G SubBlockAGlGCmSubBlock2  Pass  VMakeMasks"&Ll&,l&Dl&("`Left&(lflMiddle&(lflRight&(lf` &Lp &, &Dp 8Left&(&Dl&Lfp&,^dv&Df80Middle&(&Dl&Lfp&,^&D08Right&(&Dl&Lfp&,\dx&Df8   L0L0L0L0L0L0L0L0?L0?L0L0L0L0L0L0L0L0L0L8L0L0L0L0L0?L0?L0L0L0L0L0L0L0  "BUFF&(fp""BUFF&(fp""BUFF&(fp""BUFF&( fp"*J Set up the double buffering*jpSCR%&HpJ Do the animation  &Dp *npDBUF%(&Hdf*"&\l&`l&l&("*&(pd&\|0f* X  jpDBUF%(&Hf &Hp&Hd&SCRN&(fpj^& SCRN&(fpj (&p+BASE%(&D^f((BUFF&(fp&^("BUFF&(fp&"B&Dh@&\pB&\pBB&Dh@&`pdB&`pBdBUFF&(fl&\l&`lldlSCRN&(flPl2ld    `*O*m - ЭЭ,@// Bg?<JNA Jk M-MC-MBJNLN0NNNo=| LNJfNJfBn6Bn6B7NVNNtNu(0< N̒NJJnCZgAC`-H,8=n0+80<#N̒N"< <NJgN-H4-H4NvN~NN8NtNN NJlNiNo&Bn7JnCZfJnCfNNHNNJ*NJBn#<0H@ =@#>@ =@#B=|#@ .Ю-@#D -@#H0<=Np>NuA7CJ0< QNuLnn4<6< ?H+Nu@ P  T@d@Uk5*_ ___j7+x p  ?a0 @@ 0a Atari ST Fast Basic Computer Concepts 1986Written By:Jeremy RustonPhilip MartinGavin TheobaldVersion Number: 1.05c RM.R Sherdley-Davies  02 46@ N f ~   {  "$&,. &%x7'6&H(8*G,.467YIXH@jXZZi\^dfY { k z   j p |   { &Z-HJgB@BABBJg6 [fRAR@ ]fSA |fRB|g |fPNu|nJAfJ@g|nJ7f/< ?<HNA\JfpNu-@7 n70<r:< n^0$n:<1A!|1|1EBB BBhRAQ n7C0|g 21`0<1|. n0$n 0< 1| .1n0"1n0",1n0 1n0$!n0"2<F4<1Q"n n7-H7"n$n7 [g JfPNuRJfPNu ]g`B%n7D-H7$n7`&n7BG [g Jf`` n7R ]g$ \g |g`B%n7 `B<F '7`G-H7 ]f`AR"n7#H\A[#HT"n780<a><0<?a>Q"n7H0<$i gBAJgPA`3AQ"n7$IHB@2<i3@5@Q n7h1@D1hL41h$ 1h1hT<1h1hl1h  1h 0<"n7 a><"n70<?a>Q"n70)bh24<@3AQ"n7H0<J f Q n74<2.0"A0(h@l 6h1CQ n7h0<BhQ-n7,8=|+8pN̒B@Nu$I8< n^0$l8<BEJ g5EDQ3ENuBB$I2BC&i gBDJgPD`Dn6Q5CQNu- Desk J7g/.7?<INA\A-H,8Bn+8pN̒B@NuPCx~AO>pQNuAAxCO>p~QNuHaAO>CgJ)LNu?B.O>B.OXBnNApJ.O>gpra>J.O>gJ.OXga:a^f?/<?.O?<@NAO JkAO>C~pQBg?.O/<?<BNAO Jk^aHyx/<?.O?<@NAO Jk:?.O?<>NAXJk(Nu?<Hzv?<=NAP|g Jk=@ONu=|+8p5N̒`A=|+8-H,8p4N̒`[2][ | Please insert| master disc.][ OK ]FASTBAS.PRGFast BASIC PersonaliserPlease enter your name:_Xand serial number:_NThankyou[3][ | Quitting Fast BASIC. | Bad serial number.][ Sorry ]     `"     `a N0.NŒ=@HaJ@j0.HN*=@-n<8Bnv=|VNpNNNNa DN0.NŒ=@HaJ@j8 nJ@k =@H-H.VnjGl-H6-H6=@6=@6NbBn6 n60.6N|NpON̒..?g\NN-H6=@6N||f N`|fNê n60.62.6NN=A6`=|+8pkN̒NNuLJnhgL^H6N-n<6Bn6-n<6Bn6Nb n<0<BANpNNNNLJnhgL^H6NNpNNN`NNNNJAfTnVmL4.jnVBl>NpN-H<=@NNNBnpNNN%NuN,6nf n6l6mDf n6m8JAg$n68.6-H6=@6&H:`$H8&n6:.6-H6=@6`JAg$H8&n6:.6`2<$H8&n6:.6-n66=n66-H6=@6`BJAg($n68.6&H:BA-n66=n66-H6=@6`$n68.6&H:-H6=@6Nr`H n8BB"HB6)õl$m2<B@f0f2N I@lRB6RCr<.6FoLNuHnVl0.V6.VnjCm2Al0:<L6rB>nVtG4Et6.rNfLNu/ .N-@6Bn6nN6 .R-@6Bn6nR6 Nu-n6Nn6N-n6Rn6RNuH=@-H xHbQH($@$  IH$D$D" ȁ4ځ?AJ Bezier curvesJ Jeremy Ruston0J Get the coordinates of four points0.X&(flY&(f. &Lp  <bX&(&LflxY&(&Lfl&l&(<&j@&LvlbX&(flxY&(f@  $&\l&`l&l&($&p  8lbX&(flxY&(f8*J Draw several similar curves*,(p~,*J Compute the Bezier constants*@CXpdbX&(fxbX&(ffz(@PBXpddbX&(fxbX&(ffz(fxCXPRAXpbX&(fxdbX&(fvCXvBXfR@CYpdxY&(fxxY&(ffz(@PBYpddxY&(fxxY&(ffz(fxCYPRAYpxY&(fxdxY&(fvCYvBYfRJ Draw the curve$LX%pbX&(f$$LY%pxY&(f$.(Lpoz.t&\pdAXzd(L~ffvdBXzd(L~ffvdCXz(LfvbX&(ftt&`pdAYzd(L~ffvdBYzd(L~ffvdCYz(LfvxY&(ft2LX%lLY%&\l&`2LX%p&\LY%p&`    \NPJ  (2<26x   ????xH2 Reserve two screens and copy main screen to each>Tlll BASE%(f &Lp &l8BASE%(&Lfpd&vfh,8 jpBASE%(&Lf Vll  (H Initialise the screen MFDB( SCRN&( f SCRN&(fp SCRN&(fp &SCRN&(fp^&"SCRN&(fp""SCRN&(fp""SCRN&(fp""SCRN&(fp""SCRN&( fp"(H Initialise the buffer MFDB( BUFF&( f (BUFF&(fp&H^("BUFF&(fp&H" BUFF&(fp BUFF&(fp &BUFF&(fp^&"BUFF&(fp""BUFF&(fp""BUFF&(fp""BUFF&(fp""BUFF&( fp"H Do the animation&Xp  *&`p@@**&\p@* jpBASE%(&Xf 8SCRN&(fpBASE%(&Xf^82SCRN&(fpBASE%(&Xf2&Xp&Xd npBASE%(&Xf 6&0psGH%x@@66&,pstGW%x@@6|BUFF&(fl&\l&`l@l@lSCRN&(fls\GX%v&,lshGY%v&0l|       y6f0.6NŒ86f0.6NŒ64KxCl 6lb 5 gRB` 6lF6lB>+`-I6B@=_lNRNuA<-H,8=|+8p4N̒0<`AP-H,8=|+8p4N̒N<`[3][Insufficient memory for|a clipboard.][ OK ][3][The section is too big|to fit in the clipboard.][ OK ]N`0NNNbJEfJNgPKN, n6N0.6NŒ8A1fCxB@Dl R@` n6N0.6NŒ:=DHAxC1f  fP 0 PgRE` n6"n6B0)@l`-H@-n6  f BnlN%Jn7 f nJ0 (2 Button) Mask of which buttons must be used>LFJ8 (3 Button) The up/down state required for the buttonsFLTJF (4 Mouse 1) This is a flag which is zero if we want to be told whenTPJB the mouse enters the rectangle defined in the next four entries,PPJB or one if we want to be told when the mouse leaves the rectanglePLRJD (5 Mouse 1) The X coordinate of the rectangle (relative to screen)RLRJD (6 Mouse 1) The Y coordinate of the rectangle (relative to screen)RL6J( (7 Mouse 1) The width of the rectangle6L8J* (8 Mouse 1) The height of the rectangle8L>J0 (9 Mouse 2) Flag for within/outside rectangle>L>J0 (10 Mouse 2) The X coordinate of the rectangle>L>J0 (11 Mouse 2) The Y coordinate of the rectangle>L8J* (12 Mouse 2) The width of the rectangle8L8J* (13 Mouse 2) The height of the rectangle8LTJF (14 Timer) The low word of the time in milliseconds for GEM to waitT.J before giving us a timer event.L4J& (15 Timer) High word of timer value4LNJ@ The remaining parameters are used by GEM for returning values:NVJH (16) A mask of which events GEM detected. The bit assignments are theVBJ4 same as those given above for the first parameterBVJH (17) The X coordinate of the mouse when the event occured (relative toV,J the top left of the screen),VJH (18) The Y coordinate of the mouse when the event occured (relative toV,J the top left of the screen),TJ (19) A mask of the state of the mouse buttons when the event occuredTVJH (20) A mask of the state of the keyboard modifier keys when the eventVPJB occured (the bit format is the same as for the MOUSE statement)PPJB (21) For keypress events, the lower byte contains the ASCII codeP8J* and the high byte contains the scan-code8VJH (22) For button events, contains the number of times the desired stateV<J. was entered in the time limit set by DCLICK<NJ@ Set up the menu bar and associated background bits and piecesN@J2 Get the complete menu description into a string@RJD Note the use of A$ to get the command key symbol into the stringsR A$p>df *:M$p*[ About Jeremy ]*DM$pM$v*[ File | Open \ Close \ Quit ]Dv:M$p:M$v*[ Screen | Normal vA$v*N \ Inverted vA$v*I \ Options ]vT:M$p:M$v*[ Goodies | Nothing of interest \ File length ]T:M$p:M$v*[ Pattern | White \ Very light \ Less light \ Slightly darker \ Medium \ Less medium \ Dark \ Pitch dark ]TJF Tell GEM to install our menu, replacing the standard Fast BASIC menuTRJD (Fast BASIC automatically reinstalls its own menu when the programR8J* stops and control returns to the editor)8PJB The BEGINUPDATE/ENDUPDATE pair is to ensure that the user is notPTJF currently interacting with an existing menu (which can happen - tryTTJF removing these the update calls, then attempting to run the programT>J0 and then VERY quickly move onto a menu title)> < :M$ > 8J* Disable the Close item in the File menu8LlJJ< Put a checkmark against the Normal item in the Screen menuJJ'l>J0 Make sure the screen palette is set to normal>$Plll$$Plll$PJB Indicate which message is currently being displayed as the itemP$J in the Goodies menu$ MessFlagp PJB Indicate which item from the Pattern menu is currently selectedPNJ@ by setting up the variable PatternItem and placing a checkmarkNRJD against the relevent menu item. Note that the pattern is not setR*J up until a bit further on*"PatternItempJ"&JPatternIteml&NJ@ Get the screen width and height into more accessible variablesNSWp SHpBJ4 Get the coordinates of the desktop into variablesBJJ< (The desktop is treated as a window with a handle of zero)JBbl,XDl8YDlDWDlPHDB  @J2 Get the coordinates of the centre of the desktop@6\CXp,XDvdDWD|f66hCYp8YDvdPHD|f6"J Set up our window"RJD Create our window and store its handle away - note that this doesRTJF not actually display our window; we have to do an OPENWIND for thatTJ to happenTJF (The first parameter specifies what kind of window is wanted; a setT>J0 bit indicates a particular thing is required:>,J Bit 0 - Title bar with name,"J Bit 1 - Close box" J Bit 2 - Full box JJ< Bit 3 - Move box (actually, this is the title bar as well)J(J Bit 4 - Information line( J Bit 5 - Size box J Bit 6 - Up arrow "J Bit 7 - Down arrow"(J Bit 8 - Vertical slider("J Bit 9 - Left arrow"$J Bit 10 - Right arrow$*J Bit 11 - Horizontal slider*TJF The last four parameters give the coordinates of the outside of the T0J" window when it has been 'fulled'0RxMyWindp.?l,XDl8YDlDWDlPHDfRRJD Clear a flag to indicate that our window is not open at the momentR"MyWindFlagp"RJD Set up the last coordinates for our window; the program is set upRNJ@ so that these variables will be used as the coordinates of theNHJ: outside of our window whenever it is opened or re-openedH*LastXpDWDz}**LastYpPHDz}*.LastWidthpDWDz.0LastHeightpPHDz0&J Set our windows title&RJD (Note that SETWINDTITLE requires the title to be specified as theRRJD address of a null terminated string. This is because GEM does notRNJ@ make a copy of the title string; it just looks at our variableNVJH whenever it needs reminding, so we must put the title somewhere whereV<J. we can guarentee it won't be tampered with)<$MyTitle%ld$0MyTitle%p*Demonstration0.^xMyWindlMyTitle%.0J" Set up windows information line0RJD In this example, the info line scrolls across in response to timerRTJF messages from GEM. To do this, we give GEM an 80 character 'slice'TVJH out of the string InfoMess$. At each timer event, the starting pointVTJF of the slice is moved right by one character. Note that the stringTTJF is duplicated into itself. This is to ensure that from any point inTVJH the main string, there are always at least 80 characters available toVJ the rightRVInfoMess$p*This is a demonstration of the easy parts of GEM. R0InfoLenpdVInfoMess$f0PVInfoMess$pVInfoMess$vVInfoMess$vVInfoMess$PPJB The info line is initialised to a null string. This means thatPRJD no text will appear in it until a timer message occurs, but seeingRTJF though the window will probably be closed until long after the firstT:J, timer message, it actually doesn't matter:"hMyInfo%ld""hMyInfo%p*",`xMyWindlhMyInfo%,NJ@ This variable is the current starting point within the stringN InfoStartp TJF Set up a new desktop pattern which replaces Fast BASICs icons. FastTFJ8 BASIC will redraw its icons when the program finishesFTJF The pattern is specified as a very simple object tree, with a singleTFJ8 member of type G_BOX, stored in the array DeskObjTreeF(DeskObjTree&( f(8J* Initialise the tree from DATA statements8$NKDeskData$"&Lp "(DeskObjTree&(&Lf(  RJD Tell GEM to use the new object tree as the desktop. This is doneRNJ@ by passing the address of the new object tree, and telling GEMNRJD which element of the tree to consider as the first or root elementR0vDeskObjTree&(fl06 DeskDataPJB This data defines a single object; all the other objects you canPJJ< put in object trees bear a strong resemblence to this oneJRJD The first item is the index of this object's next sibling (in thisRBJ4 case, it doesn't have any siblings, so -1 is used)BLxTJF The index of the first child of this object (again, -1 in this case)TLxFJ8 The index of the last child of this object (still -1)FLxRJD The type of object being defined. 20 specifies a G_BOX or graphicRJ boxL>J0 These are flags which are not used for G_BOXes>LRJD This item is a word describing the state of this object, which isR*J also not used for G_BOXes*LRJD This item is the high word of the 'ob_spec' field (as it is calledRVJH in the official GEM AES documentation). It gives special informationVTJF which is different for each type of object. In the case of G_BOXes,TVJH the high word contains a number from 0 to 255 indicating the thicknessVVJH of the border of the box. Zero indicates that we don't want a borderV$J drawn around the box$LTJF The low word of the ob_spec field specifies the colour and shade ofT@J2 the box, by splitting it up into separate bits:@RJD Bits 15 to 12 - Give the border colour (not used in this example)RNJ@ Bits 11 to 8 - Give the text colour (not used in this example)NNJ@ Bit 7 - If set, text is written using replace mode, otherwiseNPJB transparent mode is used (like TXTMODE and GRAFMODE) (not used)PVJH Bits 6 to 4 - Specify the dithering pattern to be used for filling theVJ boxHJ: Bits 3 to - Specify the colour of the inside of the boxHL.NJ@ The last four elements give the coordinates of the box. For aN@J2 desktop, the coordinates of the desktop are used@L ,XDL 8YDL DWDL PHDPJB Redraw the visible parts of the desktop, using our newly set upPJ patternPVReDrawdl,XDl8YDlDWDlPHDfP:J, Prepare the Options menu item dialogue box:&rMyTedText%l&.rMyTedText%p*Press me."MyTed&( f"$NVMyTedData$"&Lp ""MyTed&(&Lf"  6 MyTedDataTLFrMyTedText%^lrMyTedText%llllT^LPlll.llxldrMyTedText%fvl^.OptionsTree&(l f.&NXNOptionsData&"& p""&Lp ".OptionsTree&(& l&Lf.   6 OptionsDataXLJxlllllll.ldl2lldXLvlxlxllllMyTed&(f^lMyTed&(flFllxl(0OptionsTree&(lf0  JJ> This procedure will wait for an event and then deal with itJ VDealWithEvent &XTJF Wait until GEM tells us about one of the events we're interested in.TVJH The parameters are the address of a 23 word block of memory which hasVTJF been set up to contain the parameters required for the call, and theTRJD address of a 16 word buffer where GEM can deposit the messages itRRJD wants to send us with. In this example, both buffers are actuallyRJ word arraysBRMyParams&(flMyMess&(fB>J0 Tell GEM we want to start updating the screen> < 4J& Get the mask of which events occured4(&XpRMyParams&(f(*J Check for a keyboard event*$&Xh@_$DJ6 Decide what to do based on the scan code of the keyD4RMyParams&(f^4<J. If its Alt-N, simulate the Normal menu item<T.1&VSimMenudl'f&>J0 If its Alt-I, simulate the Inverted menu item>T.&VSimMenudl(f&@J2 If its cursor left, decrease the desktop pattern@T.K`PatternItemtI@VSimMenudlPatternItemxf`BJ4 If its cursor right, increase the desktop patternBT.M`PatternItemnP@VSimMenudlPatternItemvf`    (J Check for a button event($&Xh@c.$0J" Get the coordinates of the mouse0(&\pRMyParams&(f((&`pRMyParams&(f(&J Draw an expanding box& l lll H&\l&`lll&\xdl&`xdllH"J Invert a rectangle"<~&\xdl&`xdl&\vdl&`vd<2J$ Wait until the button is released2  0\XT%lhYT%l&l&(0&p$J Remove the rectangle$<~&\xdl&`xdl&\vdl&`vd<"J Draw shrinking box"H&\xdl&`xdlll&\l&`llHJ Reset GRAFMODE  *J Check for a mouse 1 event*$&Xh@c$  *J Check for a mouse 2 event*$&Xh@c$  *J Check for a message event*$&Xh@d$DJ6 Call PROCMessage to decode and act upon the messageDVhMessage  (J Check for a timer event($&Xh @f$RJD Increment the info line string start marker, checking for the endRJ of the string2InfoStartpInfoStartv2NInfoStarttInfoLen@eInfoStartpN0J" Submit the new info line to GEM0JhMyInfo%pVInfoMess$lInfoStartlPfJ,`xMyWindlhMyInfo%,  <J. Tell GEM we've finished updating the screen< >   PJD This procedure cleans up our window before returning to the editorPVCleanUp8J* Close our window if it is currently open8<MyWindFlag@gFMyWind<"J Delete our window"HxMyWind   NJB This procedure decodes and acts upon messages received from GEMNVMessage"&\l&`l&Xl&"TJF Decide what to do based upon the message ID number, which GEM passesT>J0 to us in the first word of the message buffer>,RvjMyMess&(f,RJD Check for a menu selected event. GEM sends messages of this typeR6J( whenever the user selects a menu item6Tl. NJ@ Call PROCMenu to deal with the menu selection. The parametersNLJ> are the index number of the title of the menu from which theLPJB selection was made (taken from MyMess&(3)) and the index numberP@J2 of the menu item itself (taken from MyMess&(4))@HVxMenudMyMess&(flMyMess&(ffHLJ> Check for a redraw message. GEM sends messages of this typeL>J0 whenever part of a window needs to be redrawn>TnPJB Call PROCReDraw, passing it the handle of the window that needsPPJB to be redrawn and the coordinates of the rectangle enclosing theP.J part that needs to be redrawn.VReDrawdMyMess&(flMyMess&(flMyMess&(flMyMess&(flMyMess&(ffVJH Check for a topped message. GEM sends messages of this type when theVPJB the user clicks on an inactive window, telling you that the userPBJ4 wishes to move that window to the top of the pileBTo@J2 Move the requested window to the top of the pile@$ppMyMess&(f$TJF Check for a window closed message. GEM sends messages of this typeTJJ< when the user clicks in the close box of the active windowJTqLJ> If the window in question is our window, close it by callingL"J PROCCloseMyWindow"RMyMess&(fpxMyWind@VPCloseMyWindowRTJF Check for a window fulled message. GEM sends messages of this typeTJJ< when the user clicks in the full box of the active windowJTrLNJ@ Call PROCFullWindow with the handle of the window to be fulledN6VFullWindowdMyMess&(ff6PJB Check for a window resized message. GEM sends messages of thisPJJ< type when the user drags the size box of the active windowJTu PJB Ensure that the new size is at least 50 pixels in each directionPPMyMess&(fn2@MyMess&(fp2PPMyMess&(fn2@MyMess&(fp2PLJ> Set new coordinates of the window. If this makes the windowLNJ@ larger than it was before, GEM will send you a redraw messageNJ later onfMyMess&(flMyMess&(flMyMess&(flMyMess&(flMyMess&(fRJD Check for a window moved message. GEM sends messages of this typeRFJ8 when the user drags the title bar of the active windowFTRJD Set the new window coordinates. We could check here to make sureRLJ> that the new position is acceptable. For example, you couldLPJB ensure that no window is moved partially off the screen, as FastP8J* BASIC itself does with the Output window8fMyMess&(flMyMess&(flMyMess&(flMyMess&(flMyMess&(f    NJB This procedure can be used to simulate the selection of a givenNJ menu item8VSimMenudTitlelItemf8&J Invert the menu title & NTitlel "J Deal with the menu"4VMenudTitlelItemf4  <J0 This procedure deals with menu selected events<6VMenudBTitlelPItemf6(&Ll&\l&`l&Xl&(@J2 Decide what to based on which item was selected@"RyPItem",J Check for the Open menu item,T|>J0 Draw a growing box out to the windows position>LastXvdLastWidth|flLastYvdLastHeight|flllLastXlLastYlLastWidthlLastHeightLJ> Open our window, using the last recorded coordinates as itsL$J outside coordinates$^xMyWindlLastXlLastYlLastWidthlLastHeight^DJ6 Set the flag to indicate that the window is now openD"MyWindFlagp"*J Disable the Open menu item*Ll*J Enable the Close menu item*Ll.J Check for the Close menu item.T}&:J, Call PROCCloseMyWindow to close our window:VCloseMyWindow,J Check for the Quit menu item,T~2J$ Check to see if the window is open2(MyWindFlag@~( J Display an alert X&Lp*[3][You can't quit while the|window is still open!][Shucks]lfXB~^"J Set the Quit flag"4Quitp  .J Check for the Normal menu item.T'@J2 Remove the checkmark from the Inverted menu item@J(l8J* Draw a checkmark by the Normal menu item8J'l*J Set the palette to normal*$Plll$$Plll$0J" Check for the Inverted menu item0TN(:J, Draw a checkmark by the Inverted menu item:J(l>J0 Remove the checkmark from the Normal menu item>J'l"J Invert the palette"$Plll$$Plll$0J" Check for the Options menu item0T)2J$ Go and deal with the dialogue box2VOptions6J( Check for the item in the Goodies menu6T|8JJ< Change the menu item text according to the current settingJ&MessFlag@&,P8l* Nothing of interest ,B,P8l* Really awfully dull ,  0J" Toggle the current setting flag00MessFlagpMessFlag0>J0 Check for File length item in the Goodies menu>T9VFileLength.J Check for the About menu item.T DJ6 Draw and then erase a moire pattern over the desktopDNJ@ Note (1) that the mouse has been hidden to speed things up andNPJB to prevent it from flickering and (2) that the GRAFMODE is resetPLJ> to 1 after drawing the pattern the second time. This is toLPJB maintain the programs internal defaults. Finally, note (3) thatPPJB the drawing code is bracketted by a BEGINUPDATE/ENDUPDATE pair.PNJ@ This is to inform GEM that we wish to update the screen. GEMNJJ< will hold up the BEGINUPDATE until it is safe for us startJPJB drawing. It is instructive to comment out both statements, justPLJ> to see what the effect is, especially with some active deskL$J accessories around.$ < <XDlYDlWDlHD< 4 "&Lp".&\pWDx.J&\ldWDxfx&\lHDxJ  .&`pHDx.Jl&`WDxldHDxfx&`J   6  >  TJF Check for one of the items from the pattern menu. This couldn't beTVJH done in the main SWITCH statement, because we wish to check for rangeV2J$ of menu item numbers all in one go2HdPItemrIfhdPItemlPf@rHHJ: Remove the checkmark from the currently selected choiceH&JPatternIteml&HJ: Change the desktop object tree to reflect the new choiceHtDeskObjTree&(fpdDeskObjTree&(fh.ffddPItemxIf\ft8J* Draw a checkmark against the new choice8 JPIteml (J Set the PatternItem flag(*PatternItempPItem*8J* Redraw the visible parts of the desktop8PVReDrawdl,XDl8YDlDWDlPHDfP  :J, Put the menu title back into normal video: NBTitlel   @J4 This routine deals with the File length menu item@VFileLengthTPath$lFile$lStatuslTemp$lHandleT"Path$pv**.*"File$p*8Path$lFile$lStatus8.Statusp@..PPath$lfj*\.BPath$pPath$ldPath$fxfB  Temp$ppPath$,HandlepdFile$f,jHandlen@Statusp*[1][File does not exist!][OK]lfrjhStatusp*[0][Length of file is $vdHandlefv* bytes.][OK]lfhHandlepTemp$   JJ> This procedure deals with the Options menu item dialogue boxJVOptionsPJB Make sure the button state is normal (note that since the objectPLJ> being changed is not being redrawn instantly, the statementLRJD 'OptionsTree(1,5)=0' would have done just as well in this context)RZOptionsTree&(lflllllllZ$J Do the dialogue box$8OptionsTree&(lflx8  ,J This procedure fulls a window,.VFullWindowdWhichf.RXF%lYF%lWF%lHF%l&\l&`l&Xl&R4J& Get the windows current coordinates42dWhichl&\l&`l&Xl&24J& Get the windows fullest coordinates4JjWhichlXF%lYF%lWF%lHF%J2J$ See if the window is already full2xd&\pXF%fhd&`pYF%fhd&XpWF%fhd&pHF%f@x4J& If so, get the previous coordinates4JhWhichlXF%lYF%lWF%lHF%J  4J& Move the window to its new position4JfWhichlXF%lYF%lWF%lHF%J  .J" This procedure closes my window. VCloseMyWindow RJD Get the current coordinates, so they can be used when its reopenedR^dxMyWindlLastXlLastYlLastWidthlLastHeight^$J Draw a shrinking box$LastXlLastYlLastWidthlLastHeightlLastXvdLastWidth|flLastYvdLastHeight|fll J Close the window FxMyWind<J. Clear the flag to indicate that it is closed<"MyWindFlagp"*J Enable the Open menu item*Ll,J Disable the Close menu item,Ll  HJ< This procedure deals with redrawing a portion of a windowHZVReDrawd.Whichl:XRlFYRlRWRl^HRfZ"&\l&`l&Xl&">J0 Define the GRAFRECT to cover the whole screen>0llSWl SH0PJB Get the first in the list of rectangles that define the visibleP"J part of the window"2r.Whichl&\l&`l&Xl&2HJ: Repeat this bit for as long as the rectangle is not nullH4PZd&Xjfhd&jf4LJ> Find the intersection between the visible rectangle and theL J update rectangle T&\l&`l&Xl&l:XRlFYRlRWRl^HRT<J. If the intersection rectangle is not null...<8d&Xjfhd&jf@8LJ> Set the clipping rectangle so just the intersection is drawnL$&\l&`l&Xl&$LJ> Decide how to draw the rectangle based on which window it isL"R.Which",J If its the desktop itself...,Tx@J2 ...draw the desktop object tree, clipping to the@HJ: intersection rectangle. (Note that the depth parameterHJJ< is specified as 10. This will make GEM draw the completeJHJ: tree, since there are (considerably) less than 10 levelsHJ to it)NDeskObjTree&(fll l&\l&`l&Xl&N$J If its our window...$ TxMyWind DJ6 ...call PROCDrawMyWindow to redraw the whole windowDJJ< (remembering that only the part in the clipping rectangleJ*J will actually be visible)*VDrawMyWindowDJ6 If its somebody elses window (eg, one of the editorsD4J& windows that hasn't been closed)...4  :J, Fill the intersection rectangle with white: l<~&\l&`l&\v&Xxl&`v&x<    .J Get the next visible rectangle.2t.Whichl&\l&`l&Xl&2NJ@ And continue the process until the visible rectangles run outN    DJ8 This procedure redraws my window with a pretty patternD VDrawMyWindow (&\l&`l&Xl&l&D(@J2 Get the coordinates of the inside of our window@4bxMyWindl&\l&`l&Xl&40J" Paint the entire window in white0 l<~&\l&`l&\v&Xxl&`v&x<:J, Draw a circle in the centre of the window: lP&Xn&@&Dp&Xz~B&Dp&z~P6&\v&X|l&`v&|l&D6  NPJ  4  @@@@@ ` ܐ4J GEM-Based Icon Definer for Fast BASIC4J Jeremy RustonV8Init>Quitp  VW6DealWithEvent>QuitVZtCleanUp  VInit"&Ll& l°M$"  *J Close the editor's windows*F@H@FDHD"&Lp "FBd&LfHBd&Lf  8J* Initialise the event handling parameters8&MyParams&(f&$MyMess&(f$$N;EventData$"&Lp"&MyParams&(&Lf&  6 EventDataJ (0) Mask J Bit 0 - Keyboard J Bit 1 - Button J Bit 2 - Mouse 1 J Bit 3 - Mouse 2 J Bit 4 - Message J Bit 5 - TimerL:,J (1 Button) Number of clicks,L&J (2 Button) Button mask&L(J (3 Button) Button state(LJJ< (4 Mouse 1) Flag: 0=event on entering; 1=event on leavingJLJ (5 Mouse 1) XLJ (6 Mouse 1) YL"J (7 Mouse 1) Width"L"J (8 Mouse 1) Height"LJJ< (9 Mouse 2) Flag: 0=event on entering; 1=event on leavingJLJ (10 Mouse 2) XLJ (11 Mouse 2) YL"J (12 Mouse 2) Width"L$J (13 Mouse 2) Height$L$J (14 Timer) Low word$L&J (15 Timer) High word&L(J Initialise the menu bar(*°M$p*[ About IconEd ]*L°M$p°M$v*[ File | Load icon \ Save icon \ Quit ]LR°M$p°M$v*[ Utilities | Copy 'Data' to 'Mask' \ Clear ]R°M$&J Get screens statistics&þSWpSHpBblXDlYDlWDlHDB8J* Initialise some general graphics things80llþSWlSH00llþSWlSH02J$ Initialise the icon data and mask2<MyMask%(flMyData%(f<$NBIconData$"&Lp"<ĠMyData%(&Lfl MyMask%(&Lf<  6 IconData"L8l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8$l8""L8#l8""L8 l8""L8 l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8ql8""L8l8""L8l8""L8Rl8""L8kl8""L8l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8l8""L8l8"  (J Initialise the icon text("DMyText%l"&dF$p*FSTBASIC.PRG&(DMyText%pdF$(  4J& Initialise the icon block structure4$MyIcon&(f$&NHIconBlkData&"&Lp"$ŖMyIcon&(&Lf$  6 IconBlkData$J Address of icon mask$HL: MyMask%(f^l MyMask%(fH$J Address of icon data$HL:ĠMyData%(f^lĠMyData%(fH$J Address of icon text$4L&DMyText%^lDMyText%4HJ: Icon colours in top byte, icon character in bottom byteH$L.fd* f$2J$ X,Y offset into icon of character2L l.J X,Y offset of icon from object.L l(J Width and height of icon(L  l :J, Offset of icon text from top left of icon:Lxl#.J Width and heigth of icon text.L Pl J UnusedL  2J$ Initialise the desktop object tree2.DeskObjTree&(l f.$NMtDeskData$"& p""&Lp ".DeskObjTree&(& l&Lf.&L& 6vDeskObjTree&(lfl66 DeskData4J& A G_BOX covering the entire desktop4pLbxlllllll.lXDlYDlWDlHDp<J. An unselected G_ICON with our mask and data<LlxlxllllŖMyIcon&(f^lŖMyIcon&(flWDz33~xlHDx7l l 8J* A selected G_ICON with our mask and data8LlxlxllllŖMyIcon&(f^lŖMyIcon&(flWDzffxlHDx7l l   "J Redraw the desktop"PV`bReDrawdlXDlYDlWDlHDfP"J Set up the window"8J* Choose the size of each cell on the grid8RPBTQrGXSizeprGYSizepBBTQ`rGXSizeprGYSizepBBTrƔGXSizeprƤGYSizepB  HJ: Work out the desired work area coordinates of the windowH*ưWWpƔGXSizezF**ƼHWpƤGYSizez$*DXWpXDvWD|xưWW|DNYWpYDvdHDx7f|xƼHW|N4J& Convert them to outside coordinates4BlXWlYWlưWWlƼHWB*J Create and open the window*:MyWindpllllf:LMyWindlXWlYWlưWWlƼHWL.J Get the work area coordinates.LbMyWindlXWlYWlưWWlƼHWL6J( Work out some parameters of the window68DataXpXWvƔGXSizez88DataYpYWvƤGYSizez88MaskXpXWvƔGXSizez$88MaskYpYWvƤGYSizez8PJB This flag determines whether the next redraw message applied toPPJB our window will be obeyed or not. This allows me to ignore thePVJH redraw message sent after the file select box is used by PROCLoadIconV 0IgnoreNextp (J Set up the error handler($vVCleanUpr $    VDealWithEvent &XBMyParams&(fl MyMess&(fB(&XpMyParams&(f(*J Check for a keyboard event*$&Xh@X$  (J Check for a button event($&Xh@X$NVButtondMyParams&(flMyParams&(ffN  ,J Check for a message 1 event,$&Xh@Y$  *J Check for a mouse 2 event*$&Xh@Yl$  *J Check for a message event*$&Xh@$V[Message  (J Check for a timer event($&Xh @Z6$    VCleanUp,J Close and delete the window,FMyWindHMyWind  VMessage"&\l&`l&Xl&",R\[| MyMess&(f,"T[ rJ Menu"HV]Menud MyMess&(fl MyMess&(ffH$TrJ Redraw$V`bReDrawd MyMess&(fl MyMess&(fl MyMess&(fl MyMess&(fl MyMess&(ff$TrJ Topped$$ppMyMess&(f$    8VSimMenudTitlelItemf8 NTitlel 4VMenudTitlelItemf4  6VMenudrTitlelǀItemf6(&Ll&\l&`l&Xl&("R_^PǀItem"*T^ rJ About IconEd*6&Lp*[0][By Jeremy Ruston][OK]lf6(T^rJ Load icon(Vw LoadIcon(T_4rJ Save icon(VSaveIcon"TrJ Quit">Quitp0T'rJ Copy Data to Mask0 VCopyDataToMask $T(rJ Clear$VClear   NrTitlel   ZVReDrawdTWhichl`XRllYRlxWRlƄHRfZ"&\l&`l&Xl&"*J Standard redraw technique* 4 < 2rTWhichl&\l&`l&Xl&24Pcd&Xjfhd&jf4T&\l&`l&Xl&l`XRllYRlxWRlƄHRT8d&Xjfhd&jf@8$&\l&`l&Xl&$"RcbPTWhich"TbTDeskObjTree&(lfll l&\l&`l&Xl&T TMyWind B0IgnoreNext@VdTDrawMyWindowB 0IgnoreNextp   l<~&\l&`l&\v&Xxl&`v&x<    2tTWhichl&\l&`l&Xl&2  > 6    VDrawMyWindow &J Clear the whole window& l`~XWlYWlXWvưWWxlYWvƼHWx`0J" Draw the grid outline rectangles0 l|DataXxlDataYxlDataXvƔGXSizez lDataYvƤGYSizez ||MaskXxlMaskYxlMaskXvƔGXSizez lMaskYvƤGYSizez |"J Fill in the grids" lRVgDrawGriddĠMyData%(flDataXlDataYfRRVgDrawGridd MyMask%(flMaskXlMaskYfR  DVDrawGriddLAdd%lXXBldYBfD&\l&`l&,"&`p",&,pLAdd%`d&`zf,"&\p"&&,h,@i(&0&pXXBv&\zƔGXSize00&pdYBv&`zƤGYSize0P~&l&l&vƔGXSizexl&vƤGYSizexP  &,p&,\     "VCopyDataToMask"&LJ Do the copy"&Lp"8MyMask%(&LfpMyData%(&Lf8  *J Fill in the new mask grid*0llSWlSH0 l|MaskXxlMaskYxlMaskXvGXSizez lMaskYvGYSizez | lRVDrawGriddMyMask%(flMaskXlMaskYfRPVReDrawdlXDlYDlWDlHDfP   VClear&L J Clear the array "&Lp"&MyData%(&Lfp&&MyMask%(&Lfp&  *J Fill in the new mask grid*0llSWlSH0 l|MaskXxlMaskYxlMaskXvGXSizez lMaskYvGYSizez ||DataXxlDataYxlDataXvGXSizez lDataYvGYSizez |PVReDrawdlXDlYDlWDlHDfP   (VButtond&\l&`f(&X8&\l&`fjMyWind@80llSWlSH0&Xp&\tDataXh&\nDataXvGXSizez h&`tDataYh&`nDataYvGYSizez @&Xp&\tMaskXh&\nMaskXvGXSizez h&`tMaskYh&`nMaskYvGYSizez @&XpR&XTVPaintdMyData%(flDataXlDataYld&\xDataXf`GXSizeld&`xDataYf`GYSizefTVPaintdMyMask%(flMaskXlMaskYld&\xMaskXf`GXSizeld&`xMaskYf`GYSizef  PVReDrawdlXDlYDlWDlHDfP  LVPaintdAdd%lXBlYBl&\l&`fL(&lLW%l&l&((,J Paint the path of the mouse,.LW%pAdd%v&`z.``LW%hd\dx&\ff@&pB&p` l&  P&\rh&\lh&`rh&`l@P&@`LW%p`LW%f\dx&\fB`LW%p`LW%hd\dx&\ff~XBv&\zGXSizelYBv&`zGYSizelXBvd&\vfzGXSizexlYBvd&`vfzGYSizex  $&\l&`l&l&($8&\pd&\xXBf`GXSize88&`pd&`xYBf`GYSize8.LW%pAdd%v&`z.&p  VLoadIcon"njP$l(Hl&"0J" Allow the user to select a file0"njP$pv**.BSC"dF$p**njP$ldF$l(H*dF$lfj*BSC@xnDUMMY%p*[3][The File You| Specified| is not a| BASIC File.][OK]lfr$(Hp@$,PP$lfj*\,<P$pP$ldP$fxf<  pP$2J$ Update the icon structure from it2(MyText%pF$( err_flag|p &pdF$f "&n@"R&>Tx!rerr_str$p*File Not Found>>Tx@rerr_str$p*File Too Short>>Tx"rerr_str$p*Path Not Found><Tx.rerr_str$p*Invalid Drive<*rerr_str$pd&f*  ferr_mess$p*[3][The File You| Specified|Is Not Valid| |verr_str$v*][OK]f4DUMMY%perr_mess$lf4 err_flag|p  * err_flag|@*&p@0V&llMyMask%(f0&p0V&llMyData%(f0&"J Redraw the desktop"PVReDrawdlXDlYDlWDlHDfPRJD Redraw my window and make sure its next redraw message is ignoredRZVReDrawdMyWindlXWlYWlWWlHWfZ IgnoreNextp     VSaveIcon"P$l(Hl&"0J" Allow the user to select a file0"P$pv*NNpNNNNNNwVNuN$BnlBnHBn`N"NHIxN&NԜJ@jNb\@Nnlnrzgr2.l@ n .66 m&A.-H,8=|+8p4N̒ n.8fNAz`Nu[1][This may take a long|time.][ OK | Cancel ]NJ@g|fNA2BAJXfXA|(mBA/.N/.RBn6=| 6AL"p$I@-J6&iB0+-K6J6g / N<"_ IN-_R-_NNwVNuA-H,8=|+8p4N̒Nu[1][Only one Segment at a time|can be copied to the|Clipboard.][ OK ]N)~NNp .0"8Ю0-@4L4HH+BBn+8p3N̒A$-H,8Bn+8=|+:LH+<-n6C=nBnadwp*N̒aPA$-H,8=|+8p2N̒ n.8g n.8fpON̒0..<2.nn6An0.2.@jBA=A` 0.2.@0.n@o2=A=|+8=|+:LЮ4H+Bn#<0< Np:.6nN nCBDC%<G6ʼeRQ2 RF`2 RFe`RFBR`| n 2 RF`R=E#>0.4nL=@#<=| #,H0<NpLpPE n0$mPE6l RD|mFNNuJ6gj n6BA6l  fRA` ( gRAJAfr0.=AC2< n0$m2<Al0no0.=@Nu-n6C0.ng< nCm22.CAHAa n6Jg  fS`-HCNuBH@8H@BbHF<HFH@HD0H@$b`b R`" NuClipboardOKH( $H&IڵDo .<Є-@< .@Є-@@ .8Є-@8J6g .6Є-@6J6g .6Є-@6Jnhf -I0&`-I0* INJnhfCL0.H#0&LNuH*n0*Jnhf*n0&".D $Ђ/ N*_Jg8/ "H/ Ma$ _-HD?<INA\NJiTa DpPS7`g /H@Nl\ gzZ.B>}UEo]V+ ܅z?u gdɛ6lTd d`@uCDG :/PH \ n.>=}UEotaWD><!e@ B9?}Aw@@fɼ@_=(y_Nɿ2@ 0("޽0trrvt" G|#A} o yNUCHΖBGo6P8dd_$N$TVV(@"A` t? 020ϓ&p ߻o@`>3@$| m75Kt;{d  z))- 9 X)m-@C@: + E;Gx`M)s sf!"@ʤ-g$Ӎ4&cmi?@NF4o׀M12>  8@$Ii6qzp4#J)ma>jtp gb9M4 BB ? @ if' c"ݛhhV {u $nBe!tH4DDCcSA1ɡ^t G< @R'@q5~Q*Ήv sc >o7Jbo`aC:C@ = R.,`_ ǴK:,Ki#T-ЀU| ;>M2N3% Z*j %^4@?W+E`}Iܶ##Jɐo { ~6WB+y2o< Y=#YK| 0@&"aJ HP9cr&̞?B4 W b޶B,W0!<##]NG~(:@0ּ,{l7`Ǒxo {ӄOBRk_*Ղy~p`$OPt7}P}@@dF8#D 3n"`Q@aq~ J_ y@#X2 @C?݀Gx If%~$?#J(g]].?fd@c x߇Ig}r@"pi_~ Myw04 ?V8ױ(0oaqF@Ы/ ߹6f7JNM @~.ٛg:?߷Mvx5xM}0Ll nt!߿Wuꨂ}[h&$Y?@.O,DQZ  ?uU@lʟuPx{@w>Cb 8€=0/_<\PU e9vX 'zo 3}#rU2k}o6λ}?2 1CŒ m`+>t:ё DvDy;EMaf"rotq$_l{? cSixL'~}(K!޺/] Cb_߀ʕ] /?])h(avqTH]$GNH!iM9? kq@~ ߀t@\#ssL/ @8@?̋2Q@@"w{!E G_ _|e,q  g b@?Jf5JPg I=;WM9~߈Q_O_-k}>?;KCr7B]}cGzz%?hN.]ߺpH#PN  F@+@a ~|<n )h`(׊=Zg( ۠? P7)?O_@ovp ;POg@D6w} $ I@]?׎$p//0 3]~]h`9y&OP 0h nq UBt7w @aOn @vuPWg bJ_[0X@{|?|? _;;@^ 0̍v@B߬_ $@3|A^`) s'Q/~? 3IfvNwcP7w>@.y{rO{@#AY{ӄ 1^uc<C8>.A 0j3h3TsDl/?+/@B2  @_Gjw7/Ї i~!|y{y?6 5e=ۈu^ _ߠ2 7^ |{<}W@`ez(8gP@oLqz1 f? | y@ F ߯PvH""k`?U'' P@=`3)B6+b+jԕ~>ׁ(-B|@ ;C}- 'A ^ƹ}^fP{$>ri mB HA  @FA8|@..#\`'BXD|3mkϔ}9#wWƁ~9H*XAtto`Һ?P-"o{ kCJY_2d? 4=۾,A`=`? 0o~m`v& @VB0,v<@S,Y3Vm0] ޻޿!@OqSq8ɸ6G/TW@uC~S;`+>|G dx`5 ONc{1҆->@jWs`3Ea% XAz}_@vx#)nIw88Mk/ E~n{kp.6A  a|^˸GcÝc<}@> ipPC/LJaxkeCek: 14y9#LycD@R\8Khk<>0a-7g[g@KVfgx3- 0UCDS8 ko^''}$f2 bǮ:LV0Fbj|zA+L3!_B܌\s> /xygwAA- 3 @f`cfT߫ͪxa } > ;` !h^\ϣZ{c ,n,kӔz&^ owc@QO#@{؟'^}Oaa `*7dfhǿ?a 4蘿?+Gim"eB@!0;  ?qc `l@@g=FN^/`x1~QdC|| D Q:o79Q. Da8a0ʹvǞ8a$, `raϯ߰1_TPs|?q.OPo?X%Zk.rDOk +|Gǩǹ8F`JYd+i,m7h* *$zh?s{?/Q{Bq60Y/pab;c:T SLI5#&*{;!w@9Ȝc? xqwp? @px_h* ;?s3pB]!8?o(c:5ogl1!  r @^g grR٘g a6'؉PE#5N!#~QTP̓l wF{?8 SuS@7տ~@1 $`O@t >APX ĀD@?~կP*À<5> 0܏k.*Օn!BBgbьg0s?<p?@hGXXOOa~ꉗ XħXV /:s*A= ?E 7<{C?Y ?B$6D;3  a~18G"e }p` ?s@m{?3P0 `{WǸpWZ @x KoBD~QDuR%\=_  o_?L^wxܳ@u@;EEtup/@  \_x#Z@(޹^@o4>o?ȿ0҄&[`'X,lB zII&rf!A;/ XШ08'0iU?/X@}_?r6z7H`:u@eԇx+x1Gz `QYSWG_/(2@I׻ ?;Ս*B`b¤=[[11HC`';pamwOqH <:+ yX_d?j(~? +w; ;YZߠ ܴHb({@*E^=rRH)+I>@` H@ :F Ġ )ؖ'@#gO;r@'Dq_@&Yy=* a"  @/Ti,3\, @__oMxOIͼ㹗? ns tĸ;G=1=@3w{OJzÅ?xX/$VGROi7 _gמO?~;q?X8?*Кu/x<3zr} X ~@?#9: rOraj_#6t;@/p` o9\Oۿwϸƪ>@w?5_:%bXtEpE:/~.# ]%i7?k`[|,7po/`۞y7#Z?P`?'GGx@#XwO3>@B{.,Bx eo=?*@d4]kؿ@]ݖi es>>wAɌEzsI׃ U˨8G Vhx p%+@7c0?a>Deǒx$@cN}9P @^pQ^OPoK7~1> 0@98j?b @@F ?6O;cS|@  5 p( @o?bM?{?_ +32;46c<@?pa$?0[I [[`]}_/#{ s| % ? GG#@ p_[;Go1C|@81)!Z>%&CqwgQ9$ do=;ȧ{P@ 6ts6 IR l z|c|!{D{ ` o}_q?/_0w@  VA~"  /_{  <ho5/w? p{O  *HwD#BBst/r/ Op?kjo`k_, 10974Vgw?~Sown 67"% >++8>o`^0@a?@߯_ӣD*L?HHFĻ;DGO=H>1#<7< #|QZ_TI ##G0Gqq]X~I~J>Ű +|AE6'\_ L~ yC``@j Jh@X`j<ư ?FC_pg~ .-_Bp``##g&!Y?;0' s| = o'?--!8x8 d@O??5 }O3T ,  B | }GBBSS<<oas9 ?Jb77W5( )@"W8\\F~~bD}>gN#e?jC#9@?Yx5 ΃5B M Mln, -VZxvww==u }94P?`tm=@nx1@WGuyu}~ `Ww?60=>`:?Q2H@_$@yggט(G}gI"(xw?U]zK_q,/ ;;! _/N/Nб\ (`G?.b hp4_h;1? _nqhWCC?|9n^J¥" <'0͘Q~/jb^҂ €C?|?;"H0 kd/O԰AHA##T sB?]q/#tgn!Q_@@x@""?`)5QbG^9?^}.0/?H@j @/ ݀ o$ta-*/@c8o_?F.me%~) <<WQffF ϐPh t h+iP_?^ ;2:4 aagxffnDb04÷/Opd@?IӠ_upu 3p<tt <ss L@Nqp?'`/`^@0RBoP5Pگ:@@T4 _?A ~?zCog dAY"j%$##$8@u)azo? 1*t$$@<9<YY?@@/jP` !_?P0ED0 r =:0{0@(mhW8;߯_?H @(~W!JߵB@=Q Qk8l@!{D| ?<7???@` `u5͒:@ɮב/${I<?=3Dߴ_P O_.m@r`bu]O@tIj;;| =_$PP3OOOϰ0P"O)_oAG5?. -@T ?'HLc#@ y@<}FGH1! ||20 qsH  r60?8{kSo/jǔ8 t5))6l,$zjrc<0Bi4"' @ &@@$" Qvv | < o(O߰/#??[00 `@׀0Q""SO! `@4F#" ĺĘ;g}|H ?;'uv`vJ`nk&;? tv?o?pUXP1Sߙ `*X `WB`$$ =o/8"Ÿ`x-}_?z?ppG x XB H`44~08n<+t]@<2` kgA  &&"9"ϋ0t22@֊ @ 0?іxL8 `b- $H 0@ٴ>['#; ̹^e-33r̀E?]k_۠ -}Q~  Y$% Q a}!Bx<mF?55`H92$waaNN= ^_[;cbc΁xx@y* @|&MCHDǟ`8xxd_!|ߞpz0WD:]&1,`%vv<׼GC |? pOu_ drAHHvvNJPaW _X?@г/`_, @@//}TOpOpvk絬J[?^ϊ  ??pZ0//031 0\ @eQKbsPCHC%D'ح  6  ! *<<` 8EJp= iͿp   Q+@Հ*}Mh(6+@ MX8?Ǻ@Ci?(7@? P` -I@Rmm0DD} @vl[I>NqP d=?ng-Ҁ@_#ˮ"7{{ppEEl47lJ7  $! )s$<>/rD` K&..00(y= LLB*/|j&V Y+?dE+L ??{ }__55LL??6__e<@ @,}I}F15@5|}noHN vvz]zOOHJ5/w\!yȆ7"c# @@<226JQeokYih3<@ -vug<5ctE~-cH#dMC~~=:@H:7 ǑnT^|o~S,/OZ>,_@3(s' 8L(/7 5[|` |* >=?L1 ` {L V?? @@?@)+Ą?"7~@RD?ESS$@o K:<""@# )# _@ &q{B{@((?(#h.0A7#| Lc? YDMÈD<.@~~؁'!!7#xgs{{czP8"nwnw_QZX̧;`{lLs@4#N; l^H78_|OlOOO: "  r_wH;/e q~߃ ?nyHIA XXcqb,66 ccFT {WjM@,5p  uq}_xOj:|0aB?fpwZpt8'j MTET?n(Qhjt+w]?e pswvv?&&g@Wp_lckA5`7Ȁ@C+?=[< - EgD|3žž:AoopH?#WSا@ *  `70b"]BGXX@ogxH-O?  D" F wwff.uu7-AFq"c  #>`|h @F p Wf?7n2AptKx S DЀyyÒCm QY^{WpT@""ʐ0wUX{k4?H ~>&z(  d :f` ^ c{D0H$$p@ cmcuA0-VV}]kzD?PC(..G\X<))>*(@??#@p g:c:99ޏ"1!-d?@ $  *(RB[d`_?AAy yp'  "11x 8 _ x[  ʄ{>:cc_[&g؟@wAlAdJF ]@]9n'П e_@@  e!@M\6'q3Lm@@M2@@ Y6 ,?@# V+h}o8 t1f `)K v @u @P~Z zz+b%oBIbUNPJ  Z0^ZN[` Sh !!p!8!?5+5+5 +5'+'@G1+5+5a`m`*J Neochrome Picture Processor*,J Jeremy Ruston, 25 August 1986,VAssembleVInitx\Quitp  VDealWithEventx\QuitVCleanUp  VInit&LltM$  t"F$p*&MyParams&(f&$MyMess&(f$$N,EventData$"&Lp"&t:MyParams&(&Lf&  6 EventDataRJD (0) The first parameter tells GEM which events we're interested inR J Bit 0 - Keyboard J Bit 1 - Button J Bit 2 - Mouse 1 J Bit 3 - Mouse 2 J Bit 4 - Message J Bit 5 - TimerL24J& (1 Button) Number of clicks required4L>J0 (2 Button) Mask of which buttons must be used>LFJ8 (3 Button) The up/down state required for the buttonsFLTJF (4 Mouse 1) This is a flag which is zero if we want to be told whenTPJB the mouse enters the rectangle defined in the next four entries,PPJB or one if we want to be told when the mouse leaves the rectanglePLRJD (5 Mouse 1) The X coordinate of the rectangle (relative to screen)RLRJD (6 Mouse 1) The Y coordinate of the rectangle (relative to screen)RL6J( (7 Mouse 1) The width of the rectangle6L8J* (8 Mouse 1) The height of the rectangle8L>J0 (9 Mouse 2) Flag for within/outside rectangle>L>J0 (10 Mouse 2) The X coordinate of the rectangle>L>J0 (11 Mouse 2) The Y coordinate of the rectangle>L8J* (12 Mouse 2) The width of the rectangle8L8J* (13 Mouse 2) The height of the rectangle8LTJF (14 Timer) The low word of the time in milliseconds for GEM to waitT.J before giving us a timer event.L4J& (15 Timer) High word of timer value4L tA$p>df ,tM$p*[ About NeoProcs ],BtM$ptM$v*[ File | Load \ Save \ Quit ]BNtM$ptM$v*[ Processes | Smooth \ Outline \ Invert ]NdtM$ptM$v*[ Utilities | Swap \ View \ Random colours vtA$v*R ]d < tM$ > ufSWpurSHpBblu~XDluYDluWDluHDB6uCXpu~XDvduWD|f66uCYpuYDvduHD|f6TuDestWindp.lu~XDluYDluWDluHDfTjuDestWindlu~XDvduWD|fluYDluWD|luHDj&uDestTitle%ld&0uDestTitle%p*Destination02^uDestWindluDestTitle%2vRDestXpv`DestYp2VDoScrollBarsduDestWindf2VvSourceWindp.lu~XDluYDluWDluHDfVVvSourceWindlu~XDluYDluWD|luHDV(vSourceTitle%ld(.vSourceTitle%p*Source.6^vSourceWindlvSourceTitle%6w$SourceXpw4SourceYp4VDoScrollBarsdvSourceWindf4(DeskObjTree&( f($NDeskData$"&Lp "(wJDeskObjTree&(&Lf(  0vwJDeskObjTree&(fl06 DeskDatatLfxlxlxlllll.lu~XDluYDluWDluHDtPVReDrawdlu~XDluYDluWDluHDfP&J Do the picture buffers&$ll@l$&Lpj&wSourceBuff%l&FwSourceBuff%pdwSourceBuff%vfh,F jpwSourceBuff% 8 $DestBuff%l$BDestBuff%pdDestBuff%vfh,BjpDestBuff% 8 jp&L  J Do the MFDBs^SourceMFDB&( flDestMFDB&( flScreenMFDB&( f^"&Lp "^wSourceMFDB&(&Lflx DestMFDB&(&Lflx8ScreenMFDB&( f^  JL<wSourceBuff%^lDestBuff%^lj^J8L*wSourceBuff%lDestBuff%lj8 L@l@l@  Lll  Lll  Lll  Lll  Lll  Lll  Lll    VDealWithEvent &XBt:MyParams&(flt|MyMess&(fB < (&Xpt:MyParams&(f(*J Check for a keyboard event*$&Xh@f$4RMyParams&(f^4T.&VSimMenudl:f&    (J Check for a button event($&Xh@$  *J Check for a mouse 1 event*$&Xh@$  *J Check for a mouse 2 event*$&Xh@r$  *J Check for a message event*$&Xh@$VHMessage  (J Check for a timer event($&Xh @<$  >   VCleanUp FvSourceWind HvSourceWind FuDestWindHuDestWind   VMessage"&\l&`l&Xl&",Rt|MyMess&(f,0J" Check for a menu selected event0T` HVpMenudt|MyMess&(flt|MyMess&(ffH*J Check for a redraw message*T2VReDrawdt|MyMess&(flt|MyMess&(flt|MyMess&(flt|MyMess&(flt|MyMess&(ff*J Check for a topped message*T$ppt|MyMess&(f$2J$ Check for a window fulled message2T6VFullWindowdt|MyMess&(ff6dt|MyMess&(fpvSourceWindffdt|MyMess&(fpuDestWindf@VDoScrollBarsdt|MyMess&(ff,J Check for a arrowed message,Tdt|MyMess&(fpvSourceWindffdt|MyMess&(fpuDestWindf@VDoArrowsdt|MyMess&(flt|MyMess&(ff6J( Check for a horizontal slider movement6TdMyMess&(fpSourceWindffdMyMess&(fpDestWindf@VMoveHorizSliderdMyMess&(flMyMess&(ff4J& Check for a vertical slider movement4TdMyMess&(fpSourceWindffdMyMess&(fpDestWindf@VMoveVertSliderdMyMess&(flMyMess&(ff2J$ Check for a window resized message2TPMyMess&(fn2@MyMess&(fp2PPMyMess&(fn2@MyMess&(fp2PfMyMess&(flMyMess&(flMyMess&(flMyMess&(flMyMess&(fdMyMess&(fpSourceWindffdMyMess&(fpDestWindf@VDoScrollBarsdMyMess&(ff0J" Check for a window moved message0TfMyMess&(flMyMess&(flMyMess&(flMyMess&(flMyMess&(f    8VSimMenudTitlelItemf8 NTitlel 4VMenudTitlelItemf4  6VMenudxTitlelxItemf6(&Ll&\l&`l&Xl&("RJxItem"(Tz rJ About ...(h&Lp*[0][Neochrome Picture|Processor|Written in Fast BASIC|By Jeremy Ruston][OK]lfh"TNrJ Load",pjvSourceWind@,N&Lp*[3][You can only load into|the source window][OK]lfNBV|LoadSource  "T$rJ Save"*pjuDestWind@*T&Lp*[3][You can only save from|the destination window][OK]lfTBVSaveDest  "TbrJ Quit"x\Quitp$T'rJ Smooth$VSmooth&T(rJ Outline&VOutline$T)rJ Invert$NdpjvSourceWindfhdpjuDestWindf@NJ&Lp*[3][You can only invert a|picture window][OK]lfJBVInvertdpf  "T8rJ Swap"V8Swap"T9rJ View"NdpjSourceWindfhdpjDestWindf@NR&Lp*[3][You can only view one|of the picture windows][OK]lfRBVView  ,T:rJ Random colours,VRandomColours  NxTitlel   .VFullWindowdvnWhichf.RydXF%lypYF%ly|WF%lyHF%l&\l&`l&Xl&R2dvnWhichl&\l&`l&Xl&2JjvnWhichlydXF%lypYF%ly|WF%lyHF%Jxd&\pydXF%fhd&`pypYF%fhd&Xpy|WF%fhd&pyHF%f@\xJhWhichlXF%lYF%lWF%lHF%J  JfvnWhichlydXF%lypYF%ly|WF%lyHF%J  ZVReDrawdvnWhichlwXRlwYRlwWRlwHRfZ"&\l&`l&Xl&"0llufSWlurSH02rvnWhichl&\l&`l&Xl&24Pd&Xjfhd&jf4T&\l&`l&Xl&lwXRlwYRlwWRlwHRT8d&Xjfhd&jf@8$&\l&`l&Xl&$"RpvnWhich"T$NDeskObjTree&(fll l&\l&`l&Xl&N$TvSourceWind$JVDrawWindowdvSourceWindl&\l&`l&Xl&fJ"TuDestWind"HVDrawWindowduDestWindl&\l&`l&Xl&fH   l<~&\l&`l&\v&Xxl&`v&x<    2tvnWhichl&\l&`l&Xl&2    FVDrawWindowdvnWhichl&\l&`l&Xl&fFxhXW%lxtYW%lxWW%lxHW%lxSX%lxSY%lvzXB%lvYB%lxMFDB%lxXS%lxYS%6vnWhichpvSourceWind@n6$xSX%pw$SourceX$$xSY%pw4SourceY$4xMFDB%pwSourceMFDB&(f4B"xSX%pvRDestX""xSY%pv`DestY"2xMFDB%px DestMFDB&(f2  JbvnWhichlxhXW%lxtYW%lxWW%lxHW%J6vzXB%pd&\xxhXW%fvxSX%66vYB%pd&`xxtYW%fvxSY%6nxMFDB%lvzXB%lvYB%l&Xl&lx8ScreenMFDB&( fl&\l&`ln   VRandomColours (&Dl&l&l&Ll&<(&Dp&p&p Rdf .Tr&Dpdfx..Tr&pdfx..Tr&pdfx.  .&Lpx.<&<pd&D\ffd&\ff&<8SourceBuff%x|v&Lzp&<8$&Ll&Dl&l&$ Rdf @Tr&Dt@&Dp&Dx@@Tr&t@&p&x@@Tr&t@&p&x@     VLoadSource@xP$l&l&\l&`l&Xl&l&<l&L@"xP$pv**.NEO"t"F$p*&p*xP$lt"F$l&*$&p@b$,PxP$lfj*\,<xP$pxP$ldxP$fxf<  pxP$2t"F$lwSourceBuff%x2"&Lp"8&<pwSourceBuff%x|v&Lz80&Ll&<^l&<^l&<0  $lll$$lll$8bvSourceWindl&\l&`l&Xl&8 < FVReDrawdvSourceWindl&\l&`l&Xl&fF>  VSaveDest@xP$l&l&\l&`l&Xl&l&<l&L@"xP$pv**.NEO"&p*xP$lt"F$l&*$&p@$,PxP$lfj*\,<xP$pxP$ldxP$fxf<  pxP$*&Lp~*NDestBuff%xv&LpSourceBuff%xv&LN  6t"F$lDestBuff%xl}68bvSourceWindl&\l&`l&Xl&8 < FVReDrawdvSourceWindl&\l&`l&Xl&fF>  :VDoArrowsdy   VSmooth(&Hl&\l&`l&Xl&( 4 &HpnjpDestBuff% 8 jp&HnpDestBuff%,`FrompSourceBuff%,(`TopDestBuff%(Smoothnp&H < 8bSourceWindl&\l&`l&Xl&8FVReDrawdSourceWindl&\l&`l&Xl&fF6bDestWindl&\l&`l&Xl&6DVReDrawdDestWindl&\l&`l&Xl&fD > 6    VOutline(&Hl&\l&`l&Xl&( 4 &HpnjpDestBuff% 8 jp&HnpDestBuff%,`FrompSourceBuff%,(`TopDestBuff%(Outlinenp&H < 8bSourceWindl&\l&`l&Xl&8FVReDrawdSourceWindl&\l&`l&Xl&fF6bDestWindl&\l&`l&Xl&6DVReDrawdDestWindl&\l&`l&Xl&fD > 6    *VInvertdvnWhichf*(&Hl&\l&`l&Xl&(6vnWhichpvSourceWind@֮6 GpwSourceBuff% BGpDestBuff%  rInvert < 2bvnWhichl&\l&`l&Xl&2@VReDrawdvnWhichl&\l&`l&Xl&f@ >    VAssemble&LnCode%l &Lp ZpnCode%  G&Ll*L-r~FromBrToB&J Swap picture at A0 with&J picture at A1rSwap(Abd}|fxlG(rSwap2BGlGBGlGBGlGGGlSwap2 G "J Invert picture at A0"rInvert(Abd}|fxlG(rInvert2BG GGlInvert2 G *J Smooth screen pointed to by*,J From(PC) to that pointed to by,J To(PC)rSmoothAblGrSmooth2Ab?lGrSmooth3 J Get pixel to right ASblGG\PointAGlG$J Get pixel lower right$ASblGG\PointAUGlGJ Get pixel belowAblGG\PointAUGlG"J Get pixel lower left"AblGG\PointAUGlG J Get pixel to left AblGG\PointAUGlG"J Get pixel upper left"AblGG\PointAUGlGJ Get pixel aboveASblGG\PointAUGlG$J Get pixel upper right$ASblGG\PointAUGlG J Adjust coordinates AblGASblGAGlGASblGAblGG\PlotJ Terminate loop GGlSmooth3 GGlSmooth2 G *J Outline screen pointed to by*,J From(PC) to that pointed to by,J To(PC)sOutlineAblGsOutline2Ab?lGs*Outline3 J Get pixel to right ASblGG\PointAGlG$J Get pixel lower right$ASblGG\PointAUGlGJ Get pixel belowAblGG\PointAUGlG"J Get pixel lower left"AblGG\PointAUGlG J Get pixel to left AblGG\PointAUGlG"J Get pixel upper left"AblGG\PointAUGlGJ Get pixel aboveASblGG\PointAUGlG$J Get pixel upper right$ASblGG\PointAUGlG J Adjust coordinates AblGASblGG\PointASblGAblGAGlGG\PlotJ Terminate loop"GGlOutline3""GGlOutline2" G .J" PLOT (D1.W,D2.W) with colour D0.&J Screen base is in To(PC)& J Trashes: A0,D3,D4 s8Plot(J Check coordinates in range(Avb@lGClPlot2AvblGClPlot2,J Find address of 4 screen words, BTo(ZflG AGlGAWb.lGAblGAUGlGAGlGGblGAUGlG*J Get bit mask into D4 and D3*AGlGAGAWblGBb,lGBGlGAGlGAG"J Deal with each plane"GZblGCbPlot3AGlGCmPlot4sFPlot3AWGlGsTPlot4GZblGCbPlot5AGlGCmPlot6sbPlot5AWGlGspPlot6GZblGCbPlot7AGlGCmPlot8s~Plot7AWGlGsPlot8GZblGCbPlot9AGlGCmPlot2sPlot9AWGlGsPlot2 G (J Set D0.W=POINT(D1.W,D2.W)((J Screen base is in From(PC)( J Trashes: A0,D3,D4 sPoint(J Check coordinates in range(Avb@lGClPoint2AvblGClPoint2,J Find address of 4 screen words,"BFrom(ZflGbefore continuing?][ Yes | No | Cancel ]NA-H,8=|+8/ p4N̒*_N n.8gJ n.8g-n0*@@@-n@<-n@8BnlBnv=|5b=n0+8=|+:A5f-H,8Bn5j-n05n-n0"5r=|5f=nf5lp N̒`NJn2gaJn6faA2CBDJQgJPgE :PEL:MH/2P?<INA\/<?<HNA\*@L_ M%PNL_(M@+L+LGg<<SFf+L(M+LB ;|$Bm&Bm*B,B0;|4Bm6;|8B:Bm>:H0NILMGIKPPJ4Pg RR`TTR| mBDA2CJQgFJPg@BQ:MG8JsPk.ng&=sP+8HpfN̒pgN̒L7PRDTT| mNJBn#<=n0"#@0<EP%=NpLnrAH#<=nj#,A5vC%<0.j2.VHBQ0<NpNLNuH OgR=|/+8A-H,8Av-H,)ǰml I` H@(HJTf$YJj B`X&@00` n7N` JGk n7N n70.7N.Nu n7NJnk"=n+8=|+:phN̒L.:HNuJnjzL0H+:=|-+8pdN̒=n.8kV=n+8=|+:A+-H+acn8.5DLGLH/3@?<INA\L'5:@0.5D2IK;aaaaDnf -n5:0&ac0.5DacP0.5DacNJNAXL(a^Nu[3][Disk Full Error.][ OK ]=|4a^J@g |g0AH$-H,8=|+8p4N̒0..8|g|fBn4A2CB@Jn4gVJPgBJQgE4-J,><PQHa4L TTX|m0.HAL"p=i"Ja\ta\aZa\a\|Jn2gaNuH.LKL<Am.<Pl&@A??<NAXJ@k6Jg0 \fSI4 \f&LJfBHn4?<;NA\L8 NuHHA4C2<RSAfALCJ:H0<PQLNuHHA4C2<RSAfHALCJ:0<PQLNu2<Nua[au"NaJ@k?<Hn4?<=NAPJjaa[BNu=@5B?<?.5BB?<BNA JkR-@56Bg?.5BB?<BNA Jk4azae -@5>Jg*-H5://.56?.5B?<?NA Jj B56a|?.5B?<>NAXJ5>fB56aZ |T Paftb hu"ftX .56".5> n5:Nu/.5:APZBB-H5://<?.5B?<?NAO JkBg?.5BB?<BNAO Jkra-_5:Jg .56@@"ЁЁNu .56@@"NuaJgJ6k -|6aZJJn6fN .0"Ю0-@".HL0H+-A6-B6a .65:-@56 n5:ao"n5:3|<@NJaYJn6fLH+B=|+8p3N̒NuH@P n5:"Cof"(fBLNuaXr=@5DN}aYB.4AL-H,8CJ:B<.5D:<PQA4-H,aZ8.5DLGLH/3@?<INA\L'5:@0.5D2IK;aXaX\nf(-n5:0&aZ0.5Dnf JnhgaZX` 0.5DaZL0.5DaZNJNAXJjaaWNu=@5DJ6gaWX n6 -n65:-n66-n66aWaB6 n5:amaV n5: .6".6aX8.5DLGLH/3@?<INA\L'5:@0.5D2IK;aV2aVtnf -n5:0&aX0.5DaX0.5DaX0.5DNINJNAXa,BnHBn npN̒.f:..9fJ..9fA-H,8Bn+8=|+:-n.:2-n.:+AgRnAaF0.7n7a6a$aN`xaNaBnABn7a`haRA|>m| >0.7԰nAo=nA7a`,0.7n7aaaNN`a@JAg SA=AA`aN2`a$BA RA|?mBnABn7al`aNA7B8.7n7L2.ANuaNaR n>AgRnAaRaMa`aMa,JnAgSnA0.An7l=@7aaMa`\aaMa`L<.AF n7m RF=F7`aNuJn7ga0.7S@`Va0.7S@jB@=@7a` n 7ga0.7R@`"aN0.7R@|m0<=@7aP`T0.Fnnnnn2n"0.7@ |o0<=@7a`0.7@ jB@=@7a`aaLaa:aL`VJnBgSnBaa&`>0.B@nAlRnBaa`NJnAfBn=|`B <A|m0<|l0<=@D@@B2.AAH=@A-H,8=| +8=|+:LЮH+`BnANC%< nBB0.AB2.BBB@lBRARB|m2 RB|m=|#,(.خخ`nb-D#<0<NpNNuB@aVC??0.A|m0<J@ggPBHS@fJgPBHB0R@| m.ANu?HA7| ?BE"H  g  g :<R`JEfBnAA<-HB0Nu(HNԜA2J@ka=@A-HB0NuB@"HR@Jf` A-H,8=| +8=|+:=|+ n,0$m=| #>Bn#<0< Np0Hn7A7C%0<NpA?0n7C%.l=_l"_Bi>#nB,(I9G8N;0.B0N*9@:4.B2JA20 IAJ@jB@9@&0.B2nf0-l8-l<=l:=l>v=l&V=l H=l8l`NRN;a=|"+8=|+:=|+<=|+>B+TpN̒..9f.g`hA-H,8Bn+8=|+:-n.:+a>aOBnpa>`>=|+8-n0+:-n0"+>pdN̒=n.8fJnfkTn^n^Bn+8=|+:-n^+<-nb+@Yn++>=nf+8peN̒=|pNunnBn+8=|-+:-n+<-n+@plN̒-n.:+:-n.>+>=n+8peN̒BnnNuaȦa*=@HA1A800k`9L0.=|+8-n0+:-n0"+>pdN̒Jn.8k=n.8&0.HA81&0.a+>=n&+8peN̒Bnh=|n=|paUNu=|-+8-n0+:-n0"+>pdN̒=n.8Nu=n+8pgN̒Nu=n+8pfN̒NuJnfk=nf+8pfN̒pgN̒NuH=|+8=|+:H+"XnYn"nn nl0."n@=@"=|BnhLNuH=|+8=|+:H+bXn^Ynbn^n^ n^l0.bn^@=@b=|^=|hLNuH=|+8=|)+:H+nnLNuBn+8=|+:phN̒-n.:0-n.>0"L0B(C KCJBP@n0 an0 CTAaUACCB@ahNuA-H+<=n+8=|+:piN̒Nu Output Immediate IL?<NATA:Bg/ ?<GNAPJfS\*.BSCBNuALCJ:0<BAA|mRRQNuLBDN˔LBDN˔=nf+8=|+:phN̒L.:BDN˔=n\#>Bn#<0< Np=n't=n'raRDNuA% nVmBRBNu=|%<0< NpBn%<0< Np=|%<0<Np=|%<0<NpBn%<=|%>0<'NpLJnhgL^r@`-OCJnBg BnBNJ .Zg  Jnnf a a`HNp     g    J6g gJnng$   n0$m NbJEf2J6gNPJ  DpFGTV  {ϐmӐܐ*J Best in low res colour mode*2J& Demo of some of the grahics keywords20J$ plcaed at random position in the 00J$ output window. See to best effect04J( if the output window is fulled first.4BperiodpzrJ 5 seconds for each typeB"Plll""Plll"0grafmodep0grafmode 4 startp  $ dfld!f$df4~d$fld&fld$fld&f4,rstartvperiod,VFpalettestartp  $ dfld!f$df4d$fld&fld$fld&f4,rstartvperiod,VFpalettestartp  $ dfld!f$df0d$fld&fld&|f0,rstartvperiod,VFpalettestartp  dfdf:d$fld&fd$fld&f:,rstartvperiod,VFpalettestartp  dfdfHd$fld&fld&|fldfldfH,rstartvperiod,VFpalettestartp  $ dfld!f$dfXd$fld&fld$|fld&|fldfldfX,rstartvperiod,VFpalettestartp  d fdf4d$fld&fld$fld&f4,rstartvperiod,VFpalettestartp  dfd(fdf <d$fld&f ,rstartvperiod,VFpalette   Vpalette 8 & colp&<P colldfldfldf<    JNgJRg   NLNu=|3+8A0.-H,8=|+:=|+<=|+>=|+TBn+VpN̒..9f..9fN..9f 6..9f NuHBn+8=| +:phN̒0..:nCg=@C=@04NLNu0..Ba @g @&g|MgJ|PgH|HgH`|KgH|gK|SgKh|g;T|xg1n|yg1n|zg1n|{g1n|1gf|1g|gذ|!g|g|g|g|sg|tgv|M6gڰ|K4g¼|Gg|G7gp|P2g~|H8g|gŠ|g.|& gƢ|0g|g$|.gD|g|gt|gİ|%g8|1g*| gV|g1԰|g|-g8|.g@|/gp|f a7$XNu|;m |Em>< d< g < gNuaaa5a5VJnngv=|5b g nHl^=@0.aH=@H0.Jnhg |r g a4RnH0.HaGv=@aH4=|J0.va" . gaE"Bnpa4`4a zJEfaNuJnCZg n(0.fNJNu n0.g n0.g~ n0.g n0.g n0.g n0.g7d n0.g n0.gf n 0.g n0.g n0.gNu n06f a5XONu n-06g/* n06g n.06g n706gR n06g n06g n<06g n>06g n?06g n$06g n%06g& n&06gR nD06g n+06g" n)06gN n/06g n06gҲ n 06g n*06g n"06g n06g n!06g n06g n06g݌ n;06g n:06g n906g nE06g6 n006g n206g- n306g- n406g- n506g- nA06fNz nB06g | n 06fN2`-a-`7:a-a^0.fJnhf0.&=@+8J@k=|+:A-H+.0"@Bl@1B4Jhn0 >.0 Gn0$ABlA1BSCfa/ha1``1Fa0Bn=|pa0=n04+8pfN̒0.04nfgLaJJ@k@HA81=|&pgN̒Bn+8=| +:phN̒=n.:04a0a0a$Nu=|f`0.06g|gB|gB|gDf|gBL|g|gn|gNuHBn5dBn+8=| +:phN̒0.&n.:g"0.A4JJp gP5ea`8.&H+8=|+:phN̒L.:>:Bn0"o0.0"B:.0 n0$<CEo 2C`@gH06=n&04aP5eLNuHBn5dBn+8=| +:phN̒0.&Jnhg0.fn.:g2Jnhf"0.A4JJp gP5ea` aP5e8.&Jnhg8.fH+8=|+:phN̒L.:>:Bn0"o0.0"B:.0 n0$<CEo 2C`@g$H06=n&04Jnhg=nf04a P5eLNu0.04ngFXn&gG^nfgFNu0.04ng7nfga."`bBnaa0.04nfg*ng*`*D=|=|=|=|NuH=@+8=|+:phN̒L.:8<N˔LNuHa(?A?C26/:/>/ a>?CLNuAnEG0C@n2E6@n6NuvNuaa-a-Ra.=nf+8=| +:phN̒2..>n.@JAgbL.:L06ajJBgn.@gL.:L06aJBgnJCgh@AH#<#@|%=0<ENp0.04anaEJ@kD>HA20A40A60At00ALO(ppa=n04+8=| +:`\a,a,NajBnJa,`a,P% n .Bn#<0< Np-|#<=|#,=|%2=n.D2=n.@2=@a-n2+8pjN̒0..8g,?Bn+8=| +:phN̒02..:nf"ngl n2gz.2f`Bn+8=| +:phN̒0..:ngnfg n&gNu=|+8=|+:Bn+L0ҀH#<|%=0<ENp=|%<0<Np=|U%<0<5Np=|+8pkN̒a6.2ga( a6pON̒=n.>2 ..:2fa'.2f/a'a6|a52n5`gTA۲|o0.5`=A5`|o HC2Jqf a%Za1Ha'n-_2`R=|+8pkN̒a5a%4a'La'2Na5d| gz| g<|g|g|o| nU@Jn2fJn2faNuA2C2~E2G4<BFJPgH6n28n2JCk6:.0"EHCo(:.0 Dln0$E(DoRF7Cn0 7DTTTSBfJFf$Nu.2f a4a4a4|o@ Apa&a&Ta$a&4`&NNHz?<;NA\?<Hz?<=NAPJ@jA-H,8=|+8p4N̒Nu=@5BHnC/<?.5B?<?NA fT?.5B?<>NAXA20< 0QBnCN0JnCf$ACD60< 0QAJ:CDJ0<QACC0<QBGAIL00pAI`20pAIt40pAI60paAt1pA1pA1pA1pTG|m:.IJMAJpPg(At00PA20PA40PA60PHBGBFAI00pAI20pahAhhJ@jB@n0 l2.0 H`FG|mLIH+NAXJ@kNuA-H,8=|+8p4N̒Nu n,0"nHJ n0$nIKNuB6n6gP6a=@5DA  0.5DHA1aĈJf -n0&5:`B0.5Da.a n5: .56".5>a!8.5DLGLH/3@?<INA\L'5:@0.5D2IK;aaаnf -n5:0&a"0.5Da!0.5DN`aav .6Bn6NuHBG?< NMTg><??<NAXLNu\FASTDESK.BSC[1][The file, FASTDESK.BSC|cannot be found.][ OK ][1][The FASTDESK.BSC file|is damaged][ OK ][3][An error has occured|when Saving Desktop][ OK ]Bg?<LNA?<NATNu0.$Jnhg0.dHr n8.l JHaL0H<.>.r@aLB0*RFl:REr0.̺@mJl.l J-H6HaNL0=@7HaaBLB0*RF@l :REr0.$Jnhg0.d@m0<AxC0NQ=GlNJnpf=|pBnJ`,6NuAxB@ fpNu  fNuJnngaJ@f Jn5bg aa\ n<$n0&Jnhg$n0*@lHB0(-H</<?<HNA\JgZEL%p-@0&-@<-@8"-AD @@-H8-H<2<CXSAf-H@ @a,NXG|(mB@Nu<Nu/<?<HNA\Jg@-@0*"-AD @@-H8-H<2<CSAf-H@ @a+B@Nu<Nu[2][Do you wish to name each|Segment or save them under|their present names ?][ Name | Save | Cancel ][3][A loading error has occurred. |you may try again or cancel.][ Cancel | Retry ][3][The file you were trying|to access cannot be found.][ OK ][3][The pathname chosen could|not be found.][ OK ][3][Access not possible.][ OK ][3][Invalid drive letter.][ OK ][3][An error has occured.][ OK ] Desk File Edit List Run Special About FAST BASIC- Save All Load Program- Show Info Insert Program Quit Delete File New Segment Cut Copy Paste Clear- Search Replace Replace Marked Print Program Print Clipboard Dump Out Buffer- Show Codes Clear Output Run- Trace Program Delay In Statements Track Variables Open Immediate Window Small Clean Up Large Clean Up- Save Desktop Load Desktop- Clear Error PreferencesDISK DRIVEDUSTBINCLIPBOARDPRINTER{ϐmӐܐff33@ff` 330  @@896vh?  'D@G@G p @r(~(QExQE@QE@QE@QE@QE@QE@QE@QE@QE@QE@QE@QE@((@ wwwv{^^owv{^^app Pcnpp S{`psP`sFp PcNpp ]n??D????s Loading A Program Saving A Program Deleting A File Rv&>Vn*Nr.&FZ~2Vz(8HX h.t     8(thx|Hl@l7\\B H PO>OX8Rv*Nr.2&2V2z2222 2.2R2v222* ) .0H`x 8Ph"0A 0 (L @0 X\ pb o |  0 H ` x   8M\ hMl M M M M * / (G @V Xk p|  0 H `Bz(BXBpBpBBC BtBBBBVo{0H`xnnnn n8o nnn0nLxLLLLL L8LPLLLLMMMDXMGMTMX\T\o\-^`-hx(@ PXqAV gЎ"Ҏ"A"`A g"Ҏ"A"`Nua`a`a`a`0<`$0<`0< `0< n0$n0< Jnng&aaa=@\aaZaaaNuJnng&aaanZn a(aa`H=n04+8=|+:A-H,8p!N̒LNuH=@+8=@04Bn+:A-H,8p!N̒LNu=@5BaJJ@k2?a=n5B+8=| +:piN̒0Bnh=n5B&=|naNwVNuavaj n0*a ngL.:HALnnGL/ND _JBg,JCg&H+NpLNuH0<?NpLNuB@=@+8A4-H,8pNN̒Nu0<`0<`A2C2< B@JXg JYgR@SAfNua0.5DHAL pJh"gZ |-H,8=|+8p4N̒ ..9g8 ..9f0?.5DA20<BXS@f0.5DHA21a`=_5DNuXNu[2][Do you wish to save |the changes to the|program first?][Yes|No|Cancel][2][Do you wish to save all |the programs before|quiting?][Yes|No|Cancel][0][ Text Not Found ][ OK ]aACL0< JXg>$QJj"g4Ar-H,8=|+8p4N̒ ..9g ..9fabXNuXS@fNu$Ԉ!B$Ԉ!B$@!B!BB Bh&B,B0B8BNuH2A AHA8Jpk$=p+8=|+:AHH-H+na~HH+<=|/+:=|+8plN̒L.:HL`*|fna:a `na(avH+<=n04+8=|+:piN̒a`vf=|+:phN̒L.:Nu2^ J>{2222`W`W)2`=w@zL0H-n0"|n=|A"|`|n4=|AR"|GE0<46S@fNuHAB40< BXQA?0<BQNaȤaaa8N,anaaJnka.N3RJ@gRa=|+8pkN̒ n0&@"n@BQ$n4&n4Bn6=n6JnCZgBT2BT6BSBS(n0&DHNFLNrHNGL-M7H=|+8pkN̒NHLHT2HSLSNTN |OpA Paf hu"fNpaTaLNGNabJnBg.nCNuaaJnCZfa.aBnCJnCZfNHaaP6N_NILNGa:LNuIBJg> LJf| NԜA2NmV"nCR(.CVSB0SgJfBNuL0B.C KCJBP@aAtCEGL8< 0246@PASDf0.n0 =@NuJf.-n5J-n5N-n 5RB5V/<?<HNA\-@5F-@NuaaJgJnk=| +:phN̒0..:nfhA-H#4A5F-H#8=|%< .".Ҁ-@#<-A#@B#D-n#H#H0<1Np |O A Paf hu"f`* nJg2< BAfNuIL8< H/?<INA\LSDfNuJg/.?<INA\Nuaa=n+8=| +:phN̒Jn.>gJn.@gL.:L06a@JBgdJCg^JgNH@0HB4Ԁ-@#D-B#H-@#<-B#@A5F-H#4A-H#8=|%<0<1Np` BDN˔=n+8=| +:`ba`axI8:< JTk=T+8pfN̒pgN̒TSEfNuH@;2AIJpg a(aNuJnfka&JnkaAtCEGI8:< 02468kBBn+8=|+:H+L0H06a.=|+8pkN̒ n0&"h@(I$n<4*SBQBQ$n4&n4Bn6=n6*n7XHNFLa=VHNGLH-M7=|+8pkN̒NHLHT2HSLSNTP6aNpaNBnCaRa< A#rD4.vt6.r8<NfLNuHBn+8=| +:phN̒0..:n&g nff>LJnhgL^8.nVtD8.vrD4.t6.r8<aLNuH?=|%

=B#@=C#Bp6Np=|%

aJng Sn`aJ@faS@=@Ha =@aaBnpaafN%HCxHЉBABD  gDg>RA f AR`  fE(4<Rn2`TSBf`0LNuHCxBABD  gD@l>RA f AR`  fE(4<Rn2`TSBf` CxLNu0.Vnjno0.Vno<0.2.jIA=@VJnVjBnVa0.va=nv7-n<6NNuaa"adJnngBaR0.a&Ax 0 g Rn`a*J@f BnHBna^adBnpaaN%JnngaJ@f Jn5bg aaі nnv8.rDDN n8B0(-H80.va=nv7-n<6NB@Nu0<Nu nNuC(B@pTR@|m-h8-h<-h@-hD=h H=h"J=h$L=h&V=h(\=h*Z-h,N-h0R=h8l=h:=h<p=h>vaNualL06aʖaBn+8=|-+:LH++@=n+8=|+:piN̒LHT2HSNTLT2NY`aL06a"Bn+8=|+:L^Y@BH++@=nf+8=|+:piN̒a&aaNaaN9^a`B0."Jnhg0.bt=@jNuaba˚a΄L06aBn+8=|+:LY@XBH++@=n&+8=|+:piN̒aadaXNaa6N9^a`H@A8CLBAJgXgRA A m0<` T`0LNuaaa(Jg=|Va a`[1][ Fast BASIC | (C) 1986 Computer Concepts][ OK ](_Hy-_N&g =|+8A-H,8p4N̒NNu=n*#2`=n*#2`=n*#2H=@#&|(mn<#&A0@kH=@#(kH=@#,A#"0<sNBLNu   % A#&-H#A%<-H#A#<-H#A)-H#A'-H#"NuN~pMN̒=@*=|%<=|%>=|%@=|%B=|%D=|%F=|%H=|%J=|%L=|%N=|%Pp(Nh=n#2*NuNp=@*=|%<=|%>=|%@=|%B=|%D=|%F=|%H=|%J=|%L=|%N=|%Pp(N`=n#2*NuNp=@*=|%<=|%>=|%@=|%B=|%D=|%F=|%H=|%J=|%L=|%N=|%Pp(Np=n#2*NuH?=|%

=B#@=C#Bp6NpNu@SBASCNu=|%=B#@=C#BpENpNu-|0-|0 -|0-|0-|0-|0A+"-H*A0-H*A+8-H*A.8-H*A,8-H*A/8-H*Nu=@+"HAH=@+$H=@+&H=@+(Bn+*A*" <NB0..8Nu    -J.Obg<ae <zb $LB.Od<Gf"C2g>(|ff6<UT`<If,C2g|<(xaf6SCUT``\<.f"C2gT<(xahfF6UT`<Af POd6<g^L&H@J@g0<a H@aH@a`b0<a0a`PNL&0<a H@aH@a`*N2(&L0<4a H@aH@a`ȼ<AmL<znD<Zo<_m6&L<0m<9o<Am<Zo<_m<zox <|g$x <&gx<%gx<#g x<$gxS (fRD |gf|g|g| g| g0aB@aa`Ja( VDDmSgS`BS8DgBSNuJnOf :f0<6aB@aR` fp(aB@A@av`* <fnp&a`RB@A@aP`* <fHp$a:RB@A@a*`* <f"p"aRB@Aa`fUg0NuXpANuDodgy token-KO-HO*HOb-HO<k|:o2|Fo`pANur |lr FFaVQ`C`NLbZrpnljhfdb`^\ 0D2*TJTga`2 A<:a`V|<`,r%az0aQ`.8|<`8,r%a`2<0aQzJk Q`0aQ`|<`,r$alzfSEj2<0aT`A;aBQ`0123456789ABCDEFr"a"ga<"fa`r"a2 gjR`d< a Mp&nONu|<`,C6BC(kBARAj܄SAfJCg0av`JCfr0a`;B@'d H NAOfN.LEOfgaR`HLNrAOfN|LEOfga&`r#a`2AAar|a `r2AAAar&a`\2AAAar%a`F2AAAa`6Xga`2 A`C`fga`|@gV|BgP|DgJ|PgD|Rg:|Tg8|Fg0|Hg2|Jg,|Lg|Ng|Vg2|Xg,`T`TTX`Tga6`2 A`X`No entry in DeTokKeyTab!!#(-379>FLSX]kmoqsz-137;?Y_w| &/8@JRWak} ",6:?INimqw !$(+.02579;=?AFKQW_fp     % . 6 ? G O U ] f n s   >    $ + 5 7 = C E J H P X ` h n w { "  CI #,4<D    $ . 7 : G N U h r { 7>   X   # ( - 2 7 < B G L P T Y ] c h m r x %   $ ) 3 : B I@gNuXB@ANu@THENBELSEDGOTOFGOSUBHREMJ\LDATANRESTOREPWHILERSWITCHTCASEVPROCXFNINKEY$INKEY`!b#d(f)hSNDREGjLOGBASEl,nPHYSBASEpHELPr:t;vERRORxERR$zERR|SETMOUSE~RECTSCREENWIDTH?@[]SCREENHEIGHT>ENDUPDATEENDIFENDSWITCH{~CALLCHAINCLEARGRAFRECTCLOSE#DIMENDPROCDEFAULTDEF|ABSENDRUNTXTRECTPRINT#INPUT#PRINTVDU(TIME12$*TIME24$TIMEESCAPEHEX$READAPPLREADPOLYGONNOTONOFFLENRESERVESCREENFREESCREENFREEACSASNATNDEGEXPINTLOGLNPIEPIRAD%TANCOSSINSQRREPEATUNTILFORMAT$(\DOFORM^SETWINDTITLE`SETWINDINFObGETWINDWORKdGETWINDCOORDSfSETWINDCOORDShGETWINDPREVjGETWINDFULLlHSLIDEnVSLIDEpTOPrGETFIRSTtGETNEXTvSETDESKxHSLSIZEzVSLSIZETOSTEPNEXTIFRETURNINPSTATOUTSTAT&INPUTINPFORRS232LINEENDSGRAFMODELINETYPELINEPATLINEWIDTHLINECOLLINE FILLPERIM FILLSTYLEFILLCOLFILLPATFILLCIRCLEMOUSERESERVETXTXBASETXTYBASETXTWIDTHTXTHEIGHT GRAFXBASE"GRAFYBASE$GRAFWIDTH&GRAFHEIGHT(OUTXBASE*OUTYBASE,OUTWIDTH.OUTHEIGHT0OUTDUMPDOUTHANDLE2OUT4HIDEMOUSE6SHOWMOUSE8CLS:HOMECHR$@GET$RGETREC#VGETBYTES#BGETDINKFPAPERHTXTSIZEJTXTEFFECTSLTXTXPOSNTXTYPOSPPALETTERPOINT(TGRABTPUTREC#XPUTBYTES#VPUTWAITBUTTONWAITEVENTWAITTIMERWAITMESSAGEWAITMOUSEXWAITZPC\<<^>>`DIVbMODdEORfORhANDj<>l<=n<p=r>=t>v+x-z*|/~^EOF#EXT#BPUT#BGET#MAKEDIRDELDIRLISTFILE$PATH$DRIVEMAPDRIVEDISKFREEDISCFREERENAMEDELFILEFSELECTOPENINOPENOUTOPENUPPTR#FILEATTSFILETIMEFILEDATEBLOADBSAVEMENUTAKEMOUSERELEASEMOUSEDSQRPOLYMARKMARKTYPEMARKSIZEMARKCOLPOLYLINEINSTALLPERFORMTRASHSEGFREESEGNAME$SEGMENTBLIT{something}WENDSETCOLLEFT$(RIGHT$(MID$(ASCINSTR(EVALEXEC}|}&}%}#}$$}$}DUMPVARSDUMPPROGLOCALCURSONCURSOFFCURSCOLCURSLEFTCURSRIGHT CURSUP CURSDOWNDUPDEV#REDIRECT#LAUNCHMEDIACHANGEVARCOUNTFIELD '"TAB($SPC,DATEUK$.DATEUS$0SYSTIME2SYSDATE4TRACE6TRACKING8KEY:ALTTRANSBLIT@SYSVARBMANDEL(DJULIA(FSEARCHLISTJeremyėѕHyR-_T-LO=@OJn6g|g |+g|f.nPNu=@O.nOʰ|g|+g|g |gJnOf&NV/ .T>aj .TBakN aNu(nO` HaD#`LHOAC~ g"XQaDLNuHaDbLOHaDlLNuPHy`ai .TBajN _Nu@ANu;#/ASbv '@[jv#;MZfx!9J[lx +:Ug{ 3FSbp.J]t*Jmp}Computer Concepts Fast BASICSyntax errorEnd of programOut of memoryBreakEND encounteredMissing equals signNo such variableInvalid variable nameUndimensioned arrayArrays don't work!Indirection address not evenInternal error - Bad variable typeIllegal assignmentOut of range for a short integerToo largeType mismatchString too longMissing right hand bracketMissing closing double quoteInvalid functionACS/ASN rangeAccuracy lostBad exponentDivision by zeroEXP rangeLOG rangeNegative square rootToo big to be realTAN overflowBad FOR typeMissing TOMissing commaCant handle multi line IFs yetMissing THENBad token for a statementNo such line numberBad array nameArray too bigRedimensioned arrayBad array indexUndefined arrayBad address modeBadly formed addressEND found during assemblyBad assembler instructionDevice handle expectedOut of assembler rangeBad size qualifierUndefined assembler labelNonsense statementBad segment numberNo segment is freeMissing LabelSegment Load errorNothing to PUTBad token for a functionBad CLEARVariable in NEXT doesn't matchIllegal comma in NEXTOut of DATAFormat too shortENDIF expectedNo such labelUnknown GEMDOS ErrorTokenising errorUndefined procedure/functionToo many parametersNot enough parametersENDPROC without being in procedure= without being in functionUnmatched type for VARStatement illegal in this contextBadly positioned assembler labelGeneral error (-1)Drive not ready (-2)Unknown command (-3)CRC error (-4)Bad request (-5)Seek error (-6)Unknown media (-7)Sector not found (-8)No paper (-9)Write error (-10)Read error (-11)General error (-12)Disc write protected (-13)Disc changed (-14)Unknown device (-15)Bad sector (-16)Insert disc (-17)Invalid function number (-32)File not found (-33)Pathname not found (-34)Too many files open (-35)Access not possible (-36)Invalid handle (-37)Not enough memory (-39)Invalid memory block address (-40)Invalid drive spec (-46)No more files (-49)Range Error (-64)Internal Error (-65)Invalid program load format (-66)Setblock failure due to growth (-67)STOPNo active menuMistakeON rangePrinter not respondingUncorrected editor errorIndirect string used as parameterBus Error!Address Error!Illegal Instruction!Divide by zero!CHK Instruction!TRAPV Instruction!Privilege violation!HO.K-LO=lO=n6ONJn6fb`HO.K(HBO=|ON/ 0<a|2BnO-WON3 9NN3aPaYa^NaWa:(_/ =n6O.=| QFBnQHBO |-HOa(_OgJ\g,TLBnOa$<.P|rg|f Jlg \`p`\p`Vp`PH.f$.f6.f .gN\LNup`N\`(nOa$,<.P|rg|f`0< aQNuH/.OaH(H-IOBQnOf*/ (nOYLr2,ӮO8Oa6(nOYLBT-LO(_a$-_OL?Nu2IAL p"h@NuT$LJ\gT0k|g|`lCN` .OTgTpv`.jjdf`nljhfdb`^\ZXJHFDP<>8:@R8..,$" @>N"  B\B\BNuXNuTNu\NuPNuBJf0 @NuT La"L1INuTY9JNuP L| T` La Lb Lc Ld Le Lf Lg Lh Li Lj Lk Ll Lm Ln Lo L   @AB *  f P6Q6R6S6T6U6V6W6X6Y6Z6[6\6]6^6_6 h n t   ܀ Ʊ |NHN N A NW FB HGA !! Pp ?1 h  H @ D Nw >F | THB 4Nw "Nw Nw 6Nw :Nw \Q LHA P Q R S T U V W X Y Z [ \ ] ^ _     J Nw DNG J NW   p+`.aLnTPNgaV($O͵@eRnPDnPaN,BnP"BPB.PIBPPa| PJJ.g ?.Pa=_Pa gB.PKz<F"|4h(gJ.PKf@g"4BBPBA<FC4hJ.PHg(4(.P(g .PHf4(.P2fp*aJfzJhk.P-.P7J.PFgEO.PxangZRQa J.P@gtJ.PFgn nlPfta`=@OJ.PFgTJ.PAjN nPfFJ.PGgtaGO6`&P Bz aFGO&PBza6GOBBB[z a&.PANu nlPf``Nup-`PPK:fp/ara`p-@P-@P-@P|lfa`Z-@PzNuPPK:afp/arJ.PGgtaN .OJg R-@OJ.PIgH(nPUaqf~ .OapL@J.PGg p[aKHEOtaQp]aK2TnP"a_.P/.PBHNL-_PB-_P>DnPBPPPKNu:fp/arJ.P(fJ.P2f,a.P)NuJ.P2gBB.P3ZB.P)Nup*aNuk::.fp/ar .P(fJgJ.P2gJ.P(faB`TaF`F . P(f,?aPJNu0 .P2g@|>PJNu .P2f @|>PJNu .P.gj<Nu j<Nu:fp/aragp.aX@`:hfp/araJ.P(fJ.P2fa.P)NuJ.P2ga|.P)Nuk:&fp/ar` . P(f |>PJNu . P2f2JP8g:fp/adra`4:fp/aNra`:fp/a8ra`J.P2fP:fp/ar4FZBBaJ.P(f.P)ZB.P3Nuagp.aX@.P3Nu:^fp/ar . P(f SP.gp.a`kj:5fp/ar .P.a PU .PPJNu0<`` 0<_`0<[SnPX<fzNuzNuJ.P(f4BB.P)ZBJ.P2f:fp/ar`:fp/ar` F .P.a|4`:lfp/ara`k:Pfp/ar` .P(f-nP(P2p-@P.GP(a0<|>PJNuk:fp/araP`P .P2f 0<s|>PJNu . P(f 0<t|>PJNu:fp/aHr<fa` . P2f2JP8g:fp/ara`:fp/ara`:|fp/arax`:ffp/araa.P)Nuk@:Hfp/ar .P8a Pa ,4.P)Nu0<}` 0<|`0<yzNuk:fp/apr` . P(f 0<|>PJNu:fp/aJrJ.P(g J.P2gH` J.P2f@a.P3Nu.P3`ڌ.P)`:fp/a ra@.P)Nu:rfp/a r`:`fp/a ra`:Qfp/a r`:8fp/a r.P) .P8a ,4Nuk< . P(jv . P2j: fp/a nr .P2fp*a ^` .P(f Jfp/a J|GP(a0>|GP2a$4F^B8JBG<jrfrYANu . P(g"J.P.fp*a : fp/a r<<@` .P2gp*a : cfp/a ra F<PJNuBBBNuGP(`GP2` GP(` GP2`+ +<kgj<gj<n/ E a v$_<g@`:< jP< k0g6g< kg8` .PPJNu: 2fp/a r<fJ.P(fJ.P2ga<.P3 .P84NuJ.P2fa2.P) .P.4Nu: fp/a Lr .P.a` BnOnP)O` BnOnP3O4.OBBNu: fp/a ra`: fp/a ra`: tfp/a r`0: \fp/a raF` 751`6: 6fp/a rB.P2Nu: "fp/a ra .P.a=@O2Nu: fp/a nr.P)Nu: fp/a Zr`40<Nu0<Nu: fp/a -|PBBO=|OQPFBPBPNu nPfD-nPPBP`-|P>-|PBJ.PFfQP?=|P$=|P&J.PDg =|P$=|P&nP?PGNua2A A@gxagp,`FF=FP<F|Pk4BPBAL .Pg/ $|a$_aBnP"nPFPG|.PJNuH pg$< gJ.PDg2.SnSnSl a9RnP"`LNuERROR: WARNING: Privileged instruction Odd-byte address Absolute reference Null branch TnP"a@0<:ka9`Nu<gj$$g$Ff*Nu$HBJBgFBfNuHH°fNu4H°fNup.aBNuJ.g H`arLaJ.PFgEO4<gj`$a ۮPۮPNuJ.PGg0EO&S0.P$U@nP"fp a8BnP"tanpaQJ.P@g&HHnO/?.O?<@NA JkbLNuJ.PBfNuEO"nP&SQNuA; EHNunP"k*g(nP"S/J.PDg0.SP"nSl p a8Q Nu$nOB4UBWf +g -f <,<Nu<NuWLDHMFC_H J.PFgl??.P"a .!PJg8JnP"g p a7BnP"$|a|!PJnPFPG$Harp a7BnP"4J.PGga6J.PCf4JPf-LP=BP LpNu.nONu 7HzHAxCO>p~QAO>C-IgJ)g =|+8I-L,8p4N̒NLNuaKaKa=aK|.aKJ@gDOn4,a a4 a.?H NML0Jk0a߀aNup`Bp6`/.PB?/ NM*_0aV0/ NN*_0-_PB-_P>_P&DnP(_PPKBPzNup4`Va8L`a8T`aH.a7=@Ta7NuHyX<`HyS`HyX`HyX2pa Sk?a7l oNa7b0QXNu<k|rg|Bg|gUaGNu=FPNu<kJ.f$O͵,e\|FbA`jNaP`޼|Gg|Gg|Ge|GbFNAQHp``zp#`hp2`bpH`\<k=FPNuT=|rPNu=|rPNu~|zxvtrpnljhfd##.PNL&&+f~|zx,trp9Dj9tbz^\?;*2<~ ~z("?# \99\9|9998:J::69:R:><2N>zxvtrpnljhfdb`^\ZXVT]P]^J_v_DB``b`:86\a0.bcjjk">??.?B>@ ?D ?k c0cRk veeJ*^jjkkl\llmf*eJgh"8w(m^mmn6noop4pxppqrrHr^ \Vs$:V:stPJHFuNuuuw w wNwww0xxyPz&${z{{gi .Jx >? ?@@@@?@{t@VA&AA2AAAAAB0BB'<k|pf^aC _ NuHnO`<k|pfBaC=@Q@NuNNLNz nOO` nOt a|fTaa@|lg|fU-LOL@aP<k|lg=FPNuT` g/ (@aXY-LO(_`AT<k|rg.|Bg(|g"ahE0DP/ (IaY-LO(_`TU"nOX `<k|Lg@|g|`la`T<j(f`X<k|Lg |`la`TNup<`Na?6`FpA`@a?N/ ?.P(nO NԜJ@kr2$O͵e&OBgBgUA?0JAf(O/ a6<.P|rg|fҊ.W=_P(_Nu<k|g"|g|8fhNn`dNn`ZNn`P<k|g2|g"|8g|:f,Nn`(Nn`Nnz`NnN` pq`^a>F/?< NN\NuBga>4?a0`a>*?@?<#NN\Nua>/a0Da> _a Fa \Nua= @a 4pa HBGNu?<?<NAXJkSD`<kaO,Ha/<kaOLGf=FE`N$"4`J002`@  "`6L !iH`"gg`f` f`(nO0.O`Np>0.QHNup>0.QFNu<k|pfa==@QFNu/.TAX-HT`B:.QFBD<k|rg|g|Bg|g|lg|tg| gּ|"g|$gUH a=|L0|ga26@kg?0< SCa'Q02p nO`a'Q<.P`l=FP0< a' g-@TNux`LJnQFg>r2.QHg4QFHADAg(nQF0< `a'jQ`<k|rg|g|BgBDBE`=FP`0< a'4`H a;2L00< `a'Q`H a;L0|lg$|ff|2fnQHgd?0< a&2`?H a;|L0|ffL20a,R`nH JDf.|ga;" nOa{ nOpR@JfL0Nu nOax,`a;.aL0Nu.T?PTa*BnS@aQ,.ga@< gJ<g*<cְ<g2.S@|ga&$AQJRnS@`JnS@g0<a&SnS@`a%2.S@AQJB0a*0@TNu<kzx|f<k|*g| g|"g6|$g|lg|tgؼ|rg^|gV|BgNH aKL0f|fg0<?a%^HaLpxp"nOEQJg Rf`N| g<"gRg <,g`x`,( EQJ`"Rg<"g` "ggز<,f`~H |b Ha L@aIL0`pga$`0 @x`0< a$`a9820< `a$Q`a9(|lg$|ff2nQHgd?0< a$V2`?a8|ff20a)`=FPNu<k|FbA`NNм|Gg$|Gg&|Ge*|Gb$FNAQ 0`BGNu .OBGNup0.Q@BGNup8`p`(.4`xLdRj6B**~|.tr.nhjhfdb`^\Z 8TRPNHDB><2<BNZfr~".   t..   tREADME2 t SPEAKER BSC Ct LPEAK PRG t SPEAK PRG t >gvB Computer Concepts SPEAK module. The SPEAK.PRG file on this disc is an extension to the FAST BASIC program which allows your computer to speak. It can translate ordinary English text into a list of sounds, called phonemes, and then speak them through the ST's sound chip. The previously undocumented keyword, EXTERNAL, can be used to send commands to the SPEAK module and to any further modules which may be released in the future. An example program which uses all the commands of the SPEAK module is also included on this disc, and is called SPEAKER.BSC. There follows a description of the EXTERNAL commands recognised by the SPEAK module: 1 Translate a string to phonemes and speak it. 2 Speak a string of phonemes. -1 Return an identity message. -2 Return the translation of a string into phonemes. NOTE: The SPEAK.PRG program must have been executed before the EXTERNAL or | command is used. This can be done in two ways: 1. By running it from the GEM desktop (double-click on SPEAK.PRG) 2. By running the SPEAK.PRG program from FAST BASIC with the command LAUNCH "A:\SPEECH.FST\SPEAK.PRG","S",0,R% When the SPEAK.PRG program is run it installs itself in memory and stays there, waiting for the commands described above to be sent to it. This means that if the SPEAK.PRG program is run more than once without resetting the machine there will be several copies resident in memory, waiting for speech commands and occupying about 28 Kilobytes each! ---*--- EXTERNAL = Communicate with external modules. Purpose To send a command to another memory resident program. Syntax EXTERNAL | or = EXTERNAL = | The vertical bar "|" does exactly the same thing as the EXTERNAL keyword and makes calls to external modules slightly more readable. There should be no comma between the command number and the string parameter. Only negative command numbers will return anything, the values returned ALWAYS being strings. Example SPEAK=1 |SPEAK "Hello folks!" or TRANSPHONS=-2 PRINT |TRANSPHONS "You call this speech?" or ABOUT=-1 PRINT EXTERNAL ABOUT "something" un  this program. NPJ  NPPZ $ {ϐmӐܐ2H& Introduction to the speech module.2H Phil Martin:H. Set up a variable to mimic a SPEAK command.: TSPEAKp8H, And another to report module information.8 bABOUTpx4H( Yet another for phoneme translation.4 pPHONSpx(H Install the SPEAK module(Td.fp.@*A:\SPEECH.FST\SPEAK.PRGl*Sll&DT4H( Print out the module identity string4($ bABOUT*modules((H Now try to say something(  TSPEAK*HELLO VwaitH TSPEAK*This is how Fast Basic can be made to speak!HVwait\ |A$p pPHONS*It's not quite Ahmeega standerd, but its very clever!\ |A$Vwait$ |A$Vwait. TSPEAK*That's all for now..: TSPEAK*Have fun with the SPEAK module!:  2&*Type in some text *: I$2$SPEAKI$$ I$p*QUIT  Vwait prrt  ll*l addr_field|f`:Vpaddaddr2$l addr_field|f:dtown$pXget_numberd llll*Townl town_field|fd8Vpaddtown$l town_field|f8fcnty$pXget_numberd l ll l*Countyl cnty_field|ff8Vpaddcnty$l cnty_field|f8jpcode$p M@MXMj.&.*...2.B.F.J.N.R.V.Z.^M>MT. ..T~|NxNvO.rpOPQ(QVQTdb`MvMMN0RSSPNLJH0DB@><:86x.,*(&$(bF LL TvUU,.6U&UUVVlV]]]4aabBcd ~|d&xvtrpffnfthfdb`^\ZXViRPNLkkFDB@><:862fr|(&$" mT^j  ,X|6d@*2l3f  NN N^aJ$`DaH`DzaGJ`DaI`DaH`DzaG4`DxaI`DpaI`DhaH`D`zaG`DVaIR`DNaH$`DFzaG`D0Nu an~NuLao(~Nua5|ffNup`4a4F~Nua6JGg|g|f4ANuBNuDNu`a& 9a8ЮQBBGNu .PBGNuA$ BGNuH/B?< NA\,_-@SBL?NuH/.SB?< NA\OLNuaa3BGNu BGNua3FN4~Nua38N>~Nua3*N~Nua3N~Nua3ND~NuaXJGg|f N~Nu|f30Nb~Nua2N~Nua2N~NuN~Nua2N~Nua2N~Nua2NX~Nua2N`~Nua2vN~Nua2N<~Nua2 nOp~Nup>0.ONu0.Oa"nOp0.O`WD@nOS@~NuaC ~Nua2> nOCrfQ0p~NuB1 QO ~Nua2a$0|g>?a2,Ha2a$",L>a2.C "$$nONzp0~.WNua2 a1a#a2C"/ W (P$nONL.W.Wp0~Nua1a#a1a1ta#$a1c ~Nua1|~Jg 0 nONupNua1ja#ra1a18a#r$a1.c., nO"H`Q ~Nup~Nua1(a#0a1Pa0JgS@|fg<|lf/a0a#&$a1Teb , nO"H`Q~Nu$a1.e`pA`a0/ (nO =|ONԲJ@kr2$O͵e.&OUA?0JAf(O/ a14.W(_Nu?<NNTHBGNua0NuaNJGg"|g|f02Nt~NuN~NuNGNua0,N~Nua0N~~Nua0N~Nua0Nz~Nua/N(~Nua/zN:~Nua/NwNPJ  nrJF& F{ϐmӐܐNHB Best if run in monochrome, this program shows all the avaliableN0H$ FILLSTYLES avaliable to the user.0H By Neil Gardner&8pn4&Hlr&Hpd&Hvfh,4np&Hrjp&Hllllll 8 )xscalep|@ )yscalep| *&p  *v&z)xscalelz)yscale&z)xscalelz)yscalev  *&p *v z)xscalel&z)yscalez)xscalel&z)yscalev  &pr&p*)opt_onep**)opt_twop** )opt_onel)opt_two*tdd&z fv fz)xscaleldd&z fv fz)yscalelt"dd&zfvfzxscaleldd&zfvfzyscaleftopt_onet*,topt_twoN&p&vr&p@Z&pr&p&vNX)opt_oneph)opt_twop @)opt_twopX   ("<lf*Press Any Key(.">lf*To Finishr(pB.np&8rjp&8             Further documentation for Fast BASIC version 1.05c =2 LPRINT The LPRINT command has been recoded so that it will send characters to either the parallel or serial port. It decides which port to send characters to by interrogating the XBIOS and reading the configuration set up by the INSTALL PRINTER desk accessory. Printer control codes can now be sent directly to the printer with the LPRINT command, eg. LPRINT CHR$27;"E" sets emphasized mode on EPSON compatible printers. Previous versions of Fast BASIC used different ways of sending control codes to the printer but this will now remain the standard method. INSTALL The INSTALL statement will now correctly load programs from a directory where the directory is supplied in the filename string. i.e. The statement INSTALL "DEMOS\BLITDEMO.BSC",10 will get the program "BLITDEMO.BSC" from directory "DEMOS\" without affecting the PATH$ pseudo-variable. Error Traps The major fatal error vectors are now trapped so that the famous bombs don't appear when an error is caused by a program. Control will return to the editor and an error message is printed in the information line. The fatal errors involved are: Error type Bombs Reported Message =5 Bus Error 2 Bus Error! Address Error 3 Address Error! Illegal Instruction 4 Illegal Instruction! Divide by Zero - Divide by zero! CHK - CHK Instruction! TRAPV - TRAPV Instruction! Privilege Violation 8 Privilege Violation! These errors can't be trapped by an ON ERROR statement in Fast BASIC. Listings Program and Clipboard listings can now be sent to either the parallel or serial printers according to the configuration set up by the INSTALL PRINTER desk accessory.         ~Nua/N~Nua/N2~Nua/NH~NuN~Nua/N~Nu<k|dg UN&~Nua/:|ffNXGNuaF|g|gJGf/*NuN~NuNB~Nua/.N(~Nua/ N~Nua/N~Nua|g|gJGf.Nua{~Nua{~NuaȾ|g|gJGf.JjDNuNuNua|g2|gJGf.Jgjp~Nup~Nup>Nufg`fg`aT|ga- nOan O~Nu nOak O~Nua./ (nOB4< g<+gD<-g4a(_Nu< g<.g <9b<0e am*GNu~pNua(_`a(_Nua-?aa-|ff`2gtJ@gn4HBJBf:HHBnOb:>SAgSA nO"H$nOڳfQ O~Nua-84 | br Bg `a-/|lgXt fSBf|ff nO`g1`0Q Of nO0p~Nua,a-aa,~|lfa-a,.gSa-(|ffvJf.Wp~NuA"d."H&nOd$nOµf/ggg _`X.Wp>Nu _S AR~.WNua+Ha`a+|ff$& .TZaf @"Aan$& .TafanNHSnLan$& .Taf|an0HSf,.U^BBSFBSJBSNBSRBSVBSZBS^BSbLSFanVRAL SnamHSNLSVCamL SfamHSFRd>LSFNtHSVLSNNtHS^L SVam$<vNk-GU6 ~Nua*HaRa*|ff$& .TZae @"Aam$& .Taeam@HSNNtHS^Lam~$& .TaebamHSFNtHSV,.U^B .Tae>HSf .Tfae0HSn`<k|rg|f0Jlg.\/ <kJ.f6|g"a<.P|rg|fJlg\`a*"f(W`XNua`p`8a;x0k|pf|g|g"|g*p`a`\O.a) W |fa)/@|g /|`a)/@|rg|fdJlgb\/L <kJ.f|g"a<.P|rg|f0Jlg.\`<kafa:¼|f <k$Og p:`^$O Z "Ё Jkn `m(Z`O|lg =FPNup`& _CgCgCgp;`a`dO.a(acB W nPfa(H |g <r`a(vH|rg|fPJlgN\/L<kJ.f|g"a<.P|rg|fJlg\`<kafa9|f<kf` WU abLajr$&ab W L Jk aug k`au|gj(o`fO<|lg=FPNua`jO.a(ab| WH nPfa'H|g <rt`a'H|rg|f:Jlg8\/L<kJ.f|g"a߼<.P|rg|fJlg\`<kafa8|f<kf` WULab Labz&(*aa WHLJ k atg k`atgj(o``O <|lg=FPNup"`a&|@fJgX<k|g|gJ|gB`<k|Dg|g|g N|pg a޶<.P|rgμ|g0|Bf L g (@=|PNu<k|g |`la` =FPNu L <k|gJg\(@<k|Dg(|gv|g ʼ|pg J|g|ga"<.P|rg|fr=FPNu<k|g|Bg|`la>` U=FPNuX `Jlg>\<k|g&|Bga<.P|rg|g` L g(@`ad|f `p>`NJlg\Jg:(@ \gX<k|gab<.P|rg|fJlg\`aU `BnSv<k|g*|Bg0|g6|g |`la^`Jlgn\`JnSvgSnSv`JnSvgX`Nu<k|@g|gƼ|`la`X<k|ga`RnSv`C`Nrplfhjhfdb`^\ZXVTJHFDLD>@:0*06640.," NuPNu\NuTNuXNuXJf> GNu g (@=|rPNuAal(I=|rPNu gB/ (@<k|g,a<.P|rg|f@Jlg>\`Cf*(_`*ATa/ E0DP(I`<k|g|gT|dgp`J0a Nu/a$ _|ff|g a#a^XNu/ (nOB4B4a(_XNuXa Nu"nO i6gJQfp@`, . C0Yf@fNu"F(G`"nO igJQfp$`ifPINu<k|pg|vgUa"tJgdb|Dg||Ff LI?a0S@g<k|lfA`0g /(I`z/ UA<k|rg|Bg|g|lfa`UE0DP / (@`8 LI?a0S@g<k|lfA`(I=|rPNupt`<k|fBnO`XU-LO=|O`-LONq<k|g |`la`=FPNu|bG` JSNu<Nu!a`./ /a g\<k|Tg|g |gaպ`LJg(@``a|Tg|g|f `X<k`a`GCpNHN0HNYO/NLHN&_`&_L>GCpN N0N NHN&_GCpN "/BgNaQ/?<NaQH?<N. aV$G?<N&_N_FC`N8<HTXdpr~ N aQaP N aRaPHN aPaQaPHNLHN. ,/1Fpc dЁ/a$$H _ 1@C._`Q$GNBSNuJSg\CS QCrtvg.e6"H(( DfJg8 A"BeE#J$%hNu#h Nu(d"$ &`"b MNup`2ESJgN"RE&Iѱg $I")"Af` %i IАESJg""RE&Hg $I")"Af`Б%i"Hf*HNu!nS-HS Nu/.TNuHa | mRnQHJ.TgaJ.Tfd|g0.SnSnSoaa0/|m@=@%=|#,0.SnS=@#<0.SnS=@#>pNhaaaLNuJ.Tf| g| fBnQHaJ.Tg|VT|f@AN2LR@6&2.Sa`vLSnSnSm(B@nS4nSnSmnSHSBD:.SDE`"HSNuJ.TgaNu|WT`A-HTB.TB.TB.T=|TLHSaPBnS=|S=|%p'NhBn%?A?@?Coo`n#?A?B?CWWJEk$n#Bn#F?@?A ?B ?Aoo`"n#>n#J?@?C ?B ?Co o p1NhL@m Am8/adL@mAmaTaNua=@#>Bn#

NhNuJ.TgHp%Nh?.)=nT%G?a-@TBNuaDH#<=|%0nT2=@#<=|#(pN``@a =@%

pN`a v=@%=_%=_#=_#<=|#0=|#(Bn#,p N``aa hnT2?aa ZnT4?aa LnT2?ata >nT4=@#B=_#@=_#>=_#BGL@a0..aa nS?@aa z?@aa n6LaH#<=|%ara =_%0nT2=@#A=C#@@=B#BB#D=A#H=@#J=AT:=@TE#Bn#<=@#>pN`Nua(=@%<?a/Qa` =@%=_%<=_#H=_#>=_#<=|#(=|#,B#@B#DBn#Jp NuNVanT2?aanT4?aanT2?aanT4=@#B=_#@=_#>=_#<-|#(=|#0p N`NVa*=|#0N`NVa=|#0N`NVNVa0nT2?aXa"nT4?aJa?a@a ?a6a?a,a=@%>=_%<=_#B=_#@=_#>=_#<=|#(=|#,p Nua?aa @0@=@#,@S@C%<"QBn#(p4N`Nua?NVLT28N˔NVa*=|#0N`NVa=| #0N`NVNVaDnT2?NYa4nT4?NYa$nT2?NYanT4=@#B=_#@=_#>=_#<=|#(Bn#,p NuBn%=_#Bn#

p'N`Nu?a=@%<0`a=@%

=_%<=_#@=_#>=_#=_#<=|#(Bn#,0<N`NVNVa/a"a?aa?aa?aa?aa/aa?aa?aa?aa?aa=@%>=_%@=_%<>=G#F<=F#D-_#86:4820@ASBSCH#$& aJgkp>Nup~Nu @"A$B a8`&( * aJ2gk`Haz<ka|b|gaL aIgj`a"`&(*L$raIgk`|Ha"<ka|ba(L8aIg\jX`Na`/a<kab|bJGf^HH~Nua`޾|g |g$p` @"A a=$& aIgk` @"A$B a7V&( * aI(gk`Hap<ka|b|gaL aHgj`a`&(*L$raHgzk|`rHa<ka|baL8aHgLjN`Da`/a<kaX|bJGfWHH~Nua`޾|g |g"p` @"A a<$& aGWHH~Nu @"A$B a6N&( * aH WHH~NuHaj<kaܺ|b|gaL aGWHH~Nua`&(*L$raGWHH~NuHa<ka|baL8aGWHH~Nua`/a<kaX|bJGf_HH~Nua`޾|g |g$p` @"A a;$& aFgj` @"A$B a5L&( * aGgj`Haf<kaغ|b|gaL aFgk`a`&(*L$raFgvjr`hHa<ka|baL8aFgHkD`:a`/a<kaN|bJGf]HH~Nua`޾|g|g&pN @"A a:z$& aEgj` @"A$B a4@&( * aFgj`HaZ<ka̺|b|gaL aEgk`a`&(*L$raEgdjf`\Ha<kat|baL8aEg6k8`.a`/a<kaB|b JGfП~Nua`|g|gpN @"A ?a9ra9<~Nu @"A$B ?a3@&( * a2<~NuHa`<kaҺ|b|gaL ?a9j<~Nua `&(*L?a2a2l<~NuHa<ka|baL8?a2B<~Nua`/a<kaT|bJGf" ~Nua`|g|g&pN @"A ?a8$& Ca8<~Nu @"A$B ?a2F&( * Ea1<~NuHab<kaԺ|b|gaL ?Aa8h<~Nua `&(*L?a1Ea1f<~NuHa <ka||baL8B?a18<~Nua`/a<kaJ|bJGf"aCGNua`޾|g|g"pN @"A ?a7t$& a8<~Nu @"A$B ?a1>&( * a1<~NuHa^<kaк|b|gaL ?a7<~Nua `&(*L?a0a12<~NuHa<ka|baL8?a1<~Nua`a6Ha<kaL|b|ganL ?a7<~Nua` @"A$BL?a0^&(* " $ a0<~NuHa~<ka|baL8?a0<~Nua0`a64HaJ<ka|bF|g*|gJGf *La7~NuL?a7~<~Nu _"|$_?a7<~Nua`Ha<kaZ|b*JGgaL?a7<~Nu&L?a7<~Nua`a/a<ka|ban"Jg ~NuaT`aV/ap<ka|ba>"Jg ~Nua$`pNa/a8<ka|b a"aANua`a/a<ka|ba"aAb<g Nup>Nua`aa<kaJ|bJ|f O.X"$ԀHBJBfhHBnOb^4"nO$I`!Q4"nO`QЁNuaT`aar<ka|b|fRaJVHH~Nua"`ava@<ka|b|f aSHH~Nua`aDa<ka|b|faUHH~Nua`aa<kaN|b|faWHH~Nua`aa<ka|b|faTHH~NuaZ`aax<ka|b|fXaPRHH~Nua(`4&HCHCJCf((HDHDJDfH@J@gHAJAf"҃e ҄e<Nu<Nu$_a.WN&_ nOC"/gJgfSAgS@f`S@@NH@B@H@=@O*nO 0 @OdV0<9AVCTFBBQNuFC`N(.44Lp N~ `*~L`+@pBGNu0HBGNu BGNup0(2 P"nO`Q~Nup0.O"nOW|gnOD@~Nup NFGCpN8:<>HPV\bhpv|Nu0Nu Nua1a* Nua+|a*>HNua<Nua<0Nua< Nua) Nua+Ha*HNua<Nua<0Nua< Nua1Ra) Nua)HNu.hcTJgp0(/ Pa _p|c |d@Ё1G/aL"_"3@"nO`QNu1G$nO"P`QNu"nO`QBNu<kzgz|bC`NpNj$>4~|zxtrpnl"&LB@@EU g$@A0\f@fNu(K`pNu|`|`|` |`|`| g" @0@f0k|`g|gULNuCaf"`JEgJnPj^p1aQPL|BOAO`;`NHHIpT2AfЇH`aצLI$B00@f""H`BQ`rpNa|0k|`g:|gVULNuaҁ|0k|`g|g4ULNua|0k|`g|gULNua`|0k|`g԰|gULNua>|0k|`g|gULNua|0k|`g|gULNu gh @0@f4|gNAXJkPNuaa?<?|pfTa/?<BNA Jk Nua?<?/<?<BNA JkBGNua?<?B?<BNA*?|B>BNAW/E>BNA Jk HHBGNua:?<?B?<BNA*?|B>BNA,/E>BNA Jkr BGNuHnO/<a?aa@O?<@NA Jk>NuHnO/<a??<?NA Jkp.OBGNua0/ ?<9NA\J@kNua/ ?<:NA\gJ@kNua"nO°nOd>B1NuaxCPZ$nOS@kQB/.OHnW?<NA\CPZ?</ ?<NNAPJkh$_"JO“Ol\CW.Wg * `  J fSg f / ?<ONATJj|f" O~NupNN,CPZ*.*BaF"nO2SAk paQ`(?<NATJk"nOA:?</ ?<GNAPJk"nOJf|\ O~Nu<k|pfaan"nOB1??</.O?<CNA Jk0Nua?<?HnO?<WNA Jkp0.O~NuaaJ|pf?<?HnO?<WNAJk/.Oaj-_O=@OBoNA NuaJ?<?HnO?<WNA Jkp0.O~Nua aܼ|pf?<?HnO?<WNAJkp/.Oa-_O=@OBoNA NuBBgan/ a.aa.aP/G?<=NAPJ@k$=@O?<?B?<BNA Jk/?<?.OB?<BNA Jk?.O?<?NA `VBBBga/ aaԆaP.a/G ata>/@?<NAXJknNua??<ENAXJkXNuBgaa?a?@?<FNA\Jk4NuaBgaHoaa.BgaBBHzFHo/aa?aӾaH@?<KNAL@BGazaJ_aJ_`aP??< NMXBGNu?< NMTBGNua,/ nOX@| o@ J@fp a: ah ar X@| lA`PM O ~Nua/ nOa a" a,O ~NuX@a$:NuH@?a:Nu@@aNu4H 20 A0Nua^/ nOa@ aH aR O ~Nua8/ nOa( a a, O ~Nu@a/NuH@a/NuX@@BGa߾a Nu?<,NATBGNu<k|pfXa??<-NAXJk(Nu?<*NATBGNu<k|pf*aߞ??<+NAXJkNua߈?aѴa8a0@/a*,C>N nlPg0Nu8@//<`//<`//<??<@NA JkNu//<`?aҰnOg"nOB1 nPfaU>-@OHnO/<??<@NAJk8 /.O/.O`/Jf/`aު?aaH>/EO0@CNL@aa6|lg0Nu2Vxj/ /<??<?NA Jkp.OBGNu/ /<??<?NA Jkp0.OBGNu/ /<??<?NA Jkh .OBGNu/ /<??<?NA JkD .Oah~Nu/ /<??<?NA Jk .O".Oa~NuHnO/<??<?NAJk p0.OnOdP"nOB1/ /??<?NAJk "nOJfOS ~Nu|"nO/ O-IO/<??<?NAJk"oJg  e`JgOg/I` O S~Nup//a?a a/@aa/@?<?NA JkNup//aܦ?aaܜ/@aaܐ/@?<@NA JkNuat?aΠaD|g(|f nOaRO `a nOaO >|g$H /.O/??<@NA JkL0` nO.SpaTQ><.P|g |rg|Bg|lg| g|tg`p a.TNuUp a$`Rp a"Lan|rg|g(I`2|f@`H @OHnO/<??<@NA JkL0Nup NaX?ä́aH>/|aL@|lBH (nOBnO<-fFnO`<.g <0m<9navL0~JnOgaL@aa|lgTNuBnW=|WNuJnWj=|+8pkN̒JnWk Bn+8pkN̒=|WBnWNua, IN 2J@g|gN4N@NuRnWfp`SnW nWfp=@+8pkN̒`RnWfp`SnW nWfB@`aaH?aVa$?aPa?aFahHa6a\Ha*aPHaaDHL=_+<=_+:=_+8HpN̒0..@HL@BGa0..>HL@BGa0..?aja4|lf?a(-@,80` a-n7,8@=@+:=_+8p N̒Nua?a(a|lf?a-@,80` aH-n7,8@=@+:=_+8p!N̒Nua׺?aaּ|lfaaע-@,8a ` a-n7,8 nOH@B@H@B0-H,<=_+8p"N̒Nuaj?aɖa`-@+<=_+8=|+:piN̒NuaD?apa:-@+<=_+8=|+:piN̒Nua?aJalHa:a`Ha.aTHa"aHH=o +8=|+:phN̒0..@H~L@a0..>H~L@a0..H~L@a40..=_+<=_+8=|+:piN̒Nuaժ?aaHaaHaǺaHaǮaH=o +8=|+:phN̒0..@H~L@ab0..>H~L@aR0..H~L@a0..H~L@a^0..TN :a$?aParHa@afHa4aZHa(aNH=o +8=| +:phN̒0..@H~L@a0..>H~L@a0..=_+<=_+:=_+8pdN̒p>0..8Nuaр?aìav?aâal?aØab?aÎaX=@+@=_+>=_+<=_+:=_+8peN̒NuHaa2L@NupNataH炀a>adaH炀a.aTaH炀aaDaH炀aa/aa/aa/aaо/ /4"/($/&/(/ */,/.NDH~L@8a~ /L@,a~ /L@ av~ / L@af@NuaL/axaB?ana8?ada.?aZa$?aPa?aFa=@+B=_+@=_+>=_+<=_+:=_+8-_,8p*N̒NupNa/a a?aa?aa?aa϶|ff=@+>=_+<=_+:=_+8-_,8p+N̒~0..8HNu .7~NuaϢaaap|ff=@+8a nOB0-H,8p4N̒Nu~?aB>?alQa2=@+H=_+F=_+D=_+B=_+@=_+>=_+<=_+:=|+8p3N̒Nu~?a>?a$Qa=@+@=_+>=_+<=_+:=_+H=_+F=_+D=_+B=|+8p3N̒Nu aΰ/aaΦ?|lgBoBn+8 oLH+Bp3N̒JogLH+:=|+8p3N̒-o,8Bn+8=|d+:B+<=nT"+@=nT$+Bp*N̒-o,8=W+8p2N̒ oLH+BJogLH+:=|+8p3N̒=|+8p3N̒Nu?|a?@aa?@ aaͺ?@ aaͮ?@`a͢/aa͘=@+8-_,8p2N̒NuBg`?<az?aap?aaf?aa\=@+H=_+F=_+D=_+B=_+8p3N̒Nua:/afa0?a\a&?aRa?aHa?a>a?a4a?a*a=@+B=_+@=_+>=_+<=_+F=_+D=_+8Bn+:-_,8p/N̒Nua-@,8p6N̒Nua̰?aa̦?aaa`H炀aaaPH炀=o+8=o+: / =@+< =@+>pFN̒L@~0.. /$=@+<=o0+:=o2+8plN̒L@~0..@Ha~L@~0..>HalL@~0.. /=@+=_+a?a4a|ff=@+>=_+<=_+:-_,8pKN̒~0..8HNua/aa?aaɼ?aaɲ|ff=@+<=_+:=_+8-_,8pLN̒~0..8HNuaɄ=@+8H@=@+:pN̒Nual-@,8pN̒NuaZ?aaP?a|aF?ara=o$+<=o&+:=o(+8pN̒L@0..@H~aL@0..>H~aL@0..GGBfABB ABBNurpNuJBk`p$g$4 BBANu&jDRBkRAk2gA lDAJjRJjD2aJk2NuE @"A$< LevaaaGNu&<ԚxK(<z`&<;)(<\za| mJjprtNua?aJk4NuG 4 @"A$Baa a aaa_NuaL8`aL8aL8`Jj4dRAB$RAk"gA lDAJjDJgJjSNupJjpNuJjdRdRBA&(RBk,g :SE؄׃QB lJDBJjDgJjSNupJjpNua$<[ةvUC`f.kJjTeRGH?a*,$<vaaEaJjRA4g @"ArpjD@H@aa`a&<[ة(<7(qzUE`t.k|JjvTeRGH?axH&<xzaxL8aG ~a0JjRB6g @"A$Btpr0jD@H@aa`2H?a @"A$BaHadRAB$RAk,gA lDA⨴fgJjRJjDNupNuJjdRdRBA&(RBkg :SE؄׃QB ljDBJffgJjRJjDNu|n$$<ڢv`j| n&NuafE~*,ada^ @"A`Aa`fafG8~H?ava @"A$B`Ba`aBRG`a:gaANug Ea @"A~ "aaQNu*,ETa$&`aRG`agaBNug&Ga @"A$B?<Laa0SWfTNuHGaL8`$k*j.BUH$B,$/7i+Z*SFe4K`+>Zu! sǵk}1ۏt=.p{?2 k( ` h& 4^TmԳ1ne}I<" 6FŏŏLG`g0VGf͖tЮbⰏs=%mecV,57SF€f/-Z\*x*n{PIЋ e|! sLK:Nװ:i2)2}*)Қ ?NL ?Ӿzp e%7Xx}  XÀp T%0 FF X)}/Հ ` ` vH;`[FF$;`Nu@P$ k(C@ԥ* _2ɿ/ k:#x !$'+.158;?BBBaJAfNuJAgfSANua< g<@f J@gRS@Nu<Xf `@<Nf `4<|fa`(<gθ<|faa`<CfJ@gBS@RBnOb Nu<{fFJ@g(H@@ }gaz`J@gL`RSANuH }gaR`LRSANu<1eҸ<9bD 0e 9bSAE E` *f"RSABc8:g@DEDa^SDPQNu $fRSA`@ LfRSABcDa0SD QNu Rf,RSA:BcDaSDkPQSE PQNuH@@?aSWgL` Nu<(f )ga\`<Af J@gS@<ae<zb`<af J@gS@<Ae<Zbx `p<*f JBg``<BfVJBgSSBNuH"`H 2EXBBBa|JAfBaLHBBBHBJk4EFgFAX SBf`8Hav(<<g&<xza"aRF>LxaaL0AXBBaJAfNuaH< g<Dg(<Eg <.g<dg <Zg<zf<DRB|(bNu<^fPNu<|g<g"<|fa`<+fJj H a|LNu<-fJjNu<1eH<9b@D 0e 9bSAE E`H@@?a0SWgL` Nu<(f )ga `aN< g<Xgj<Ngn<|gr<BgB<Zg<.g<JFf>Ek$aQg 5eR 9c0`>AXEX 0gSRGNuJFfT0gJGkGg k S@fJEg0jD@Ec00S@f0GkgS@f0g"H !0f S@fNu0gS@f0gS@f"H0 !0f S@fD0jD@H|e0B@H@d|e0B@H@ |e0H@0DF 00`f  `RFfNu,(( %  PROG1.BSCPROG2.BSCPROG3.BSCPROG4.BSCPROG5.BSCPROG6.BSCPROG7.BSCPROG8.BSCPROG9.BSCPROG10.BSC)<<<<<<<<<<} } GH(J>H(GH(>H(GH(>>H( {GH( >H( GH( 2>H( 2H(2bH(2H(2H(   !H  !H  !H  !H  !H  !H  !H  !H  !H  !H  !H  !H  !H  !HA:\*.BSCI     0 0 00 `0 0 ( H = @      0 @ P `  p0    0@ P` p  ('`  ! " # 0$@% P& `' p 6)5* + , -0. @/ P0 `1 p23 4 5 ( =7<t`8 9: ; 0< @6 P >E? @ A B 0C @DPE `= p 0H0 nHxnHnHnn\  N     1,   0 0 PAP>p P  G8@e@ D $   0  ` X 0 0 0  0  0   @d $  p @ 80!p0 0 8@ 0   2  p p   < P`P@ 8  ( @  h    x  X @` @p 4<4 `X   `p  4<4  X  p  4 <4 p p ( NPJ  2 x|~8|`x?x??~O~0 pwF=|2b ! x|~8|`x?0x9??????2b 8JAn example to demonstrate the BLIT keyword8J>J *0>>J ** Reserve enough memory to store the picture **>>J2 ** ,**>>J2 ** Start of reserved mem -> BASE% **>>J2 *0>²BASE%l%BUFF%lPFllllll 8 oldofst%px  VTAR>J2 ** Load saved picture to reserved mem. **>&*HILLS.DATl²BASE%&>J2 *0>>J2 ** Arrays for BLIT transfers sc -> Screen **>>J2 ** di -> Display **>>J2 *0>Fsc&( fldi&( fltg&( fFD4rJ4 * By disabling the mouse the program is speeded upD>J2 ** Create arrays for BLIT **>NĺData2 &,p  sc&(&,f  &,p  2di&(&,f  &,p  Vtg&(&,f  >J ** DATA for BLIT arrays **>6Data2JL>n^lnlll^lllllJJL>llll^lllllJbLVBUFF%^lBUFF%l lllllllb>J2 ** Set-Up variables **>.ofst%prbase%p..PʼrJ Go into Endless Loop.@J2 ** Check the SHIFT keys and move as indicated **@$&l&l&l&$bofst%pofst%vdzd&hffxdzdd&hf|ffbofst%p@ofst%prbase%pbase%vrbase%pP@base%pofst%px@Ȁofst%prbase%pbase%xrbase%px@Ȁbase%pNB2di&(fpd²BASE%vbase%f^B<2di&(fpd²BASE%vbase%f<  "J Has picture moved"4ofst%joldofst%@p4 J YES! - Move it. X j2di&(flofst%lllxlsc&(fllxljbVtg&(flll llsc&(flllb  (oldofst%pofst%(  VTAR:J. Set up memory containing cross-hair target.:N0Data1&,l&*&,pL*& &,`BUFF%p&    (J Data for cross-hair target(6Data1L2L2L2L0L0L0L0L0L0L0L0|L0L0L0L0L0P `8  `x414 P    0  @0 h8D 0d  $8L`'xlT   #  ## %  NextPreviousCancelReplace AllCase: Sensitive InsensitiveBFind: _Replace With: _XProgram Information  Show Tab Rulerv ab Hz/:NuH z0(2(@g4"P&1::g*g2g:ftgl`2g\`NgL`g<`.E\@f#`@Y@j0(Y@1@`,E0Y@j0(Y@XBhmBBhf1@ LNu<   2*&  ,* P0 hn8"&`x    00H8  88  D $0( b," " @xh <0 NV8Zz  ( b    jL,$   " F"  & *  &f6 N,B^ P:>x:8$**N0(t vt n^h~V~0>22Jz  >F   , N( J J &  6> $XHF2*N 0&  ^@,Vh`D$`NNNM ` B  B@ B @A @A @A @A 7  6@ `@6   @6      `@ ` @4$P "   @@p A P &P  ? `00 4EUAH``" @`@ @  0UU`@#  h ` @FQEH@F U_UUP`DD .01 UU`Q1@?0UUW]UUT@@0@ DDuUUX<DDDDDH` UUUuUUU  DFj~ ꪪ *UUUV@5UUUUUUU@U@ jDD@UUUUADDDPDp?DDHUUU_UUUU`5UU$DE $ `* w 2UUUU@U`?UUUUUXUUE@QlB**@|DDDPUPUUPDDDDEDDDDEUuUUUUVUAP@DD  ꪪUUUUQTUUW?UUUUUUUUX` @`@*¨ dDDDD@@ UUUUTU UUWDD@DDdDD`UUUUPUUUUUEEUUWPDDD@@ ?(>0@5UU Ug UUUUTUUUUU]EUUU@  j  h@DDDDEDDHU Dt@DFEDDDFDDGDHUUUU@UUUUTUUUUTDDD`*   ꪠ?UU]UUU]1UUUUTUuUQUUqUUUU`UV !  *+*⪪!FDGDDFDDUUUuUUWUUUTDd@LDDDDFDDDD@_DFDD@DFUSUuUQUPUUDDDP*ꪊ@(  UUWUUUUUUQQ1UWUuUUUUUUUTUU .ꪪ@ *$\D\DDTDDDUUT]UUUUuUUDDDDDdDdDTDDGU]UuUUUWUVUUEDDDDP@ j@0? j11Q5U]5UUTU]UUyQ1U]UuUTUQUUU `* @DdDUUTuUUDEUWUTDGDEDDEFdDDDDEDDuUuUTU]UWUUUDDDDH   |jꪪ qU}UUU@QUUUQQ11UUuUPQU]UUWꪪ (ꪨ$DDDDEUUUUUQUUUDDTD TDtDD$GUWUUUUUuUTD@   * UUUUTDUUU1 1UWUPUY"  DDDFDUEUTDdDDDDFD LD@dU WUMUTDDDDF@@0* WUUQQ1qUqx : DGD uUEUDDLD LDdDEDDDuU uUUuU D  0  V ꪪ Q UQUQU ]U ;'!,!,|NL`LLL<L"!?# qqq!=$ aaa % AAA% % f<`f`f` f88~8  f`f<~|lff` f88~8  f<~f`x~f< f`  f`ff`l`> ~ f<<`<> >|<<|<` f`f`f qqq f``ff f`f`f qqq f<``f f~<<~`~<~ _aaa f``f|p f><<<`<<| AAA <|<`<<<(I JpJIJJJ K0=HILLS DAT &t 0%L0L0L2L2*.BSC"*P$lF$l(H*$(Hp@$,PP$lfj*\,<P$pP$ldP$fxf<  pP$0J" Save the icon structure from it0 &pdF$f &p@0X&llMyMask%(f0&p0X&llMyData%(f0&"J Redraw the desktop"(MyText%pF$(PVReDrawdlXDlYDlWDlHDfP    (@ `@6  @6P    `@ `"AGlGAWb.lGAblGAUGlGAGlGGblGAUGlG$J Get bit number into D3$AGlGAGAWblG$J Accrue result into D0$GblGAGlGGZGlGCbPoint3AblGsPoint3AGlGGZGlGCbPoint4AblGsPoint4AGlGGZGlGCbPoint5AblGsPoint5AGlGGZGlGCbPoint6AblGsPoint6 G $J Deal with out of range$tPoint2GblG G     3f<Hf<Cg<SfrNurNuSf$3f<Hf<Cg޲<Sgز<Tg`Sf<EgƲ<I`u*O*mMqOq - ЭЭ// Bg?<JNA / as 1 Speak 2 Speak GA4NPE4CfA4NuH3f0<@@@@`Jf(HJgfJj*HHg< n a>g`%fJj*LHg< nag`fJjfS L`l%HSf 3 <NuSf3NuSf3NuSf3NuSf$3f<Hf%<Cg<SfrNurNuSf$3f<Hf%<Cg޲<Sgز<Tg`Sf<EgƲ<Ig<Yg`SfR%H3fR`JHSf 3 <NuSf3NuSf3NuSf3NuSf$3f<Hf<Cg<SfrNurNuSf$3f<Hf<Cg޲<Sgز<Tg`Sf<EgƲ<Ig<Yg`SfSH3fS`SfD<If Nf GfrNurNu<Ef<Rg<Sg<Dg޲<Lf Yg`Բ<Ff Uf Lg`Hp 2g<`m_J3gJfLNu @@ @ 5=%55-% =@ .-AH1NKWOWT-KWOW2T- NUH2MBER DOH2LER PUHSEH2NT AEND'ӀZ'̀M'ĀD AE2STERIHSK PLUH2S,- POYNT. SLAE2SH520SԁFAYV TWEHNTIY EHS TIY1040SԁTEHN FOHRTIY EHS TIY ZIH2ROW1SԁFER2ST10TȁTEH2NTH WAH2N2NāSEH2KUND TUW23RāTHER2D THRIY2 FOH2R5TȁFIH2FTH FAY2V SIH2KS SEH2VUN8TȁEY2TH EY2T NAY2N.. LEH2S DHAEN IY2KWULZ GREY2TER DHAEN? AE1Tހ KAE2RUHTAEY1 AE1UH1ANSWEҁARNSERARCHIցAR1KAYVALLULIYÁULARŁARRAҁAXRAҀEH2RAւARZAEY2SWAEA׀AO1ANEH2NIYAPRɁEYPRIHCEY1EY1AGAI΀AXGEH2NAIHJEYAEEY2ARҁAXRARҀAE2RAAA1RAҀAA1RAIҀEH2RAɀEY2AـEY1AՀAO2AULALULZALˀAO2KÀAOLÀAELÀAOLÀAELABLEY2BULABLŀAXBULVIEY1VAE2VEY2ANǀEY2NJATARɀUHTAR1RIYTOAETTAEAԁAETUHATŀEY1TPAEY1AEBIY2BŁBIHBEINǀBIY2IHNXBOTȁBOW2THBUӁBIH2ZBREAˀBREY1KBUÌBIH2LM€€BÁSIY2CLIM€KLAYMÀCOVŀKOWVCKCȁKCEKCHRKEH1CȀCHCSSAY2CɀSHCɀSHCɀESHCITـSIHTIYCŀDSIYÀSCˀKCOM€KOWMCOMŀKUHMCOՁRKUHCUIԀKIHTCREATŀKRIYEYTCÀKSCQՀKWÀKāDIY2DRDOHKTERDEDIHDDŁTDIYDʀJEDĀDŁLDIHDρDUWDOEӁDAHZDONŀDAH1NDOINǀDUW2IHNXDOׁDAWĀDŁIY2ERROҀEHROH1RENGLANĀIH2NXGLAEND҅EHIYEĂDDEրEEH2VEҁUWE҉UWÉUWẺUWE׀YUWE׀YUWŀIY2ERɀIY2RIYERɀEH2RIHERASŀIHREY1SEEREҀEHREҀEREVE΁IYVUHNE׀YUWŀIYEIHZSELLIYEMENMEHNTEFÙFUHLEŀIY2EAR΀ER1NEAҁER1EAĀEHDEIYAXESEH1EIY1EIGȀEY2EɀIY2EYŁAY2EـIYEՀYUW1EQUÀIY2KWULŀEHƁEH2FFRIENĀFREH1NDFATHEҀFAA2DHERƀƀFǁJIY2GIրGIH1VGUREĀGERDǁIGGŀGEH1GGEUӀJIH2SGǀGBGǀJGREAԀGREY2TGO΀GOH1NGȂG΁NǀGȁ/HEY2CHHAց/HAE1VHERŁ/HIYRHOUҁAW1ERHO׀/HAWȀ/HȀɁAY2MEӀIYTNAIYɀNDOIHINDLEIH1NDULɃDEIHI΁INɀAYIFـIHFAYI΀AY1NIEҀIYERIERIYDIEĀAY1DIE΀IYEHNIŀAY2EHAY1IAY2ɀIYIŀIY2IDEAYDIY1AHIāAYDɀIHIҀAYRIڀAYZIӀAYZIHILŀAYLIHAYɀAYIҀERIGȀAY2ILĀAY1LDIG΁IHGNIG΀AY2NIG΀AY2NIG΀AY2NICRπAY2KROHIQUŀIY2KɀIHʁJEY2JULفJUWLAYʀJˁKEY2ˁˀḰEH2LLπCLOWLɁBRLAY1LɁALIY1LɁLAY1̀ULLŀULLEAĀLIYDLAUGȁLAE2F̀ĹEH2MMŁMIY2MRMIH2STERMSMIH1ZMRSMIH2SIXZMOրMUW2VMACHI΀MAHSHIY1Ǹ̀M΁EH2NNŇNJNǀNXGNǀNXGNG̀NXGULNGUŀNXNǀNXNˀNXKNOցNAOVNOׁNAW2΀NONŀNAH2N΀NρOW2OƀOHVOFƀOH1FOˁOWKEY1OȁOW1OROUGȀUHRUH1OERORERZOҀAORONŁWAHNRVUW2ONłWAHNOVLUHVπEOW1O׀OWOVEҁOW1VERπOW1OրAH2VπEOWπIAA1πIOW1ÒOW2LOUGHԀOH1RTOUGȀOH1FOUGRUH1FOUGTUH1FOUGȀOH1FOՁAWOSAW2OUSŀAWSOUӀAXSOULƀAWEROUƀOH1ROUҀOH1ROUԀUW1ROUЀOH1ROUـOH1ROUҀER1OUL̀AO1LDOULĀEAO1LDOULĀUX1DOՀAH1OUЀUW1POՀAWOـOYOINǀOW2IHNXOINǀOYNXOOҀOH1ROOˀUX1KOOƀUW1DOÒUH1DOÒUW1DOOĀUX1DOOƀUX1TOπUW1OOHOEՀUX1πOWπOWOEӀOWZOOW2ONLفOW2NLIYONCŁWAH2NSON'ԀOW2NTAAπNOHOHOɀUNOUNOUNπSTOWOƀAO2FOTHEҀAH1DHERAAROW1OSӀAO1SOAHMπAAЁPIY2PȀFPEOP̀PIY1PULPO׀PAW2PUԀPUHTЀЁЁPROFPROHFEH2SERЀPсKYUW2QUAҀKWOH1RQUɀRKWAY1QՀKWрKҁAA1RRHYMŀRAY1MRÚRUX1LRŁTRIYROUTINŀRUWTIY1NҀҀRӁEH2SSȀSHSIO΂ZHUNSOMŀSAHMSU҂ZHERSUҀSHERSՂZHUWSSՂSHUWSEĂZDӂZSAIĀSEHDSIO΃SHUNӀӄZEZSՁSZZSCȁSKӀCS͂ZUMSN'ԂZUNTSTLŀSULӀSԁTIY2THŁDHIYTHŁDHAXTρTUXTNTUXTρGTUXTOM€TUX1MTπNIGHTUXTπTOWTHAԁDHAETTHIӁDHIHSTHEفDHEYTHERŁDHEHRTHEҀDHERTHEIҀDHEHRTHA΁DHAENTHÉDHEHMTHESŀDHIYZTHE΁DHEHNTHROUGȀTHRUW2THOSŀDHOHZTHOUGȀDHOWTODAـTUXDEYTOMπRROTUMAA1TπTATOW1THUӁDHAH2STȀTHTETIXDTCHTɀSHTɀSHTIE΀SHUNTUҀCHERTՀCHUWTWρTUWԀԀCԅENԀTՁYUW2UL€UXLUL̄UHLUL̀UXLU΃EYUWNU΁IUHU΁YUWNU΁AHNUPO΁AXPAONU҆UH2RUҀYUH2RUҀERUـAY1ՀUHULŀYUWLՀAH1GljǂWNYUWՆUWՀYUWցVIY2VIE׀VYUW1VALՀVAE1LYUWրVׁDAH2BULYUWWERŁWERWSWAAWSWEYWWAHWWAAWHERŀWEHRWHAԀWAHTWHÒ/HOWLWHπ/HUWWȀWWAҀWEHRWAҀWAORWOҀWERWҀRWÒWUHMWÒWUMWEWEHWANԀWAA1NT׀W؁EH2KS؁Z؀KSفWAY2YOUNǀYAHNXYOUҁYOHRYOՁYUWYEӁYEHSفYYCSЀAYKIYIYAYAYIHAYƀAYـIHځZEH1DڀZ"{@jS'k4y_saaJgnNuMC68000/AY-3-8910 SPEECH SYNTHERSIZER V:2.0 Copyright 1986 A.D.BEVERIDGE & M.N.DAY ALL RIGHTS RESERVED. C"M,Zaaa"aHaaaBNu<ae <{d NuC,D"g<1e<:d0J)fZ@`ذ<>fJ)fH|`İ<f1|pXJPjNuA*|p0jNu|o|.a0>.a 0>. a0C R.Qt(..oHv. `8.a0. a W:d 82zD8&&fP~>vL>\b P8 b48LzR & ,8&@2NL20 hj0j,4@t<8@pD0zDnlL0 Jb2"$$,p^L6Z`@6L(d8P4&NN:2f P"4>P &.>f80$ $2$FV6.6VJN <( V| 6 4d D >682j @8 8pdx*@V>  6 \   "NNN  $ L& " Vv , ~" 2vJ^j JnP Z>Vd ( P 4n  $ rT*0 0D>L  " >: RR8N".$B.d Dbn^jX2 8*  v2`ll|:D.: D&|&<PBBBP&&LHJHNLHJH$., THJH*&.ZR PFHH@ (0\HxT0&TDL R$6.*  $ ,;Z                                           0.a0.a0C R.Qa<=n=n=n nn nnnnp( X`BE*A&0kr(1!`B QX`A&E*pBt8kz(Sm,|g |aJgJkn`lC QNuJgHKHÇH(H@ЄH@`$a>JgJkn`lH@ЃH@ QNuJgSfBNutNuGONuYj~Nu?<?<NNXpr:Lco5:LXMo4B9=2A(B#=.Hz??<?<?<NNO NuAA  '   '                                       !    !!""""####$####""""!!    !"""##$$%%%%&&&&'&&&&%%%%$$##"""!    !""##$$%%&&''(((())))* ))))((((''&&%%$$##""!   HHz?<&NN\LNu|NuB=. H `?<?<NNXL2  _Ns//?S9=2j;=2 z =3ggf 454545#=.#44_`R444444#34#=.S9=4j=4p444A949494(((@HA~ 2A2  _Ns//S9=2kA.959595 (((@HA A  _Ns                                                                                                                                                                                                                                                                                                                                                    EY b, ~ @00*@AY fl 2/@OY T 2-,@AW fd 2/@OWD" 2-@UW B F/(@ARp 21@WX /(@YXL 0-'@AE 2/&@IY n  ,2!$@ER D" 2-!@AO 4 2- @UX D F2&@UH ^P 2+@AH r <2-@AA b"p 2/ @OH D n 2/@AX 22!@IX $` /,&@IH  . <2$#@EH ^. 2*&@DH@ (`ZH $(`CHn x x CH *, LX N /(@RX D"h4/-'@SH  (* NX6n4 ,2!@TH  x x* /H  ,V ^ &"(`Z  ,`J nHL(( J n  ,$+@L   /(@R N@ *##@W hd^ @d/((@Y n   2!&@Q  P n^  P  ($-P n^ #+T n x x T  x&-T n x x+ K n <, K @ -+&-K n <, B n^  B  .(B n^ @D n x x D  x&&#D n x x&@G n <, G  <"($G n <, @M n^-@N n < x-@F ^  * S  <, -  .  ,  ?   ULdUMdUNdILIMINNOMOMHB?< NA-@LNuH/.?< NALNu*Hpg ??<NAX`NuH?<A?<NAXL?NuH?<B?<NAXL?NuH?<C?<NAXL?NuH?<D?<NAXL?Nu?<NATNu| dH4: lP *   B  BzSPEAKMESSPEAKPHOSPEAKTEXSPECHARSPECIALSSPK_ERROxSTARTTAL"STEP14STEP1W4STEP24STEP2W5STEP34STEP3W5 STRESSED STRETCHSTRETCH_SUPINIT38S_HF_P TABSTART=FTEMPSTKqTERMINATjTESTZTEXTINTEXTTOPHTNTWKrTRANSTRANSTAB5>TRANS_REM Loads and displays a DEGAS PI1 REM low resolution picture file REM Jeremy Ruston \ Set the filename of the picture INPUT"Filename: "FILE$ RESERVE S%,32768 S%=(S%+256) AND $FFFF00 LOGBASE=S%: PHYSBASE=S% BLOAD FILE$,S%-34 \ Now set the pallette colours... \ (use 0 TO 3 in medium res and 0 TO 0 in high res) FOR T%=0 TO 15 P%=!(S%-32+(T%*2)): P%=P%>>16 SETCOL T%,P%>>8,P%>>4,P% NEXT \ Have a look at the picture D%=GET \ Reset some usable colours for the editor... SETCOL 0,7,7,7: SETCOL 15,0,0,0