NNNNNN(p NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNJ` /@`! #@%`')+-/1 3@5`79;=?A C@E`GIKOQ S@U`WY[]_a c@ogikoq Ou`wy{} O o O ` @ ` @ ` ǀ ɠ @ ` ׀ ٠ O` o!` /@`! #@%`')+-/1 3@5`79;=?A C@E`GIKOQ S@U`WY[]_a c@ogikoq Ou`wy{} O o O ` @ ` @ ` ǀ ɠ @ ` ׀ ٠ O` o!A121E_CUBE t FONTEDIT t LGRABBER t mHEX_DUMP t JAMDOSN t SCROL  t SERIENUM t SLOMO /t LEES DIT<t HPROTECT ACCAt .  t..  tDEMO CUBt E_CUBE DOCt 0E_CUBE PRGt ;\   , X                                    I                  ESCHER CUBES Version 1.4 By Jim Luczak Escher Cubes is a complete isometric drawing system. What are isometric drawings ? If you have ever seen drawings by M.C. Escher, then you have seen some examples of isometric drawings. Isometric drawing is a method of drawing by which you can create optical illusions. Escher Cubes does'nt use lines to draw with, instead it uses Cubes. You read it right, Cubes ! The easiest way to picture this drawing system is to think of each Cube as a Three Dimentional segment of a line. The drawing you create with Escher Cubes, to say the least, will be quite out of the ordinary. Anyone can use Escher Cubes. You don't have to know anything about drawing to have fun with the system. Escher Cubes Page 2 FEATURES * 16 Different Cube Colors to choose from * 16 Different Background Colors to choose from * 36 Different Fill Patterns * 12 Different Cube Sizes * Erase Mode * Works in Medium ( Color ) and High ( Mono ) Resolutions. * Drawings created in Medium Res. are automatically adjusted when displayed on a High Res. system. * Drawings created in High Res. are automatically adjusted when displayed on a Medium Res, system. * Drawings are automatically Recorded as you draw. * Drawings can be Saved to disk files * Saved drawing files can be used in either Medium or High Resolution. * Multiple drawing files can be loaded and displayed * Full Featured File maintanence system * Drawing File Editor * Drawing files can be Listed to a Printer * Drawing files can be entered from the Keyboard * Displayed drawings can be Dumped to a Printer Escher Cubes Page 3 CREATING DRAWINGS After the title page is displayed, the Drawing Screen will appear. To draw a Cube, Press the LEFT mouse button anywhere in the drawing area. A cube will appear. You can place as many cubes as you wish anywhere you wish. THE CONTROL BAR CUBE DIRECTION The Control Bar is located across the top of the screen. It occupies the area where the word 'OUTPUT' usally is. On the Left hand side of the Control Bar are SIX arrows. These ARROWS control the drawing direction. Clicking the LEFT mouse button on one of these arrows will cause a Cube to be drawn in the direction of the arrow. The cube will be drawn from the last placed cube. The UP ARROW draws cubes from bottom to top. The DOWN ARROW draws cubes from top to bottom. The RIGHT ARROW draws cubes from left to right. The LEFT ARROW draws cubes from right to left. The >> symbol draws cubes from back to front. The << symbol draws cubes from front to back. Escher Cubes Page 4 CUBE CONTROLS Next to the Cube Direction arrows, there are a number of controls that effect the way the cube is displayed. The COL Control changes the color of the CUBE. Pressing the LEFT mouse button on the control causes the color to change in ascending order. The RIGHT mouse button causes the color to change in Descending order. The BKG Control changes the color of the BACKGROUND. Pressing the LEFT mouse button on the control causes the background color to change in ascending order. The RIGHT mouse button causes the background color to change in descending order. The FILL Control changes the pattern that is used to fill the cube. Pressing the LEFT mouse button on the control causes the the fill pattern to change in ascending order. The RIGHT mouse button changes the fill pattern in descending order. The ERASE Control turns the Erase mode ON and OFF. Pressing the LEFT mouse button on the control toggles the ERASE mode on and off. The CLEAR Control clears the display screen. Pressing the LEFT mouse button on the control will Clear the screen. The SIZE Control changes the Size of the cube. Pressing the LEFT mouse button on the control causes the size to change in ascending order. The RIGHT mouse button causes the size to change in descending order. The CHECK MARK Control switches to the FILE CONTROL MODE. Pressing the LEFT mouse button on the control will switch operations to FILE CONTROL. Escher Cubes Page 5 Above the Control Bar are the Current cursor Position and Cube Position indicators. If you click the RIGHT mouse button in the drawing area, the Current Pos indicator will display the location of the mouse pointer. The Cube Pos indicator will display the location of the last drawn cube. The Current Pos and Cube Pos indicators are only updated when the RIGHT mouse button is pressed in the drawing area. If you move the mouse pointer over the Current Pos indicator and press the LEFT button, a cube will be drawn at the Current cursor position. Pressing the LEFT mouse button over the Cube Pos indicator will draw a cube at the Cube Position location. The Position indicators are a handy way of storing the exact location of a cube or finding the exact X or Y axis where a new cube will be drawn. To the right of the Cube Pos indicator is the Current Recorder Count. The Recorder has a maximum range of 5000. USERS NOTES: * ERASE MODE The Erase Mode will take a little getting used to. Cubes are properly erased, however you may find that you may erase parts of the picture that you don't want erased. See EDIT PICTURE DATA under FILE CONTROL MODE for another way of erasing parts of a picture. * POSITION INDICATORS As you use the system, you will soon find that it is not easy to place a new cube exactly over an old one. The Position Indicators can be used to store the exact location of a cube that you may want to come back to. Escher Cubes Page 6 You then can place a new cube in it's place by pressing the LEFT mouse button over the Cube Pos indicator. FILE CONTROL MODE To EXIT the program or to enter the File Control Mode, press the LEFT mouse button on the CHECK MARK at the extreme right of the Control Bar. There are TEN items on the File Control Menu. Each item can be accessed by pressing the LEFT mouse button on the appropiate Bar. RESET RECORDER Erases the picture from memory and restores the recorder count to zero. The recorder has a maximum count of (5000. Basic), (10000 Compiled) PLAY-BACK RECORDER Plays back the contents of the recorder on the drawing display screen. LOAD [-CUBE-] FILE Loads a previously saved picture file into the recorder. If there is a picture or other files already in the recorder, Escher Cubes Page 7 the new file will be appended to the end of the recorder. This feature allows multiple files to be loaded and displayed. SAVE [-CUBE-] FILE Saves the entire contents of the recorder to a disk file. DELETE [-CUBE-] FILE Deletes a specified picture file. ENTER [-CUBE-] DATA Allows you to enter picture data from the keyboard. If there is a picture or other files already in the recorder, the keyboard entries are appended to the end of the recorder. Along the top of the screen there are three lines that define the picture data information. EDIT [-CUBE-] DATA Allows you to EDIT any picture data that is currently in the recorder. To edit data follow the prompts at the bottom of the screen. Along the top of the screen there are three lines that define the picture data information. The NUL (-2) is a very handy way to eliminate unwanted section of a picture. To eliminate data items, simply replace Escher Cubes Page 8 the desired data item with a NUl (-2). When the recorder is played, a NUL is passed over and no action is taken. The END (-3) code causes the recorder to stop. When the recorder is played, it will display everything up to the END (-3) code. When the file is SAVED, the entire contents of the recorder are saved up to the END (-3) code. The HI (-4) and LO (-8) codes are used to adjust the contents of the recorder to the resolution of the system being used. These codes should NOT be edited. LIST DATA TO PRINTER Lists the contents of the recorder to a printer. RETURN TO CUBICLE Returns you to the drawing screen. EXIT PROGRAM Exits the program and returns you to BASIC USERS NOTES: * ENTER PICTURE DATA This function can be used to enter picture data that has been listed to a printer. You can also DUPLICATE parts of a picture by entering new X Y coordinates, and copying the data that you want duplicated. Escher Cubes Page 9 * EDIT PICTURE DATA Parts of a picture can be eliminated by replacing the code with NUL'S. You can also adjust the position of parts of a picture by changing the X Y coordinates. * PICTURE DUMPS Picture can be dumped to a printer by pressing the ALTERNATE & HELP keys at the same time. In most cases you must have the CONTROL PANEL DESK ACCESSORY active for the dump to work correctly. Escher Cubes Page 10 The Compiled version of Escher Cubes was created using L.D.W.'s ST Basic Compiler Version 1.0. Except for a few minor differences, the Basic and Compiled versions are the same. The most obvious difference between the two versions, is that the Compiled version does not use an output window. The entire screen is used for the program output. In one way this is convient, since more screen area is avaiable to work with. The main disadvantage is that you cannot directly compile a basic program. You must first make some adjustments to your code to compensate for the lack of a window. There is some good news however. Version 1.1 of L.D.W.'s Compiler will have the option of using an output window. This should allow ST Basic programs to be compiled without having to make very many adjustments to the code. `ØJ*oNxNNaNNV O <*BXQ+N+O+O">?<BgNhX>?<?<NhX>?<?<NhX>?<?<NhX>?<?<NhX>?<?<NhX>?<?<NhX>?<?<NhX> ?<?<NhX=|'>'?<?< NhX> ?<?< NhX=|N$.N-m2-m6/n.&|/+/NFP/m6.2Nh/m6.2N-@2/n./+ /+NFP/m6.2Nh/m6.2N-@6-k-k/n./+/+NFP/m6.2Nh-m2-m6XHlN8.N-@>NXHl /+@BNX>.N.+GF/+@JNXN.N-@XHl  N8.N-@.N8.N-@XHlN8.N-@.N8.N-@XHl43N8.N-@NR.N* @f`NR.N* @f+|NR.N* @f+|N.N,N*N(N&N 4N 2N =@N =@N =@N-@NN-@RN-@VN-@ZN =@N =@N =@N =@N =@=A=B-CJ-DF-EB-F>-G:N =@N =@N =@N =@N-@^N-@bN =@N =@-Ef>PN{4=| n n"> ?<?<N>XN 0Rn `=| n n"> ?<?<N>XN 0Rn `Bn n n"> ?<?<N>XN 0Rn `Bn n n"> ?<?<N>XN 0Rn `Bn n n"> ?<?<N>XN 0Rn `Bn n n"> ?<?<N>XN 0Rn `+|k=| n n > ?<BgN>XN 0Rn `+|ȼ=| n n> ?<?<N>XN.N > ?<?<N>X&H.Hl~NX+SB&N> ?<?<N>X.HlNXf0> ?<?<N>XXHlN8+PB NRn `@+|=| n n*> ?<?< N>XN.N Rn `> ?<?< N>X&H>N>.N./,NX.+@BHlNX.+@F/+GJNX.+@N/+FRNX+SV&N=| =|>N>.N./NX-@j>N>.N./NX-@n~=G=|=|-|Ir=|=|=|=|=n=| -|Av-|Bz-|A~-|B>2N8.N-@> N>,N./+@BNX.+@F/NX>*N.+EJ/+@NNX.+@R/NX>*N.+EV/+@ZNX.+@^/+FbNX>,N.+Ff/+@jNXN.N-@> N./,NX>*N.+EB/+@FNX.+@J/+FNNX>,N.+FR/+@VNXN.N-@.HlNX.N-@.HlNX.N-@>N>,N./*NX.+@BHlNX.+@F/+FJNX.+@N/+ERNXN.N-@>?<?< N>X0>?<?< N>X0 >?<?< N>X0>?<?< N>X00>?<?< N>X0H>?<?<N>X&H>N+SB&N>?<?<N>X&H>N+SB&N>?<?<N>XXHlN8+PB N>?<?<N>X&H>NXHl/+@BNX+SF&N>?<?<N>XXHl  N8+PB N>?<?<N>X&H>N+SB&N>?<?<N>X&H>NXHl/+@BNX+SF&N>?<?<N>X&H>NXHl/+@BNX+SF&N> ?<?<N>XXHlN8+PB N> ?<?<N>XXHlN8+PB N> ?<?<N>X&H>N+SB&N> ?<?<N>X&H>NXHl10/+@BNX+SF&N> ?<?<N>X&H>NXHl/+@BNX+SF&N>?<?<N>XXHl=?<?<N>XXHlN8+PB N>?<?<N>X&H>N+SB&N>?<?<N>X&H>NXHlBA/+@BNX+SF&N>?<?<N>X&H>NXHl10/+@BNX+SF&N>?<?<N>XXHlIHN8+PB N>?<?<N>XXHlN8+PB N>?<?<N>X&H>N+SB&N>?<?<N>XXHlNMN8+PB N>?<?<N>X&H>NXHlBA/+@BNX+SF&N>?<?<N>XXHl\[N8+PB N>?<?<N>XXHlN8+PB NHyQ+O"`PHyQ+O"`%BWBgN T>Nj.N>NHy4Q+O"`+|PHyLQ+O"`X.rN=@".VN=@$.rN=@&.VN=@(.rN=@*.VN=@,Bn.=|0Jn.f.|Nz/NXBNz//<BNP/NXBNz//<CNP/NX>NPN.N*=@2N./<BNX.N*=@4N.N*=@6BBHypQ+O"`!>Nz>N>NBW?<N T>Nj>2N>NBW?<N T>Nj>4N>NBW?<JN T>Nj>8N>N>Nz>N>N-nfBHyFQ+O"` n6WH n6WHGJFgHypQ+O"`:Jn0^H n0]HGJFgHyQ+O"` n0^H n0]HGJFgHyQ+O"`~ n0f=n&2=n(4=|0 n0f=n*2=n,4=|0 n6f=|0HyQ+O"`% n0fHy,Q+O"` =|0`vHyFQ+O"`>N^BW?<?< N>X0w>?<?< N>X0>?<?< N>X0p>?<?< N>XBPBW?<?< N>X.NN/m6.2N././.NP>Nz>N>N+|HyQ+O"`TN{hN^Nu=|:=|XHl`_N8.N-@>NP>N^>N>.N./,NX.+@BHldcNX.+@F/+GJNX.+@N/+FRNX.+@VHlvuNXN.N-@./.NX>.N.+GB/+@FNX.+@JHlyxNX>.N.+GN/+@RNXN.N-@>N.+@BHlNX>.N.+GF/+@JNXN.N-@HyQ+O"`WRN^Nu>N~ AfB`r>?</.HlN| >?<N>HnN\. /.NX>?<NT>N~.N J-f;|NCB-`*.zNz/NXBNz//<BNP/NX.Nz//<CNP/NX>NPP "Nu./.2NX>NNP "Nu.{Nz/NXBNz//<BNP/NXBNz//<CNP/NX>NPP "Nu./.2NX>NNP "NuBn<=|>=|0=|@>4N./.:N,XlHyQ+O"`P "Nu>4N./.>N,Xo=|0P "NuJn>?<BgN>X>.2P\H<.>RF>?<BgN>X<.2P_HGJFg=|>.@n>l=|<`>0N>@.N./<BNX./N,Xo=|0P "Nu n2^H nd2]HGJFg=|0P "Nu nj2^H n2]HGJFg=|0P "Nu=|0P "Nu>.0]GJGo2 Gn,SGOG^&spNzRfz n6fRnB nBoBnB n6fSnB=|DJnBl=|BHyQ+O"`4`\ n6fRnF nFoBnF n6fSnF=|DJnFl=|FHy Q+O"`` n6fHy&Q+O"`x n6fHy>Q+O"`HyNQ+O"`.`HybQ+O"`t`HyvQ+O"`J` n6fRn n o=| n6fSn=|D nl=| HyQ+O"`P`XHyQ+O"`8?<?< N>X00Hy Q+O"`HyQ+O"`p`l>8?<?< N>X00 nDf$BnD>8?<?< N>X&H>.06Rn8>.n8l=G8>?<?< N>X0 =|6P "NuRn no =|=| n ^H nWHGJFg =|=|P "NuSn=|D n]H nWHGJFg =|=| n]H nWHGJFg =|=|P "NuHyXQ+O"`>.0JGo. Gn(SGOGv&spN\b>$N./.nNX.N=@$HyQ+O"` HyQ+O"``>$N./.nNX.N=@$ nJf =|=| nJf =|=|Hy2Q+O"` bHyBQ+O"`Z=nHyXQ+O"` @`>."n=G">$N./.jNX.N=@$HyQ+O"` nJf=|=|HyQ+O"` nJf=|=|HyQ+O"` HyQ+O"`=nHy Q+O"``H>."n=G">$N./.jNX.N=@$HyNQ+O"` FHy^Q+O"``>."n=G">$N./.jNX.N=@$HyQ+O"` HyQ+O"``>."n=G">$N./.jNX.N=@$HyQ+O"` nJf =|=| nJf=|=|Hy.Q+O"` xHy>Q+O"`b=nHyTQ+O"`D=n0J=|=|HyvQ+O"`=|6>8?<?< N>X00Rn8>.n8l=G8>?<?< N>X0 HyQ+O"`P "Nu=n2">4N./.vNX.N=@$=n0J>.8VGno=G`p>8?<?< N>X00>.8RG>?<?< N>X02>.8TG>?<?< N>X04Hy zQ+O"`Hy Q+O"`Vn8>.n8l=G8>?<?< N>X0 P "NuHy Q+O"`D nLgN>N^=|NBBHy!Q+O"`*-nfB=| BWBgN T>Nj.N>NHy!FQ+O"` -|A=|=nBnFBnB=|-|A.rN=@".VN=@$.rN=@&.VN=@(.rN=@*.VN=@,Hy!Q+O"`@Hy!Q+O"`Hy!Q+O"` Hy"Q+O"` Hy"Q+O"`Hy"$Q+O"`RBnNP "NuHy"DQ+O"`PHy"TQ+O"`Hy"dQ+O"`Hy"tQ+O"`(Hy"Q+O"`Hy"Q+O"`P "Nu>Nz>N>N>N~>ND. Nz/NX>N.Nz//<BNP/NXBNz//<CNP/NX>PN.N/NX>RN.N//<BNP/NX>TN.N//<CNP/NX>VN.N//<CNP/NX>XN.N//<DNP/NX>ZN.N//<DNP/NX>\N.N//<DNP/NX>^N.N//<DNP/NX>NPP "Nu>Nz>N>N>N~>ND. Nz/NX>N.Nz//<BNP/NXBNz//<CNP/NX>`N.N/NX>bN.N//<BNP/NX>dN.N//<CNP/NX>fN.N//<CNP/NX>hN.N//<DNP/NX>jN.N//<DNP/NX>lN.N//<DNP/NX>nN.N//<DNP/NX>NPP "Nu>Nz>N>N>N~>ND. Nz/NX>N.Nz//<BNP/NXBNz//<CNP/NX>pN.N/NX>rN.N//<BNP/NX>tN.N//<CNP/NX>vN.N//<CNP/NX>xN.N//<DNP/NX>zN.N//<DNP/NX>|N.N//<DNP/NX>~N.N//<DNP/NX>NPP "Nu=n"P>$N./.nNX.N=@R>."n=GT>$N./.jNX.N=@V=n"X=n$Z<."n=F\>$N./.jNX.N=@^=n"`=n$b=n"d>$N./.nNX.N=@f:."n=Eh>$N./.jNX.N=@j8."n=Dl>$N./.jNX.N=@n=n"p=n$r=n"t>$N./.nNX.N=@v6."n=Cx>$N./.jNX.N=@z4."n=B|>$N./.jNX.N=@~P "Nu=n"P>$N./.nNX.N=@R>."n=GT>$N./.jNX.N=@V=n"X=n$Z<."n=F\>$N./.jNX.N=@^P "Nu=n"`=n$b>."n=Gd>$N./.jNX.N=@f<."n=Fh>$N./.jNX.N=@j=n"l>$N./.nNX.N=@nP "Nu=n"p=n$r>."n=Gt>$N./.jNX.N=@v<."n=Fx>$N./.jNX.N=@z=n"|>$N./.nNX.N=@~P "NuBBHy,ZQ+O"`Hy,jQ+O"`>?. N T>Nj.N>N-nfBHy,Q+O"`|Hy,Q+O"` nfBnP "NuHy,Q+O"`P "NuHy-Q+O"`.N8. N-@ >BNz.N-@ n Bl .HlNX.N-@=| =|=|=|Hy-Q+O"`Hy-Q+O"`. N8.N-@P "NuHy-Q+O"`.N8. N-@ >FNz.N-@ n Fl .HlNX.N-@=| =|=|=|Hy.FQ+O"`Hy.VQ+O"`T. N8.N-@P "NuHy.Q+O"`.=|=|=|Hy.Q+O"`P "Nu>Nz>N>N>N~>NDHy.Q+O"`.Nz/NX.Nz//<BNP/NX.Nz//<CNP/NXBN/NX>NP. Nz/NX.Nz//<BNP/NXBNz//<CNP/NX.Nz//<DNP/NX.DN/NX.:N.N//<BNP/NX.dN//<CNP/NX.>/<ANX.N.N//<CNP/NX>NPHy0Q+O"`Hy0Q+O"`bP "NuJf4-|ABnBnBnXHlN8. N-@ `4B=|=|=|XHlN8. N-@ .N8.N-@. N8.N-@=|3 Hy1Q+O"`=|=|=| Hy1Q+O"`.N8.N-@ Af Hy1Q+O"`6Hy1Q+O"`z AfHy2Q+O"`pP "Nu>N>.N./NX-@j>N>.N./NX-@n~=G=|=|.N8. N-@ >Nz.N-@ n l .HlNX.N-@=|D =|=|=|Hy2Q+O"`THy3Q+O"`. N8.N-@P "Nu.Nz/NX.Nz//<BNP/NX.Nz//<CNP/NX.N/NXBN/NX.BN.N//<BNP/NX.FN.N//<CNP/NX.JN.N//<CNP/NX>NPP "NuBW>.0TG?~ n?Bg/<N .N>?<?<?</<N P "Nu nNfBnBW?.?.Bg/<N >?<?<?</<N P "NuBW?<?< Bg/<N BW?<0?<?</<N P "NuBW?<?< Bg/<N BW?<0?<?</<N P "NuBW?<?< N>X&H>F?<?<N>X6>?<?< N>X&H>B?<?<N>X6>?<?< N>X&H>B?<?<N>X6>?<?< N>X&H>B?<?<N>X6BW?<?< N>X.NN/m6.2N././.NPP "NuB=|NBnBn8=|LJnf>.8TGno=G=|`t>8?<?< N>X=P0 n 0o,>0N./<BNX.N=@0=|6 n0l,0.0J@jD@>N./.RNX-@vRn8` n 0WH n0WHGJFg =|` n0fRn8`Jn0^H n0]HGJFg Hy7Q+O"`Hy7Q+O"` n0^H n 0]HGJFgHy7Q+O"`f n0fH>.8RG>?<?< N>X=P2>.8TG>?<?< N>X=P4Hy8*Q+O"` n 0oRn8>.n8l =G8=|`VBnL-|Av-|ABnNJn8f P "Nu>.8SG>?<?< N>X>N..RgGgD-@-G>8?<?< N>X&H .Rg@.N6Rn8>.n8l=G8P "Nu=n2&=n4(=n"*=n$,>2N./.FN,Xo.FN=@&>4N./.:N,Xl.:N=@(>4N./.JN,Xo.JN=@(>Nz>N>NBBHy9Q+O"`r-nfBBW?<!N T>Nj>2N>NBW?<(N T>Nj>4N>NBW?<8N T>Nj>"N>NBW?<?N T>Nj>$N>NBW?<JN T>Nj>8N>N>Nz>N>NHy:Q+O"`bP "Nu=|=|BnHy:Q+O"`BBHy;Q+O"`"-nfBHy;Q+O"`4./.2NX>NNHy;JQ+O"`۠BnJnf.|Nz/NXBNz//<BNP/NXBNz//<CNP/NX>NPN.N*=@N./<BNX.N*=@N.N*=@ @fHy<Q+O"`Jno.Hy<,Q+O"`VHy<.JGo> G n8SGOG<&spN=$>?8?<?@?D?n?@@NXHlN8.N-@XHlN8.N-@Hy=vQ+O"`:"Hy=Q+O"`/.N8.N-@.N8.N-@>Nj Bg`=n8Bn>.nn>?<?< N>XBPRG=G`Bn8>8?<?< N>X0 B-|=|H=|=| -|A./<@MN,Xn./<ANX-@`Hy>|Q+O"`.>Nz>N>N>>.G?N T>NjXHlN>N>Nz>N>N`^=| =|Hy?Q+O"`8>N^Hy?,Q+O"`jP "Nu``` :=|HNHy?`Q+O"` >Nj`=|HHy?Q+O"``>N>.N./,NX.+@BHlNX.+@F/+GJNX.+@N/+FRNXN. N-@ Hy@Q+O"``B nHfBnH=|`>8?<?< N>X00=|=|Hy@\Q+O"`7NjP "NuN=|:=|HXHlN8.N-@XHlN8.N-@Hy@Q+O"`6HyAQ+O"`, .N8.N-@.N8.N-@=|:>Nj Bg`=|=|HyAhQ+O"`2./.2NX>NNHyAQ+O"`VP "NuB=|=|=| >?<?<N>X>.P^H>?<?<N>X<.P]HGJFgBn`Z>?<?<N>X>.P^H>?<?<N>X<.P]HGJFg=|`BnP "NuJfp>?<?<N>X>.P\H<.RF>?<?<N>X<.P_HGJFg-|AJfRnTn>.nl-|A`>N>.N./<BNX./N,XoBnP "Nu>.n=GP "NuBm HyC>Q+O"`4ZHyCNQ+O"`'.BN,XWH.>N @]HGJFg`>/.HlNP=@J@f`.?./.NX>.SGG?NFX.+@BHlNXNg`Jn8f``>.8SG>?<?< N>X P f`@>8?<?< N>X0 Rn8>.n8l>?<?< N>X0 `JB.N8.N-@HyD~Q+O"`1>?</.HlN| >?<N>HnN\>BgNT./.NXg>N~`BnJnft>BgNT.N>N-@ f=|Jnf:>8?<?< N>X&H.N6Rn8>.n8l =G8=|`>N~./<ANX-@./<BN,XoBB-@./<ENX-@./<GN,XoB-@/.~-n~-_/.z-n~z-_~.zN>Nz>N>N.N>/.NX?N T>Nj.NXHlN>N.+@BN>NN>Nz>N>N>>.G?N T>NjXHlN>N`|;| Jn8f`HyFQ+O"`0HyGQ+O"`#.BN,XWH.>N @]HGJFg`B>/.HlNP=@J@f".HlNX.N-@.?<NT.+@BHlNXNg*XHl?</.NXW@?/.N$P-|A=|=|HyGQ+O"`.>?</.HlN| >?<N>HnN\./.NX>?.NTRnBW?<?< N>X PoF..RgG.N>Nr.+@B/.NXN>?.NTRnRn>.8nf`x>.nl=G`h>?<?< N>X Pf`>?<?< N>X>Nr.+@B/.NXN>?.NTRn`z>Nr.+@B/.NXN>BgNT>N~`;| HyIQ+O"`.HyIQ+O"`!<.BN,XWH.>N @]HGJFg`:N.Hl! NX>.N.+GB/+@FNX.+@JHlNX.+@N/.NXN.N-@HyJXQ+O"`".N8.N-@>Nj Bg`HyJQ+O"`+v>?</.HlN| >?<N>HnN\. /.NX>?<NT>N~.N `FHyKQ+O"`,z=| =n>8N./<DNX.Nx.N=@BnBnBB>N>.N./,NX.+@BHl-,NX.+@F/+GJNX.+@N/+FRNXN.N-@HyKQ+O"`Jn8f`v>.8SG>?<?< N>X>N..RgGgH-@-G>8?<?< N>X&H .Rg@.N6Rn8>.n8l=G8` >?<N T>Nj.N>N>?<N TXHl;:?<N*TNN.N-@.Nz/m6.2N-@.NJ@f-n.HlSRNXWH.HlVU>NXWHGJ@g>8?<?< N>X0`.Jf -n`./<N,X]H./<>N,XVH./<<N,XVHFGJ@gB`>8?<?< N>X&H.N6Rn8-n>.n8l=G8`-|BHyNQ+O"`> BgN T>Nj>N.N>NZnRn n oHyNnQ+O"`Z-|AHyNQ+O"`f`-|AHyNQ+O"`J>N^HyNQ+O"`P "NuBnBn-|AHyNQ+O"`> /.NNX?N T>Nj.N>N> BgN THyO>Q+O"`P "Nu n8l P "NuNHyOtQ+O"`($=| =nBnBnBnBn=|>N>.N./,NX.+@BHlYXNX.+@F/+GJNX.+@N/+FRNXN.N-@>.8SGBn=G>.nn>?<?< N>X P f>.8SG=G`JnfHyPbQ+O"` Af`>?<?< N>X Pf >Nz>N>N`>Nz>N>N>Nj>N>?<?< N>X>NBWNZnRn n oBnJnfHyQ*Q+O"`Rn` AgHyQLQ+O"`>N^BHyQjQ+O"`>NjP "NuHyQQ+O"`` Af>.8SG=GP "Nu>N^=n>Nz>N>NBW?< N T>Nj.N>N>Nz>N>N>BgN THyRFQ+O"`>Nj>N>Nj>N>Nj>NXHlhgNBWNPn>Nj>NBWN>.G =n=G>.nn0Zn>Nj>N>NBWNRG=G`>Nj>N>Nz>N>NRn n oBn`=n>Nz>N>N>Nj>N>Nj>NXHlrqN>NBWNn Rn>Nz>N>NP "Nu>Nj>NJnf P "Nu>?< N T>Nz>N>N>NjXHl{zNBWN>Nz>N>N>NjXHl~}NBWN>Nz>N>N>NjXHlNBWN>Nz>N>N>NjXHlNBWN>Nz>N>N>NjXHlNBWN>Nz>N>N>NjXHlNBWN>?<4N T>N>N-@>Nj>N./<GN,XWH./<G>N,XWHGJ@g`./<GN,XWH./<G>N,XWHGJ@g P "Nu./<GN,XWH./<G>N,XWHGJ@g-|AP "Nu`=nJnf=| >.SG=G Gf~ =G>BgN T>Nj.NBWN>?<N TXHl?<N*TNN.N-@.Nz/m6.2N-@>.SG>N./N,X^H>.n>>N./N,X]HGJ@g`>?<N TXHl?<N*TNN."N-@".Nz/m6.2N"=@J@]H @ ^HGJFg`>.n^H<.SF>N./N,XWHGJ@g`ZJn\H n ^HG>.SG>N./N,XWHFJ@g` ./<DNX>.N./NX.N>?<?< N>X=P>?<#N T>NjXHlN>NXHlNBWNXHl?<N*TNN.&N-@&.Nz/m6.2N-@Jf <-@./<N,X]H./<>N,XVH./<<N,XVHFGJ@g-|.&NJ@f>N-@-n.Nz.&N-@&.N @l<.&N~@>N8.&/+@BNX.&N-@&N./<DN,Xo./<DNX-@`-|BHyZQ+O"`^./<DNX.N>BgN T>Nj>.n>NBWN-|AHyZQ+O"`>Nj.&N>N./<DNX>.N./NX.N>?<?< N>X&H.N6>BgN T>Nj.NBWN`` n8l P "NuHy[Q+O"`=|=nBnBn>?<N T>Nz>N>N>Nj. NBWN>Nz>N>N>NjXHl N.N>N>Nj>N>Nj>N>Nj>N>Nj>NXHlhgNBWNPn>Nj>NBWNBn n n0Zn>Nj>N> NBWNRn `>Nj>N>Nj>NHy]ZQ+O"`,>.8SGBn=G>.nnf>Nj>N>?<?< N>X>NBWNZnRn n oBnJnfHy]Q+O"`Rn`>Nj>N>Nj>N>?<N T>NjXHl#"N>N-|A./<@MN,Xn./<ANX-@`Hy^xQ+O"`P "Nu=n>Nj>N>Nj>NXHlrqN>NBWNn RnP "Nu. Nz/NXBNz//<BNP/NX.Nz//<CNP/NX.N.N/NX>NPP "Nu.jNz/NXBNz//<BNP/NX.Nz//<CNP/NX>N.N/NX>NPP "Nu.kNz/NXBNz//<BNP/NX.Nz//<CNP/NX>N.N/NX>NPP "NuHy`Q+O"`h>N^=|=|=|-|GBW?<?< N>XBP>?<?< N>X0>?<?< N>X0p>?<?< N>X0wHya:Q+O"` . Nz/NX.Nz//<BNP/NXBNz//<CNP/NX.Nz//<DNP/NXBN/NXBN//<BNP/NX=| n m>Nz>N>NRn no=|> N.N//<CNP/NX>N.N//<CNP/NX>.n=G>NPBW?.?.?</<N BW?<?<?</<N Rn n o=|Rn no=|n `=n=|-|BHyc2Q+O"`JHycBQ+O"`HycRQ+O"`>Nz>N>N.^N>?< N T>NjXHl32NBWN>Nz>N>N.bN>?<N T>NjXHlLKNBWN>Nz>N>NBn.ZN=@-|AHydJQ+O"`2HydZQ+O"`HydjQ+O"`>?<N T>NjXHlcbNBWN=|HydQ+O"`>NjXHlhgN>N=|HydQ+O"`>Nz>N>N> ?< N T>NjXHltsNBWNBnHyePQ+O"`,>Nz>N>N>NjXHl{zN>N>Nz>N>N=n"=n$=| n n>N>.N./NX-@j>N>.N./NX-@n~=GHyf2Q+O"`bHyfBQ+O"` HyfRQ+O"`Rn`j.rN=@".VN=@$=|>N>.N./NX-@j>N>.N./NX-@n~=G>BgBgBg/<N XHlN8.*N-@*>N^Bn:=|XHlN8.N-@>N./+@BNX.+@FHlNXN.N-@=||K=F=|zK=EBnBn=|8<=DHygQ+O"`>:Nz.+@BHlNX.+@F/.NX.+@JHlNX.+@N/.*NX.+@RHlNXN..N-@.HyhbQ+O"`>N./.2NXXHn.NN/m6.2Nh/m6.2N././.NP>4N.N8.N-@=|:-|A-|GP "Nu.oNz/NXBNz//<BNP/NX.%Nz//<CNP/NXN >N =@=GSG>N.N/NX>.SG>N.N//<BNP/NX.N//<CNP/NXBN//<CNP/NX.N//<DNP/NX=| n( nN =@>N.N?. .NT//NP/NX>N.N?. .NT//NP//<FNP/NXTn `l>NPP "NuNHyjQ+O"`=|H.N~@@>BgN(T./+@BNXN.N-@> BgNT/+@BN XXHl/+@FNXN.N-@XHnNN/m6.2Nh/m6.2N././.NPXHnNN/m6.2Nh/m6.2N././.&|/+$/+ NF/-6/-2NP>ZN.6/<BNX.N*>N-@.?</.BgNT/+@BN S@?NTN.N-@.?</.BgNT/+@BN S@?NTN.N-@HylQ+O"`>N^>NjHymQ+O"`:P "Nu>N./.2NX>:Nz.+@BHlNX.+@F/.NX.+@JHlNX.+@N/.NX.+@RHlNXN..N-@.XHn.NN/m6.2Nh/m6.2N././.NP>4N.6N*>N-@Hyn(Q+O"`$P "NuBn nn=| n n>Nz>N>N>Nj> ?<?< N>X>N>. n>?<?<N>X.NBWN>Nz>N>N>Nj>. n>?<?<N>X.NBWNRn `0>Nj>NZn`P "Nu.N.N/NX.N.N//<BNP/NX.N.N//<CNP/NX.N.N//<CNP/NX>NPP "Nu>N^BW?<?< N>XBP>?<?< N>X0>?<?< N>X0p>?<?< N>X0wBW?<?< N>X.NN/m6.2N././.NP=|B-|=n >Nz>N>N>?<N T>Nj.N>N-|A./<DN,Xn> ?.N T>Nj.N>?<?< N>X.N>N./<ANX Df"-@>Nz>N>N> ?.N T>Nj./<ANX.N>?<?< N>X.N>NTn ./<BNX-@`. Nz/NX.Nz//<BNP/NXBNz//<CNP/NX.Nz//<DNP/NX>?<?<N>X>N-@>?<?<N>X>N-@-|A./<BN,Xn-|A./<DN,Xn.N>?<?<N>X>N-@./<ANX.N>?<?<N>X>N-@HysQ+O"`./<BNX-@`b>?<?<N>X>N-@>?<?<N>X>N-@./<ANX-@`>Nz>N>NP "Nu>Nz>N>N=n. Nz/NX.Nz//<BNP/NXBNz//<CNP/NX.Nz//<DNP/NX nnB>?<?<N>X>N-@>?<?<N>X>N-@`J>?<?<N>X>N-@>?<?<N>X>N-@>.[G=G>.SG=Gn>?<?<N>X>N-@>.nRG>?<?<N>X>N-@HyuQ+O"`.N=@.N=@=|~ =GHyvQ+O"`P "Nu=|=|BnJng:>/.Hl NP=@>.nl>.=G>.RG=G`.>.SG?NT.+@B/.NXN.N-@P "Nu>.JGo> G n8SGOGv&spNvww:w:w:wwwhwv=|~K=G=||K=FP "NuBnBn=|><=GP "Nu=|~=G=|<<=FP "Nu=|><=G=|| =FP "Nu>N./.2NX>N./.2/<BNP/NX>N./.2/<CNP/NX>N./.2/<CNP/NX>N./.2/<DNP/NX>N./.2/<DNP/NX>N./.2/<DNP/NX>N./.2/<DNP/NX.N>NP "NuN^Nu - ЭЭм,M6} -fJ3A fJ~0pQ# B3( 3*kV3,kX`.PkVPkX3 By |#!|# -"$.B/// Bg?<JNA ###**##*|ߠ0<*Q3 |^BBBh1| B !|BB&B*B2B6/<?<&NN\O"|t |^`BYf09S@k"|t$|ZQN*|^(|NuJg?/N.SN8JNu////NJNz//NNzH./ g.*Gg"  o lNlie L NuJSGnBߐBߔ`3dNCam~Nua m|Nu om onNu3NdNCH |t>9SGkBFJg0N{RFQ yx>9SGk/NXBQxgBX`LNuCDH01gHH`C"BA(1$(j"( ԁ//?<`RWHggN` LB( (f ("h /NXSn/( NXNu3)dNCH0/ |tJ(f 3*dNC0/aDLNuNH"o, |ldB@/,gS@QB o2m o2n0/2H"|kCJfJo0o o0n|B /(fH o( Igm8 Og* Rg0m( `|ao">/0 Gl><`*|am:`|anao(>/0 Gl></ NJ" @o3F1EBh1o0B !H 1GBBhBQ f BP`< f6Rykkk"B0(Ш"0("hS@ QLNu?/<ld?<=NAP*Nu/<ld?<ANA\JNuBg/<ld?</$g?NvJ_*|ka`*|k><Jga QL'Nu U/?(?<>NAJ _Jf (fvJgJ/ h /HN.Jg @`PSykAՑkkBBB U(S@29kd$3k29SACD @nJJYQ/NJBNu3FdNCH?/NvJ_ (f\B0/P/NJ"@"!IXB#k#k3k#kv0/S@3H@3LNu3KdNCHP`HBB0/or @nlykmn yk XB#k o/NJ kѹkJg*2/IyAD0929k3kLNu31d`32d ykv"h!Q/ /N.NCHNgmN#k~#kv/NJ/+?+Bg?+?<@NA JoBk/+ NJLNuBk3LdNCHNmdNCN?/&NvJ_&H +f>0/$mBn0+R@i87@S@/'@ Ng?<NJ_DXNu3KdNC3?dNCB9kkg#kBykN$3PdNCBykH瀀?/ NvJ_ (g4#kv3ktPkl3kp3 kr#k~LNu3DdNCJog/<F?<a\Nu/<(?<a\NuH ykv0/g//?Bg?(?<@NAf LNu3HdNCH?/NvJ_ (f.$hgC$R"kg첯m"]J`LNu3dNCH o"(B4(ԁ oXJgm"P m갂lB`//NJLNuN om" onB0/H |kAJg PNu34dNC3<dNC?<?+//?<BNA Nu?/?+B?<BNA Nu/?/N/N\ Nu///N/NP Nu/?/?/ NJm NuB9kkg#kBykNp3PdNCByk3kp3krBykl#k~ ofNu#k~NuH>9kg*ykBykpNJGfJykngNL NuNJog0 ykrfN`B9m/<F?<N\B9mNuHJ9klfzBG9m~BE9m ykrg 9m|9m NSf\LANuH>/$o:&o&Bg?<9m|9mb `&[NASgQJm|m9mLNu 9m|g| NA| NA9m|`#H3krBykl3kn#k#k~3kp/9kNJ/<ld?9lbNl\3k#ldk 9NuN/<J?<N\NL.N`///Bgo yk~N\ _NuNuNHA>/oF&oBgNr9m~9mb`6N[NjSg"QJ_m~m9mNLNu 9m~gN9m~`Hg?<*o,HGJGfN`z?NJ_Nu`jNJ_B@9mEmBG9m~Gm 9m~VknfB9m0L'NuN`H ofN?<N^J_NFJggNBg#g3hh3hh3hh3hhByhByh09glS@3h09gnS@3h3mg3g3g3gg#gg#gg3gNN2LNuNuJygzgN3grg*/<g*NJNu/<xNJNu/<NJNu/<NJNu/<NJNu/<NJNuHJ9ggPgz3x0/@ 2H@AxACxJYpBQBQ"<` <NBLNu/<`NJNu09gJog3gPgzNuHPgzQg3g"<psNBLNuNH3g3g3g3gg3gN3hxgxLNuNH3g3g3g3gg3gNLNuNH3g3g3g3gg3gNLNuH3g3g3g3gg3gNLNuH3g3g3g3gg3gNLNuHNFN#gg#gg#ggBg#g3h3h09glS@3h09gnS@3h3mg3g3g3gg#gg#gg3gNN2LNuJygzgHNL3'3gt3gv#Nua&N3gt3gv#Nu y'gHNF3g3gp'y3g09yg|3h09yg~3h3gg/9k&#k&N#k&3'N2LNuHSym: y0#09gtygf3gtygfygloaLNuBya 3gt3gv#`HNFJygzgN3g3g3gaJ3gg3gN09gtygf3gtygfygloNN2LNu09gtyg|3h09gvyg~3hNuHNF09gtygf3gtl>09glB2gfHAAygf3gt09gvyghR@yghmS@3gv3g3g3gad3gg3 gNN2LNuHJygzgNB0/g(H@R@ghygnc09gnS@3gvB0/g&H@gf3gtygfyglcBygtLB09gtgfNuHNBgB09gf @o0<3g3g y gho 3 g` 3ghg#gg#gg3h3h09gS@3h09gS@3h09gtyg|3hygfS@3h09gvyg~3hJ9ggygj`yghR@3h#gg#gg3g3gxg3gxg3yg3g3g3ggNLNupAg,BQ#g>BgNuHAk" g g h hx jJygH&yIg><8Q&y3 gt3"gv3$g3&g <g`BygtBygvPg]><(|g ?|?G>NN9Q\BkBkBk Bk3 g#gBga3Mg#gBga3hxg3dg3g3 g3ggpAg Q3ga3gg3kg#gBg3gafB9gByg|Byg~Byg2#g3g3 g3g#gPgza3grg*#dg"Jyf3gjg a3g3g3g3gg3ga?<a>al>?<a8J3g3g3g3gganLNu3g3g3g3gg3ga:3g3ga&3g3ga3 g3g3g3h3g ha?<aJ_BavJ3kg#gBgByga3eg3g3g3gga3g#gBga|/<g?<NN\Nu3'g3g3g3gg3g3ga*Nu3g|h3g~hJygzgPJ9ggaJ`,ap09hxR@3gl@H3gp09hzR@3gnaN3hgrBygzaP09gl3gyg|S@3h09gn3gyg~S@3h3gpg3grgBygNuH3&g3g3g3ggaB3jgj3jgf3jghJ9ggRygh3hzgxB09glgf3g&B09gngh3g(09gvyghl 3ghgv`ygnm09g(gh3gvSygv09gtygfygloaLNu3g`3gH3fg3g3g3ggaP3hxg3hzgLNuH3 g3g3g3gg3gaLNu"<k"psNBNu"<( <NBNu3Ng#g#g3gBkaNuJyg2gb3hg#gBg3g2g3ga3hzg|3h|g~09h~3gl@H3gp3hgnNu3g3g3g3gg3g09g|3hyglS@3h09g~3hygnS@3haNuNaB9mNuHBygt09gvyghygnm ?9ghaJ_`3gvLNuHJ9ggHy@?< NA\`aaVBg09go3gyg~S@3h09g~3ho3h3g|h3hh3mg3g3g3gg#gg#gg3ga3g3gRyh3hh3hh3hhaaLNuJyg2gNu3hg#gBg#ga#hzk6#h~k:3dg#g3g#k6g#k:ga@3hxg2l 3ZdNC3g:3ig#g3g2g3g#Hga3eg#g3g2g#k6g#k:gaaa^?<N^J_NuJ9gg ?<aJ_NuJ9gg?<aJ_aNuH ofBNNFN3%gBygByg3ggN3hxk@3hzk>3gByg3g3gg3gN3gBygN3rg3gByg09g|3hyglS@3h09g~3hygnS@3hN3gByg3g3gg3k@gN3g3k>gNN2Bygt3ghgvSygvLNuH@ ypJgHhN8XrӹpLNu3dNCHAB>/SGlBG Gn80/ e0BA/e& /Ї/ g// /NPg RQB@`R@LNuHA>/nBG` GnHSG0/o@ @o0<B/c,b/NXS @"oQLNuB`//?<?/ aPNu//B@oR@??/ axPNuBJGo, Go 3dNC/NX @SkQLNuBJ/fNuHAB>/"o`HAB>/2/`HAB>/r `/NX @CSQLNuH~`H~`H~`//<NX @ _Nup`HBB//ge/p o"oSGef QJLNuep`p`HAB/"/e6/NX @"oSeQ"oSeQLNu3dNCHB//NX @"oSkQLNuHAt09J(fZ2/ICDBq>/29jG1AC EpSGQn4R?BgR/N~ePQJk n.!@a/J(f0S@?< Q??a0HX@(fL2(C E4JUBBBSG`?"BgR/N~P4!ARbЂQad h LNu3 dNC3 dNC3+dNCHat |ld/ /!Vm /!Vm /!Vm # % $B0/&a LNuH ./,/g&Bxe`Jge`LNuHa |ld2/SAk Ang|0/ @P"|m1 BR0/"kbgL @ nZS@ro$kP AnJg4"|TH 1/< /aJP@HB0/&a:LNuB` 0/$@`3dNC/NAXJ@kNu#FdNCH:o$./&a$L'NuH//$NX*@./(aL'Nua/Jtg t`:aXNuH// // NP/a _/ /(Jtg t` aXLNu0/H` //NXHa/at _/Jtg tBG`>abX0LNuH// // NP/a2 _/JtgtBP`/NNXaXLNuB?< NA\Nu//`H`N4/ BnB Bm/nBG` GnD/b>SG0/o6 @o0< o"oBA/e/e/SAkQ /LNu/ oJ/f 3dNCB@ _NuB@/Nu"o / bSGQLNu3dNCH@~`H@~`HB/ /e/ o"oSkQSk QLNuHNB./gPDހJf|*yg.m*m`Jf(a Ax !HaH*+x`0a`*/NJJo*@*+x+x` 3dNCPPx XL!Nu3dNC# kB## ##"#RkF9H?<?<NNJ#kL @3kPLBykTBykRBykZ#kH#Nu#kH#kB#kB kFNu yg"N y/(?<INA/<f?<&NNBW?<LNAJykRfJykTfNuJykRfNuH灀/<@ ykHN ykL0(ykPgN3kP0( P.0<f 3kXkT`*<fBykT`Y\Y>F3<f 3kVkRLNsH瀀JykRfPkZ3bf^`#߄߈,yx y߀N`*|^(|J9_fl ydgb ydgX ydlN ydgD y,dg: ydg0Jyhm(P_N0yhx/P LBykZNs/<Є?< NA/|ЋNA/|HNA ||0929d`gQ/|щ`H |~/pNA/|ZNA/|NA09daJybgf/|NA09ba/|NAB@9^az/|цNA/|ЋNA/|hNA>NA/| LBykZNs/|NA`3d`J3d`>3 d`23d`& |kkB J@gg H@H@0`<0/?< NA\NuH>/ GDG.pa4XGfJLNu@H *|ߠ g .*a `JL NwH烄JykZfN./g<9koAkPJommfSFnYo*G.xftJgnB.gfB5xBJ-fPޭ*+xJ5xfAxHaFHސ*+x xg JfaFL!NuJga /aJJo @ `3dNC/ m!m m!m _Nu/+| y+H!M# _Nu /ймm#`pNu 9m#NupNuH3lbBykByk |k"|k~BBBQJyg( y3.m30m32m~34m|`m|m~B9mB9mLNu/JogJo f*2/0/ ҀeHAJAf0/ ЁLNuD`0/HNu0/NuH /0&o4DnaLNuNJDk6| n0N9m<-g< |  "Nu |mh|.$|n *+f* 0gS`F9 "0f9 "0f9J"` 9gR`0 "9f0 "9f0J"`p |n"H BFHF ).fJ!Q |mJ!`2 /EnHa"LNu0/En?NJ_NNJk6<n0N9m<-g< |  "Nu |mh|.$|m *+f 0gS`9J"` 9gR`0J"`p |m"HBFHF ).fJ!Q |mJ!`Z 9DnfN |m$@Jk+`-.@* BJkg Sڅj<@` BB~`BJjFDY.j><` 8 <bR` <bT`VJk<b|A` <b|>`|;܀`RD<b|C` <b|F`|J."|ؼ.//N<DDBR~"|zbgSjaS`<1ŐaSG<"|bgSj<1`<1ŐaQJ "H9mNV If zJ J Q Immmn Jk+`-D* <0HE<0J| 0VHFBF g Jk<<`FFNuЀ,ІdBFNuH/9ߔ/9ߐ |m" JAk JfJfBg`?<-`?<+.4BAļ@Jkf JfB`2SҁрjH/NNJ29ߖ"|mB |ߐpQpBQ |m MM!|B}!|Gĭ"|m$|mN&((*(BgFFFFBRـ׀Հ BB|?k4pQBd"||.NNR<[oL"|m"#ABp!DQB$|mNN, 9ߐ"9ߔJFg|@g DFSFQR~ "| |mzbgQaS`<1ŐaSGz"|bg Q`<1aQJ "H9m(a$ If z J J Q ImmmD<JFf+0000`HJj-D`+z HB<0BBHBQ<0 |nHF<< 0VHF#ߐ#ߔLNuҁр//ҁрҁрҟdRПNuHBBCBBEBBJ%RGa$<&gl<+g <-f|a<.gp<&gH<0m<9n<lJf<0ga<0܀dRR`Ra<0m<9o̰<Egh<eg`<DgZ<dgT<.fax<0m*<9n$<lJf<0ga<0܀dRRS`̰<Eg<eg <Dg<dfLaBB<+g<-fFa.<0m<9naH<0Ԁea<0m<9oJgDԄiJfJgx@܆ӁeS`H^/NNJ29ߖ"|mB |ߐpQpBQ |m Ri!|/4n+!|$"|m$|mN&((*(BgFFFFBRـ׀Հ BB|?k8piQBd"|<|+NNR<WoLz"|m"#FpB!FQBNN҂i҄ijRmDߐߒߔߖQߔdRߐByߖJߐf(Jߔf `*nHJߐfJߔg3ߖyߖ3ߖLDNuLDNuJgBߐBߔ`LDNuLz`JSGgBNu`JSGgBNu`܆Ӂ//܆Ӂ܆ӁܟdRҟNuԂi/BԂi ԂiԯiNu`za og Og~ hg HfPBa(eHa e iX`JElD/NNJ`a2 9b0Nu Fb Ae Nu fbadNuDNuJSGgNuX`Baea ei`a 7b0NuH~BBBBBJ%RGa<&g<+g <-f<aȰ<.g`<0m<9n<lJf<0ga<0܀R`Rax<0m<9oа<Egb<eg\<DgV<dgP<.faH<0m&<9n <lJf<0g aR<0܀RS`а<Eg<eg <Dg<dfLaB<+g<-fFa<0mȰ<9na <0Ԁeaʰ<0m<9oJgDԄiJgx ܆eS`ܼdR<@n|mn |rHH | ԂԂ//NBB҃҄jm0DBJg` n L~DNuL~DNuJgB`L~DNuJSGgBNu`0JSGgBNu`܆"܁NuԂi"Ԃi ԂiԁiNu`a og| Ogv hg HfzBa"erae ix`/NJ`Ja2 9b0Nu Fb Ae Nu fbadNuDNuJSGgNuX`Bae a ei`a 7b0Nu |nX><1< Q.><0<0QJf |n"H0Nu 9Dnf|m"|n* JDkg I`J E$|m.HGSGfJQc0`J!NuH"<@ p_$&(zSUּd RdR#ߐ#ߔL=Nu<4c  <.g< g <+g<-f1RNu<9f0`RNuH|&J:BQ<8D6C00@04Cв d 2YARe% QzQJ* j t R2 TJt QL NuHrn$ҁ҂LNNuS&܆܃$1h&1h|QdR"|m"#B#C`H*/$(/("/, /0a&LNuH*/$(/("/, /0 DaLNu64B@BD~g FFBЇӆg FFB؇ۆ<BlDFDECHTBB|>mJj"`GkQЄӅjFFBRӆ|NNuNJfJgXxքdJjlBB`6FCQBBмӄdRB@JfJgJCjNzBC#ߐ#ߔNu//aFXJ/lg//<AafPNuHN./$,/(N0 LNuHN,/$./(N LNuHN./$,/(N LNuHN,/$./(N LNugJ kbkdf`6kVg6kVg*k0<d$&B<ރeNuRid`.NuJNu:ڼ.gNugRghEDvi^E]HE:BB8HD&HC؃HF&؃BDHDHGHFHEބj ޼gNuSiex@ބއdRgNu~Nuj`zH"<? /kfB`$$BԂU BB<BJj|B#ߐ#ߔLNuHB / gjD||@ ЀU#ߐ#ߔLNu? /2/ |мdRA|@?cNz|?j|nB`DBJo j<2Nu? /2/ ||@ m$oNzgNzJo kNz`|@bB`|@ DAJo jD2NuH`B0/ 2/aLNu4||@m"oNz|gNzJBkNzHNu|@bB@Nu|@DAhJBjDNumc68343 floating point firmware (c) copyright 1981 by motorola inc.H` / BBAm BlrLNuB`@H` /alLNw@H` /aLNw@H` /adLNw<fb <Nu<fb<OaHJBjJ@k R|gNuSNu<fb <Nu<O`f <Nu<_<<@bBNub’<`DBdJjDNu@H`r0/HaLNw@H`r /aLNwJjD<`<AVJjNu<DNuH /"/ aJLNu Jk Jk bgpNupNu3 dNC3dNC3dNC3mdNCLogical Design Works, Inc., (c) 1986 ver.1.1 &-@8151664020041751741220883923199210044114592123516526533553570818697102113118129133144191154617921127513128013655991198517991285190413607179211213651904119179980136012858519111360119179213125128080546136085128548816771511365118519041128037684808165177116272257178191312112751430316404004242243242041721223399410088114780322210602603505501251471571791892112212432532751911019110191101911019110191101911019110019110191101911019110191101911019110191100000000000000000000000000000000047486364798096971121131291301992002702713503514384394934945765776391132768491525734461440634886451265024652806438455296358403072153615367680116547265504491364095236860355003618035500361803550019796109247508409200161124-82712-103814-204916-3051018-40Reset RecorderEnter [-CUBE-] DataPlay-Back RecorderEdit [-CUBE-] DataLoad [-CUBE-] FileList Data To PrinterSave [-CUBE-] FileReturn To CUBICLEDelete [-CUBE-] File\*.CUB\ CANCEL|DELETEVerify DELETE OperationICursor X= Y= Current Pos X= Y= Cube Pos X= Y= Count = 0 =   Exit Program 0 Col= 0 Bkg= 0 Fill= Erase OFF Clear Size= 4 File Escher Cubes File Control ClearSize Lo Cube Color Place Cube XXX YYY Bkg Color NULFill End Erase ON/OFFHi | ESCHER CUBES | Set Preference To  MEDIUM RESOLUTION RON OFFVerify RESET Operation CANCEL|RESETRESET PRINTING Leaving ESCHER CUBES ?? STAY|EXIT..CUB | |Delete Data Entry Enter Data 'D' = Done Dd File Editor Column->Line # E - Edit C - Continue List Q" - Quit Enter LINE # Enter COLUMN # Old Value =  New Value = Escher Cubes File -->   E S C H E R  C U B E S BY J. LuczakVer. 1.4dSTART ESCHER CUBES9 This Program Compiled Using| L.D.W. Basic Compiler| 1986 Logical Design Works Inc.][||][]@@@@ @@T.P.Sielicki, B.Blaszczak, K.Szwed Redo from start !!!!xZxx xgjghxkkY OUTPUTAgEKIjM1RgWN\}a}gunt={xRYv -------------------------------------------------------------------------------- Execution terminated : error # at line # statement # line unknown (use Compiler TRACE option) >>>>>>>> <<<<<<< Press any key to exit ... Unidentified errorRETURN without GOSUBREAD statement run out of dataIllegal function callArithmetic operation overflowNo more memory availableArray subscript out of rangeArray defined more than onceDivision by zeroString longer than 255 charactersRESUME before errorInvalid argumentERASE to undefined arrayArray too bigStack reached data areaThere is no enough room to pass COMMON dataInvalid field lengthBuffer length exceeded in FIELD statementDevice number invalidFile number less than 1 or greater than 15File not found ( open failed )File open mode should evaluate to "I" or "O" or "R" File number already in useDisk I/O errorFile existsFile cannot be deletedFile is not openedCannot create the file ( disk is full )End_of_file reachedRecord number less than 1 or greater than 32767Invalid filenameFile opened for output onlyFile opened for input onlyInvalid form of input file dataCannot close the fileOutput buffer address is not availableError during sequential file outputError during sequential file inputRecord length less than 1 or greater than 4096File must be opened for random accessError during PUT statementError during GET statementWidth must be between 14 and 255Format type mismatchNull format stringToo many digit positions in format ( max.26 )Cannot open OUTPUT windowProgram stoppedBus error (system crash)Address error (system crash)System error1 *+,-12345689:;<=>?@CDEFGHIJKLMNOPQZmќѱ:WhҊҞү/YoӚӹ $;NvԊԺ"8_Ճզ1Rgz֨ ,","ˏoYQhx'x# k_!ԥCk( $P@ oѷŬ7ֿwp_.$}敕w)[KjR@W=QDp1UaC2}'@NZ̵Igvx `ƍ+"[%K|/P&qP'egG;KY.?Ib sc{$ <Il[hc 6Hr\ %QMxLl+k&dh ]GZIщhd$fcWke^a+ 5DsqyF2Mv:O=&dw1]BIo溮$czNk^; 5PnMv7yQGI&~]I$cwmPk 5n_Mv7vI&U]ݪI_$cwjkV 5ګnUj g0oqRލZF+ UϘ) 1XWC|Tɣxcڟ3VJfa)Xm,`^.Pm!/9( ^v8ml7ڔИ\b%GTE}rUw\X[ɮ.,\l.C1 !mc?dib0塏ar5QKX Hƾ^,\k.B79 !sZ_5b/rNX G,\K.B/ !}Zw_Kb/洛r X ,\x.B; !} !$'+.158;?BAA$%Aԭ.A=A'LAϱAγAB`AAAtAAAAmAAAAJAAwA敕A}A$A.AAAAp_AwAֿA7AŬAѷAoA AAAAAA@APA$AA Ak(AACAԥAA!A_AAA kA#AxA. (        &  (&&&& $ "   r                          "      *(*R       * "        , , B                                          &      & 2   2    (   "    "             @ ,   "   &   "        ,6"* * " Z $ `*( n (B     , "     ,F"     2"<   .  6     >*B"F  6( $$ $ *&0     ( $8    $    ( (&  *(, , 06  ."*   " 4   *  $            (X     4 2     "        ,      ,      &  "            *          N           &    &   D   2                      >           $                           ,  B6 (         *&       (    2( 4^0  N  $    . *  2  2@B @        .( <  8"                                     $          *                               & FXd \Bp6(,*@ Z( "t(6J>  $ $(*Tx4X*@                 X&$  f*d$*<$d\V"&\$XZ" t*\\ 20,,B J  bDP.  tL..  tFNT_EDITPRGt M_FONTS DOCt e TEST FEDt hZ`@F*O.|]*m - ЭЭм// ??<JNA N/<NA"/0<NBNuNV.G|/9XNXBn` y2n (.g Rn nm`0nB(Rn n mB@=@=@`0n"|G|0HnRn.G|Nxnn y0 y!|T y hH"y2i&RI=P0.H"y3@P0.HH@J@g y0(P"yRiP y(Qg y0(P"yRiP yhB yhB yBh4 y=h$ y-hH=|`V n0("n2A=@"n2)$n4*B=AAgBn y0(4nl y1n4RnT y0(&nnJng yhB y0(4nl y1n4N^NuNV09f333 09h333 09؀yf3309DHyDyh33. ?<?9N?XaR.G09DH? y40((W09hWRW09؀H?09fW?9N=\N^NuNVRy3 Ry Ry3Ry3. ?<?9N?XN^NuNV09 333 090333 09؀y 3309DHyDy033. ?<?9N?Xa.G09DH? y40((W090WRW09؀H?09 W?9N=\N^NuNV3 .N&BW?9N?T09לR@3 09מR@3 09S@309S@3. ?9N?T>?9N?T y0(4yל=@ y0(Ryמ=@Bn`F0n2nJ0"Q.?.?./9N'P y0(RR@nRn0n"|J`00nnN^NuNV09ל333 09מ333 09330933. ?<?9N?XaBN^NuNV>N>ZB09؆ |0GB09؆ H@|0G.G y4?((B@09W09؀ ?B@09W?9N=\>N@N^NuNV-n`R nJf`S n \fR n H"nR RJ@f .N^NuNV=|3؄B@32Bn`0nנBRn neBn`B@0.HH@B@H@м @BPRn neNP09R@3؎09R@3JN;#| yJn y|#4` y|#4#N#OVOF 9OFм#OJBW/<G?<GN;\.BF/<GN:fXBn>N>Z>N=>N@.BM?9J y40(0"y42)RHAW y@؎o?<`?<?9N=\./<G|/<GN=PBn` |G|2n :f=|Rn n e.G|NxJ@g6Jnf.>N>Z>N=>N@B?<N=xTBW/<G|/<GaP/?<=N;\3Fo.צ/<X?9F?<?N;P.09̐yT@@H/?9F?<?N;P.09/?9F?<?N;P>F?<>N;TBy`3 yf:.GBgNN>Z>N=B?<N=xT y40(&"y42)$AH29؎H؀3؀R@3، y43( y4=h$`pBy`NB@0.2Rn.2?9?9?9N=\ y40(&R@ng09؀y09y؎m09Dy y40((29،DAynp y34؆ y3RH09؎H؀H ؀H؄؄3ؖ09،V@DH؄؄33ؖr09"y2)0ZAA3z y0(4@yr309z"y2)(A309؄@yؖX@3מ09؎yמ"y2)4AHyמ3ל y0(4yל309،S@D=@09Jn"y2)R AHn3מ y0(R yמ33ؖ09؀y3 y0(R؄yT@3B@09yD3؂.G y4?((B@09W?9?9N=\09ؖY@3B@09"y42)4A3ؐ3 y40(RR@@y3x3ؐ y40((y3=|`BB@0.2.2?9?9?9N=\ y40(RR@yRn nc09؎29؀A3f09JS@29DAA3ha09f29؀ A3 3h0a>aN#pBW/9N&PX>a>N@3./</<؈?9N?B =y=yBn`J./</<؈?9N?B 0.yf"0.yfRn>N nxe>N>ZBWa>N@./</<؈?9N?B 09،DymJy g BWa`09yؖmTB@09؆؄yؖyc809yo*09y԰yo y g >a"`09yb@09yؐe209ye$09yxb y g >a`209yؖm\B@09؆؄yؖyc@09ym2B@09H؄yаyc y g >aj`09ye@09yb209ye$09y؂b y g >a`z09y0o09y o09؀y yo609DHyDy0yo y g >a`09؀yfyoz09DHyDyhyoX09yfoJ y g>aP9؉f9؉g".HBgNN>Z>a>N@Jy؈g N/4`B09ybF09yؐe809ye*09yxbJy؈g yl N`09yrmR09yryo>09ym009y԰yoJy؈g yl Nb`09،DymJy؈gN"3|lv=y=yN$>N>ZJyf  2` 0923r 09z"y2)(A3 y0(4y309[@3BW?9N?T. ?9N?T>?9N?T.4N&.2?9z09\W?9r/<4N'PN">N@N#pa8./</<؈?9N?B 0.H؀29H؀Af&0.HD29HDAfJy؈f`09yؖm,B@09؆؄yؖyc09ymB@09H؄yаyc ylJngBBgN=xTBnJy؈g=y=y>N>Z9؉g >N'`BWN'>N@./</<؈?9N?B 0.H؄29H؄Af&0.H؄29H؄AfJy؈f`JnfB?<N=xT=|`09yez09ybj09ye\09y؂bNJy؈gF yl< y؆c9؉g BWN$` y؆d9؉g >N$`a@>N>Z>/9N&PX>N@.H8BgN aT.N5Bn`* |Gn2n .f |Gn2nB` Rn n ea,B?<N=xT> a>N=N aBW/<Gn?<F?<>N;TN^NuNV.B|/<GnN:fX> a y0(R"yP|ZH-@.?<HN;T-@-@BW/<Gn?<F?<>N;TN^NuNV n gB.Gn/<G\NX.B/<GXN:fX0n"|J0 p!|GX>N>Z n f> `> a>N@N^NuNVBn`"09@H2.AHЁм @BPRn nm0yRH"|B@002yBA2A3؆0yRH"|B@002yBA2A3>N>ZaB@09؆y=@g209R@=@`0.2nQRn09R@nl.4Bg?9N)TXa*a>N@N./</<؈?9N?B Jy؈fN^NuNV-n-n Bn` n"nRRRn nXe n =h$`4B@0.HH@B@H@м @"n "iHBB4.JHBBBHB0Rn n 0(&R@ndBn n -hL-|` n"nRRRn n 0(P"n RnbN^NuNVBn`Rn nHRJf0.N^NuNV n H"nR RJ@fN^NuNV0.SnJ@fN^NuNV y=hR09yH@B@H@"y42)RRA`09@H @"|JpfBn`L09@HBA2.IHABAHAЁм @29AHBB4.RBJHBBBHB҂Ҽ"A0RnB@0.ne09@HBA2.SAIHABAHAЁм @BP`09@HBA2.SAIHABAHAЁ @"|Jpf(B@0.S@=@`L09@HBA2.IHABAHAЁм @29AHBB4.SBJHBBBHB҂Ҽ"A0SnJnf09@HBA2.IHABAHAЁм @BP`dBn`>09@HBA2.IHABAHAЁ @"|B@00rty؆aAf`RnB@0.neBn`\09@HBA2.IHABAHAЁм @pry؆`S@F@29AHBB4.JHBBBHB҂Ҽ"AQRnB@0.ne`Bn`409@HBA2.IHABAHAЁ @"|B@00|fRnB@0.neBn`(09@HBA2.IHABAHAЁм @RnB@0.ne`J@gb|g|g|gb>N>Za>N@ y؆d py؆`B@>aN^NuNV09HD29H$y44A=@ y40(&nl0<`D3؊3؆0nRH"|B@002nBA2A3؆0.N^NuNV0yRH"|B@002yBA2A=@3ؖBn=|`3Bn`R09@HBA2.IHABAHAЁ @"|B@00ng >N'`BWN'Rn09؄y y0(RnbRn09؄yB@0.nenN^NuNV>N>Z09ؖU@333 09U@333 B@09؆؄yؖ33B@09H؄y33. ?<?9N?X>N@N^NuNVBW?9N?T09ؖU@3 09U@3 B@09؄yؖ3B@09H؄y3. ?9N?T3 3 09y309yH3. ?9N?T>?9N?TN^NuNVJng=|`^Bn`B09@H2.AHЁ @"|B@00rty؆aAg >}az`Rn y0(Rnn=|09R@=@`0.2nQRn y0(&R@nlBW?9N@6Ta>?9N@6T0.y؆a y0(4y؆d y1y؆4N>}aN^NuNV y"n!iLT y"n1iPX yhF yBhJ y"n1iRRN^NuNV09"y2)4A=@ y0(RR@yמ"y2)0A=@=|:> Nb n=h$`R.?. ?.N)TX0.HH@J@f*0.2Sn.2?.?./9N'PRn n0(&nlN^NuNV`n n0($n y"n"iH4n1QH y1n L y1nN0nRH"n"iH00"y2)HA"y3@P0nRH"n"iH00"n"iH4n2An R nH=@fRN^NuNV09yؖH؄=@09yH؄=@09H؄؄=@09H؄؄=@383:0.y؄U@3<0.y؄U@3>>?9N?T.8?9N?T0.y3<380.y3>3:>?9N@6T.8?<?9N?X>?9N@6TJng*0<2.h29AH4.BH҂Ҽ"AQ`*0<2.hF@29AH4.BH҂Ҽ"AQN^NuNV n hH2n=P0nRH"n "iH00n=@ n -hLB@0.HHH@B@H@Ѯ0<BA2.|h=@Bn=|`Bn-n`Jn gJ0.@HBA2.IHABAHAЁ @"|B@00ngB@0."nQ`B@0.F@"nQ`b nB@0ng*B@0.2.AHBB4.JHBBBHB҂Ҽ"AQ`*B@0.F@2.AHBB4.JHBBBHB҂Ҽ"AQ n 0(PHѮRn n 0(Rnb.f T=|RnB@0.neN^NuNV=yל09מ"y42)RA=@Jnf3 0."y42)($y44*RBXAA3 y40(4n309מU@3BW?9N?T. ?9N?T>?9N?T`B>N>Z.B?. y40(RX@W?.?9N=\>?9N@pT.B?.?.?9N=\>?9N@pT.B?. y40(4?0.W?9N=\>?9N@pT.B?. y40(4?0.W?9N=\>?9N@pT.B?. y40(4 ?0.W?9N=\BW?9N@pT>N@N^NuNV-|]09לV@=@=y~RBnB.` n(H|XJ@gRn .Bc-|] nf ngJnf nf` n(H"y3@Z n(gp`p"y3@$ nP yBhj.?.?./9N'P y1|j.?.0.W?./9N'P n(HnX .BeR0.y~RN^NuNV>N>Z9^Ng& y"y1i8b y"y1i6d` yp1@d"y3@b yJhbgp`p"y3@$9^NH"y3@Z.9^Ng?.UW`?.?. /.N'P>N@N^NuNV yBhj.B?9~R?9~P/9aP y1|jN^NuNVBn-|] ` nBR nD@RnDmN^NuNVBnBn y hH0("y"iH2)A=@BnaB.>N>ZNJ y-hL y!|^PL>/9N&PX09לV@3~P=@09מV@3~R=@09"y2)4VAA=@09"y2)R$y4*RBVAA=@>Nb.N&.B?9 y0(RW?9~PXW/9aP>a~>N@.N& y!|~Tl y1|p9^NH"y3@Z y"y1i:` y"y1i>\ y"y1i@^ y0(B|"y3@F y1|@.B?9~R?9~P/9aPBn>?<N;T-@ .=@ .䰼;m .䰼?nr .-@ yB(g yB ( f aFp".Ҽ㠱9^N9^N"yB@ ?f$9^Ng>a 9^Nf>a.B?9~R?9~P/9aP`./</<؈?9N?B 09yלo409yl&09yמo09yl Jy؈fFJy؈g09،Dyop09HD29H$y44A=@ y40(&nm./</<؈?9N?B Jy؈f=|Jnf$ ng n g n m n~nn y0($n n fnJnfh y0(Ry~RnlRax3~P y0(Ry~R#]BB9^Na.B?9~R?9~P/9arP` nfJnf09~Pnoa yB(g yBB(>a yBp@"yB"yB@YB yB^N yBP yB(Hy~P yBhj.?9~R?9~P/9aP y1|j.B?9~R?9~P/9aP` n m n~oJng09~Pnla yB0.@0nRH"y"iH00"y"iH4n2A"yB@ yBy^N.?9~R?9~P/9aP yB(Hy~P9^NgTy~P yBT(9^NgRy~P yB(H"yBR)XB.B?9~R?9~P/9apP`t y!nLB9^N./</<؈?9N?B Jy؈fBWaN^NuNV-nBW/<Gn?<N;Z./NX.NxH-@`0n"|T>N;./NX-|`|"./NX.GS/a0X.NxH-@`:.GU/NX-|`J@gܰ|g|gT|g./.?.?<@N;P nf( o.Dl/<?.?<@N;P`.Dd/<?.?<@N;P0.@H @"|D.0.@H @"|D/0NxXH/?.?<@N;P.Dr/<?.?<@N;P0.@H @"|D00HѮRn nm>?.B?<BN;Pg.D/<?.?<@N;P`.Dx/<?.?<@N;P> n?(& n0($WTW n/(Ha\.D/<?.?<@N;P> n0(P"nR? n/(Lal\.D/<?.?<@N;P>?<>N;TN^NuNV-n`R nJf n H"nR RJ@f .N^NuNVH*nB@0. -@ .HF@HѮ.?<HN;T-@(@Bn`00.H H@J@f  >N;&@f<,RRn0.n e.S /?.?<@N;P.?<IN;TJL8N^Nut&4/AXv "HA<0HJBf <XЃNuQ <XNu4/AYp"A  m<7`<0JQ <XNu#NN/9Nu#NM/9Nu#NA/9Nu# NuNV30.|Hм@-@=|` nH2n2RRn nm.@N>B@09&N^NuNV####&#j#ؒ#@> aF3&LpN^NuNV>a*pN^NuNV3# j>4N<N^NuNV#j# n>ZN< n0(B@09&N^NuNV>MN< n0( n 0* n0, n0.B@09&N^NuNV3# j>NN<N^NuNV3NByPByT3ZN@N^NuNV3eNByPByT3ZN@N^NuNV3 3 Bn nH|2n2RRnJ@f3N3PSn3T3ZN@N^NuNV3{NByPByT3ZN@N^NuNV## .мZ#3dNByP3 T n 3ZN@ n 0Z### # N^NuNV# 3N3 PByT3ZN@# N^NuNV3|NByPByT3ZN@ n 0 n0 n0N^NuNV# 3rN3PByT3ZN@# N^NuNV3 3NByP3T3ZN@09N^NuNV3 3zNByP3T3ZN@N^NuNV3 3NByP3T3ZN@09N^NuNV3 3jNByP3T3ZN@09N^Nu#N"<psNBNu `_\*.FEDType in new name to start from scratch.C.FED.O ...]|Function keys:F1F2F3F5CLICK IN BOX TO END TESTstruct font_hdr { int id; int size; char facename[32]; int ADE_lo; int ADE_hi; int top_dist; int asc_dist; int hlf_dist; int des_dist; int bot_dist; int wchr_wdt; int wcel_wdt; int lft_ofst; int rgt_ofst; int thckning; int undrline; int lghtng_m; int skewng_m; int flags; char *hz_ofst; int *ch_ofst; char *fnt_dta; int frm_wdt; int frm_hgt; char *nxt_fnt; }; struct font_hdr = { , /* , /* */ }; static int ot[] = {}; static int ot[] = { }, fdar[] = { }; EEE EEEFFF.FDFYFsFFFFFFFFFGG+G6GBface identiferfont size in pointsface namelowest ADE value in facehighest ADE value in facetop line distanceascent line distancehalf line distancedescent line distancebottom line distancewidth of widest characterwidth of widest char cellleft offsetright offsetthickeningunderline sizelightening maskskewing maskflagsptr to horiz offset tableptr to char offset tablepointer to font dataform widthform heightptr to next font"0L \*.FED Width = ExitAbout[0][ Select the size of the |font you wish to create ][6 x 6|8 x 8|8 x 16][0][Select an output format: | |.O linkable object file |.FED binary image of font |.C portable 'C' source |][.O|.FED|.C][0][Quit without saving: ][Yes|No]JxJJJJJJJJJJKKK!K4K5KLKbKjKkKKKKKKKL LLL4LLLcL|LLLLLLLLMMMM3MLMMMgM|M}MMMMMMN N!N"N#N$N;N<NQNRNSNgNhN|N}NNNNNIIlITII4IIIIIJJ DRAWINGUse the LEFT button todraw.Use the RIGHT one toerase. SELECTINGSelect a character toedit by pointing to itand clicking the LEFTbutton. WIDTH ADJUSTTo widen a character'scell, click the RIGHTbutton.Click the LEFT buttonto narrow the cell. NUDGETo move a character anydirection in its cell, clickthe arrow that points inthe desired direction. UNDOThe LEFT character is theoriginal. The RIGHT oneis the edited version.Click the LEFT characterto restore the originalform. FED.PRG 3.7.86proportional space font editor  1986 Reg Knighton All Rights Reserved EXITINGClick the LEFT button toSAVE your work and exit.Click the RIGHT button toexit WITHOUT SAVING. VIEWING THE NEW FONTYou can type in this boxto evaluate your work.Enter special charactersby clicking on them inthe font display above. CLICK TO BEGIN Formatting Font Data Please stand by ... Saving Font as OUTPUT.FED ...Happy trails to youUntil we meet againHappy trails to youKeep smilin' until thenHappy trails to youUntil we meet again ... 8x8 system fontUUUU X Z`2 (08@HPX`hpx'/7?CGOW_gow #*05;AGOV\biou{ "(.4:?DJPX_ejrz "*2:BJRZbjrz "*2:BJRZbjrz "*2:BJRZbjrz "*2:BJRZbjrz<<<~?ϏϏ 00p0lx0xxxx xx#<{66  0 6k@=? ;568B$<8< 8y`ϏϏϏLJ<00l`0xxxx`xp` 0|<y; qc'< m6x36fÆ!ߟ 6?  <<~`q?x`0>00x0000.&&    F                d(     &       <                                                               &         0      2           ZD   $ $*:         $    8 T            \,Z             08"     4            B"   >   "    (         f  &@  , .*z.6 &  $         Lz For MONOCHROME users only !!! The file fontedit.prg is the font editor. The other files with .fed are the font files. When you fire up the font editor, it will prompt you for a template file (*.fed). After editing the fonts to your satisfaction, you can exit and save the edited fonts. You will be prompted at this point with a choice of 3 possible output format: i) *.fed ii) *.o iii) *.c *.fed are the font image file which both the font-loader and the font editor expect as input. *.o are object module and *.c are C code module. I've not used *.o nor *.c though the *.c looks fine to me. !! IMPORTANT !! When the font editor exits and saves the file as you requested, it will over-write the old file. Hence, it would be advisable to make duplicate copies of the original file before you edit them. When saving the font file, the editor does NOT prompt for a name. It will save it as the same name as the input file you gave it. Though the font editor supports the creation of proportional spaced fonts, proportionally-spaced fonts do not work with the font-loader. 2) The second arced file contains 6 *.fed files which you can load with the font-loader as is or which you can edit with the font editor. 1) z_chines.fed Chinese characters. Meant for showing off. ;-)) 2) z_italic.fed More like cursive. Maybe I should call it so. 3) z_mac.fed This is the original font file that I got from the UACE server at Houston ages ago. The name says it all. 4) z_nice.fed My favorite creation. 5) z_oldeng.fed Pretty, but may cause eye-strain !!! 6) z_thin.fed Very nice if you like white on black background. If any of the above fonts files (except z_mac.fed, which is not my creation) is used for commercial purposes, I would like to be notified in advance. I'm aware of at least one commercial package (VDOS) which uses one of my creations and I wasn't even notified ! ------------------------------------------------------------------------- Disclaimer. While I've not had any problems using any of the above, I hereby disclaim any responsibility for any damages resulting from the use or misuse of any or all of the above files. ------------------------------------------------------------------------- kkk  TEST UUUU hRjV (08@HPX`hpx (08@HPX`hpx (08@HPX`hpx (08@HPX`hpx (08@HPX`hpx (08@HPX`hpx (08@HPX`hpx (08@HPX`hpx8@<`22`|||||||| (|````ff >``ff22``220zzf[f`|880 |x8::x ff>fl`f<<~ ~~<<<8|f~`f<|<>~ffff~`xp`` 80|~8~~~n<8>>|`l|00x<88<@@@(ff~fl 0f~~~ ~<~~~~|<~~|~~~f~`f~~~~~ffff~`x88`` 80~fffffff~ffff8f<LL LL~Ufv|~~8~n<>~n6~n>~~8~>~n6<~~l ~pD|xH<$,4fp@pf`l88<f8f `pff~pf~ffn```f`ffff`ffff `8``0f<<~ 6ff>f6ff2fbfb`~|f0||~8>l|H0f$g< @@ |@.f` 8< f8f ``ff8~8fffff```f`vfff`ff<>|8 l<<|>|>~ffff~0bff<<<<<<<<<888~~`v<<~&&<  f ff 6 6f6f6fvf`~08fB~8|88H0$<@8 ::~x9ff|p~~ f <|` <~p f~`f||n~`vfffpff<<0l>~|~~~~~8 ~~~~~~~ffff~88`f~>>>>|~~~888ff`~~~ffffff0~f>8~f~ff,,>~n~fffʢff<  f fff 6v>f6v><f`lfB<~p~@H`H8<|||||||8ff>p~~n <~| <> f|`f||n~`~fff8ff<f`ff~ff fffff`fff6fnffffʢff<  f fff 6v6f6vf8|` f0~f~~8~Hx0gf`ffff ffff`pff>>>`fff~~|{ffffffff`f>fff~~f002ll>fvn~~fzffn 6 f fff 66f6f8f`( f0BlB~8>$,4򒌁<y~6<0f lff8~8~f`f``ff`nf|fff<0 ~f`f~ff ffff`<fff88f`f~~~~~`~~~~~`fffffffff0~f~fff~ff0~~nf6~fv~~~f ffn 6 f ff0n 6~6f60n|~~~6>lf`(0f0ff~`@Lb|`(`l |~~||~< <|p<a:::~ 0`~~~~ ~~0~<~f~~|~`~f~~~f~`|~~f~x~~~~~>f< ~0~~~~~~~~~~~<<~~l~<~~ff><~` 2~~~~ff~ ||0ll`8]|>>>f< `|>f~0<>>>>>>>>>><<><<`p><<>ff<`?><~ff< 08`>~~~p <00~|`~ ~@`~~<|0@|T |x`|88|8x.  tm..  tGRABBER DOCt n4GRABBER PRGt s1NUGRABRXBASt NUGRABRXDOCt R NUGRABRXPRGt ,WILLIE DATt p Sprite Grabber by Byron Cullen (c) 1987 Voyaging Minds * Entered Into The Public Domain on May 10, 1987 * Sprite Grabber allows you to grab a certain part of a D.E.G.A.S. low resolution screen as a file to use in your own GFA Basic programs. These files can very well be called full color sprites since they aren't whole screens and are totally user controllable. The syntax used to load the sprite files into your program is defined at the end of this documentation. Getting Started: Make sure you are in low resolution then double click on the file GRABBER.PRG to run the program. You will be presented with a information screen, press any key to continue. You will see a file selector box promting you to select the low resolution keep the disk you are using in a non writeprotectd state so Sprite Grabber can make a script file (Script files are descibed later in this documentation). After the picture is loaded the mouse cursor will change and you may go to work. Click once on the upper left hand corner of the sprite you wish to capture. After you click, you will see a point indicating your selection. If you made a mistake you may cancel later. Next, click on the lower right hand corner of the sprite. You will briefly see another point then the sprite will be surrounded by a box. The area inside this box is your sprite. If everything appears to be in order you may click the left mouse button to confirm or click the right button to cancel and choose another sprite. If you confirm with the left button, you will see another file selector box prompting for the sprite filename. You may of course cancel here as well. After you select a filename for the sprite, the sprite will be saved and you continue with the program. Script Files: Script files are created the moment you select a picture to grab sprites from. What exactly are script files? Well, they are standard text files created by the program to keep track of the sprites you have made. A script file consists of the name of the D.E.G.A.S. picture you used to grab sprites, the filenames for all the sprites you saved and the coordinates for the saved sprites. Each time you save a sprite, Sprite Grabber writes to the script file for the current picture you are working on. Script files are automatically given a name which consists of the prefix of the current D.E.G.A.S. file and a suffix of .SPR (ex. PICTURE.PI1 = PICTURE.SPR). Extra Commands: These commands are only valid when you are in the process of grabbing sprites, before you select a first point. - Press the key to load a different D.E.G.A.S. screen - Press to exit the program How To Load Sprites Saved With Sprite Grabber: The correct context to load a sprite created with Sprite Grabber with GFA Basic is a simple Bload function. SPRITE$=Space$(X) * - 1 Bload "FILENAME.EXT",Varptr(SPRITE$) * - 1 This is used to reserve space for the sprite. The bigger the sprite, the higher the value X is. X=32000 is enough for a full screen. For small sprites, 100 is usually enough. You need to play around with the value of X for different sprites. You MUST always reserve space for a sprite before you load it. Now to use your full color sprite just use a normal PUT command. Put Xpos,Ypos,SPRITE$ Xpos = The X-position of the upper left hand corner for the sprite. Ypos = The Y-position of the upper left hand corner for the sprite. Information: I wrote this program using GFA Basic and compiled it with GFA Basic Compiler. The concept came to me while I was writing a game called "Quest For The Sphinx's Lair" a game similar to Archon yet very different. I realized how much easier this would be to save each sprite in a file for access. This is my first program I have ever introduced into distribution and I hope it becomes valuable to someone. The GFA source code is available for $2 + a blank disk. Send to: Byron Cullen 1518 Erbbe NE Albuquerque, NM 87112 Phone: 505-299-6920 Look for more quality Public Domain software from Voyaging Minds in the near future! Voyaging Minds Damion Todaro Snafux Revenge of the Snafux Midi-Term Byron Cullen Sprite Grabber Quest For The Sphinx's Lair (Due in Mid July) `0R` Efv*oM m HPHUBg?<JNA(m)m -(:gS)@ -OK1C#hNnHx?<HNA@)@l/?<HNA)@h&@)@X)@\Ьl)@d)@`ANCpr Ѝ"QHN.ALNHz.?< NA\pdAxr0XQNNxJrBjCAp$L Qp NBlJpNNpMN9@pdAr 0Q0tr N 9lNupeaZp` aN2BgNA`C2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNtrҌpsNB0,Nu9@NtrDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu  2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe" F dF8BCHC` F0b(v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N&6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N&<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`HQ2: A d@C 5e*!R 0c 9c0`<R"_`^2:C0 Ef"_NuHQNaCr  g 00VJAgB @ nN @mHJ@j0.4DBUBk0QSAg Q.`S@k 0`0BAF "_Nu.WAkQA" 0g` @eA0Nur$g4jDk( b4<J@`@[H@0Nu4<Ѐ[Nu4<NuNuAd RdQRBBkBjDBJjDNupNufJj fJAkNupNdRdRrxaAffBWHNuJjDBDA@JBfprJjDEDD@JEfvxNuaغBffAVHNuCDEaEf fDUHNu]HNuCDEaEffDftNu"l`Qd&&|-KNuN"l`Qep[N c R nPNu _\-KN$@Hz ?<&NN\Nup0NuE`$@Hz ?<&NN\Nu NuNNH"HNNNVNNp `p ap Cpln<,(AL$I"vz x `gfURf~QjJFj4\Fk.aNHS&I.Nt`p???<NM\Qj&_Nu|HQ/??<@NAXXfNuJkp%NNu09JBfNu <r$<Nux&k>FC Be$ B dЄeNu B0dDdRdQRBNu&<x*<NLFC Be B djNu B0dDdSkfJAftNuAр[SBNu"l`d&6JBft&&| NuN"l`ep N c 2$F4BBNJBgB*#E8#&#JjV`,JcQl6\`6 c 2$4BBN*#8#&#Jk(JkִEffDbABJk0!NuJjBf޶fڸA`p`pN @ddAgH`p`p9@(9@*BlNuNlCpNNENT`C #I3| \ErcJ2W=AN0:NT0:JjN@Nup`pN0<9@:, INVJ@g@8 FNV EdbAJfE @e4r$Wf"FANuPRN:LST:AUX:CON:MID:IKB:VID:,J@fC E& B Og& Rgl Ag@ Ug2 Ig $CpNp=`pNAXJ@jNNuNVJ@g,A,BBgHQ?<=NAP FJ@k??<>NAXtNutNu ::/rI IN<,(k$/<??<?NtNA Jj ?a0NNHrO INLA NNNaHQ` @gS@@CNu   aH@@`"aH@@`a0) 4a3B HA2;i`0^ M / hawA|NuAZr%eee%NuA]NuA>A6HP 0 0 (0(?< NN\Hx?< NN\JfNu vN)@p `H@)@prtN AHplrtN B 2pNpNpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtN papap9@p`pvNv`v`vj`v `v`v`v`?Aa*` Al 2l 4)lVH)lRprtN Al 2l 4HVNuAl 2l 4L VA0000000000prtN aB0,l 2HNua40,HNua*0,l 4HNua0,l 22,l 44,HHHNuN9||BlBlrҌpsNBNuAl 2l 4HpirtN p0,Nu0<}N*& ?<NNC`&?<NNT"@ C <}NtN,@((?<NN.?<NNX@LvA HA HNupmrtA)HA)HN pN*HHPNd4 _:8><DbFEbGCHP@dʾAdBD2ƞE29|C???FF22N23BRG0@\@N*"2)IN(* 9AJA)H@@[000][ˈNV Evz`* [g" ]g |g QSz` zQSpQ][ɈNV Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NHNu*( INVA)H @depd ae zb QB DNVA\)H @ e` ae zb \gQBA BhNpZNA BP"`#|}N0A"H0,tg"Hg \f`A\fS A EN*AR@H`2QNuNVAH2 @erp0QtpoN Nr|<NV @xepw2A$JBjDFHB t`0QBl9F)lVTAtp 9| N 2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg: k&@0+R`g k#&@0+S@H3 Q&f)I`LNu?<?<NAXJgJgN$AH@B pN@A NuApN@A0pN@N$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0Nu _0HpN@ _0HpN@p"_0HqNNp"_0HqNNE ұeHHQ0)N*$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%pr Y2dP.gRG,D!p4Ae4v`VfANuN WHNuN VHNu Ihd*N$E$RR@H`2QˈNV ENu Ihd"*N$E8*$R`"QˈNV ENu(* 0(iN$E 4R`Q$D 4R`QˈNV DNV ENua NuNV IHPg"B  g &gN>JBjt BNut`Rptr ae OgT Xgj HgSRB ae Fb$0k  c_  c b退`tSJBkNRB0 b b瀀`RB0 fрd`H&N րN jNuHRp` HRpJQfpNNq Y QfdЀЀ 0NuNN4$_& Y Qfdփփ!8NNN~,Nq8DRzXEEg"7PNqR$HBJBgpNJgJigp`eetЂ`"ЀeЁdp`ЀeЀe"Ѕe$W.H@@NpL"2` NqR YEjrd0` SjN$_NЀЀ 0N YQf "_Nq*eNN*< NqbІSGfN$_N@փփ!8N YQf "_&Nq*eNN*<&NqbֆSGfN" KC`e N`d \N l\Ӭ\ NupNd d3 d# d# # d# # # # d# # # # # # # # dB` # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # QNudd2d"d""d""""d""""""""dB` """"""""""""""""""""""""""""""""QNu?k?<NM"UAf J@fH@NuDW?<NMXNuC l ", Ⲭ dfѬ SA 0! Nup"NNNJfNup#`p, HNup`pJ@gHz`?<&NN\NuB?< NA\A ACXExp"Jg X\QC"C!/:F?< NA\NuLH!NuHx`(Hx`"Hx`Hx`Hx`Hx` Hx`Hx !4VxH A6@ Ni LHL|1R/:?< NApdK`Ha>LxNNu)H9@Jp4N9|&J&f H LNu9|&Jl&lHByeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8NV  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C]fApN`NHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Fehler # ][Abbruch]\f*&lX)K\)ld` lp ,BQjNup(NT"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk##`3#`$Y8gHRDD*D%H8#$c2g# HRDD%H`/\ga `6f -K. @Nua \dp\N&#k gH`Nu"Cփk փk2##`փk##`3#`$Y8gHRDD*D%H8#$c2g# HRDD%H` l @ , Ь R@"@ETg`)J @N?<NNTNANANzNdfN!HxN&Sprite Grabber Works In|Low Rez Only!|HPNBummerr"_ N2NATNNN)|0 <)|. 8HxpC~NTpCNRBm <r$<AN|p9@A r @0A r @0ANN9@A r @0NBANN/Bp0,C~N0ANN/Hxp0,C~N0ANN/Hxp0,C~N0NN`VNqBgBg?<NN\?<w?<?<NN\pNpN p Np NZpFr9NVNSprite Grabber"<NpNpN p NpNZpPr_NVNBy Byron Cullen4NpNpN pNpNZ <rUNVNPress Any Key To Continue4NpNpN pNpNZpdr7NVN(c) 1987 Voyaging Minds"<NpNpN0HPpN0"_NC퀄NHmpN0"_NC퀄NHmpN0"_NC퀄NHmpN0"_NC퀄N+|pA퀸NNABNHmABNNN0"_NC퀄NNN`NqNq+|pA퀸NNAHNHmAHNNN0"_NC퀄NNN`NqNqNH NAN NAN NA NN\*.pi1HPA HPAx""_NHmxA "_NdfN%rA.NVHmxp"_NHPN.PI1"_NnfN&4HxNDEGAS Low Rez Only! | *.PI1|HPN Retry|Abortr"_ N2NATNATN&<x*<N,fN&,A` 0A.NVN&4NN%2HmxAxNVNH <r$<L8NHN"_NxC퀨NHmNSPR"_NC퀨NpNpN pNpNZ <r AxN4N@Bm <r$<AN|BgANN??<NN\NN`NqNqHmx?<NNTNH <r$<L8NHN"_N?<NNTNH <r$<L8NHN+@Bm <r$<AN|ANN/ -NCN0 -TNv+@NN`NqNqBm <r$<AN|ANNCN?ANN??<NN\NANNN`NqNqA퀜NA퀜N0A퀄NNH NAN NAN NA NNCxNHmxpN$"_NdfN(A.NVHmxpN$"_NdfN)pN@pN@NN%2A N&<x*<N,fN)CA$ 0CA* 0ANN/ANN"NNANAN&<x*<N,fN)pNANN/ANN"N*?<?<pr _NppNBgBgpr _NpNA N&<x*<N,gNH NAN NAN NA NNA NzN,gNH NAN NAN NA NA N&<x*<N,fN*CA0 0CA6 0ANN/ANN"N*?<?<pr _NppNBgBgpr _NpNA N&<x*<N,g0NH NAN NAN NA NNA NzN,gpNA$NN/A*NN"NVA0NN/A6NN"NhA$N&<x*<NLN?A*N&<x*<NLN?A0NH <r$<L8NHN?A6NH <r$<L8NHN?A퀊" NNH NAN NAN NA NA N&<x*<N,fN,NN(lNA N&<x*<N,gN\*.datHPN SPRITE.DATHPA퀐""_NHmA "_NdfN,NN(lA퀐NnNJBfN-HxHmN Exists! | Overwrite?"_NHPN Sure|NO!!r"_ N2NATNATN&<x*<N,fN-NN(lpON$HPA퀐r"_NpNTA퀊N4N@pN@pNTNSprite File Name -> A퀐N4N@pNTN X1 -> aA$N$N@pNTN Y1 -> A*N$N@pNTN X2 -> A0N$N@pNTN Y2 -> A6N$N@pNTp N$N4N@NN(lNA`N&<x*<N,fN.NN/,HxN| Quit? Really? |HPN Really!|Nawr"_ N2NATNATN&<x*<N,fN/,NN0 pN@pN@pp@pWBg?<NN\Bm <r$<AN|p9@A r @0A r @0ANN9@ANN/pC~N9@ANN/pC~N9@ANN/pC~N9@NBNN`lNqNN|N&NANAN&<x*<N,fN0HxN'p! !#conversion to a GFA BASIC .LST fileFi!FFDfa:\*.dat! !F cZF cJFqF FcnFYF2 E6 FJE=@ F 7I!M!F EsM F8MFM(E Now loading your picture clip...Fv,FL {HFYF E F !z F(E Translating into a numeric arrayFv,FT {HFoYF* FdEGF E?@@ Fa dF@ E6 FE;@ FEF(E Saving temporary file to disk...Fv,FS7O!M!.XXXFM!"$="FM!Restore "FM! For I=0 to "FM!Read XFM!"$="" $+Chr$(X)FM!Next IFM!REM data for clip "F M!":FM!Data "Ff4EGFM!7 "F4F e0JF M!,"F F f* JFMFM!Data "FEF FE eFaMFMF8MF {HFYF { Fg&EConverting temporary data fileF.,FCE.XXXF 7i!M!FEFf܃@.@ FE@.@ FfF@ g@\@ FE.LSTF gFE;@ .LSTF  FE 7o!M!F {HFYFE { FrE Saving file F,FSgsM tM Fa =`M!F M!F gZrM FgbFr8FYF>)!' |Thanks for using| this utility!!! LATER !FoqF!+F 8FYF>)!' |Thanks for using| this utility!!! LATER !FoqF!.F!+F %!!F2p! !!zz F#F2! !!vv F!F(F' !PP !Fc!F { F.Fgh@ NUGRABRX.ARC Final Version of GRABRACX.ARC A Graphic Utility for use with GRABBER by Robert Geiger This really is a superior version of the GRABRACX graphic utility. You will need the graphic utility GRABBER to use this application. GRABBER allows you to "clip" out rectangles from a Degas picture and save them to disk to be "Bload"ed when needed by your program. This application converts the GRABBER disk file which has a .DAT ending to a GFA BASIC .LST file, which can then be MERGED and incorporated right into your program. 1. First it's cosmetically neater, runs in any resolution although GRABBER is intended for use with LOW resolution Degas pictures. 2. The unavoidable error #26 (end of file) which the first version always ended with is now fixed. No longer will it lose data and even though it was always less then 10 bytes that was a troublesome bug. 3. The temporary file which was saved to disk and falsely labeled as a BASIC file (.BAS) in the first version, and the confusion which that caused is now eliminated. The temporary file is now labeled .XXX. 4. The final GFA compatable .LST file is now a complete program. Not only are "Data" lines included (which describe the picture clip) in the new file, but the code to actually load the data with a READ statement into a string variable (with the same name as the .DAT file) is also included. You will not have to count the data lines like in the first version because the code also includes a for next loop to load each piece of data. You just MERGE the new .LST file and with the addition of one line: PUT ,,$ You can display your picture clip. By incorporating the data for each picture clip within the body of your program, your disk remains cleaner and it's eaiser to copy a single big program file than the main program and a dozen seperate .DAT picture clip files which go with it. Be warned if you clip a large portion of a Degas picture, say one eighth of the total screen, the resulting file may be almost 10K. It will take a while to read several thousand pieces of data and you may think something is wrong...be patient. I regret rushing the earlier version. This is the first working utility I've written and I was excited. I know I'll be making frequent use of this application for future program development. Enjoy!!! May 21,1987 `+Q` Efv*oMH m HPHUBg?<JNA(m)m -:gS)@ -OK1PC#HNHx?<HNA@)@l/?<HNA)@h&@)@XЬl)@d)@`ARCpr Ѝ"QHNFALNHz2?< NA\pdAxr0XQ)K\NNBx|||JrBjNuHz?<&NN\CAp$L Qp NBlJpNNpMN9@pdAr 0Q0tr N9lNupealp`NuaNJHz?<&NNBWNANC2A@p222NrҌ0<NB0,rNurA9Ar`v C9Cr`rt9@9A9BNrrҌpsNB0,Nu9@N`rDҌpsNBNuC2 @ e @}bA@p222Nr,Ҍ0<NBNu &8*:EENuHn 2$4BBNuAd RdQRB BbABJk 0NuJBjBBXNu 0Nu 2$NuE`B<gJEgEjCDEDF Fe( F dF8BCHC` F0bFHC8v` HD8HDkDуdQRBNuDdBDA@kgAр[SBk0NuJlJBk&Nu0g H@rB JkЀ[` BbNuJBj prtNuHPAJgPpr$< _Nup _NpNNuCDEJEgJBgJjBEBQ*HE?<>0rHGGdHGGdSWDуdi\?<>0rHGGdHGGdSWDуdiN?<>0rHGGdHGGdSW2 H@N?<,>CEdGH@0r`?<`JBgVB&8TTDуdQRBNuDAр&AdRAрAрDуNuprt|=|  g +g -f .g20  b 0e 9b da`RF` .f 0e 9b dajSF` Eg efX +g -f 0e 9oSH`00  b&Hz0  b E Do`HJjDDDS4</NJFkSFk&aQN`Ha"FFaQL8N6.JgtBnNupr$<NuJBk4<rpAC v JBgJjv-| Bb BkH>aaNRFBdL8?N<JBga2SF Be BgQRB`ApdR e <rRF&0xafEv+0JFjDFv-Hƌd0BFHF 0HF0ANuprt|`2:HQ A dNp `p ap Chpln<,(AL$I"vz x `gfURf~QjJFj4\Fk.aPHS&I.N``p???<NM\Qj&_Nu|HQ/g ??<@NAXXfNuJkp%NNu09JjDNu @ 2$4BBNABJk0!Nux&k@FC Be& B dЄeNu B0dHDDdRdQRBNu&<x*<NFC Be B djNu B0dDdSkfJAftNuAр[SBNu"l`d&6JBft&&| NuN"l`ep N c 2$F4BBNJBgB*#E8#&#Jjh`,JcQl6\`6 c 2$4BBN*#8#&#Jk:JkִEffDbAeABJk0!NuRdQRB`JjҺBf̶fȸA`p`pN @ddAgH`p`p9@(9@*BlNuN CpNEN`C #I3| \ErcJ2W=AFN0:N0:JFjNNup`pN0<9@:, IN>J@g@8 FN> EdbAJfE @e4r$Wf"FANuPRN:LST:AUX:CON:MID:IKB:VID:,J@fC E& B Og& Rgl Ag@ Ug2 Ig $CpNp=`pNAXJ@jNNu~c0NQNurAt`t Add.A0Hk"JjJBft??/?<BNA JjNNu ::/rI INH<,(k$/<??<?N`NA Jj ?a0NNxHrO INHLA NNxvN)@p `H@)@prtNAHplrtNB 2pNpNpapaprapalpalpalpaTpaTpaTBp'a?<NNT@B){L9|0<rtNpapap9@p`pvNv`v`vj`v `v`v`v`?Aa*` Al 2l 4)lVH)lRprtNAl 2l 4HVNuAl 2l 4L VA0000000000prtN9Cp rtNAv` Av `Avl 2l 4)lVHN0<}NL& ?<NNC`&?<NNT"@ C <}N`N(* 9AJA)H@@[000][ˈN> Evz`* [g" ]g |g QSz` zQSpQ][ɈN> Dvx`* [g" ]g |g QSx` xQSpQ]Bp4NHNu*( IN>A)H @depd ae zb QB DN>A\)H @ e` ae zb \gQBA BhNLpZNA BP"`#|}N`A"H0,tg"Hg \f`A\fS A ENLAR@H`2QNur|<N> @xepw2A$JBjDFHB t`0QBl9F)lVTAtp 9| N2(g"P@g2RADAH""l`r2oZAe 1@#)I`Nuk1@Nup NN"l`dpNAtrdJhk\QpaNH ld$l`"Hg: k&@0+R`g k#&@0+S@H3 Q&f)I`LNuApN(N$N$BS@kH2QNupC ұd"X0Pg"RA$D#Nu"X0NuN>J@gpNu _0HpN( _0HpN(p"_0HqNp"_0HqNE ұeHHQ0)NL$_$ZR@H`2QNu$Y0gHR@@"D%$X0P2g# R@%NupE $ $X0dP.gRG,D%pr Y2dP.gRG,D!p4Ae4v`VfANuNWHNuNVHNu Ihd*N$E$RR@H`2QˈN> ENu Ihd"*N$E8*$R`"QˈN> ENu2)A IJAfr4(Ae*RBBc0*SA?N$E$R`QˈN> ENup`(* 0(iN$E 4R`Q$D 4R`QˈN> DN> ENu2p <0N`QNur ,* N>& ( EN> C"Sj|AcRGFc8>`4A g6 g0 g` gTlfelhgFf2pRGRFa`a,` `?~ap ap a 0NuCpE`bf`FgRGJGgRSGSFFgCpE`Yf`Nua@Jf gH@ fa(@ fza0 b @ Ee0Nu?<?<NMXNur9A(HNLNu0,^2,`NzEfpaRppaNAEg0PaľEfa4RE`p a2a*Efp a(NƼldeS@f lbfSl`9Ab9FdNupapqr`p`ak NupNuakfpNupNtddA0oH?<?B?<BNA Jk.,?<?B?<BNA *kBg?/?<BNA JkNuNp`pNu)H9@Jp4NP'J&f H LNu P&NuQ'` J,'fJ,&gHA#ȇeC! B,&LNu-W)K20, 8k8@ gJl&f"Nu , 8g"P 8 @/, 8NX  8fQ 8J,'gNupB <``L@ H)l26)z @W , Jf`CfSHj-D@Hd0H@H 0H@0`fSC\fS , @a"C\fApNNNtHP?< NA\NuH@aa/a a Nu@0 9c^Nu| PC>$Error # ][Abort]\f.B &lX)K\)ld` lp ,BQjNup(NV"l`Yd&-KNN"l`YepN&#k"C-KN"Cփk փk2##`փk"`2`$Y8gHRDD*D%H8#$c2g# HRDD%H`)|) ANhHmB <r$<ANNN"_NCBNpINHPABr"_NpNANhpNNv Now loading your picture clip...C`NA*>NXp2NN0ANNFCHNHmB -H"_NvNv Translating into a numeric arrayC`NA*>NXp2NN0ANC|NFBm"ANANAN/HmHAN/p""_NC|NN`NqNqABN>ANhHmB <r$<ANNN"_NnCBNBm(Nv Saving temporary file to disk...C`NA*>NXpONHPHmBNv.XXX"_Nr"_NpNABNN$="4NpNNRestore ABNNpNN For I=0 to ! <r$<ANNNNpNNRead XNpNABNN$=ABNN $+Chr$(X) NpNNNext INpNNREM data for clip ABNNpNABNp:NNpNNData !A 0ANANpNANC|NNhNA$NtA$N&<x*<NRfN&pNp,NA$N&<x*<NLfN&pNNpNNData 4Bm(N`dNqpNNpNNpNp2NN0p(NNvConverting temporary data fileC`NA*>NXHmBNv.XXX"_NCNNpiNHPANr"_NBm.HmNp.NHPA*N&<x*<NN _"_N`$VHfN(HmNp.NHPA*N&<x*<NN _"_N`A*Nh`HmNp\NHPA*N _"_N`$VHfN(bHmNNv.LST"_NCTNN(HmN <r$<A*NNN"_NnHPNv.LST"_NCTNpoNHPATr"_Np2NN0p(NNv Saving file HPAT"_NC`NA*>NXpNNlHpN2NlL8N&<x*<NRpJBgpF$VHfN)~pNN(CZNpNAZNNpN$VHgN)~`|N$N0HxN' |Thanks for using| this utility!4HPN LATER 4r"_ N|+@xNtNtN$N0HxN' |Thanks for using| this utility!HPN LATER r"_ N|+@xNtN~pNpNpNA0N&<x*<NN/A6N&<x*<NN"NA0N&<x*<NN/A6N&<x*<NN"N0pNA0N&<x*<NN/A6N&<x*<NN"NA0N&<x*<NN/A6N&<x*<NN"NpNpNA0N&<x*<NN/A6N&<x*<NN"NA`NpNp(NN~Nt (*4d.xf"N8 ;;;;;;;;ꮸ: a,*@0n gN>a,+@$g:>a,/ m$!_g>a,+@g ` m$.a,.$a,.a,pJL N^NuNVH>.|m0]@` y0p0H>o0]@`0JLN^NuNV>a @"| 0N^NuNV0. "n 4n@@0n "|f0H"|f4n RN^NuNVH<.JFm|mp`BG`0 @"|JgRG|Km|Kfp`v0 м @!y y0`0H<o"0 м @2]A Ҽ"A `0H2 Ҽ"A"0 м @1|0\@HJLN^NuNV.?. ?.aXN^NuNVH*n <. :.JEm|mp`vJFl0"M4E@0``|lp`X0]@ м @.l "M4E@0`40"M4E@00]@ @"|002]A Ҽ"ARipJL N^NuNVH<.BG`FRGJFf0S@JLN^NuNV n=P n=h n=h n=h> a-@fp` n-h$1n n-h n1n  n!n n!n$B n0(|"n3@( n1n "n1i 1n1iTh>a$? n1_2(ACE1q>a? n1_2(ACEd1q n> a? n1_0."n#@ 0.nS@H=@pn"n3@ "n3@0.nS@H=@ n-h n0(n"n3@ n!n n0( "n2) A"n2 n0( n"n2)A"n3@ n0( 2.AA"n3@ n!| n1|(0."n#@ pN^NuNV n 0( N^NuC0 Y"Y`QNuC0 Y"Y`QNuNVHBG`6 n H>a? nH?aT_@R RDgB@` RG| mpJLN^NuNVH>.JGlp`<0|l& y0p0H>0FB(0JGlp``T0]@ м @Jl@0]@ м @Shf&0]@ м @B0]@ м @Bp`p>a*@ fp``BW/ adX*0]@ м @Shf>0]@ @"|.a',0]@ м @B0]@ м @B JL N^NuNVH*n-m-g./-a$^X. a. a. g&-m B .\/< /-aP+n `.\/< /-anP. a. aJn g. g&&m4(S`g&L(S f g&`p`4BF`(0F-P`.a" n-PJfRF|mpJL8N^NuNVH (n lgJl g*l >,<,9|>0G?50,W?</,?<?<NMO #ug3.u/<~aCXJGfF>?,0W0-W?</,?<?<NMO #ug3.u/<~aC n?(0. W?. /.?.?<NMO #ug n3.u/<~aBXJL N^NuNVH *n <.0-f m$hlBG` Jnl~`~BJGgB@`p@Hм-@ n-H(P`(0,mf 0,ng lf-L L-H(P f fJg(n n-H-P`g n-H-P nJf(n.a9|>0G?50.W?</,Bg?<NMO #ug3.u/<~aAzX9nBl 9G9m)M `B> y~N:g2|gP|f$3#u.u/<~aAX n n( n Jng9| ,JL0N^NuNVH (n>a"F*@ fp`4;l +| +l(+l+l,;l;l+l$ JL0N^NuNVH *n(n f ?fB@`b` fp`VBG`, ?g H>a?H?aT_gB@`,RGRR| m gJfp`HHAgp`B@JL0N^NuNVH *n(n BG`H>aRRG|lJg *g \g .g  fо|f`RJg .g \f *fp?`p  *fR .fR`RG|mBG`H>aRG|lJg *g \g .g  f *fp?`p `RG|mJL0N^NuNVH*n(n BG&M` \gRRGJfJfJng(H>/ aX<l0`JGg ./ aX0`B@JL8N^NuNVH>a*@ g./. / aP`pJL N^NuNVH *n.. (n,- o.JoHz/ // Bga&O`pL0N^NuNVH>a*@ g./. / aP`pJL N^NuHzz//////?<aONuNVH>.*n Jm(g8. a<H./-aHX. /</-aP`02AAH,0. |=@ g0. @=@ =|`=|./-aX.U/</-aP.Uap0.nn =@.UaX./-aX.U/</-aPJL N^Nup0/lR@Nu" o"h?((gJo fF`IЁ// a\"_XU/p// a:O 0XJWfd/gH`| @fNp`Jp0)(4(2)&@H@J@g@UBk4|$R$ gjf4(jfT Ti( j00XTNuNVH? (n*lv<,$l:RE`oBW/ ?a \:JFf 0, fp:Jn gr|fj8|lx>-UG`>RC/ ?a\:gRDmmxvQJGk.:.?0l(//]apP=@0,&nJng0.nH".o .` 0.nH=@>/ ?.a$\-@>0n// a P0.HRnJf .2.HЁ-@`/. .2.HЁ/?. nNO 0.HѮ0-H=@ .2.H-@g0-n=@JngJ./.?.?.?.aO 0.2-`=@HѮ0.H>0n// aPP .2--@>/./aP=@B@=@H-@=@=@`>/ a&XH-@Jf(0.nl&f0.n0.HѮJng`pJnf=|Jng./.?.?.?.aO .ѮBW/./ aPJf*=l&=n0n-HJnf JngBn`0.SnJ@fDJngV>/ abXJ@f0.2-`=@>0n// aP./.?,&?.?.aTO 0.HѮJng>0l(//]aP=@Jng 0.nf>/ aXJ@fXBn>/ ?,&0.Wa\-@>0n// aPJf-n`&?././.?. nNO , -@ .JL0N^NuNVH*n(n -m>a&@ fp`dJg'm +K'MB7l.a'm$$'n( n ( м'@,7l7l./ ?< a\ JL8N^NuNVH*nBn./. aX0.@(m f.a(@+Lfp`T n -@f-m0./ a:XBn-m`"./a*X=@f n-h Jf`n , 0oL,fD .g>+ g6 g0./aXJ@gJnf./ aX-@fp`./aX=@fB/< / avP&@ gJfz n f , 0o+l 0` n Jnf g n f `0lp`& n f. / aX .` JL8N^NuNVH~0.g0yf4>?<NMT*@ fp`>/ aXJgp`y0n"yJ0@g"0n"y0@H0@"|}Jfj|` |fJ0`gRF|(m|(fp`N |f0`H2FfR0F}2n"Q $0"y4n@@0.HJL N^NuNVH n*P -:fH>a>|T` y(7H>>aJlp`@ \f0G"| p(h$R` y0p@H0@}(P n JL0N^NuNVH -n.Ya\*@ f `>//.aP>gJGl|f*m0D@>`-mfHz1T?</./ afO-@(M*n gt`8-m f, g$ l(fHz1?</./ a$O*@`*n g./aXJ@g0G-HJgR`` gJGf. n JL0N^NuNVH n (:f nH>a4:|T` y(7H:>a,-@l .` y0P@H>g 0GfS~` |fJ0pgRG|(m|(mp`R>/Q/.a\P-@fp`6 |f0pH2GfR0G} 02E@@pJLN^NuNVH*n(n JgJ&MBG`RG|l Jg  f .g*K  g.``BG`RG|l Jg  fB JL8N^NuNV nJg. n/(aX-@ . /.ahX-@ n \R . N^NuNVHJn g0. S@` y(7H=@ > aJl nBp`:0n "y0@H0@}*P./ aVX-@S nBpJL N^NuNV y ( N^NuNV y!n N^NuNV0."y@7> NMN^NuNV y(7HHN^NuNV y. ?. /.a\N^NuNVH n gn! BW/Y/.aBP-@fp`BJg(.?. /./.aO *@ fp`p`p`jJgb./.?< aV\0. "n@ . /?<a.\./?<a\./ aXpJL N^NuNVH.Y y/( ?<a\. y/(  ?<a\ y h h ..H? y/( /.aO *@ fp`4 y.  /?<aP\ y. / aXpJL N^NuNVH n "ni . /.?<a\. a. a. /.?<a\. ap. /.a(XJL0N^NuNVHBG`0 @"|JgRG|Km|Kfp`B0 м @!y0 м @1|<\F>?/. /.aO JLN^NuNVH*n n &h$>a(@ fp`9n0)K0.]@ м @ Bl*Bl$Bl()n  n )h n h ( м)@ n -h4` n (g n-PJf n (4 n !L4Jg.\/.\?< aR\ n!L,`09m . a)m . a9m9m0.HJL8N^NuNVH n*h m-H=h|`6> n/($?0-&Wa\-@BG` nBRRGnmRF nh m> n/($?-&a\-@-@BG` nBRRGnm .JL N^NuNV. H>W/.aXN^NuNVH|B.BW/Y/.aP*@ fp`BW/.a :XJ@gp`&m f.a&@+Kfp`B.?/ aXJ@gp`.a>B` ./.aXn Bn` L2nB( Rn n m9yu.aݒ9y@.a~BlB./ a X./< / aP>/ aX./ a XB/< / a|P-@, gBW`>/ /.aP-@=@Jl .`>a @h0.HJL8N^NuNVH>/.aX-@=@l .`>a-@ n-h n./.aXB/< /.aP-@. n/(aX-@fp`p.a>-@/ n!_fp`R>/.aXJ@gR>/.aX.a 0.]@ м @pH 2.]A Ҽ"A#@.a/.aX.a 0.]@ м @p JL N^NuNV> /.aXN^NuNVH BW/Y/.aP(@ fp`DB.Q?<'/./ aNO *@ fp` - g Jn gp`> / / a&PJL0N^NuNVHBW/Y/.a,P(@ fp`B.Q?<'/./ aO &@ fp`b*l./ aXXJn f./</ a,PJn g"./</ aP>/ aX.HJL8N^NuNVH > a*@(m./ aXJnf./</ aP.a\.TaRJng0./</ aP>/ aX.a&.TaJL0N^NuNVH BW/Y/.aP*@ fp`DB.Q?<'/./ aO (@ fp` , gp` ./ / a PJL0N^NuNVH n(h4`` ,fTBn`F0. м @f.0. @"| 0f BW/ aX`p`Rn nKm(T f n*h$ n =h.Ua` BW/ ?.aT>Bg?.aP=GJng nf n(h./ a.X|.Y/</ aP>/ a߀XpJL0N^NuNVH >//.alP*@ fp`-mf.aX+@fp`.@/.aXB/< /.aP(@ g g g Jgp` m-H-P` n -H-Pfgp`xJ4gp`lJgp`b n Jg.a-m.a| n.(. n (-@/aXB/< /.aP(@./ /.aPJL0N^NuNVH (n0. gS@` y(7H=@ >za>lp`H0G*P|~`>RE/ ?a\J@fRFRGmm(0mU(0m(0m (pJL0N^NuNVHBBg/.aP\Jfp`BW/Y/. aP-@fp`BW/Q/.a~P-@fp`~ n h$0("n"i$2)Agp`\>/. a~X,l `D >at*@(m|./ aX .మgB/< / a`P-@ n( H=@./ aRX./</ aP./ a*X./< / aP>/.aX=@>a&@./+aX./< /+a6Pk>a>/+a&X`(./.aX./< / aP >a.l ` >/ aXJL8N^NuNVH> a *@ fp`8 nf - Ѯ` nf - Ѯ` Jngp` ./ a XJL N^NuNVH (n , lp`J lp`*lJ f BFBl(`Jl(g0,(m gB@`p=@>/. / (aP>BWJl$g$ , nNq2-=@nn<,$`<, z`/ ?a\<|fp`8REGmJl(gJGg / ?a\<9F$.?aT9@&)n . JL0N^NuNV0nC00H "n2 . 2.N^NuNVH*nJfp`$BG` .fH. f0` SG0|nB@JL N^Nu2/ o"o ` gn@< f<Am<ZnQpNupNuNVH0.yop`(0.y09h@H*@*n0.yh JL N^NuNV0.@=@0n~-HJg n-P n"n `>RWav-@g n0T-ngBn` nBPTRn0.nm .N^NuNVH n>( n2G~ 0G~ JLN^NuNVH ./9Bga\(|~*T` - f(.a`(M*T f> a JL0N^NuNV0| PNNP y#$.a$ yp0.!@haN^NuNVBWaN^NuNVH*nBF`5`0H>o>aRF|mBF`0 м @f>\WaRF|KmBF`5`@H>g 0GfSRF|m&|~(S` f&.~/ a4X`&L(S fJL8N^NuNVJng nm nop`"Jng nfBBg/. a \J@gp`.u`/<~?< aռ\.~a-@gR g./<u`aX ng .~/.aX.~/.arX./<u`aX nglJf y-h,-nBn nHRJf nHRJg RnRn`Tn.gRn.~0n/a~X-@fp` n-h` n"nRR0.SnJ@f.~/apJL N^NuNVH n (h| fp` f~`BG*T f(n *TJGf -mx -f(`6>a&@ fp`| -'@ -Ю'@&+n( n * n !M+y f ` "n #@ `(` l,-(M*T n fVJGg ``pJL8N^NuNVH (y~` , g(T f fp`P ,lp`B.gR>a$*@ ,Ю+@ ,+@)n.~/ aXpJL0N^NuNVH&n *S` n (o(M*T f n g(`&Jf'n g< n ("n")Ёf$ -"nѩ n f'n.a g< ,Ь"n")f( n (Ѭ n( +f'L.aJL8N^NuNVH..ggR.~/aX*@ fp`f ` -JL N^NuNVH (|~*T` -g(M*T f fp`(.~/ aXpJL0N^NuNV0n"|ulJ0gp` >?<NMTN^NuNV y(0H>VWaN^NuNV y(1H>VW?<NMTN^NuNV y(3H>VW?<NMTN^NuNV y(2H>VWahN^NuNV y(2H>VW?<NMTN^NuNVHBF>?<NMTJg>?<NMT. :|f>a>a`κ|f|`|fBF`|fL>a0n"| p 2nX0n"|ul0H"|ul4nR`\ |ul2n Pl> |2.0@@"P"$|RA@nC "|ul4nR` / N"p*_JFfJLN^NuNVH>.0GulB0@м2G"2G0"JLN^NuNVH>.<. >a>??<NMX| m0G"|h002GhRQ`4| f0GhBP` |f0G"|h002GhSQJLN^NuNV> y(1H?VWaTN^NuNVH>.<. | f"> ?a@T0G"|h00|f` >?a TJLN^NuNVH>.<. | f >?aT` | l>^?aT|@>?aTJLN^NuNV> y(2H?VW?<NMXN^NuNV> y(3H?VW?<NMXN^Nu4/ |ulJ0 gZ |00@@"P $|2RA@nC 0BulSf.2@ҼJ"|# "|0# ` ??<NMXNuNV y(0H>VWatN^NuNVH>.>a^, >?aT JLN^NuNV y(0H>VWaN^NuNVH y(0H>VG>a ,>a JLN^NuNV y(2H>VW?<NMTN^NuNVH>.|f& y(0H<VF>aJg>a`p`> y(1H?VW?<NMXJLN^NuNV. y(1H?VWaTN^NuNV` n H>?.afTR n JfN^NuNVH<.>. > ?aT> ?aT`> ?a~TSGJGfJLN^NuNVHJngSn<.*n `$< f Pnn`< lTn`Rn0SFJ@f`*>?.aT> ?.aT>?.aT0n"|h00nn0.JL N^NuNVH*n.TH?W y(0H?VWaX@JL N^NuNVH>.0Gh<BE`>a@`> ?abT`>?/. ?aP:`>a>?/. ?aP:JEf`>#?aT>?a`TBE`t>#?aT>?aFTBn`0n"n 0H>?aTRnnn`4.H2E >?aTRE`HA(rXW0(ANкn m0JLN^Nu n^^nNVpN^NuNV <N^NuNVH*nJg.aJ g. aJg.aBG` 0G}f0G}BRG|(m.aJL N^NuNVH BG`V0 м @*P o@f:.a0 м @B0 м @B0 м @BhRG|KmJL0N^NuNVByhRyh n=P nWop`.~a -@g f0y"| p-h$0y"|.a0y"| pJg0y"| p.aBn`T0n"|fJ0g@0n"|} p ($"n")$f |f2nB0n}BRn n(m0y"|.a0yBJg.aBn`@0n-P`" n0(yf n1| n-PJfRn nm>?<NMT-@Jfp29`F@y .`>>/.aXJgp`$ByuBy`Bn`@0n-P`" n0(yf n1| n-PJfRn nm .`0.@@A 0=PA-HJngJng n m nm nn y2.|00H=@ov0.`4 n hf$./<?.aȼ\.HH` nV./<?.a\` n-h`./<?.a\R nJf` n-h nH=@R .R-@Bn`d./<?.a&\f>./<?<?<@aP n  f./<?.a\```RnR0.SnJ@f0."np`* <` `:S@|b2@0;A*N n g n f=|`Bn.g nf n=h` n=h nm0.]@ м @-P`FJnm80n"y00H=@o0.]@ м @-P`0n-H`0n-HJfp`.Jl .=@ .P-@ n?fX nJhgp` n hf n/?.VWaVT _p` n. n?(?.VWaXH` n@f nJhgp` n-PVnBn`@ nf nH>?.atTR` nH>?.?<NMXRRn n0(nn n0(H`,p`&B n=g nG|<|0r `|wop`@| op`6|f0|f |op``GAڼppop` 3@apJLN^NuNV09uHN^NuNVH>.0||mp`20||mp`"p0|"<mp` 3uapJLN^Nu??. .. RbZڠtڼڌ z r^b*̆ZlHCON:AUX:PRN: o"oHrtvxz|~6G g g,A$HHHHHHHHHSfܳg`LNuNV n C BN^NuNV . Jfp n,X.X/Nu?9u?9@?<NN\ONu`M>*oIM6B?< NA\/AB#?< NA\Bg/ ?<1NANV n0X0N^NuNV n XH@X N^Nuf Nh P g` o g/,y`,H8h-_x0(_ fNmH+ ; O+-M|.|nA2`H/ ?Nh/-O|A2.|n/aAX*y`,+@h,m|(^0&^L f.LNf/ ?LxhNs.NNd`"(gSgD h0!@ 1 .HNs"/gSg&"o0#3Nhg!.I`.I` O\N`WNs < WgpNsNV/A/aAHX _N^NuNVH. <am<zn H|_`HJLN^NuNVH>a,*@0n[ gN>a,+@$g:>a,/ m$!_g>a,+@g ` m$.a,.$a,.a,pJL N^NuNVH>.|m0]@` y`,0p0H>o0]@`0JLN^NuNV>a @"|X 0N^NuNV0. "n 4n@@0n "|X0H"|X4n RN^NuNVH<.JFm|mp`BG`0 @"|XJgRG|Km|Kfp`v0 мX @!y`, y`,0`0H<o"0 мX @2]A ҼX"A `0H2 ҼX"A"0 мX @1|0\@HJLN^NuNV.`,?. ?.aXN^NuNVH*n <. :.JEm|mp`vJFl0"M4E@0``|lp`X0]@ мX @.l "M4E@0`40"M4E@00]@ @"|X002]A ҼX"ARipJL N^NuNVH<.BG`FRGJFf0S@JLN^NuNV n=P n=h n=h n=h> a-@fp` n-h$1n n-h n1n  n!n n!n$B n0(|"n3@( n1n "n1i 1n1iTh>a$? n1_2(ACE1q>a? n1_2(ACE^1q n> a? n1_0."n#@ 0.nS@H=@pn"n3@ "n3@0.nS@H=@ n-h n0(n"n3@ n!n n0( "n2) A"n2 n0( n"n2)A"n3@ n0( 2.AA"n3@ n!| n1|(0."n#@ pN^NuNV n 0( N^NuC0 Y"Y`QNuC0 Y"Y`QNuNVHBG`6 n H>a? nH?aT_@R RDgB@` RG| mpJLN^NuNVH>.JGlp`<0|l& y`,0p0H>0F`,B(0JGlp``T0]@ мX @Jl@0]@ мX @Shf&0]@ мX @B0]@ мX @Bp`p>a*@ fp``BW/ adX*0]@ мX @Shf>0]@ @"|X.a',0]@ мX @B0]@ мX @B JL N^NuNVH*n-m-g./-a$^X. a. a. g&-m B .\/< /-aP+n `.\/< /-anP. a. aJn g. g&&m4(S`g&L(S f g&`p`4BF`(0F-P`.a" n-PJfRF|mpJL8N^NuNVH (n lgJl g*l >,<,9|>0G?50,W?</,?<?<NMO #Ng3`*.N/<WRaCXJGfF>?,0W0-W?</,?<?<NMO #Ng3`*.N/<WRaC6X9FBl JL0N^NuNVH*y`, n0(mf0-n mn l .a;|*U f n> n?(0. W?. /.?.?<NMO #Ng n3`*.N/<WRaBXJL N^NuNVH *n <.0-f m$hlBG` Jnl~`~BJGgB@`p@Hм-@ n-H(P`(0,mf 0,ng lf-L L-H(P f fJg(n n-H-P`g n-H-P nJf(n.a9|>0G?50.W?</,Bg?<NMO #Ng3`*.N/<WRaAtX9nBl 9G9m)M `B> y~N:g2|gP|f$3`*#N.N/<WRaAX n n( n Jng9| ,JL0N^NuNVH (n>a"F*@ fp`4;l +| +l(+l+l,;l;l+l$ JL0N^NuNVH *n(n f ?fB@`b` fp`VBG`, ?g H>a?H?aT_gB@`,RGRR| m gJfp`HHAgp`B@JL0N^NuNVH *n(n BG`H>aRRG|lJg *g \g .g  fо|f`RJg .g \f *fp?`p  *fR .fR`RG|mBG`H>aRG|lJg *g \g .g  f *fp?`p `RG|mJL0N^NuNVH*n(n BG&M` \gRRGJfJfJng(H>/ aX<l0`JGg ./ aX0`B@JL8N^NuNVH>a*@ g./. / aP`pJL N^NuNVH *n.. (n,- o.JoHz/ // Bga&O`pL0N^NuNVH>a*@ g./. / aP`pJL N^NuHzz//////?<aONuNVH>.*n Jm(g8. a<H./-aHX. /</-aP`02AAH,0. |=@ g0. @=@ =|`=|./-aX.U/</-aP.Uap0.nn =@.UaX./-aX.U/</-aPJL N^Nup0/lR@Nu" o"h?((gJo fF`IЁ// a\"_XU/p// a:O 0XJWfd/gH`| @fNp`Jp0)(4(2)&@H@J@g@UBk4|$R$ gjf4(jfT Ti( j00XTNuNVH? (n*lv<,$l:RE`oBW/ ?a \:JFf 0, fp:Jn gr|fj8|lx>-UG`>RC/ ?a\:gRDmmxvQJGk.:.?0l(//]apP=@0,&nJng0.nH".o .` 0.nH=@>/ ?.a$\-@>0n// a P0.HRnJf .2.HЁ-@`/. .2.HЁ/?. nNO 0.HѮ0-H=@ .2.H-@g0-n=@JngJ./.?.?.?.aO 0.2-`=@HѮ0.H>0n// aPP .2--@>/./aP=@B@=@H-@=@=@`>/ a&XH-@Jf(0.nl&f0.n0.HѮJng`pJnf=|Jng./.?.?.?.aO .ѮBW/./ aPJf*=l&=n0n-HJnf JngBn`0.SnJ@fDJngV>/ abXJ@f0.2-`=@>0n// aP./.?,&?.?.aTO 0.HѮJng>0l(//]aP=@Jng 0.nf>/ aXJ@fXBn>/ ?,&0.Wa\-@>0n// aPJf-n`&?././.?. nNO , -@ .JL0N^NuNVH*n(n -m>a&@ fp`dJg'm +K'MB7l.a'm$$'n( n ( м'@,7l7l./ ?< a\ JL8N^NuNVH*nBn./. aX0.@(m f.a(@+Lfp`T n -@f-m0./ a:XBn-m`"./a*X=@f n-h Jf`n , 0oL,fD .g>+ g6 g0./aXJ@gJnf./ aX-@fp`./aX=@fB/< / avP&@ gJfz n f , 0o+l 0` n Jnf g n f `0lp`& n f. / aX .` JL8N^NuNVH~0.g0y_f4>?<NMT*@ fp`>/ aXJgp`y_0n"y`,J0@g"0n"y`,0@H0@"|VLJfj|` |XJ0`gRF|(m|(fp`N |X0`H2FXR0FVL2n["Q $0"y`,4n@@0.HJL N^NuNVH n*P -:fH>a>|T` y`,(7H>>aJlp`@ \f0G"|[ p(h$R` y`,0p@H0@VL(P n JL0N^NuNVH -n.Ya\*@ f `>//.aP>gJGl|f*m0D@>`-mfHz1N?</./ afO-@(M*n gt`8-m f, g$ l(fHz1 ?</./ a$O*@`*n g./aXJ@g0G-HJgR`` gJGf. n JL0N^NuNVH n (:f nH>a4:|T` y`,(7H:>a,-@l .` y`,0P@H>g 0GXS~` |XJ0pgRG|(m|(mp`R>/Q/.a\P-@fp`6 |X0pH2GXR0GVL 02E`,@@pJLN^NuNVH*n(n JgJ&MBG`RG|l Jg  f .g*K  g.``BG`RG|l Jg  fB JL8N^NuNV nJg. n/(aX-@ . /.ahX-@ n \R . N^NuNVHJn g0. S@` y`,(7H=@ > aJl nBp`:0n "y`,0@H0@VL*P./ aVX-@S nBpJL N^NuNV y`, ( N^NuNV y`,!n N^NuNV0."y`,@7> NMN^NuNV y`,(7HHN^NuNV y`,. ?. /.a\N^NuNVH n gn! BW/Y/.aBP-@fp`BJg(.?. /./.aO *@ fp`p`p`jJgb./.?< aV\0. "n@ . /?<a.\./?<a\./ aXpJL N^NuNVH.Y y`,/( ?<a\. y`,/(  ?<a\ y`, h h ..H? y`,/( /.aO *@ fp`4 y`,.  /?<aP\ y`,. / aXpJL N^NuNVH n "ni . /.?<a\. a. a. /.?<a\. ap. /.a(XJL0N^NuNVHBG`0 @"|XJgRG|Km|Kfp`B0 мX @!y`,0 мX @1|<\F>?/. /.aO JLN^NuNVH*n n &h$>a(@ fp`9n0)K0.]@ мX @ Bl*Bl$Bl()n  n )h n h ( м)@ n -h4` n (g n-PJf n (4 n !L4Jg.\/.\?< aR\ n!L,`09m . a)m . a9m9m0.HJL8N^NuNVH n*h m-H=h|`6> n/($?0-&Wa\-@BG` nBRRGnmRF nh m> n/($?-&a\-@-@BG` nBRRGnm .JL N^NuNV. H>W/.aXN^NuNVH|B.BW/Y/.aP*@ fp`BW/.a :XJ@gp`&m f.a&@+Kfp`B.?/ aXJ@gp`.a>B` ./.aXn Bn` L2nB( Rn n m9yN.aݒ9y`.a~BlB./ a X./< / aP>/ aX./ a XB/< / a|P-@, gBW`>/ /.aP-@=@Jl .`>a @h0.HJL8N^NuNVH>/.aX-@=@l .`>a-@ n-h n./.aXB/< /.aP-@. n/(aX-@fp`p.a>-@/ n!_fp`R>/.aXJ@gR>/.aX.a 0.]@ мX @pH 2.]A ҼX"A#@.a/.aX.a 0.]@ мX @p JL N^NuNV> /.aXN^NuNVH BW/Y/.aP(@ fp`DB.Q?<'/./ aNO *@ fp` - g Jn gp`> / / a&PJL0N^NuNVHBW/Y/.a,P(@ fp`B.Q?<'/./ aO &@ fp`b*l./ aXXJn f./</ a,PJn g"./</ aP>/ aX.HJL8N^NuNVH > a*@(m./ aXJnf./</ aP.a\.TaRJng0./</ aP>/ aX.a&.TaJL0N^NuNVH BW/Y/.aP*@ fp`DB.Q?<'/./ aO (@ fp` , gp` ./ / a PJL0N^NuNVH n(h4`` ,fTBn`F0. мX @f.0. @"|X 0`,f BW/ aX`p`Rn nKm(T f n*h$ n =h.Ua` BW/ ?.aT>Bg?.aP=GJng nf n(h./ a.X|.Y/</ aP>/ a߀XpJL0N^NuNVH >//.alP*@ fp`-mf.aX+@fp`.@/.aXB/< /.aP(@ g g g Jgp` m-H-P` n -H-Pfgp`xJ4gp`lJgp`b n Jg.a-m.a| n.(. n (-@/aXB/< /.aP(@./ /.aPJL0N^NuNVH (n0. gS@` y`,(7H=@ >za>lp`H0G[*P|~`>RE/ ?a\J@fRFRGmm(0mU(0m(0m (pJL0N^NuNVHBBg/.aP\Jfp`BW/Y/. aP-@fp`BW/Q/.a~P-@fp`~ n h$0("n"i$2)Agp`\>/. a~X,l `D >at*@(m|./ aX .మgB/< / a`P-@ n( H=@./ aRX./</ aP./ a*X./< / aP>/.aX=@>a&@./+aX./< /+a6Pk>a>/+a&X`(./.aX./< / aP >a.l ` >/ aXJL8N^NuNVH> a *@ fp`8 nf - Ѯ` nf - Ѯ` Jngp` ./ a XJL N^NuNVH (n , lp`J lp`*lJ f BFBl(`Jl(g0,(m gB@`p=@>/. / (aP>BWJl$g$ , nNq2-=@nn<,$`<, z`/ ?a\<|fp`8REGmJl(gJGg / ?a\<9F$.?aT9@&)n . JL0N^NuNV0nC00H "n2 . 2.N^NuNVH*nJfp`$BG` .fH. f0` SG0|nB@JL N^Nu2/ o"o ` gn@< f<Am<ZnQpNupNuNVH0.y_op`(0.y_09AN@H*@)0.yAN JL N^NuNV0.@=@0nV-HJg n-P n"n `>RWav-@g n0T-ngBn` nBPTRn0.nm .N^NuNVH n>( n2GV 0GV JLN^NuNVH ./9`,Bga\(|V*T` - `,f(.a`(M*T f> a JL0N^NuNV0| PN y`,#$`,.a$ y`,p0.!@haN^NuNVBWaN^NuNVH*nBF`5`0H>o>aRF|mBF`0 мX @f>\WaRF|KmBF`5`@H>g 0GXSRF|m&|V(S` f&.V/ a4X`&L(S fJL8N^NuNVJng nm nop`"Jng nfBBg/. a\J@gp`.M/<WR?< a\.WRa-@gR g./<MaX ng .V/.aX.V/.arX./<MaX nglJf y`,-h,-nBn nHRJf nHRJg RnRn`Tn.gRn.V0n/a~X-@fp` n-h` n"nRR0.SnJ@f.V/apJL N^NuNVH n (h| fp` f~`BG*T f(n *TJGf -mx -f(`6>a&@ fp`| -'@ -Ю'@&+n( n * n !M+y`, f ` "n #@ `(` l,-(M*T n fVJGg ``pJL8N^NuNVH (yV` , g(T f fp`P ,lp`B.gR>a**@ ,Ю+@ ,+@)n.V/ aXpJL0N^NuNVH&n *S` n (o(M*T f n g(`&Jf'n g< n ("n")Ёf$ -"nѩ n f'n.a g< ,Ь"n")f( n (Ѭ n( +f'L.aJL8N^NuNVH..ggR.V/aX*@ fp`f ` -JL N^NuNVH (|V*T` -g(M*T f fp`(.V/ aXpJL0N^NuNV0n"|MJ0gp` >?<NMTN^NuNV y`,(0H>VWaN^NuNV y`,(1H>VW?<NMTN^NuNV y`,(3H>VW?<NMTN^NuNV y`,(2H>VWahN^NuNV y`,(2H>VW?<NMTN^NuNVHBF>?<NMTJg>?<NMT. :|f>a>a`κ|f|`|fBF`|fL>a0n"|` p 2n`X0n"|M0H"|M4nR`\ |M2n Pl> |`2.0@@"P"$|\RA@nC "|M4nR` / N *_JFfJLN^NuNVH>.0GMB0@м\2G`"2G`"JLN^NuNVH>.<. >a>??<NMX| m0G"|AR002GARRQ`4| f0GARBP` |f0G"|AR002GARSQJLN^NuNV> y`,(1H?VWaTN^NuNVH>.<. | f"> ?a@T0G"|AR00|f` >?a TJLN^NuNVH>.<. | f >?aT` | l>^?aT|@>?aTJLN^NuNV> y`,(2H?VW?<NMXN^NuNV> y`,(3H?VW?<NMXN^Nu4/ |MJ0 gZ |`0@@"P $|\2RA@nC 0BMSf.2@Ҽ\J"|`# "|`# ` ??<NMXNuNV y`,(0H>VWatN^NuNVH>.>a^, >?aT JLN^NuNV y`,(0H>VWaN^NuNVH y`,(0H>VG>a ,>a JLN^NuNV y`,(2H>VW?<NMTN^NuNVH>.|f& y`,(0H<VF>aJg>a`p`> y`,(1H?VW?<NMXJLN^NuNV. y`,(1H?VWaTN^NuNV` n H>?.afTR n JfN^NuNVH<.>. > ?aT> ?aT`> ?a~TSGJGfJLN^NuNVHJngSn<.*n `$< f Pnn`< lTn`Rn0SFJ@f`*>?.aT> ?.aT>?.aT0n"|AR00nn0.JL N^NuNVH*n.TH?W y`,(0H?VWaX@JL N^NuNVH>.0GAR<BE`>a@`> ?abT`>?/. ?aP:`>a>?/. ?aP:JEf`>#?aT>?a`TBE`t>#?aT>?aFTBn`0n"n 0H>?aTRnnn`4.H2E >?aTRE`HA(rXW0(ANкn m0JLN^Nu n^^nNVpN^NuNV <N^NuNVH*nJg.aJ g. aJg.aBG` 0GVLf0GVLBRG|(m.aJL N^NuNVH BG`V0 мX @*P o@f:.a0 мX @B0 мX @B0 мX @BhRG|KmJL0N^NuNVByAXRyAX n=P nWop`.WRa -@g f0y`*"|[ p-h$0y`*"|[.a0y`*"|[ pJg0y`*"|[ p.aBn`T0n"|XJ0g@0n"|VL p ($"n")$f |X2nB0nVLBRn n(m0y`*"|[.a"0y`*[BJg.aBn`@0n-P`" n0(y`*f n1| n-PJfRn nm>`*?<NMT-@Jfp29`*`F@y_ .`>>`*/.aXJgp`$ByNBy`*`Bn`@0n-P`" n0(y`*f n1| n-PJfRn nm .`0.@@A 0=PA-HJngJng n m nm nn y`,2.|00H=@ov0.`4 n hf$./<?.a\.HH` nV./<?.a\` n-h`./<?.a\R nJf` n-h nH=@R .R-@Bn`d./<?.a,\f>./<?<?<@a P n  f./<?.a\```RnR0.SnJ@f0."np`* <` `:S@|b2@0;A*N n g n f=|`Bn.g nf n=h` n=h nm0.]@ мX @-P`FJnm80n"y`,00H=@o0.]@ мX @-P`0n-H`0n-HJfp`.Jl .=@ .P-@ n?fX nJhgp` n hf n/?.VWaVT _p` n. n?(?.VWaXH` n@f nJhgp` n-PVnBn`@ nf nH>?.atTR` nH>?.?<NMXRRn n0(nn n0(H`,p`&B n=g nG|<|0r `|wop`@| op`6|f0|f |op``GAڼppop` 3`apJLN^NuNV09NHN^NuNVH>.0||mp`20||mp`"p0|"<mp` 3NapJLN^Nu??. .. RbZڦtڒ ڀ x dh0̌`rHCON:AUX:PRN: o"oHrtvxz|~6G g g,A$HHHHHHHHHSfܳg`LNuNV n C BN^NuNV . Jfp n,X.X/Nu?9N?9`?<NN\ONu.  t..  tSCROLL ASM t Z=SCROLL INDt SCROLL PRGt Submitted-by: uunet!mcvax!philmds!leo (Leo de Wit) Posting-number: Volume 1, Issue 70 Archive-name: scroll The following program, when placed in the AUTO folder, speeds up scrolling (BIOS output only). Difference is most noticeable with relative few chars per line; speeds up full screen editors, 'more' utilities, etc. For all resolutions; not for GEM, only for TOS. The corresponding binary is sent to the moderator of comp.binaries.atari.st. The program was assembled and linked with the assembler and linker from the GST-C compiler. For correspondence conceirning this program (bugs, questions etc.) try L. J. M. de Wit Nachtegaallaan 7 5731XP Mierlo Holland e-mail: ..!mcvax!philmds!leo ------------------------ s t a r t h e r e --------------------------------- ****************************************************************************** * * * scroll.asm version 1.0 of 23 July 1988 (C) L.J.M. de Wit 1988 * * * * This software may be used and distributed freely if not used commercially * * and the originator (me) is mentioned. * * * ****************************************************************************** * * NAME * scroll - fast text scrolling * * SYNTAX * scroll.prg * * DESCRIPTION * Scroll provides for fast scrolling; this is achieved by using a 64K * buffer for screen memory and changing the physical screen location therein. * The actual changes take place at the receipt of certain escape codes or * characters that would make the entire display scroll. * * Scroll should be in the AUTO folder as SCROLL.PRG so that it is * installed memory resident when the system is loaded. * * DECISIONS * The extra storage needed grabs a 33K from your free mem, unless * the memory cannot be reserved adjacent to the original screen memory, * in which case 65K is needed. * The console output vector at 4a8 is used to trap the escape codes. * Also the bios vector had to be changed (a pity); * this is only needed to be able to load from AUTO folders: * the con_state vector is reinitiated when the resolution changes * The program must reside in the current drive's AUTO folder to be able * to find itself. module scroll section s.ccode * character codes lf equ 10 vt equ 11 ff equ 12 cr equ 13 esc equ 27 * scrinfo offsets maxcol equ 0 maxrow equ 2 bprow equ 4 scrad equ 10 col equ 16 row equ 18 flag equ 38 * system variables v_bas_ad equ $44e con_state equ $4a8 * GEMDOS & (X)BIOS stuff gemdos equ 1 bios equ 13 xbios equ 14 ptermres equ $31 supexec equ 38 setexc equ 5 setscreen equ 5 physbase equ 2 setblock equ $4a pexec equ $4b * divers bpaglen equ $100 textlen equ 12 datalen equ 20 bsslen equ 28 linea0 equ $a000 scrinit move.l 4(sp),a3 * basepage start move.l #bpaglen,d3 * base page length add.l textlen(a3),d3 * + text length add.l datalen(a3),d3 * + data length add.l bsslen(a3),d3 * + bss length add.l #256,d3 * + rounding length move.w #physbase,-(sp) trap #xbios addq.l #2,sp move.l d0,a4 * Start physical screen memory dc.w linea0 suba.w #44,a0 lea.l scrinfo(pc),a1 move.l a0,(a1) * start screen info to scrinfo move.l a0,a2 * and also a2 move.w maxrow(a2),d1 addq.l #1,d1 mulu.w bprow(a2),d1 * screen size into d1 lea.l 8(sp),a0 cmpa.l a4,a0 bne.s scrinstall * last location not start of phys. screen mem. tst.b 128(a3) bne.s scrinstall * Prog. had argument: called the second time add.l d1,d3 * add a screen size sub.l d3,a0 * this will be taken off current prog area move.l a0,sp suba.l a3,a0 move.l a0,-(sp) move.l a3,-(sp) move.w #0,-(sp) move.w #setblock,-(sp) trap #gemdos * Leaving just enough for next load of myself lea.l 12(sp),sp pea nullstr pea argstr pea progname move.w #0,-(sp) move.w #pexec,-(sp) trap #gemdos * load & exec myself with a nonzero arglist lea.l 12(sp),sp clr.w -(sp) trap #gemdos * finished scrinstall lea.l 8(sp),a0 cmpa.l a4,a0 bne.s notattop * current mem not adjacent to phys. screen mem. attop suba.l a3,a0 move.l a0,d3 * d3 : just all we've got lea.l topbase(pc),a0 move.l a4,(a0) * current phys screen mem becomes top base sub.l d1,a4 lea.l botbase(pc),a0 * and botbase a screen 'lower' move.l a4,(a0) bra.s endcalc notattop move.l a3,d0 add.l d3,d0 clr.b d0 * Adjust for 256 byte boundary lea.l botbase(pc),a0 move.l d0,(a0) * address lowest screen add.l d1,d0 * a screen 'higher' lea.l topbase(pc),a0 move.l d0,(a0) * address highest screen add.l d1,d3 * add a screen's length to mem needed add.l d1,d3 * and another one endcalc pea setvect(pc) move.w #supexec,-(sp) trap #xbios * set new console output vector addq.l #6,sp pea newbios(pc) move.w #$2d,-(sp) move.w #setexc,-(sp) trap #bios * Set new BIOS vector addq.l #8,sp lea.l oldbios(pc),a0 move.l d0,(a0) * Save old one move.l topbase(pc),d0 move.w #-1,-(sp) move.l d0,-(sp) move.l d0,-(sp) move.w #setscreen,-(sp) trap #xbios * make highest screen current lea.l 12(sp),sp clr.w -(sp) * return value: 0 for success move.l d3,-(sp) * # bytes to keep move.w #ptermres,-(sp) * keep process trap #gemdos * stops here... * New bios routine; only sets con_state to point to newconsole if not already * saving the old value. newbios lea.l newconsole(pc),a0 cmpa.l con_state,a0 beq.s newsame bsr setvect * Set con_state if it was not newconsole newsame movea.l oldbios(pc),a0 jmp (a0) * This is the routine that con_state will always point to, except * when printing characters from within the routine itself. newconsole move.l cvsav(pc),con_state * restore original vector move.w d1,-(sp) * save character to be printed on the stack movea.l scrinfo(pc),a1 lea.l hadesc(pc),a0 tst.b (a0) beq.s noesc * If previous char was not escape; else ... sf.b (a0) * Reset escape flag tst.w row(a1) bne.s no_0row * If cursor not on row 0 cmp.w #'I',d1 bne.s not_i * If not ESC I bsr scr_down * else scroll down move.w #esc,d1 bsr charout * and print the ESC move.w #'I',d1 bsr charout * and the I bra newdone not_i cmp.w #'L',d1 bne.s not_l * If not ESC L bsr scr_down * else scroll down move.w #esc,d1 bsr charout * and print the ESC move.w #'H',d1 bsr charout * and a H (cursor home) bra.s newdone not_l cmp.w #'M',d1 bne.s no_0row * If not ESC M move.w #cr,d1 bsr charout * else print CR move.w #lf,d1 bsr charout * and LF bsr.s scr_up * and scroll up bra.s newdone no_0row move.w #esc,d1 * In all other 'escape cases' bsr charout * print the ESC move.w (sp),d1 bsr charout * and the current character bra.s newdone noesc cmp.w #esc,d1 * Is current char an ESC? bne.s nonesc lea.l hadesc(pc),a0 st (a0) * Mark the flag for 'had escape' bra.s newdone nonesc move.w maxrow(a1),d0 cmp.w row(a1),d0 bne.s newrest * If not yet at bottom row of display cmp.w #lf,d1 beq.s newup * But else: If you had a LF cmp.w #vt,d1 beq.s newup * or a VT cmp.w #ff,d1 beq.s newup * or a FF cmp.w #' ',d1 blt.s newrest * or: a printing character move.w maxcol(a1),d0 cmp.w col(a1),d0 bne.s newrest * and cursor at last column btst #3,flag(a1) beq.s newrest * and auto wrap mode; then: newup bsr.s scr_up * scroll up newrest move.w (sp),d1 * Print the character saved bsr charout newdone addq.l #2,sp * Clean up stack bsr setvect * Reset con_state to point to me again rts * Scroll up routine * Depending on current base position the new screen location is only reset * or there is an area copy as well. scr_up movea.l scrinfo(pc),a1 move.w bprow(a1),d0 movea.l v_bas_ad,a0 cmpa.l topbase(pc),a0 bge.s up_istop adda.w d0,a0 * If not at top address, simply add a row's move.l a0,-(sp) * size to the current address bsr newscreen * and make that the current addq.l #4,sp bra.s up_end up_istop move.w maxrow(a1),d1 mulu.w d0,d1 move.l botbase(pc),a2 move.l a2,-(sp) * Save copy of botbase on stack adda.w d0,a0 move.l a2,a1 suba.l a0,a1 * Difference into a1 move.l a1,-(sp) * Save it. move.w d1,-(sp) * # bytes to be copied: all but one row move.l a2,-(sp) * destination: botbase move.l a0,-(sp) * source: current address + one row size bsr moevmem * copy it lea.l 10(sp),sp move.l (sp)+,d0 * Difference into d0 movea.l scrinfo(pc),a1 add.l d0,scrad(a1) * Make up for the moevmem for cursor scrad bsr newscreen * Make botbase start of new screen addq.l #4,sp up_end movea.l scrinfo(pc),a1 sub.w #1,row(a1) * Decrement row # move.w maxrow(a1),d0 mulu.w bprow(a1),d0 move.l v_bas_ad,a0 adda.w d0,a0 move.l a0,-(sp) bsr.s clearline * Clear last row of display addq.l #4,sp rts scr_down movea.l scrinfo(pc),a1 move.w bprow(a1),d0 movea.l v_bas_ad,a0 cmpa.l botbase(pc),a0 ble.s do_istop * If current screen already at top suba.w d0,a0 * Else simply subtract a row's move.l a0,-(sp) * size from the current address bsr.s newscreen * and make that the current addq.l #4,sp bra.s do_end do_istop move.w maxrow(a1),d1 mulu.w d0,d1 move.l topbase(pc),a2 move.l a2,-(sp) * Save copy of topbase on stack adda.w d0,a2 move.l a2,a1 suba.l a0,a1 * Difference into a1 move.l a1,-(sp) * Save it. move.w d1,-(sp) * # bytes to be copied: all but one row move.l a2,-(sp) * destination: topbase + one row size move.l a0,-(sp) * source: current address bsr.s moevmem * copy it lea.l 10(sp),sp move.l (sp)+,d0 * Difference into d0 movea.l scrinfo(pc),a1 add.l d0,scrad(a1) * Make up for the moevmem for cursor scrad bsr.s newscreen * Make botbase start of new screen addq.l #4,sp do_end movea.l scrinfo(pc),a1 add.w #1,row(a1) * Increment row # move.l v_bas_ad,-(sp) bsr.s clearline * Clear top row of display addq.l #4,sp rts clearline movea.l scrinfo(pc),a0 moveq.l #0,d0 move.w bprow(a0),d0 * # : bytes per row asr.w #4,d0 * / 16 doing 4 longs at a time subq.l #1,d0 move.l 4(sp),a0 * Memory start address of row moveq.l #0,d1 * Filler clrnxt move.l d1,(a0)+ move.l d1,(a0)+ move.l d1,(a0)+ move.l d1,(a0)+ dbra d0,clrnxt rts setvect lea.l cvsav(pc),a0 move.l con_state,(a0) * Save current con_state value lea.l newconsole(pc),a0 move.l a0,con_state * and make it newconsole for now rts newscreen move.l 4(sp),d0 * New start address of display move.l d0,v_bas_ad * into logical screen pointer swap d0 move.b d0,$ffff8201 * and also swap d0 lsr.w #8,d0 move.b d0,$ffff8203 * into physical screen pointer rts charout and.w #$ff,d1 * For printing move.l con_state,a0 * from within newconsole jmp (a0) moevmem move.l 4(sp),a0 * Source address move.l 8(sp),a1 * Destination address move.w 12(sp),d0 * # lea.l (a0,d0.w),a2 * End of source area cmpa.l a1,a0 bge.s first cmpa.l a2,a1 blt.s second first lsr.w #4,d0 * /16, copying 4 longs at a time sub.w #1,d0 f_next move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ move.l (a0)+,(a1)+ dbra d0,f_next * Copy source to destination, forwards rts second lea.l (a1,d0.w),a1 * End address of dest area lsr.w #4,d0 * /16, copying 4 longs at a time sub.w #1,d0 s_next move.l -(a2),-(a1) move.l -(a2),-(a1) move.l -(a2),-(a1) move.l -(a2),-(a1) dbra d0,s_next * Copy source to destination, backwards rts section s.data oldbios dc.l 0 * Old bios vector cvsav dc.l 0 * For saving con_state vector scrinfo dc.l 0 * (Copy of) screen info pointer botbase dc.l 0 * Ptr to lowest screen used topbase dc.l 0 * Ptr to highest screen used nullstr dc.l 0 argstr dc.b 6,'second' progname dc.b '\AUTO\SCROLL.PRG',0 hadesc dc.b 0 * Boolean: Was previous char an escape? end Submitted-by: uunet!mcvax!philmds!leo (Leo de Wit) Posting-number: Volume 2, Issue 38 Archive-name: scroll [This works pretty well, but it does make Flash's screen display look a little weird. -sg] The following program, when placed in the AUTO folder, speeds up scrolling (BIOS output only). Difference is most noticeable with relative few chars per line; speeds up full screen editors, 'more' utilities, etc. For all resolutions; not for GEM, only for TOS. Uuencoded. The corresponding source is sent to the moderator of comp.sources.atari.st. For correspondence conceirning this program (bugs, questions etc.) try L. J. M. de Wit Nachtegaallaan 7 5731XP Mierlo Holland e-mail: ..!mcvax!philmds!leo `p&o&<֫ ֫֫?<NNT(@,C"$H2*RAf>J+f8ց.H// ?<?<JNAO HzHzHz?<?<KNAO BgNAAf&A A ` ЃBA ЁA ցցHz?<&NN\Hz4?<-?<NMPAh :r? #include #include /* This program needs to be run in the same directory as the "serie.rsc" file is in. */ unsigned char sector[512]; long nummer; int choice, cx, cy, cw, ch, drive; main() { OBJECT *dialog; char oud[7],nieuw[7]; appl_init(); if (!rsrc_load("serie.rsc")) { form_alert(1, "[0][Cannot find serie.rsc file|Terminating ...][OK]"); exit(1); } rsrc_gaddr(0, DIALOG, &dialog); dialog[OUD].ob_spec = oud; ((TEDINFO *)dialog[NIEUW].ob_spec)->te_ptext = nieuw; ((TEDINFO *)dialog[NIEUW].ob_spec)->te_txtlen = 7; drive = form_alert(0, "[2][Serienummers veranderen.| |Kies een drive!][ A | B ]" ) - 1; while (form_alert(1, "[3][Plaats disk in de drive!][DOEN!|stoppen]" ) == 1) { Rwabs(2,sector,1,0,drive); nummer = ((long)sector[8] | (long)sector[9]<<8 | (long)sector[10]<<16) & 0xFFFFFF; sprintf(oud,"%06lx",nummer); do_dialog(dialog); if (choice == OK) { if (*nieuw) sscanf(nieuw,"%06lx",&nummer); else nummer = 0x1000000; /* random */ Protobt(sector,nummer,-1,-1); Rwabs(3,sector,1,0,drive); objc_change(dialog,OK,0,cx,cy,cw,ch,NORMAL,1); } else objc_change(dialog,CANCEL,0,cx,cy,cw,ch,NORMAL,1); } } do_dialog(dialog) OBJECT *dialog; { graf_mouse(ARROW,0L); form_center(dialog, &cx, &cy, &cw, &ch); form_dial(FMD_START, cx, cy, cw, ch, 0,0,0,0); objc_draw(dialog, 0, 10, cx, cy, cw, ch); choice = form_do(dialog, 0); form_dial(FMD_FINISH, cx, cy, cw, ch, 0,0,0,0); graf_mouse(HOURGLASS,0L); } DIALOGOKLOGNIEUWCANCELOUDEL#define DIALOG 0 #define OK 7 #define NIEUW 5 #define CANCEL 6 #define OUD 4 `& N6N PN N N N 6N &N N%*O*m - ЭЭм!"ҍ¼.A// Bg?<JNA m"m -So Q m -SBQ(m)M*mN0 lHhNX/,?,N\?<N?<A?<NAXNuNVN\HlN XJ@fHl ?<N~\?<NTHnBgBgNPA  n!@lA  n"( A n ( @1|Hl>BgN*\S@9@`4?,Bg?<Hl?<?<N,|H,|H၀,|H၀)@/,HlHnN /.NX lfA HgHlHlHnN!T ` )|?N X9@g0<`0<N^NuNV?.?<LN XN^NuNV/ A&H`0+ |g/ N*X A"Ҽm?.NT&_N^NuNV/ &n/ NDXJ@g0<`00+ |g /+N XBk ?+ N,TJ@g0<`0<&_N^NuNVH&n0+ |f0<`.0+ |gV0+ |f0<`v0+ |g?<B?+ N P?/+?+ NP @f0<`@k 0Hѫ`$ k o?<0+D@H/?+ NP'@&Bk0<LN^NuNV/ &n0+ |fk@ 0+ |`g0<`&Bk`R0+ |g AAXA &'@`*0+H/NfX&'@ fk `k g-K?<?+ B?<BN n!@& k f HlN~X0+ |g0<`0+?/?+ NlP7@Sk0+ @l kfk `k@ Bk0<` SRH|&_N^NuNV/ &n 0+ |f f0<`Rk. S SH&_N^NuNV nSh0( @m n R @H|` /.NhXN^NuNV fBC`&SCdTC0|g0|gԼdRC`|CHBC0|@HB LN^NuNVNVH n " n $&JjFFJjFFLN^@@NuNVH n"n $0(H@6C|g.0)H@:E|gE|BB0<まef bRAQ$0P`HNVH n$0(H@6C|gd"n .0)H@:E|gD|E(HD*HE20HGHBBB8:BGBBЇӄЂӅJg$0P`B`NVH"n 0<9@>Q`NVH"n Bl> n,0(H@8D|fB.0)H@:E|fB2$60Enfl8,:.6$0Jg0Eg|n0@gDԇ0,>Q fBB`HSCdTC0|g0|gԼdRC`|"|CHB|C0|@HB AHABA LN^NuNVH0.|=@n n f n0H-@HnNXA-H`> n(g nf. n-P n(f HnNX` HnNXA-H/./. 0.A PNPLN^/W D@NuN^Nu)@6Hl6NXONuHl6N XO ,6NuNVH n "(fJg"¼м@ LN^NuNVH nB fB`м8 LN^NuNVH n$fBCB`nD6< f႖|NN^NuNVH0&n$n Bn-J @)P6)h:-l6-l:BEG>O|g|JGn|m` REHlP/ NPO`SEHlP/ NbPO`&0+H@JGgDG0<0dR@0.BAQ,>QQֆG|0QB`Rn0.g$nB`0R 2.HmB`b .6.HЃR$@ nH|0fRZ"` R"H|9n nH|0f$n R&@fSE .6.HЃ @B n0L N^NuNVH$.f BB`J". BnJlVnDJlRnDvd`Bbd nmDdD-@-A LN^NuNV nl <`?.?./. ?<BN -@ m .`?<?.B?<BN -@?<?.B?<BNx -@ nf .Ю -@ `$ nf .Ю -@ `0.g <`b . oHn . /?.?<@N Bg?./. ?<BN ]|9@g <` `Bl . N^NuNV/.?<HN\N^NuNV/.?<IN\N^NuNVBn`&0.A0nf0.ABPRn nLmN^NuNV?>.=|0A"HPgXHf0(>N^Nu)I)J)_NM"l$l/,Nu)I)J)_NN"l$l/,Nu)I)J)_NA"l$l/,NuNVH&n Bn0.|dg`>< `.`|ug`>< ``|og`><``|xg`>< l* ndf SR- .D-@`0. f Gf .`& Gf .` ./0H/NX 2.RnA0 Gf .`( Gf .` ./0H/N X-@ .fp`FSn0.A P m0.A0| |A`0.A0|0 SR0.fLN^NuNVH&n n f=| )n6)n:HlHl6?<N]|@0. R@?HnHnHnNr.g SR-.H|0f.f SR`J nff>.n RG0lBo0,B`0> Gl0<`0?HnHnHnNBF`0RFA SRSGSn0g nl` SR0Sn nl0. g SR.` SR0RnSn 0. g nm`" Go0RFAH`0<0 SRSG0. Sn J@f`` SR0. g SR.><`0RGA SR0. Sn J@f SRE?.Hl/N /N XHѓLN^NuNVBn`"0. n PHC|0=@ nR n PH|0m n PH|9o0.N^NuNVH0&n -n @$PX`R` nRg H|%fH|%f,RBn=|Bn| H|-f=|RH|0f|0R-JHnN$X=@$nH|.fR-JHnNX=@$nH|lf=|RgH-n Gdg Gog Gxg GufB0.g @ ` @0H/Hn?.?NV 0.g0<`0<H` Gcf R @ nRT` Gsf4 @-PX<.` nR nRSF0g nf`J Geg Gfg Ggf, @)P6)h:/,:/,6Hn?.?NP` 0 nR .nl0.g$<.".A` nRSF0f`b .2.SAHЁ-@-@,.` .2SAHЁ @ nSSF0f` nR .o .R-@f nB .L N^NuNVHn /.NhPN^NuNV nf:0,lf0<9@9@`?<N|T=@ nf*0,g Sl?<?<NXX?<D?<NJX` n f00,RlA ?< ?<NX?< ?<NX`v nf ?<N T nf20.2,RlA?< ?<NX?< ?<NX`*0.2,RlA?.?<NX0<fAH|f0<`0,RlAH`` nf?<NXT``0.=| 0.HNh-l6-l:BnBnBnBn=|Bn=|)l6)l:-l6-l: G-f|N>`B.Bn` G-f0.g =|` G0m G9n0.g0. G|0=@`t G0gBn0.fRn`^0.gSn0.fN)n6)n:HnHl6?<N?/Hl6?< NTHlHl6?<N-l6-l:Sn`0 G.f0.f=|` GEg Gef0.f=|``=|N>Sn 0. f0.f9||0.g 0.n`0.n`b nl.)n6)n:HnHl6?<N -l6-l:Rn`,)n6)n:HnHl6?<N-l6-l:Sn0.f.g()n6)n:HlHl6?<N-l6-l:0,~g/,?NL\`S)n6)n:LN^NuNVH0BnBl| nX&P`.H=@ n g n g n f.N=@ ng0,~g/,?.N\`S` n%gHNN=@ nf0<`0.ng"0,~g/,?.N\`S0.``0<=@=@=|H|*f=|RH|0m H|9n-KHnNX=@&nH|lf=|RH=@ ncf4Np=@ @f0<`0.f0. nX PRn` ndg nog nxg nhfN@=@ @f0<`?.?.?.N\-@0,|g0.`0.fF0.g nX  @ `. nhf . nX" A` . nX" A0Rn`< neg nffN=@ @f0<`?.?.NXX-l6-l:0,|g0.`0.fH0.g$)n6)n: nX" A 6!l:`)n6)n:N nX" A Rn` nsfN=@ @f0<`0.f nX$P`$0.f0.N=@ @f0<`LSn0.g n g n g n fB0,~g/,?.N\`SRnf0.L N^NuNV)nBl~Hn NXN^NuNVH0&n$K`Rf `L N^NuNV`4 nH| f?< ?<NX nRH??<NX0. Sn J@fN^NuNV` nRH??<NX0. Sn J@fN^NuNV` nRH??<NfX0. Sn J@fN^NuNVH0&n $KA-H nf?./ N4\=n`L nf?./ N`\=n`. nf?./ Np\=n`-KBn?.NnTJ@f`H| f |o@ H-@/./.?.?<@N 9@Hg0<`0,n/./<?.?<@NZ 9@ @g0<`tRnR -@`R ned` 6.ƼЃ$@ H-@/./.?.?<@N 9@Hg0<`0,nBl0.L N^NuC"2"2 2"2"2"22"2"2"22"2x9|)lP)lT)lL)lD)lH9|BCA"A"A"A$"A*"A"A "9|9|Nuserie.rsc[0][Cannot find serie.rsc file|Terminating ...][OK][2][Serienummers veranderen.| |Kies een drive!][ A | B ][3][Plaats disk in de drive!][DOEN!|stoppen]%06lx%06lx@$??CON:AUX:PRT:%d@H $ OKCANCEL______Nieuw nummer:______XXXXXXHet serienummerE.F. Borgsteede******van deze disk is:Als u geen nieuw nummer invoert,wordt een RANDOM nummer gemaakt!`$A0(/6Jaq!! "  Q . r( %  y J  f . / t.. / tSL -MO DOC1t TSL -MO PRG5t SL -MO S 7t 8 14-Apr-1987 - 1 - SLO-MO Purpose ------- SLO-MO.PRG is a program solely for the purpose of slowing down the Atari ST. Once executed, it will stay resident in memory.The program offers 10 different speed settings and can be used to give oneself an edge in playing simple minded shoot-'em-up reflex games. It can also be used to catch actions of a program that may be too quick for the human eye to perceive. Finally, it could be used for fun. It's a blast watching GEM draw windows and dialog boxes at the slowest speed setting. Instructions ------------ Just run the program SLO-MO.PRG and it will install itself in memory. If the program is executed again, it will recognize that it is already resident in memory and will terminate without further action. Immed- eatly after installing itself, the computer will then be set on the highest speed ( ie. no slowing at all - 100% normal speed ). To alter the speed setting, press the ALT-HELP key combination. This will cause the ST to slow down to 1/10th of its normal speed. Pressing ALT-HELP again will set the speed to 1/9th normal. Pressing ALT-HELP again will set it at 1/8th speed. ( You can guess what happens when you press ALT-HELP again - I hope! ). When the computer is at half speed, press- ing ALT-HELP again will reset the ST back to full steam. To help the user judge the current speed setting, the top left hand corner of the screen will change color every few moments. The rate at which the blip alternates color depends on the speed setting. A solid blip ( or no blip at all ) implies that the ST is running at full tilt. Known Bugs ---------- 1) The floppy disk ( and probably the hard disk too ) will not be able to synchronize itself sometimes. You may get weird error messages. The success rate varies directly with the speed ( ie. the slower the computer, the more likely disk I/O will fail ). The best way around this is to either not use the disk at all ( it's OK to use a ram-disk though ), or alternatively, to set the speed to maximum when doing floppy disk operations, and setting the speed back when you're finished. 2) This program is not bullet-proof and is not well behaved. It might act adversely if another VBL routine is installed. If you DOCS - 1 - DOCS SLO-MO - 2 - 14-Apr-1987 don't know what that means, forget it. 3) This program works fine for GEM program but for some (rare) .TOS or .TTP applications it may not work. ( For those hackers out there, the delay routine only works when interrup level <= 3 ). 4) On the slower settings, you might have to work extra hard trying to get the computer to acknowledge mouse button presses. The mouse pointer may also be sluggish ( like paddling in molasses ). 5) On occassions, the desktop ( and programs for that matter ) may seem to ignore you ( mouse works but everything else is dead ). 6) Of course the ALT-HELP screen dump won't work now. Unknown Bugs ------------ You tell me. On occasions though, blue and yellow smoke may billow out the back of the Midi port but this is to be expected. Me -- If you find any bugs or find interesting uses for the program, feel free to contact me : ( always wanted one of these handles ) ( ph. # : 604-276-0487 ) or leave a message on STraightline BBS 604-731-5060 [ Thanks to Thomas W. for the idea for this program ] DOCS - 2 - DOCS ``PJyPg&0:D xp!2p@F#J@f!pF xNFNuS@Ns1SyPkNu3 PNuHz?<&NN/<V?<1NA xTfBWNA1T!!6NuJoe Tam* 2; Author : Joseph Tam ; Date : Long time ago ... ; Place : ... in a galaxy far, far away ; Compiled with A-Seka Assembler ; constants maxdel = 9 ; maximum delay countdown vblnum = 2 ; number of VBL routines slot2 = $4d2 ; second slot in VBL routine list vblvec = $70 ; VBL interrupt vector altflag = $4ee ; Flag <> -1 when ALT-HELP pressed scrnbas = $44e ; Location of address of video RAM nvbl = $454 ; number of VBL routines altvec = $502 ; vector ofroutine to handle ALT-HELP keypress xbios = 14 ; Xbios trap # gemdos = 1 ; Gemdos trap $ keep = $31 ; Gem routine # to keep program in memory supexec = 38 ; Xbios routine # to get supervisir status bpsz = 260 ; base page size + fudge factor start:bra.s init ; Start of program ; VBL routine called by OS VBL interrupt handler vblint:tst.w delay ; Any delay? beq.s ret ; No - return from VBL interrupt move.w delay(pc),d0 ; How much VBL do we delay? move.l vblvec.w,a0 ; Save old VBL vector and replace it ... move.l #newvbl,vblvec.w ; ... with our delay routine move.w sr,d1 ; Store old SR ( is this needed ? ) move.w #$2300,sr ; Allow VBL interrupts ; delay loop - waits for countdown to reach 0 loop:tst.w d0 ; Then wait until delay is up bne.s loop move.l a0,vblvec.w ; Restore old VBL vector so GEM doesn't ... move.w d1,sr ; ... get mad. Restore SR move.l scrnbas.w,a0 ; Get address of corner of screen and ... not.b (a0) ; ... invert it ( just for kicks ) ret:rts ; return from VBL routine ; new VBL interrupt routine. Counts down delay contained in d0 newvbl:subq.w #1,d0 ; Delay VBL routine - amazing complex countdown rte ; return from VBL interrupt ; ALT-HELP handler - will change delay countdown setspeed:move.w #-1,altflag.w ; Set ALT-HELP flag off subq.w #1,delay ; Decrement delay limit bmi setslow ; Too low? rts ; No - computer is now a bit faster setslow:move.w #maxdel,delay ; Else the computer is now at its slowest rts delay: dc.w 0 ; The amount of delay ( initially none ) ; everything above line kept in memory ;------------------------------------------------------------------------------ ; everything below line disappears after execution - initializing ; routines kept here to save memory ( I guess I could save even ; more memory by relocating the routines into the lower part of the ; base page, but that's being too niggardly - even by my standards ). ; initializes program or quits if routine already installed init:pea chkhere(pc) ; Address of routine that does naughty bits move.w #supexec,-(sp) ; Execute routine in supervisor mode trap #xbios ; Call Xbios move.l #init-start+bpsz,-(sp); Size of resident routines and basepage move.w #keep,-(sp) ; Keep routines in memory trap #gemdos ; ... goodbye ; Checks to see if we were here ( magic number stored in magic ; place ). If first time, alter system variables to accommodate ; routines. chkhere:cmp.w #vblnum,nvbl.w ; Have we been here before? bne.s install ; Nope - first time around. Inititialize clr.w (sp) ; Otherwise quit trap #gemdos install:move.w #vblnum,nvbl.w ; Only 2 VBL routines - the systems and ... move.l #vblint,slot2.w ; ... mine move.l #setspeed,altvec.w ; In case user wants to change computer speed rts mystery: ; exercise left to reader on what this is tst.w $6520(sp) addq.w #2,-(a1) blt.l * ******************************************************************** Deze diskette is samengesteld door de Stichting ST, Postbus 11129, 2301 RH Leiden. Onze bibliotheek van public domain programma's omvat op dit moment (zomer 1988) al zo'n drie honderd disks. Daarop vindt u programma's op elk gebied, van tekstverwerker en database tot de leukste spelletjes, de fraaiste tekenprogramma's en de handigste utilities. Ook bevat onze bibliotheek een speciale afdeling voor public domain disks met Macintosh software, die te gebruiken zijn onder de ALADIN emulator. Deze MAC-PD serie bevat tot nu toe ongeveer vijfendertig disks. ******************************************************************** U vindt in het twee maandelijks tijdschrift "ST" (Onafhankelijk tijd- schrift van en voor gebruikers van Atari ST computers) een overzicht en een bespreking van de inhoud van de nieuwe public-domain diskettes. Dit tijdschrift bevat tevens een bestelkaart zodat U vlot over de software kunt beschikken. De Stichting ST geeft ook een speciale PD catalogus disk uit. ************** Deze public domain disk is geproduceerd en gedistribueerd door: Stichting ST afd. Software Bakkersteeg 9A 2311 RH LEIDEN ************** Ondanks onze controle komt het af en toe voor dat een diskje niet goed is gecopieerd.Mocht U dit overkomen, aarzel dan niet en stuur de defecte disk aan ons terug. U krijgt dan direct een vervangende disk toegestuurd. ************************************************************************ Teneinde het voor ons mogelijk te maken om productie fouten op te sporen en vervolgens in de toekomst te vermijden, zijn alle disks, geproduceerd door de Stichting ST, voorzien van een groen productie nummer. ************************************************************************ `6  .|PN.NA"/0<NBNuNVH?BCB..,. f <`tlDRCJlDRCnHf zB`<l:HGH`&xe`Jge`|f D D` JLN^NuNVH?/BCB..,. f"< <`xlDRCJlDRCnHf zB`<l:HGH`&xe`Jge`|fD" D`"  "JLN^NuNVBBJlDRBJ lD RB0. -@0.2. An=@ .gDN^Nu#LNM/9LNu#LNN/9LNu#LNA/9LNuNVN N .0?9$NT3 . /<#/<$V/<% Nn 3!Bn`0n#0Rn n m3$3!!.$X/<!/<#N TPN./// 9-@/N$Bn`4 | 2.RAҮ p2n Rn n m./// 9-@/N$=|> N=@Bn`z0.|=@JngpA`B@2.^AҮP"A2Jnfp`B@2.^AҮҼ "A20n$BRn nm.!N >N y(!f09!y fBn`6>?.?.?.?9$V?9% BgBg?.N Rn noJng-yBn>?.?.?.?< Bg/.NBW/.N X|=@ | 2.Ү00|2.ҮҼ "A2-yBn>?.?.?.?< ?./.NBW/.N X|=@|g?.?.?.?9$V?9% BgBg?.N Rn noBWN`N^NuNV.$X?<?9!N X=y$`Bn`H0n//<0n"</0NtPм0 _ -@BnRn nm##Bn`0.м0 @=h0.@H2.H% A2.Ҽ0"A3@0.м0 @=h0.@H2.H$VA2.Ҽ0"A3@0.м0 @=h0.@H2.H% A2.Ҽ0"A3@0.м0 @=h0.@H2.H$VA2.Ҽ0"A3@0. @"<000`0.м0 @-h /</.NtPм/0.м0 @!_ `0.м0 @-h 0.м0 @"n!Q `X`T0.м0 @-h /</.NtPмf/0.м0 @!_ /</.NtPмf//</</.NtPмf @/NtPм @ ( _ -@-@/</.NtPмf @0(@=@=@/</.NtPмf @0(=@=@0.@=@=@p=@=@Bn=n./?9!N H\`"``|| b@0@ PNRn n%mBn`0.м @2.Ҽ"A"Q 0.м @2.Ҽ"A"i!Q0.м @2.Ҽ"A"i!QRn nmbN^Nu0<ATC@02Q3 LA@ Pw 8мdbSyLf0<CTA@0QNu0/|gA$JgapNu yBN O0 fNh]H h g h g yFN0(|A$Jga8pNsB?< NA\O/ |v#B A#F ?< NA\ONuNV#x# .мZ#3d$By$3 $ n 3$N n 0$#x# #"#!|N^NuNV#x#!|#  . мZ#3 3f$By$3$3$N # #"N^NuNV. N .N 3n$By$By$3$N N^Nu#$Nu#$Nu#$t"<tpsNBNuNV3$0.|Hм6-@=|` nH2n$2RRn nm.$NB@09$FN^NuNV#$!##!#$&!#$F!#%!#%!#!$> aF3$F$pN^NuNV>a*pN^NuNV#%>N N^NuNV#%3 $&>2N N^NuNV3$&3 $(3 $*3$,3$.3$03$23$43$6>3N N^NuNV#%>6N n 0$H n0$J n0$L n0$NB@09$FN^NuNV>MN n0$H n 0$J n0$L n0$NB@09$FN^NuNV3$&# %>#N N^NuNV#%3 $&3$(3$*3$,3$.3$0>*N N^NuNV3$&>kN N^Nu *-IJKqrsuwy{} #$%x~$H?<~x}|>~{???<?7@5$l$~3!c<C~>|@~@'` ` 3 ߀`?@Q?xxx<A3#6$!((&$$ !"#$%&'()*+,-./0123456789: '   ''#!              $  '###### #  #   #   #   #'; rRESOURSE.RSC(Hg>B t> t tOKSoftWare Write-Protect V1.0Program by Timothy Purves of MichTronABCDEFGHIJKLMNOPSelected Drives are write-protected12345678901234567890123456789012345TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTOK Software WriteProtect V1.0 Program by Timothy Purves Placed in the Public Domain MichTron Inc.Screen will flash when a programattempts to write to softwareprotected drive.Source code is avalable for $10.00and a blank disk. The Protector   & :4 z  " &L(    " F"(  ,&      $        fB