From: Subject: MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 Date: Mon, 5 Dec 2005 21:30:29 -0000 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_000B_01C5F9E3.1D34A910" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.1830 This is a multi-part message in MIME format. ------=_NextPart_000_000B_01C5F9E3.1D34A910 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.1000bit.net/support/manuali/lnw/lnwbasic/lnwbasic.htm MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0
                               =20
LNWBASIC

3D"LNWBASIC=

(c) 1982=20 by MODULAR SOFTWARE = ASSOCIATES
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 TABLE OP CONTENTS LNWBASIC INTRODUCTION LNWBASIC CREATOR EXECUTING LNWBASIC EXITING LNWBASIC / RECOVERY OF BASIC PROGRAM TEXT MISCELLANEOUS NOTES BLINK CALL CIRCLE COLOR CONV DEFKEY DESPOOL DISKEY DLOAD DO/UNTIL DRAW DRUN FLS GSUB GTO HIMEM JOY #"label" LCASE LINE LOADKEY LOC. MODE MOVE NTROFF/NTRON PAGE PAINT PCLS PGET PLOAD PLOT POFF/PON POINT( PPUT PRESET/PSET PSAVE QUICKEY REPEAT REST RS232 RSIN RSOUT SAVEKEY SOUND SPOOLOFF/SPOOLON XSTR$( ZGET ZPUT GLOSSARY FOR LNWBASIC
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 LNWBASIC INTRODUCTION LNWBASIC Version 4.0 adds a set of commands to disk BASIC for all=20 models of the LNW80 computer. Many powerful yet easy to use graphics=20 commands have been added, allowing-full use- of the LNW80's graphics=20 capabilities from BASIC. LNWBASIC also includes many non-graphics=20 BASIC enhancements, such as a spooler/despooler, an improved tracer,=20 R8232-C commands, defiaeable and pre-defined keys, and many more. LNWBASIC is produced by the CREATOR program. The CREATOR allows you=20 to customize LNWBASIC for your needs. Only those commands that you=20 wish to use are included in the LNNBASIC program you create, thereby=20 saving memory. You can make another LNWBASIC program with a=20 different set of commands whenever you wish, simply by executing=20 CREATOR from DOS. After an LNWBASIC module has been created, you=20 execute it as you would BASIC. LNWBASIC vill automatically run the=20 version of BASIC you are using, and then initialize itself. The accompanying 35 track, single-density diskette contains the=20 programs. LNWBASIC/CMD, CREATOR/CMD, RECOVER/CMD, DENO/LNW and several=20 other denenstration programs (each ending with the extension /LNW).=20 The diskette also contains the programs C80X16/CMD and C80X24/CMD=20 which are 80 column driver programs. These programs are supplied on an=20 as-is basis and hold no warranty. They may or may not allow full=20 compatibility with DOSPLUS or other Disk operating system and all risk=20 for use is left entirely with the user. Refer to the last page of this=20 manual for the END-USER SUB-LICENSE and warranty disclaimer. NEW LNW80'S: All the commands available with LNNBASIC will work on the latest=20 version of the LNW80 Model II computer. The BLINK, LCASE, and REPEAT=20 commands, however, should not be used when operating under a disk=20 operating system that contains similar functions (such as DOSPLUS). LNW80 Model I/II: The JOY and PAGE commands were specifically written for the=20 latest version of the LNW80 Model II computer, and will not work on=20 other models. They should not be included when you create an=20 LNWBASIC module using CREATOR. Certain other functions may or may=20 not work, depending upon how recent your computer is. These include=20 gray scales on your black-and-white monitor in MODE 2 graphics, the=20 backdrop color in MODE 2 graphics, expanded MODE 2 graphics (160 X=20 192 as opposed to 128 X 192), and RS232-C initialization. 1
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 LNWBASIC CREATOR This program produces an LNWBASIC program on disk, composed of the=20 commands you select. Once an LNWBASIC program has been created, it=20 can be executed as described in EXECUTING LNWBASIC. You need run=20 CREATOR only when you desire a different version of LNWBASIC. When you execute CREATOR, you will be asked what commands you wish to=20 include in the LNWBASIC program you are creating. You will be shown=20 every keyword in alphabetical order. A few keywords, such as DO=20 (UNTIL) and PON (POFF), are shown in pairs (the second keyword will=20 be displayed in parentheses). After deciding what keywords to=20 include, the LNWBASIC program you have just created will be written=20 to disk. You will then be ready to execute LNWBASIC. To execute the LNWBASIC CREATOR, type "CREATOR" when you see "DOS=20 READY". (CREATOR occupies memory from 52908 to DPPPH, and therefore=20 will overwrite any custom driver routines, etc, that occupy this=20 region.) The screen will clear, and the following will appear: MODULAR SOFTWARE ASSOCIATES - LNWBASIC CREATOR - VERSION 4.0 KEYWORD DESCRIPTION SIZE USE2 BLINK SWITCH BLINKING CURSOR ON/OFF 148 2 Notice the information that is displayed for BLINK--this is the same=20 type of data that will appear for every LNWBASIC keyword. First,=20 there is th4 keyword BLINK, followed by a short description of what=20 BLINK does. Next is the number of bytes (in decimal) that would be=20 added to LNWBASIC if you decide to include BLINK. The size for a=20 particular keyboard can vary greatly from one use of CREATOR to=20 another, depending on what other keywords have (or have not) been=20 included at the point when the size is displayed. The size is=20 displayed to give an approximate idea of the size of code associated=20 with a keyword. It is not intended to be an aid in achieving optimal=20 memory usage, since the figure shown can be misleading. You must now decide whether or not to include BLINK in the LNWSASIC=20 program you are creating. If you wish to include it, you must press=20 the "Y" key; to exclude it press the "N" key. The same type of=20 information for the next keyword will now be shown, and you must=20 decide whether or not to use it. When you have answered "Y" or "N"=20 for every LNWBASIC keyword, the following will appear: TOTAL SIZE OF COMMANDS INCLUDED! XXXXX FlLESPEC TO SAVE TO (PRESS ENTER FOR "LNWBASIC/CMD" DEFAULT)2 The total size given is the total byte count which will be taken up=20 by the LNWBASIC program being created once it is executed. The = size=20 on disk will be considerably larger due to initialization=20 requirements. 2
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 The LNWBASIC program just created will now be saved to disk. If you=20 press in response to the "FILESPEC ..." question, it will be=20 saved under the name LNWBASIC/CMD. If you desire to have it saved under a different name, you may type in a standard DOS filespec and=20 press . (The filespec may not include a password, however.)=20 A short delay will occur in which the relocatable LNWBASIC program is=20 created. After the delay, the disk drive should turn on and the=20 LNWBASIC program will be saved to disk. If an error occurs at this=20 point {such as ILLEGAL FILE NAME or DISK SPACE FULL), it will be=20 necessary to reset the computer and run CREATOR again. IMPORTANT NOTE: If the following message appears; XX TOO MANY REFERENCES RELOCATED - CAN'T CREATE THIS MODULE! please note the exact circumstances and report them to Modular Software Associates. An unexpected error has occurred that would=20 require a modification of LNWBASIC for successful creation of the=20 particular configuration. 3
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 EXECUTING LNWBASIC Once you have run the LNWBASIC CREATOR program and created an=20 LNWBASIC program on disk, it is very simple to execute LNWBASIC.=20 The normal "BASIC/GMD" file must exist for the created LNWBASIC=20 program to execute. You execute LRWBASIC just as you would execute=20 whatever BASIC you are using, except that you substitute "LNWBASIC"=20 (if the LNNBASIC program you have just created is named,=20 "LNWBASIC/CMD") for "BASIC". If you are using NEWDOS BASIC, for example, you may type the number=20 of files desired, memory size, etc, all on the same line as you=20 normally would to enter BASIC. If you are using TRSDOS, then you=20 should only type "LNWBASIC" and press <ENTER> Answer the "HOW = MANY=20 FILES?" and "MEMORY SIZE?" questions as usual. The screen will then clear, Modular Software Associates=92 copyright=20 notice will appear, and below that a number will be displayed ("User Memory Start Address XXXXX"). This number gives the start address=20 in decimal of your BASIC program text area. You are now ready to use=20 LNWBASIC=BF IMPORTANT NOTE: DEBUG must be off before executing LNWBASIC, or = the=20 computer will "hang". Once you have entered LNWBASIC, you may=20 re-enable DEBUG by CMD"D" if desired. EXAMPLES: LNWBASIC will execute LNWBASIC under all compatible DOS'S. LRWBASIC 15,50000 will execute LNWBASIC and enter BASIC with 15 files and memory size set to 56900. (NENDOS) LNWBASIC -F:3-M:62000 will execute LNWBASIC and enter BASIC with 3 files and memory size set to 62000. (DOSPLUS) 4
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 EXITING LNWBASIC / RECOVERY OF BASIC PROGRAM TEXT LNWBASIC modifies numerous restart vectors, device DCB=92s, and other=20 vital system data areas. Unless LNWBASIC is exited using the=20 standard BASIC command CMD"S" (CMD without an argument will also=20 work), or through the LMWBASIC command DRUN, these data areas will=20 not be restored. This can lead to disasterous results, requiring at=20 least the re-booting of DOS. Once LNWBASIC has been exited, neither "BASIC *" nor "LNWBASIC *"=20 will succeed in re-entering LNWBASIC to recover a BASIC program. The=20 utility program RECOVER is provided for this purpose. Prom the DOS=20 READY state, execute the correct version of RECOVER (see LNWBASIC=20 INTRODUCTION). RECOVER will automatically execute BASIC, but will=20 not pass any parameters to BASIC (e.g. RECOVER 65000 will not set = memory size to 65000). After entering BASIC, issue a LIST command to=20 determine that the entire program text is still in memory. (Note:=20 If the keyboard locks up, reset the computer and try RECOVER again.=20 This is due to improperly exiting LNWBASIC.) After verifying that=20 the program is complete, SAVE the program and exit. Do not attempt=20 to execute the program before exiting. RECOVER is a convenient=20 utility program, but it will not work in all instances. MISCELLANEOUS NOTES LNWBASIC occupies RAM below normal BASIC. This moves BASIC programs=20 higher in RAM than usual. Some programs which use PEEK and POKE do=20 not allow for this fact, and may not run properly under LNWBASIC. The CIRCLE, DRAW, and LINE commands maintain a "current graphics=20 position". This is simply the last X,Y point drawn by any of these=20 commands. If an initial X,Y point for one of these commands is not=20 given, it will default to th current graphics position. This allows=20 for easy interaction among the 3 commands, making a pie chart, for=20 example, relatively simple to draw. The CIRCLE, DRAW, and LINE commands can not be interrupted in the=20 middle of execution by , but the PAINT command can be. LNWBASIC-specific error messages (such as "UNTIL WITHOUT DO") can not=20 be trapped by ON ERROR GOTO processing. In the syntax descriptions that follow, optional arguments are=20 surrounded by braces "{ }". 5
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 BLINK The BLINK command toggles the blinking block cursor on/off. The first=20 time the command is executed, the blinking cursor will appear. The=20 next time the command is executed, the blinking cursor will be=20 replaced with the standard cursor character. If BLINK is used again,=20 after the standard cursor has been restored, the blinking block=20 cursor will reappear (and so on...). EXAMPLES: 10 BLINK if this is the first time that BLINK is used, the blinkirg block cursor will be turned on. 10 BLINK 20 INPUT"NAME";A$ 30 BLINK 40 PRINT "HELLO, ";A$ if the standard cursor is being used prior to running this program, the following vill occur: The question "NAME?" will be displayed with a blinking block cursor after it. If the reply to the input statement was "JOHN", the line "HELLO, JOHN" will appear. Note the blinking cursor will have been replaced with the standard cursor. 6
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 CALL int-expression CALL lsb,msb expression CALL pos-expression This command allows you to easily call a machine language subroutine.=20 No DEFUSR or USR(X) statement is needed. The subroutine must be in=20 memory at the time of the CALL. You can not directly pass an=20 argument between the BASIC program and the machine language=20 subroutine being called. If you wish to pass one or more arguments,=20 this can be done by POKEing and PEEKing into specified memory=20 locations. The subroutine being called should return to BASIC by the=20 Z-80 RET statement. The CALL statement saves all registers used by=20 BASIC EXAMPLES: CALL &HE000 will call a subroutine located at hex E000. 20 CALL +50000 will call a subroutine located at decimal 50000. 30 CALL X + PEEK(35000) will call a subroutine located at the sum of the current value of X and the contents of memory location 35000. CALL 0,200 will call a subroutine at 0,200 in lsb,msb (decimal) notation. 200 CALL -100 will call a subroutine located at -100 (65436 decimal). 10 X=3D-100 : CALL X will call a subroutine located at -100 (65436 decimal). 1000 X=3D65436 : CALL X The intent of this program line is the same as in the preceeding=20 examples, but will result in an OVERFLOW error. This is because "X"=20 will be interpreted as an "int-expression". To force=20 "pos-expression" interpretation, the correct usage is CALL +X. 10 X=3D&HF000+12 * 128 : CALL X will call a subroutine located at the evaluated expression. Note that there can be no space between a hexadecimal number and next = part of the expression - otherwise a SYNTAX ERROR may occur. 7
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 CIRCLE {XC},{YC},XR {,YR} {,SA} {,EA} {,RA} The CIRCLE command may contain up to 7 parameters; XC (X-Center), YC=20 (Y-Center), XR (X-Radius), YR (Y-Radius), SA (Start-Angle), EA=20 (End-Angle) and RA (Rotation-Angle). It is, however, only necessary=20 to specify 1 - XR. It is neccessary that the default values for = XC or=20 YC be given a "place holder" by use of a comma. Other parameters may=20 be assigned default values by specifying ",," (comma,comma) in place=20 of the normal ",value,". CIRCLE, then, could contain any combination=20 of between 1 and 7 parameters. The default values for XC and/or YC are determined by the last point=20 drawn by CIRCLE, LINE or DRAW. If a CIRCLE is drawn using only XC,=20 YC and XR then the center-point becomes the new default point. = The=20 default value for the Y-Radius (YE) is .65*XR (X-Radius). The=20 default for Start-Angle (SA) is 0 degreesg for End-Angle (EA), 360=20 degrees. The default Rotation Angle of the determined circle or=20 ellipse is 0 degrees. Angles are measured in degrees from the three o'clock position of the=20 circle in a clock-vise rotation. Values for these angles may range=20 from 0-360 degrees. 360 degrees is normally associated with the same=20 point as 0 degrees. Under the CIRCLE command this is not so. = Due to=20 rounding errors with multiplication of pi, the point associated with=20 360 degrees is the last point drawn before overwriting the 0 = degree=20 point. If a value is specified outside of 0-360 degrees, an ILLEGAL=20 FUNCTION CALL error will result. Neither the specified center point=20 of a circle nor either the X or Y radius need fall within displayable=20 point boundaries. For example, a center point of 1000,500 is legal.=20 The user may wish an are of an "imaginary" large circle to be=20 displayed. NOTES: When a value is not specified for the Y-Radius (YR) the=20 default is .65*XR (X-Radius). This gives a nearly perfect circle on=20 a BMC or LEEDEX monitor. Users with an NEC B/W ("green-screen")=20 monitor will find the value .6*XR closer to a circle on their=20 monitor. Circles drawn with just the X-center (XC or default ","),=20 the Y-center (YC or default ",") and the X-radius (XR) specified;=20 draw a circle at a much faster rate than with more parameterS Also=20 the new default X and Y become XC and YC respectively. When a circle=20 is drawn with more than The first three parameters, such as with a=20 start and/or end angle, the last point drawn becomes the new default=20 point for CIRCLE, LINE and DRAW. EXAMPLES: 10 MODE 1 20 CIRCLE 240,96,100 will draw a circle with the center at point 240,96 (roughly the center of the screen) with an X-axis radius of 100. This will appear as a "perfect" circle on a BMC or LEEDEX monitor and slightly flattened on others. 8
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 10 PCLS 20 MODE 1 30 CIRCLE 240,96,100,18 will clear the graphics screen, set the mode to hi-res B/M and draw an ellipse centered on point 240,96 with a major axis (X-axis) radius of 109 and a minor axis (Y-axis) radius of 10 - i.e. a very "flattened" circle. 10 PCLS 20 MODE 1 30 CIRCLE 240,96,100,,0,180 will clear the graphics screen, set the mode to hi-res B/W graphics and draw an are of a circle centered at 240,96. The Y-axis radius defaults to .65 * X-radius; this is the default condition as specified by the ",," (comma - comma). The portion of the circle from 0 degrees to 180 degrees is drawn. Note that 0 degrees is the three o'clock position of the circle and 180 is the nine o'clock position as drawn in a clock-wise direction. 19 PCLS 20 MODE 2 30 FLS 40 COLOR 3 50 CIRCLE 64,96,48,15,,270,45 will clear the graphics screen, set the mode to lo-res color, "white" the text screen (i.e. enable all graphics points), set the default color to red and draw an are of the ellipse with a major axis radius of 40 and a minor axis radius of 15. The portion of the ellipse from 0 degrees (as defaulted to by the ",,") to 270 degrees will be drawn. Additionally, the specified are will be rotated by 45 degrees. 10 PCLS 20 MODE 1 30 FOR 1=3D20 TO 100 STEP 20 40 CIRCLE 240,96,I,65 50 NEXT I 60 FOR I=3D20*.65 TO 65 STEP 20*.65 70 CIRCLE 240,96,100,I 80 NEXT I will clear the graphics screen, set the mode to hi-res B/W, and draw the "skeleton" of a globe. First the longtitude and then the latitude lines will be drawn. 10 PCLS : CLS 20 MODE 3 30 COLOR 5 40 CIRCLE 197,96,1 50 FOR I=3D20 TO 120 STEP 20 60 CIRCLE,,I 70 NEXT I will clear the graphics screen and then clear the text screen. The mode will be set to hi-res color (RGB) with the color being set to blue (COLOR 5). A circle with radius of 1 (i.e; a point) will be drawn in the center of the MODE 3 screen. Then, using the default 9
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 values for both the X-center and Y-center (which were defined by the=20 first circle drawn as 197,96), multiple concentric circles will be=20 drawn. NOTE: if the first circle drawn had used more than 3=20 parameters (XC,YC,XR), the default center for the FOR-NEXT circle=20 loop would not have been the center point - it would have been the=20 last point on the circle (or partial circle) drawn. 10 CLS 20 PCLS 30 MODE 1 40 DRAW"B,M240,96" 50 FOR I=3D60 TO 360 STEP 68 60 CIRCLE ,,120,,I-60,I 78 DRAW"M240,96" 89 NEXT I will draw a "pie chart" circle of radius 120 and "slices" of 60 degrees. The text screen is cleared, the grahics screen is cleared, and the MODE is set to 1 (hi-res B/W). Line 46 uses the DRAW command to do a blank (B) move (M) to the point 240,96. This sets the default point (used by CIRCLE, DRAW and LINE) to 240,96. When an are of a circle is drawn in line 60, this point is used as the center point (defaults for XC aid YC), The DRAW command in line 70 does two things - 1) it draws a line from the end of the are drawn in line 60 to the center paint <240,96) of the circle and 2) it makes the point 240,96 again the "new" default point for the next CIRCLE command in the FOR-NEXT loop. The circle and "pie pieces" are drawm by the FOR-NEXT loop for a complete circle. 10
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 COLOR int-expression COLOR {int-expression}, int-expression The first argument of the COLOR cemmand sets the color for use by the=20 next graphics command. It is used for MODE 2 and 3 graphics (low=20 resolution and high resolution color). Once COLOR is set, it is the=20 value used by PSET, LINE, CIRCLE and DRAW. DRAW, however, may change=20 its current color by using the "C" option. This dees not affect = the=20 color when commands other than DRAW are used. COLOR has no effect on=20 MODE 0 or 1 commands. The second argument of the COLOR command changes the backdrop color.=20 tt is used excJusively for MODE 2 graphics. The backdrop color will=20 change immediately upon execution of the COLOR command. The backdrop=20 color will be seen as the border color on the color graphics meniter=20 when the text screen is "white". When the text screen is clear, the=20 backdrop color will appear on the entire screen of the color graphics=20 monitor. N0TE: Not all LNW80 computers support gray scales or backdrop=20 colors. The legal values for COLOR range from 0 to 7. Using a value outside=20 of this range will result in an ILLEGAL FUNCTION CALL error. On a=20 black and white monitor, the gray scale increases in darknesa from 0=20 (white) to 7 (dark grey). On a color monitor, the correspending=20 colors are: COLOR 0 WHITE COLOR 1 GREEN COLOR 2 YELLOW COLOR 3 RED COLOR 4 MAGENTA COLOR 5 BLUE COLOR 6 BLUE-GREEN COLOR 7 BLACK EXAMPLES: 10 PCLS: FLS: MODE 2 28 COLOR 3 will clear the graphics screen, "white" the text screen (enabling all points), set the graphics mode to lo-res color and set the default color to red. 10 MODE 2 20 PCLS 3 : CLS 30 COLOR ,5 46 DO : UNTIL (INKEY$ <> "") 50 FLS 60 GOTO 60 demonstrates the meaning of backdrop color. Line 10 sets the current graphics mode to 2. Note that backdrop colors are applicable 11
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 only to mode 2. Line 20 sets all points of the graphics screen to=20 red (3), and clears the text screen. Line 30 sets the backdrop color=20 to blue (5). Line 48 waits until a key is pressed before allowing=20 line 50 to be executed. The color graphics monitor at this point=20 will show a blank, blue screen. Although graphics memory contains=20 all points set to 3 (from the PCLS 3 command), the backdrop color=20 shows through because graphics memory is not being displayed (since=20 the text screen is clear). After a key is pressed, line 50 will=20 execute, "whiting" the text screen, and causing graphics memory to be=20 displayed on the coler monitor. Graphics memory "overlayed" the=20 backdrop color, displaying a red screen bordered by the blue=20 backdrop. 19 MODE 3 : PCLS : CLS 20 COLOR 5 30 CIRCLE 109,59,100 will draw a blue (5) circle on a high resolution color (RGB) monitor. 10 FLS 20 MODE 2: PCLS: COLOR 3 30 LINE 0,0,127,191,SET 40 COLOR 7 59 LINE 127,0,0,19l,SET will "white" the text screen (enabling all points), sat the mede to lo-res color, set the color to red, draw a red diagonal line from the top left of the video screen to the bottom right, set the color to black and draw a black diagonal line from the top right of the video screen to the bottom left. 10 FLS: MODE 2: PCLS 7 20 FOR I=3D1 TO 109 30 COLOR RND(8)-1 40 PSET RID(128)-l,RND(192)-l 50 NEXT I 60 GOTO 60 will "white" the text screen, set the mode to lo-res color, turn the graphics screen to black (PCLS 7), and draw 100 random points of random colors. 10 PCLS : FLS : MODE 2 : COLOR,0 20 FOR Y=3D0 TO 105 STEP 15 30 COLOR Y/15 40 LINE 0,4,l27,Y+14,SET,BF 50 NEXT 60 GOTO 60 will display the color and grey scales available. The color scale will appear on the color graphics monitor; the grey scale, if available, will appear on the text monitor. Line 10 sets graphics memory to 0 (white), "whites" the text screen to enable displaying of graphics memory, sets the graphics mode to la-res color, and changes the backdrop to white. Lines 20-50 draw a solid rectangle in each of the available colors (from 8 to 7). 12
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 CONV int-expression CONV lsb,msb expression CONV pos-expression CONV "A" CONV "AA" This command is used to display different representations of the same=20 number. CONV "A" means convert the single alphanumeric character A.=20 CONV "AA" means convert the 2-character string AA, where AA can be=20 any 2 alphanumeric characters (not necessarily the same). The following illustrates the display format of CONV: CONV +50000 (user entry) &HC350 " P" -15536 +50000 80,195 (computer reply) The first number displayed is the hexadecimal (base 16)=20 representation. Next follows the 2 character alphanumeric or graphic=20 representation. The first character displayed corresponds to the=20 most significant byte (msb) of the hexadecimal representation, while=20 the second character corresponds to the least significant byte (lsb). The byte will be displayed as a blank if it is less than 0021H (33=20 decimal), or greater than 00BFH (191 decimal). An exception is that=20 a zero byte will be considered as an ASCII NUL (""), and will not be=20 displayed. The third representation given is the decimal integer=20 form of the numher. This is the number you would usa to PEEK or POKE=20 an address above 32767. The fourth number displayed is the positive=20 decimal representation. The fifth f last) representation is the=20 number in decimal 1sb,msb format. This number is very useful when=20 PEEKing or POKEing addresses in decimal. EXAMPLES: CONV "bD" will display the representations of the letters "bD". CONV &HBD+ 128 will display the representations of the sum of the hex number 06BDH and the decimal number 128. Note that there can be no space after a hexadecimal number and the next portion of an expression - otherwise a SYNTAX ERROR may occur. 10 X=3D100 : Y=3D0 : CONV X,Y will display the representations of the lsb,msb number 100,0. CONV +65009 will display the representations of the pos-expression +65000 13
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 DEFKEY {old character, {new character}, definition} Where all arguments are string expressions of length 1 or=20 more. DEFKEY allows any 10 keys to be re-defined as strings of ASCII=20 character codes of length l or more. This is accomplished by=20 replacing 1 of the 10 current definitions with a new definition. The=20 first argument specifies which current defined key is ta be replaced.=20 The second argument tells what key it is to be replaced with. If=20 this argument is a null string or is missing, the first argument will=20 be used. The third argument gives the definitien for the new defined=20 key. For example, DEFKEY "0","A","A=3DPI*R**2" will remove the "0" key=20 from the defined key list and insert the "A" key in its place. The=20 definition for the "A" key becomes the string "A=3DPI*R**2".=20 Thereafter, whenever the "A" key is pressed (when the defined key=20 output is enabled), the string "A=3DPI*R**2" will appear. A simple method has been implemented to toggle the defined key output=20 on and off. To enable (or disable if enabled) the defined key=20 output, simply hold down the <SHIFT> & <down-arrow> keys = and press=20 the "D" key. (It is easiest to press the <SHIFT> key first, then=20 while keeping the <SHIFT> key pressed, hold down the = <down-arrow>=20 key. With these 2 keys depressed, simply hit the "D" key to toggle=20 the output on or off.) A second method is provided to enable or disable the defined key=20 output. DElKEY without any arguments toggles the defined key output=20 on and off. This allows the defined keys to be enabled or disabled=20 within a BASIC program. A total of 221 characters may be defined for the 10 key definitions.=20 If a DEFKEY cemmand is given which would cause the total to exceed=20 this limit, a STRING TOO LONG error will result. The maximum length=20 of any one string is 127 charactersg a STRING TOO LONG error will be=20 given if this limit is exceeded. If the third argument of DEFKEY is=20 a null string, an ILLEGAL FUHCTI0N CALL error will be given. The=20 first and second arguments of DEFKEY should be strings of length 1,=20 but no error will be given if the string is longer. Only the first=20 character of the string will be used, the others will be ignored. An=20 ILLEGAL FUNCTION CALL error will also be returned if the first=20 argument is not a currently defined key. It is not necessary to have DEFKEY included in an LNWBASIC module in=20 order to use the defined keys. The initial set of defined keys can=20 be changed by the LOADKEY command, thus providing a method of=20 re-defining the keys without DEFkEY. Refer to DISKEY, LOADKEY, and=20 SAVEKEY for further commands relating to defined keys. EXAMPLES: The following examples were written to work with the defined keys as=20 they are initially set with every new LNWBASIC created. DEFKEY 14
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 will toggle the defined key output on or off. If the defined key output was on before this statement was executed, it will be disabled, otherwise it will be enabled. DEFKEY"0","d","CMD"+CHR$(34)+"DIR"+CHR$(13) removes the definition for "0" and defines the "d" key te be the string "CMD"DIR <RETURN> When this key is pressed (with defined key output enabled), a DIRectory of drive 0 will be given (assuming your DOS supperts the BASIC statement CMD"DIR"). DEFKEY "1",CHR$(31),"PCLS"+CHR$(13) removes the definition for "1" and defines the <CLEAR> key (ASCII code 31) to be the string "PCLS <RETURN> DEFKEY CHR$(31),"","CLS:PCLS"+CHR$(13) removes the above definition for <CLEAR> and replaces it with the string "CLS:PCLS <RETURN> The null string for the second argument is used for convienence, CHR${31) for the second argument would be functionally equivalent. DEFKEY CHR$(3l),,"CLS:PCLS"+CHR$(13) is functionally equivalent to the preceding example. DEFKEY "2","#",CHR$(183)+CHR$(187) removes the definition for "2" and defines the "0" key to be the string consisting of (low res) graphics codes 183 and 187. DEFKEY can be used in this manner to aid in a programming technique known as "string packing". 1000 #"DODEF" : REM ROUTINE TO CHANGE DEFINED KEYS 1010 DISKEY : REM DISPLAY CURRENT DEFINITIONS 1020 LINEINPUT"WHAT KEY IS TO BE REPLACED? "pOLD$ 1030 LINEINPUT"WHAT IS THE NEW KEY (<ENTER> IF SAME AS OLD = KEY)2"JRW$ 1040 IF NW$=3D"" THEN NW$=3D0LD$ 1050 PRINT"TYPE THE STRING TO BE ASSIGNED TO ";RW$ 1060 LINEINPUT NS$ 1070 DEFKEY OLD$,NN$,NS$ : GTO #"DODEF" is a short program using DEFKEY. Note that the defined key output must be disabled when this program is run or it will be impossible to type the key to be replaced. 15
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 DBSPOOL "filespec" {,S} The DESPOOL command without the trailing ",S" will despool the=20 specified file to a parallel printer. The command with the trailing=20 ",S" will despool the specified file to the RS-232-C serial port. The=20 spooler is interrupt driven; normal processing can continue while a=20 file is being printed. An occasional short pause will occur as the=20 disk file is being accessed for more information. This command allows=20 the operator to compose, edit, or run BASIC programs which may=20 include disk I/0, while a previously spoeled file is being printed.=20 The despooling is automatically terminated upon reaching the=20 end-of-file. To cancel the despooling operation, hold down the shift=20 key, the down arrow key, and the "C" key simultaneously (this outputs a 'control C'). To pause the despooling, key a control-S (XOFF).=20 This is done by holding down the shift key, the down arrow key and=20 the "S" key. To continue despooling, key in a control-Q (XON). This=20 is again done by holding down the shift key, the down arrow and the=20 "Q" key. Only ASCII encoded files may be despooled. BASIC programs saved=20 without the ",A" option may not be despooled. An attempt to despool=20 two files at the same time will result in an ILLEGAL FUNCTION CALL=20 error. BXAMPLBSt 10 DESPOOL"TEXT/FIL" will start the despooling of the file 'TEXT/FIL" to the parallel port printer. 20 DESPOOL"CoDEFILE/TXT SECRET:1i,s will, upon execution, start despooling the file "CODEFILE/TXT" on drive 1 with the password "SECRET" to the serial port. 16
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 =09 DISKEY=09 This command displays the current, set of defined keys (see DEFKEY and=20 LOADKEY}.When this command is issued, the screen is cleared, and=20 each of the 18 currently defined keys are displayed in the following=20 format:=20 key blank string=20 where:=09 key =3D The ASCII representation of the defined key. Keys such as=20 <BREAK> and <CLEAR> will therefore appear as blanks.=09 blank =3D A blank space to separate the key from its definition.=09 string =3D The string of ASCII characters that the key is defined=20 as.=09 EXAMPLE:=09 10 DISKEY when executed, will display the current set of defined keys.=09 DISKEY will display the current set of defined keys.=09 =09 17=09
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 DLOAD filespec The DLOAD command is used to load object-code files into RAM and=20 return control to BASIC. Command (/CMD) files may be loaded and,=20 providing the entry point is known, executed from within BASIC. EXAMPLES: 10 DLOAD"PRINTER/CMD" will load the command file 'PRINTER/CMD" into RAM. 18 DLOAD "S0RT/CIM" 20 CALL &HF000 30 PRINT"SORT DONE" will load the abject-code file "SORT/CIM" and execute it (if the start address is hex F000). The line "SORT DONE" will then be displayed. 18
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 DO {statement} {statement} ... {statement}=20 UNTIL (true/false expression) The DO and UNTIL commands form an iterative (repetitive) loop. The=20 DO command denotes the start of the loop, while the UNTIL command=20 terminates the loop. The body of the loop consists of 0 or more=20 statements between DO and UNTIL. These statements will be executed=20 repeatedly until the (true/false expression) argument following UNTIL=20 is true. (The parentheses surrounding the "true/false expression"=20 after UNTIL are mandatory.) DO/UNTIL loaps can be nested up to 10=20 levels; nesting past a level of 10 will cause an OVERFLOW error. If an UNTIL is executed without previously executing a matching DO,=20 an UNTIL WITHOUT DO error will occur. Mismatched DOs and QNTILs can=20 result from transferring (GOTO} out of the DO/UNTIL loop body. To=20 immediately terminate a DO/UNTIL loop, use the following=20 procedure--never transfer (GOTO) out of the loop. 10 I=3D0 20 DO 30 GOSUB 1000 . . 100 IF T=3D2 THEN I=3D10 : GOTO 200 . 190 I=3DI+1 290 UNTIL (I=3D10) In line 100, the loop terminating condition (I=3D10) is set to true.=20 Control is then transferred to the line containing UNTIL, where the=20 loop will be properly terminated. A DO/UNTIL loop should not be imbedded within IF/THEN/ELSE=20 statements, unless the entire loop is contained within the same=20 program line as the IF. The following two examples illustrate this=20 restriction. The first example shows an incerrect use of a DO/UNTIL=20 within an IF/THER/ELSE. The second example shows how the first=20 example can be written correctly. 10 IF X=3D1 THEN DO 20 PRINT"I=3D1" 30 INPUT I 40 UNTIL (I<>1) The fault in the above program is that line 20 will be executed even=20 if I does not equal 1. This is due to the fact that the "scope" of=20 the IF statement only applies to the line in which it appears. 10 IF I=3D1 THEN DO : PRINT "I=3Dl" : INPUT I : UNTIL (I&lr;>1) This program line will execute the DO/UNTIL loop only if I=3Dl. There=20 are, of course, several other methods of coping with the IF/THEN/ELSE=20 restriction, two of which are shown below. 19
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 10 IF I=3D1 THER GSUB #"DO I LOOP" . . 999 END 1000 #"DO I LOOP"=20 1010 DO 1020 PRINT "X=3D1" 1030 INPUT I 1040 UNTIL {I<>1) 1050 RETURN 10 IF I<>1 THEH GTO #"DONE LOOP" 29 DO 30 PRINT "I=3D1" 40 INPUT I 50 UNTIL (I<>1) 60 #"DONE LOOP" : REM REST OF PROGRAM FOLLOWS The DO/UNTIL loop construct executes slower than a FOR/NEXT loop,=20 since it is implemented as an add-on to an existing interpreter=20 (LEVEL II BASIC), HOwever, it can provide structure and clarity to a=20 BASIC program, which are often more desirable than speed of=20 execution. EXAMPLES: 10 A$=3D"" : DO : INPUT"WHAT IS YOUR NAME",A$ : UNTIL (A$<>"") will continue to INPUT A$ until something other than <ENTER> is INPUT. 10 TRUE=3D0 20 DO : CLS=20 30 GOSUB 200 . . 100 UNTIL (TRUE OR A=3DB) will execute the DO/UNTIL loop until the variable TR equals -1 or until A=3DB. 10 DO 20 GSUB #"INIT GAME" 30 DO : GSUB #"PLAY ROUND" : UNTIL (GAMEOVER) 40 GSUB #"WINNER" 50 UNTIL (0) is an example of nested DO/UNTIL loops. The DO/UNTIL loop in line 30 is nested within the loop of lines 10-50. This is a nesting level of 2. (Notice that if the subroutine #"PLAY ROUND" has a DO/UNTIL loop, it too would be nested within the loop of lines 10-50.) The DO/UNTIL loop in line 30 will terminate when the variable GA equals -1. The loop of lines 10-50 will "never" terminate, since 0 can never be true (that is, can never equal -1). 20
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 =09 DRAW string, where "string" consists of one or more of the following=20 arguments (in any order, including repetition of the same argument): Output Arguments -- D - Draw line Down. E - Draw line at 45 degree angle. F - Draw line at 135 degree angle. Q - Draw line at 225 degree angle. H - Draw line at 315 degree angle. L - Draw line Left. N - Draw line from current point to specified point. R - Draw line Right. U - Draw line Up. Output Modifier Arguments -- B - Blank - Move current graphics position, but don=92t draw. N - No update - Draw, but don=92t update current graphics position. Z - Zero - Erase line rather than draw it. Mode Arguments -- A - Current DRAW Angle. C - Current DRAW Color. S - Current DRAW Scale. Miscellaneous Arguments -- X - Execute string as one or more DRAW arguments. The DRAW command allows complicated designs to be quickly and easily=20 drawn on the CRT. Straight lines of any length in any of 8=20 directions may be drawn. Entire figures may be rotated by 90=20 degrees, and can be expanded or contracted. Output Arguments - D,E,F,G,H,L,M,R,U Syntax: argument {length} (except M argument); M X-coordinate, Y-coordinate X-coordinate, Y-coordinate, and length can be integer variables or=20 constants; not expressions. If length is not given, a length of 1=20 will be used. These arguments, unless preceeded by an Output Modifier argument,=20 draw a line (of length 9 or more) from the current graphics position. The end position of the line drawn then becomes the "new" current=20 graphics position. 21
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 The following chart shows what direction a line is drawn from the=20 current graphics position for the corresponding argument: H U E . . . . . . . . . L . . . * . . . R . . . . . . . . . G D F When a line is drawn, the current graphics position is always=20 included in the output. The command DRAW"Dl" will set the current=20 graphics position and the point below. A length of zero can be used=20 to set only the point at the current graphics position. As with all LNWBASIC graphics commands, points not visible on the screen may still be drawn. For example, the command DRAW"B,M470,30,R50" in MODE 1 graphics will result in a line of=20 length 50 being drawn. Only the 18 points from 470,38 to 479,30 will=20 be displayed, however. The current graphics position will be updated=20 to 520,30. The command DRAW"D5" would then draw a line of length 5=20 from 520,30 to 525,30. Since this is not displayable on the screen,=20 no visible line would be drawn, but the current graphics position=20 would be updated to 525,30. The M argument is used to move to an absolute point on the screen = (X-coordinate, Y-coordinate). If it is immediately preceeded by the=20 B argument, no line will be output. The command DRAW "B,M248,96"=20 will make the current graphics position the approximate center of the=20 screen (in high resolution mode) without drawing a line. Whenever=20 the commands RUN or NEW are executed, the current graphics position=20 is reset to 0,0. The following will cause a line to be drawn from=20 the upper left corner of the screen to the middle: 10 PCLS : CLS : MODE 1=20 20 DRAW "M246,96" RUN If the X-coordinate, Y-coordinate pair are out of the displayable=20 bounds of the current graphics mode, the line vil still be drawn as=20 though the point did exist. Also, the current graphics position will=20 be ugdated to this out-of-bounds point. Output Modifier Arguments - B,N,Z These arguments affect the operation of the next Output argument=20 executed (whether or not the Modifier k Output arguments appear in=20 the same DRAW command). The B (blank) argument causes the next Output argument to not = draw a 22
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 visible line on the screen, but to update the current graphics=20 position as though the line bad been drawn. The N (no update) argument causes the next Output argument to = draw=20 the line as usual, but do not update the current graphics position. The Z (zero) argument causes the next Output argument to function = as=20 usual, except that the line will be erased (reset) rather than drawn=20 (set). The argument does not affect the updating of the current graphics position (it will be updated as usual). There are no restrictions on the use of Output Modifiers, although=20 most combinations are meaningless. For example, the command=20 DRAW"B,N,M50,50" does absolutely nothing since the line is not drawn=20 (B argument) and the current graphics position is not updated (N=20 argument). Mode Arguments - A,C,S Syntax: A {numeric variable or constant} (0-3, default =3D 0), C {numeric vatiable or constant} {0-7, default =3D COLOR), S {numeric variable or constant} (1-255, default =3D 4). Mode arguments stay in effect until re-issued or until "NEW" or "RUN"=20 is executed. The default values will be used after the execution of=20 "NEW" or "RUN". An invalid argument to a Mode argument will result=20 in an ILLEGAL FUNCTION CALL error. A (angle) mode determines the degree of rotation (if any) to be = used=20 when drawing all subsequent lines. The follewing are the possible=20 angles of rotation: 0 =3D 0 degrees rotation (no rotation); 1 =3D 90 degrees rotation (clockwise); 2 =3D 180 degrees rotation (clockwise; 3 =3D 270 degrees rotation (clockwise). For example, the command DRAW"A1,R50" is functionally equivalent to=20 the command DRAW"AH,D50". Similarly, the command DRAW"A3,R50" is=20 equivalent to DRAW"A0,U50". C (color) mode determines the color subsequent lines vill be = drawn=20 in. This argument has no visible effect in black and white graphics=20 modes. Also, this argument does not affect the current color as=20 determined by the COLOR command. If C is not used, the current color=20 will be used. If C is used without a value, the current color will=20 also be used. S (scale) made determines the "scale" subsequent lines are to be=20 drawn at. The scale is given by a number between 1 and 255, and=20 indicates the scale in units of lj4. Normal (1) scale is S4. Scale=20 allows objects to be easily expanded or contracted. The command=20 DRAW"S4,R20,D20,L20,U20" will draw a box looking exactly the same as=20 the box drawn by DRAW"S8,R10,D10,L10,U10". If the length of an=20 Output argument does not come out to be an integer because of the 23
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 current scale, it will be rounded to the nearest integer. For=20 example, DRAW"S2,R15" will result in a horizontal line of length 8. Miscellaneous arguments - X Syntax: X string variable The X (execute) argument provides a method of specifying a frequently=20 used sequence of DRAW arguments without having to explicitly repeat=20 them. It allows a string constant (used in all examples so far) to=20 be replaced by a string variable. The next example illustrates this process: 10 MODE1 : PCLS : CLS 20 BOX$=3D"R10,D10,L10,U10" 30 DRAW"B,M240,96,XBOX$,S16,XBOX$" The string variable BOX$ contains the string assigned to it in line 20 which will draw a box of size 10. Line 30 puts the current graphics position in the approximate center of the screen, and then draws the box. In effect, the statement "XBOX$" is replaced by "RlQ,D10,L16,010". Finally, the box is drawn again (at 4 times its original size), by the next "XBOX$" statement. There are ne restrictions on the use of the X argument, other than (of course) the string variable used must contain a valid DRAW string. A null string will result in an ILLEGAL FUNCTION CALL exror. EXAMPLES: 10 CLEAR 500 : CLS : PCLS : MODE 1 20 DRAW"B,M240,96,R20,D20,L20,U20" RUN will draw a rectangle in the approximate center of the screen. Line 10 reserves string space, clears the text & graphics screens, = & sets the graphics mode to high-resolution black a white graphics. (This line will be assumed in all subsequent examples.) The DRAW command in line 20 positions the current graphics position near the screen's center ("M240,96") without drawing a line ("B"). A line of=20 length 20 is then drawn to the right of this position ("R20"). At=20 this point (before the "D20" is executed) the current graphics=20 position is at 260,96, having been moved 28 in the positive X=20 direction ("R20"). The "D20" is then processed, causing a line to be=20 drawn of length 20 down from 260,96. At this point the current=20 graphics position is 260,116. After "L20" is executed, the current=20 graphics pesition will be 240,116, and it will become 240,96 again=20 after "U20" is executed and the rectangle is completed. 24
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 20 DRAW "B,M240,96,E20,P20,G20,H20" RUN will draw a diamond at the center of the screen. The updating of the current graphics position is similar to the preceeding example. After execution of "E20" the current graphics position will be at 260,76, having been moved 20 in the positive X direction and 20 in the negative Y direction. The subsequent graphics positions are: 286,96 , 260,116 , and 240,96. 20 FOR A=3D0 TO 3 30 DRAW"AA,B,M240,96,R80,D60,L40,U20,H40" 40 PRINT@640,"ANGLE =3D ";A : FOR X=3D1 TO 1000 : NEXT 50 NEXT RUN demonstrates the effect of the A (angle) argument. Each figure is rotated 90 degrees from the preceeding figure. 20 FOR X=3D80 TO 330 STEP 120 30 FOR SZ=3D1 TO 20 40 DRAW"B,MX,86,SSZ,B,U10,B,RMV,R5,F10,D18,G10,L10,H10,U10,E10,R5" 50 NEXT 66 MV=3DMV+8 : NEXT RUN demonstrates the effect of the S (scale) argument. Lines 30-50 form an inner loop which draws a figure made up of 20 individual figures. Lines 20 S 60 make up the outer loop and cause 3 of the composite figures to be drawn. (The inclusion of "B,RMV" (line 48) with the changing value of =92MV' (line 60) is what causes the 3 figures to appear to be shifting perspective.) 15 BX$=3D"N,U30,R40,U30,L40,E20,R40,N,G20,D30,G20" 20 FOR A=3D0 TO 3 30 DRAW"AA,B,M240,96,XBX$" 40 PRINT0640,"ANGLE =3D ";A : FOR X=3D1 TO 1000 : NEXT 50 NEXT illustrates the usage of the X (execute) argument. This example is the same as the A (angle) example, with the exception of lines 15 & 30. Line 15 was added to define the string variable BX$. BX$ is set equal to the DRAW arguments needed to draw a simple box. Line 30 was modified to execute BX$ within the DRAW command. Using the X argument in this manner allows the same figure to be easily drawn in different DRAW commands, without the need for re-typing the arguments that draw the figure. 25
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 10 CLS 20 PCLS 30 MODE 1 40 DRAW"B,M240,96" 50 FOR I=3D60 to 360 STEP 60 60 CIRCLE ,,120,,I-60,I 70 DRAW"M240,96" 80 NEXT I will draw a "pie chart" circle of radius l20 and "slices" of 60 degrees. The text screen is cleared, the graphics screen is cleared, and the mode is set to 1 (hi-res B/W). Line 40 uses the DRAW command to do a blank (B) move (M) to the point 240,96. This sets the default point (as used by CIRCLE, DRAW and LINE) to 240,96. When an arc of the circle is drawn in line 60, this point is used as the center point (defaults for XC and YC of CIRCLE). The DRAW command in line 70 does two things - 1) it draws a line from the end of the arc drawn in line 60 to te center point (240,96) of the circle and 2) it makes the point 240,96 again the "new" default point for the next CIRCLE command the FOR-NEXT loop. The circle and "pie pieces" are drawn by the FOR-NEXT loop for a complete circle. SEE THE CIRCLE COMMAND FOR THIS SAME EXAMPLE AND EXPLANATION, 26
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 DRUN filespec The DRUN command exits LNWBASIC and executes the requested object=20 file. This is a final exit. A command file may not be run with a=20 return to LNWBASIC. If an error occurs during the execution of DRUN a=20 return to DOS READY will result. (If it does not, LN........ longer be tied into BASIC, and no LNWBASIC commands w....... The complete file name must be used including extension as no=20 defaults are implemented. N0TE: Anomalous results may occur if the command file being = executed=20 resides in memory occupied by LNWBASIC (i.e., below the start of=20 BASIC program text). EXAMPLES: DRUN"DIRCHECK/CMD" will exit LNWBASIC, run the program "DXRCHECK/CMD" and exit to DOS. 10 DRUN "BASIC/CMD" will exit LNWBASIC and load and execute "BASIC/CMD". This will allow the user to enter "normal" BASIC without exiting to DOS. 27
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 FLS {character code}=20 FLS {"character"} FLS fills the text screen with the specified character. This command=20 is provided for ease of use in MODE 2 (lo-res color) and MODE 3=20 (hi-res color - i.e. RGB) graphics. If no argument is given, a=20 default value of 191 (all-blocks-on, low-resolution graphics) is=20 used.=09 In MODE 2 graphics, FLS 191 will "white" the text screen, thereby=20 allowing graphics memory to be displayed on the color graphics=20 monitor. In MODE 3 graphics, FLS can be used to "map" all enabled=20 graphics points to a particular color. The formula for colors in=20 MODE 3 (RGB) graphics is COLOR * 9 + 64 =3D character value for use by=20 FLS. COLOR is the same as used by the COLOR command.=09 The first argument form requires an integer expression between 0 and=20 255. The ASCII character associated with the argument will be used=20 to fill the text screen.=09 The second argument form requires a single character enclosed in=20 double quotes. This character will be used to fill the screen.=09 EXAMPLES: 10 FLS 10 MODE 2 : PCLS 2=20 will fill the 1024 positions of text screen with the low=20 resolution (MODE 0) all-blocks-on graphics block, set the graphics=20 mode to la-res color, and set all graphics memory to 2 (yellow).=09 FLS "*"=20 will fill the text screen with asterisks ("*").=09 10 X =3D RND(64) : FLS X+127 : GOTO 10=20 will fill the text screen with a random graphics block (128 - 191)=20 upon each execution of FLS.=09 10 PCLS 7=20 20 MODE 3=20 30 FLS 3*9+64=20 will white the graphics screen, set the MODE to hi-res color (RGB)=20 and "map" all points on the graphics screen to red.=09 28
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 GSUB line number=20 GSUB #"label"=09 This command allows for greater flexibility in calling a BASIC=20 subroutine. The argument "line number" may be a constant, variable,=20 or expression. It denotes the BASIC program line number to GOSUB.=20 If the second argument form of GSUS is used, '#"label"' indicates=20 that the line number to GOSUB is labeled with #"label". Other than=20 providing additional methods of referring to the subroutine being=20 called, GSUB performs identically to GOSUB. However, GSUB may not be=20 substituted for GOSUB in an ON n GOSUB command.=09 EXAMPLES: 10 GSUB 40000 : GSUB 100=20 20 GSUB SN*100=20 will cause calls to subroutines located at line numbers 40000,=20 100, and the product of the variable SN and the number 100.=09 10 GSUB #"INIT"=20 28 GSUB #"PROCESS"=09 . . 1121 #"INIT"=09 . . 1300 RETURN=09 . . 1380 #"PROCESS"=09 . . 1420 RETURN=20 will cause the subroutines located at lines 1121 & 1380 to be=20 called.=09 29=09
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 GTO line number GTO #"label" This command provides additional methods of specifying a line to=20 GOTO. The argument "line number" may be a constant, variable, or=20 expression. It denotes the BASIC program line number to GOTO. The=20 argument '#"label#' refers to the line which begins with the matching=20 #"label". Other than allowing greater flexibility in referring to a=20 line number to GOTO, GTO performs identically to GOTO. However, GTO=20 may not be used in place of GOTO within an ON n GOTO or ON ERROR GOTO=20 command. EXAMPLES: 10 GTO 10 will cause an "infinite" loop upon execution. 10 #"HERE : GTO #"HERE" will cause an "infinite" loop similar to the previous example. 10 GTO X will cause execution to transfer to the line specified by the current value of the variable X, assuming such a line exists. 30
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 HIMEM int-expression HIMEM lsb,msb expression HIMEM pos-expression HIMEM allows you to protect high memory so that it will not be used=20 by BASIC. The argument specifies the address of the last byte usable=20 by BASIC. An ILLEGAL FUNCTION CALL error will result if this address=20 is not at least 288 bytes above the start of user memory. HIMEM=20 resets the values of all variables and does a CLEAR 50; caution=20 should therefore be employed when using HIMEM within a BASIC program. EXAMPLES: HIMEM &HFFFF will allow BASIC to use all of memory (48K machine). 18 HIMEM +40000 will protect memery above 40000 (decimal). 10 INPUT X : HIMEM +X will protect memory above the input value of X. Note the use of the positive ("+") sign before X. This is to allow for values greater than 32767. A different way to limit the values of the argument is: 10 INPUT X% : HIMEM X% will, allow X to range from -32768 to +32767. 31
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 JOY int-expression, numeric variable The JOY command reads the position of up to 2 joysticks and returns=20 the position value in the specified numeric variable. Int-expression=20 in the JOY command line can assume a value from 0 to 3. If a value=20 is specified outside this range, an ILLEGAL FUNCTION CALL will=20 result. The value returned to the variable is ranges from 0 to=20 approximately 480-512. The actual upper limit depends on the=20 joystick (and LNW80!) used. Specifying a string variable or a double=20 precision variable for the returned value will also result in an=20 ILLEGAL FUNCTION CALL. Joysticks have both an X-axis and a Y-axis=20 associated with them. The X-axis goes from left to right where 0 is=20 the furthest left value and the right-most position returns the=20 highest value. The Y-axis goes up and down with the uppermost=20 position returning 0 and the lowest position returning the highest=20 value. Joysticks are set up according to the following int-expression table:=20 int-expression joystick axis 0 0 X-axis 1 1 X-axis 2 1 Y-axis 3 0 Y-axis Associated with the two joysticks are "fire" buttons. The buttons=20 are mapped to memory location &H37E4. Bit 2 is associated with the=20 button on joystick 0 and bit 3 with joystick 1. The following BASIC=20 program shows how to read the buttons: 10 IF PEEK(&H37E4) AND 4 =3D 4 THEN PRINT"JOYSTICK 0=92S BUTTON IS = ON"=20 20 IF PEEK(&H37E4) AND 8 =3D 8 THEN PRINT"JOYSTICK 1=92S BUTTON IS = ON"=20 30 IF PEEK(&837E4) AND 12 =3D 12 THEN PRINT"BOTH BUTTONS ARE = DEPRESSED" NOTE: If a joystick is not connected to the LNW80, the value = returned=20 to the specified variable will be -l. A delay loop between "JOY"=20 commands may be necessary due to hardware requirements for a=20 "settling time" between reads. To convert the range returned by the=20 JOY command to comparable numbers of the currently used MODE, use the=20 following formula: point value =3D (highest mode value * JOY value) / (highest JOY value) EXAMPLES: 10 JOY 0,X : FOR I=3D1 TO 10 : NEXT=20 20 JOY 3,7 : FOR I=3D1 TO 10 : NEXT=20 30 PRINT X,Y will read and print the position of joystick 0. X will obtain the X-axis value and Y the Y-axis value. The values will both be -1 if the joystick is not plugged into the LNW80. If the joystick is in the uppermost left-hand position, both X and Y will be 0. If the stick is in the uppermost right-hand position, the X value will be the highest value raturned by the joystick-while the Y value will he 0. If this is not the case, many joysticks have "fine-tune" controls (trim pots) that may be adjusted accordingly. 10 CLS : PCLS 20 MODE 1 30 JOY AX : FOR I=3D1 TO 5 : NEXT 40 JOY AY 50 IF PEEK(&H37E4) AND 8 <> 8 THEN PSET X,Y ELSE PRESET X,Y 60 GOTO 30 will act as an "etch-a-sketch" program. The text screen and then the hi-res screens are cleared. The X-axis of joystick 1 is read into the X variable and the Y-axis of joystick 1 is read into the Y variable. If the button on joystick 1 is not depressed, a point corresponding to the X and Y values is set. If the button is=20 depressed, the specified point is reset (i.e. erased). The program then loops "indefinitely" - using the joystick as a "pencil" Holding the joystick in the furthest right and down position,=20 execute: JOY 0,XL : PRINT XL : JOY 3,YL : PRINT YL This will return values that show the joystick's limits. The=20 preceding example should be modified as follows to give the "best"=20 etch-a-sketch programs Add: 45 X=3DX * 479/XL : Y=3DY * 19l/YL 33
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 #"label" The pound sign ("#") preceding a string constant serves to identify the string as a label. If a line is to be labeled, the pound sign=20 must be the first non-blank character in the line after the line=20 number. The pound sign must be followed by a double quote, a string=20 constant of 0 to 251 alpha-numeric characters (except a double=20 quote), and the terminating double quote. If the line is not null,=20 there must be a colon seperating the lahel and the BASIC statement=20 which follows. Labels should be unique, although no check is=20 performed to insure this. lf two lines are labeled with the=20 identical label, a reference to the label will always refer to the=20 first (lowest numbered) line. A line should only be labeled once--any subsequent labels will be ignored. EXAMPLES: 100 #"DELAY" : DO : T$+INKEY$ : UNTIL (T$<>"") : RETURN labels line 100 as #"DELAY". It may now be referenced by a GSUB #"DELAY" statement. 10 #"START" . . 5000 GTO #"START" labels line 10 #"START". A sample reference is shown in line 5000. 0 34
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 LCASE The LCASE command toggles the lower case display enable. The first=20 time the command is used, lower case letters may be entered and=20 displayed by using the shift key and the appropriate letter. The next=20 time the LCASR command is used, lower case entries are inhibited. Lower case characters can be used anywhere in composing a BASIC=20 program but can only be displayed by PRINT statements or in REM=20 lines. EXAMPLES: LCASE 19 PRINT"This is a test." 20 LCASE if LCASE has not been used prior to the LCASE command executed in command mode, lower case will be enabled. Line 10 may be input by using the shift-key entry for all lower case characters. Line 20 will inhibit any further lower case entry or display. When the program is RUN, the line, "This is a test.", will be displayed. 10 LCASE 20 STOP will result, if lover case is not enabled before the program is run, in the display of the message, "Break in 20". Note that the message is displayed in both upper and lower case letters. 35
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 LINE {X1},{Y1},X2,Y2,SET {,shape} LINE {X1},{Y1},X2,Y2,RESET {,shape} Where shape is "B" or "BF". The LINE command with just the SET option turns on the points of the=20 line determined by the points X1,Y1 and x2,r2. The LINE command with=20 the RESET option resets the points of the determined line. The B=20 option allows the perimeter of the box determined by the line (i.e.=20 the diagonal) to be SET or RESET. The diagonal is not drawn or=20 erased. The BF option allows the perimeter to be SET or RESET with=20 the "inside" of the box either SET or RESET. That is, the Box is = drawn and Filled (SET) or the box is erased (RESET). In MODE 2=20 graphics, the line or box, if the SET option is used, is drawn with=20 the specified color as determined by the last COLOR command. lf the=20 RESET option is used in MODE 2 graphics, the specified line or box is=20 drawn with the current background color (reference the PCLS command). Either X1 or Y1 may default to the current point as set by CIRCLE, DRAW or LINE. "LINE ,Y1,X2,Y2,SET" would use the default X for X1.=20 "LINE X1,,Z2,Y2,RESET" would use the default Y for Y1 and "LINE=20 ,,X2,Y2,SET,B" would use both the default X and Y. Note that the=20 last point SET (or RESET) by the LINE command becomes the new default=20 point as used by CIRCLE, DRAW and LINE. LINEs may be drawn to and from points not displayable on the screen.=20 That is, the command LINE 0,0,1009,96,SET is an allowable statement=20 with the result that the line from point 0,0 to point 1060,96 will be=20 "drawn". Only the portion of the line that falls within the graphics=20 screen co-ordinates will actually be displayed. This enables the=20 user to constuct graphics figures drawn to "imaginary" view-points=20 for perspective renderings and for "windowing" effects. EXAMPLES: 10 MODE 1 20 LINE 0,0,479,191,SET will draw a line from the top left of the video display to the lower right. 10 MODE 3 20 LINE 0,0,479,191,SET,B will draw a box around the outside of the graphics portion of the RGB color monitor. 10 MODE 3 20 LINE 479,l9l,0,0,RESET,B will erase the box as drawn in the previous example. 36
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 100 MODE 0 ll0 LINE 0,0,20,47,SET,BF will draw and fill-in the low-res box determined by the designated line. 5 MODE 1 10 LINE 100,100/3,100/1.6,(100*2+5)/3),RESET,BF will erase the box as determined by the diagonal line specified by the evaluated arguments. 5 FLS 10 MODE 2 20 COLOR 3 30 X1=3D0: Y1=3D0: X2=3D127: Y2=3D191 40 LINE X1,Y1,X2,Y2,SET will draw a red line from the top left of the color monitor to the bottom right. 10 FLS 20 MODE 2 30 LINE 127,191,0,0,RESET will set the line from the preceding example to white (COLOR 0). See above text for explanation. 5 MODE 1: CLS: PCLS 10 FOR I=3D1 TO 10 20 LXNE RND(480)-1,RND(192)-1,RND(480)-1,RND(192)-1,SET,BF 30 NEXT I will set graphics mode to hi-res B/W, clear the text screen, clear the graphics screen and draw and fill-in 10 random boxes. 10 CLS : PCLS 20 MODE 1 30 LINE 0,0,479,191,SET 40 LINE ,,479,0,SET 50 LINE ,,0,191,SET 68 LINE ,,0,0,SET will clear the text screen, clear the graphics screen and enter the hi-res B/W mode. A line will be drawn from the upper left corner f the screen to the lower right. In line 40 the last point drawn befor this line (i.e. 479,191) becomes the origin point. A line will be drawn from the lower right corner to the upper right. In line 50, a line from the upper right corner will be drawn to the lower left corner and in line 60, a line will be drawn from the lower left to the upper left corner. 37
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 LOADKEY filespec This command allows a previously saved file (see SAVEKEY) of defined=20 keys (see DEFKEY) to be loaded from disk. This list of defined keys=20 from disk replaces the current list of defined keys in memory. If=20 the file to be loaded is not a list of defined keys (that is, if it=20 was not written by SAVEKEY), an ILLEGAL FUNCTION CALL error will=20 result. EXAMPLES: LOADKKY "GRAPHICS/KEY" will load the defined keys from the file "GRAPHICS/KEY" if the file was saved by the SAVEKEY command. . . . 2000 LOADKEY "PLAYER1.PASSWORD/KEY" : REM GET 1ST PLAYER=92S KEYS . . . will, upon execution, load the specified defined keys file. 38
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 LOC. {"string"}=20 LOC. {string}=09 This command allows you to locate instances of a string within the=20 BASIC program currently in memory. The LOC. command with an argument=20 locates the first occurrence of the string within the program. LOC.=20 without an argument locates the next occurrence of the last string=20 searched for. The maximum argument string length is 20 characters.=09 The first, argument form of LOC. ("string") should be used if the=20 string to be searched for occurs in a quoted string (PRINT "string"=20 or INPUT "string", for example) or a REMark. Double quotes may not=20 be imbedded within the argument string since they serve as delimiters=20 of the string. The second argument form of LOC. (string) should be=20 used to locate a string that is not within a quoted string or REMark.=20 The two forms of LOC. allow you to distinguish between a BASXC=20 keywords and the corresponding character string, as illustrated in the=20 examples below. Both forms use a string constant as an argument, not=20 a string expressien. That is, the commands 'A$=3D"HELLO":LOC.A$' will=20 locate the variable A$, it will not locate "HELLO".=09 The LOC. command maintains its own current line pointer, but will=20 adjust BASIC's LIST and EDIT line pointer as described below. To=20 start a search for a string, use LOC. with an argument. LOC. will=20 start its search from the first program line. If the string is=20 located, the line containing the string will be LISTed on the screen. BASIC's LIST and EDIT pointer will now be changed to point to the=20 LISTed line. LOC.'s own pointer will also have been changed so that=20 the next LOC. (without an argument) will search beginning with the=20 next line after the line just LISTed. (This means that two=20 occurrences of the same string within the same line will be located=20 only once.) Once the line has been LISTed, you have several choices:=09 1). Press <BREAK> to end LOC. and return to Command mode er the=20 executing BASIC program (should LOC. have been executed within a=20 program);=09 2). Press the "E" key to enter the KDXT mode in order to EDIT the=20 line just LISTed. After ending EDIT, you will return to the Command=20 mode as usual;=09 3). Press <RETURN> to do an automatic LOC. (LOC. without an=20 argument). This will find the next occurrence of the string just=20 located.=09 If a search for a string fails, no line will be LISTed to the screen,=20 and BASIC's LIST and EDIT pointer will be reset.=09 39=09
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 EXAMPLES: The examples below assume the following program is in memory: 10 GSUB #"NAME?" 20 PRINT : PRINT "THANK YOU ";=20 30 PRINT "VERY MUCH ";NM$ 40 GOSUB 100 56 END 60 #"NAME?" : INPUT"WHAT IS YOUR NAME";NM$ : RETURN LOC.? (Locate the first occurrence of the BASIC token PRINT) Line 20 is LISTed to the screen <RETURN> (Locate the next occurrence of PRINT) Line 38 is LISTed to the screen <BREAK> (EXit LOC.) Command mode entered LOC."2" (Locate the first use of a question mark) Line 10 is LISTed <RETURN> (Locate the next occurrence of "?") Line 60 is LISTed E key pressed (EDIT line 60) EDIT mode is entered . . . . EDIT mode is exited LOC. (Locate the next occurrence of "?") No line is LISTed and Command mode is entered LOC.GOSUB (Locate the first usa of the GOSUB token) Line 40 is LISTed <BREAK> (Exit LOC.) Command mode is entered LOC.NM$ (Locate the first use of the variable NN$) Line 30 is LISTed <BREAK> (Exit LOC.) Command mode is entered 40
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 MODE int-expression The MODE command "turns-on" the graphics screen specified. There are=20 4 modes or types of graphics supported by the LNW-80. MODE 0 is the=20 "normal" lo-res graphics. MODE 1 is the hi.-res B/W graphics display.=20 MODE 2 is the le-res color mode while MODE 3 is the hi-res RGB mode.=20 The graphics display resolution in MODE 0 is 128 X 48. MODE 1 can=20 display points in a 480 X 192 screen. 160 X 192 is the resolution=20 displayable in MODE 2, although older models of LRW computers are=20 only capable of displaying 128 X 192. MODE 3 resolution is 384 X 192. lf a MODE less than 9 or greater than 3 is specified, an=20 ILLEGAL FUNCTION CALL error will result. NOTE: Inverse video, as described in the LNW-80 litexature, is = not=20 supported by the MODE command. Inverse video may be obtained in=20 MODEs 0 or 1 by the following; X=3DINP(254) : OUT 254,X+1. EXAMPLES: 10 CLS 20 MODE 1 will clear the text screen and enter the hi-res B/W display mode. 18 FLS 20 PCLS 30 MODE 2 will "white" the text screen (i.e. enable all points), clear the graphics screen and enter lo-res color mode. 10 FLS 9+64 20 PCLS 7 30 MODE 3 sets the RGB color to green, fills the graphics screen and then "flips" to the green filled screen. NOTE: line 20 does not = enable the graphics display but, fills the graphics display "invisibly". 10 I=3D0 : MODE I will turn off any current graphics display and return to normal text mode/display. 41
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 MOVE destination address, start address, byte count=09 The MOVE command allows a block of memory 1 - 65,536 bytes long to be=20 copied to another place in memory. The 3 arguments of MOVE are all=20 mandatory, and all are int-expressions. There is no restriction=20 placed on the value of any of the 3 arguments. IMPORTANT NOTE: It=20 is vary easy to destroy your program using MOVE!! The MOVE compound is useful for moving text & graphics (MODE 0) data = on the text screen, as well as large array transfers. The MOVE=20 command will determine the direction of the transfer from the=20 destination and start address. This is of importance only when the=20 two areas overlap, to insure that the data being moved does not=20 destroy the data to be moved. When the destination address is lesser=20 than the start address, the transfer will progress in a positive"=20 direction. That is, after each byte is transferred, the destination=20 start address will be incremented by one. For example, the command=20 MOVE &HA000,&HA001,3 will cause A001H to be copied into A000H, = A002H=20 to be copied into A001H, and A003H to be copied inte A002H.=20 Similarly, if the destination address is greater than the start=20 address, the addresses will be decremented by one after each byte is=20 transferred.=09 EXAMPLES: 10 FOR X=3D1 TO 10=20 20 FOR Y=BFl TO 63=20 30 MOVE &83C06g&83C01g1023=20 40 NEXT=20 50 FOR Y=3Dl TO 63=20 60 MOVE &H3FFFg&83PFE,1923=20 70 NEXT 80 NEXT=20 will scroll the text screen left and right 10 times. Line 30=20 scrolls the screen to the left by 1 character position by moving all=20 of text screen memory down one byte. That is, memory from 3C01H -=20 3FFFH is copied into 3C00 - 3FFE. Line 60 scrolls the screen to the=20 right by 1 character position. This is done by copying video memory=20 from 3FFEH - 3C00H into 3FFFH - 3C01H.=09 10 DEFINT A,B=20 20 DIM A(999), B(999)=20 30 PRINT "START FOR/NEXT LOOP!"=20 40 FOR X=3D0 TO 999 : A(X)=3DB(X) : NEXT=20 50 PRINT "STOP FOR/NEXT LOOP, START MOVE:"=20 60 MOVE VARPTR (A(0)), VARPTR (B(0)), 1000*2=20 70 PRINT "STOP"=20 demonstrates the difference in speed between a FOR/NEXT loop and=20 MOVE when used to copy the contents of one large array to another.=09
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 NTROFF NTRON {line range,} {expression} {,expression} ... {,expression}=20 The NTRON command enables a trace facility for debugging BASIC=20 programs. It allows you to specify what lines of your BASIC program=20 are to be traced, as well as providing a unique expression-trace=20 capability. A BASIC pregram must be in memory at the time the NTRON=20 command is executed, or an ILLEGAL FUNCTION CALL error will occur.=20 The NTROPF command disables this trace facility. The "line range" argument determines what lines of the BASIC program=20 currently in memory will be traced. (See below for a detailed=20 description of "line range".) If missing, all lines of the BASIC=20 program will be traced. It is important to remember that the line=20 range entered remains fixed, even if lines are added to the BASIC=20 program (until you execute another NTRON). For example, suppose the=20 BASIC program in memory at the time an "NTRON" (no line range) is=20 executed has lines ranging from 10 to 50. If you later add lines=20 between lines 10 - 50, these will be traced without doing another = NTRON. However, if you add lines outside this range (before line 10,=20 or after line 50), these lines will not be traced unless you = execute=20 another NTRON. The above example would still apply even if the=20 command entered had been "NTRON (0:65529)". The remaining arguments to NTRON constitute the expressions (if any)=20 whose values are to be traced. There may be 6 or more of these=20 expressions. Too many expressions {the limit depends on the sum of=20 the length of the expressions) vill result in an OUT OP STRING SPACE=20 error. (You can not increase this limit by CLEARing more string=20 space.) If 2 or more expressions are given, they must be seperated by commas. (Also note that if the first argument (line range) is=20 given, a comma must seperate it from an expression.) The expressions=20 used may be any valid BASIC expression which could properly be put in=20 a single PRINT statement. However, NTRON does virtually no syntax=20 checking on these expression arguments. If you enter an invalid=20 expression, NTRON will more than likely accept it. An error will not=20 occur until the program is run and the first line is about to be=20 traced! At this point you will receive a syntax (or another) error,=20 in what might appear to be a correct line. If you execute an NTROFF=20 and the program line subsequently runs without an error, the cause of=20 the error was probably an improper NTRON expression argument. NTRON remains active with the arguments given (if any) until an=20 NTROFF is executed. Before a BASIC program line being traced is=20 about to be executed, NTRON's output will be displayed on the video=20 screen. This consists of zero or more lines (depending on the number=20 of arguments given with the NTRON command) of "expression"=20 expression value, followed by a LIST of the line to be executed. It=20 is important to remember that the values of the expressions (if any)=20 are those that exist before the line is executed. (This is=20 particularly important when the expression contains a division=20 operatien. If the divisor has not yet been assigned a value, a=20 DIVISION BY ZERO error will occur.) 43
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 NTRON can be of great value in determining BASIC program bugs. Used within a BASIC program, it can provide for the tracing of several=20 disjointed line ranges. This can be accomplished by simply having=20 numerous NTRON commands with different line ranges throughout the=20 program. Although most output formatting commands (TAB, ;, USING, etc) can be=20 included within "expression", this is not recommended. In=20 particular, it is very difficult to use USING properly. Any=20 "expression" which appears after USING will be formatted with USING=20 (or cause an error if this can not be done). (Remember that the=20 expression arguments must be expressions which may be entered into a single PRINT statement.) Also, the USING variable must be = defined=20 before the first line to be traced is executed, or an error will=20 result. It is best to use expressions which do not alter the output=20 format of NTRON, however if formatting commands are used, be prepared=20 for anomalous results. EXAMPLES: NTRON will cause a trace of all BASIC program lines currently in memory. No expressions will be traced. NTRON(500:1000),X,Y will cause a trace of all BASIC lines between 500 and 1000 (inclusive). The current values of the variables X and Y will bc displayed preceeding the line trace {LIST). NTRON INT(X)+A*B,A$ will cause a trace of all BASIC program lines. Before each line is traced, the values of the expression INT{X)ABB and of the variable A$ will be displayed. 10 NTRON(:50),RB,TE$,LEN(A$),MID$(A$,LEN(A$)-1,2) . . 50 REM . . 1000 NTRON(1000:) will cause lines 10 through 50 to be traced after line 10 is executed. Additionally, the values of the expressions shown will be displayed prior to the line trace display. After line 1000 is executed, only line 1000 and any lines that follow will be traced. 44
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 line range Line range specifies a line or a range of lines of a BASIC program.=20 Whenever used it must be enclosed by parentheses. A line range must=20 be followed by a comma or a colon (whichever is appropriate) if it=20 does not terminate a line, A line range can be given in several=20 forms, as detailed balov. Several examples illustrate the usage of=20 each form. The examples usa constants for "line number", but it=20 should be understood that variables or numeric expressions may also=20 be used. All examples assume the following program is in memory: 10 REM 20 PRINT "THIS IS A SHORT PROGRAM" 30 PRINT "ITS ONLY PURPOSE IS TO" 40 PRlNT "OCCUPY LINES 10 - 50" 50 REM 1). (line number 1 : line number 2) specifies the range of lines beginning from "line number 1" (inclusive) through "line number 2" (inclusive). If "line numher 1" does not exist, the first line number that does exist which is greater than "line number 1" will be used as the lower limit of the range. If "line number 2" does not exist, the first line number that does exist which is less than "line number 2" will be used as the upper limit of the range. EXAMPLES: (20 : 40) includes lines 20, 30 and 40. (5:25) includes lines 10 and 20. (18:106) includes lines 20, 30, 40 and 50. 2). ( : line number) specifies the range of lines beginning from the first program line through "line number" (inclusive). If "line number" does not exist, the first line number that dorp exist which is less than "line number" will be used as the upper limit of the range. EXAMPLES: (:100) includes lines 10, 20, 30, 40 and 50. (: 28) includes lines 10 and 20. 45
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 (:5) does not include any line and will result in an error. 3). (line number : ) specifies the range of lines beginning from "line number" (inclusive) through the last program line. If "line number" does not exist, the first line that does exist which is greater than "line number" will be used as the lower limit of the line range. EXAMPLES: (0 :) includes lines 10, 20, 30, 40 and 50. (45 : ) includes line 50. 4). (line number) specifies a particular line which mush exist. If "line number" does not exist, an error will result. EXAMPLES: (10) specifies line 10 as the "line range". (18) will result in an error since line 18 does not exist. 46
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PAGE display-page {,read/write-page}i The PAGE command allows any one of the 4 available graphics memory=20 "pages" to become the current display and/or read/write page. The=20 arguments of PAGE are in'-expressions, and must be in the range of 0=20 to 3. The graphics memory pages are used in MODEs 1,2, and 3 graphics. The=20 current display page and the current read/write page do not have to=20 be identical, although they normally are. At power-up, the current=20 display and read/write pages are both page 0. NOTE: Older LNW80 models only have 1 graphics memory page. The = PAGE=20 command will not work properly on these models. EXAMPLES: PAGE 2 will change the current graphics display page to 2, regardless of=20 the current MODE. The graphics read/write page will not be changed. 10 MODE 2 28 PAGE 0,3 : PCLS 30 CIRCLE 50,50,20 : PAINT 50,50,5 40 FLS : PAGE 3 50 GOTO 50 will change the graphics MODE to lo-res color in line 10. Line 20 changes the current graphics display page to 0, the current read/write page to 3, and clears this page. Note that the contents of graphics memory page 0 are not affected by the PCLS. Line 30 draws a circle and fills it in, but it is not seen until after the display page is changed to 3 in line 40. 10 PAGE 0,0 : MODE 1 20 PSET 50,50 30 PAGE 0,1 40 PRINT POINT (50,50) will print a 0 (reset) since the point 50,50 is on graphics memory page 0, but page 1 is being read. (This assumes that the point 50,50 isn't set on page 1, of course.) Note that this may cause some confusion, since the point 50,50 is set on the graphics memory page being displayed. 47
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PAINT X,Y {,RESET} PAINT X,Y {,paint color) {,border color} In black & white graphics MODEs (0 & 1), PAINT "paints" (fills = in) an=20 area by either setting or resetting all graphics dots. In color=20 graphics MODEs (2 & 3), PAINT "paints" in the paint color specified, = up to the border color specified. The first argument form is used=20 for black 6 white graphics, the second form is for color graphics. The first: 2 arguments give the X,Y coordinates of a point (any point)=20 in the region to be painted. The arguments are mandatory, and must=20 be int-expressions. The point X,Y gust be a displayable point within=20 the current graphics MODE or an ILLEGAL FUNCTION CALL error will result. In black & white graphics, the third argument (optional) specifies=20 the "color" to paint in. If it is present, it must be the BASIC=20 keyword RESET. If this argument is missing, it defaults to SET.=20 PAINT with the SET option will set all points from the given starting=20 point within an enclosed area. An area is bounded by the sides of=20 the display and points which are set. PAINT with the RESET option=20 will reset all points in an area bounded by the sides of the = display=20 and points which are In color graphics, the third & fourth arguments are optional. The=20 third argument specifies the color to paint in. If it is present, it=20 must be an int-expression in the range of 0-7 (see COLOR). If it is=20 missing, it defaults to the current COLOR value. The fourth argument=20 specifies the border color which bounds the area to paint. If it is=20 present, it be an int-expression between 0-7. If it is missing, it=20 defaults to the current COLOR value. Unlike other commands, PAINT can be interrupted in the middle of its=20 execution by holding down the <BREAK> key. This will terminate = the=20 execution of the command; it cannot be CONTinued. (lf issued, a CONT=20 command will continue with the execution of the statement immediately=20 following the interrupted PAINT command.) The PAINT command cannot be used successfully with the PLOT command=20 to paint patterns. If the PLOT command is being used to generate=20 patterns with other graphics commands, a command must be issued=20 (=92PLOT=92) to force graphics to "normal" before PAINTing. NOTE: Due to the nature of the color mapping in MODE 3 (hi-res=20 color) graphics, it is very difficult to use PAINT successfully in=20 MODE 3. Problems will be encountered whenever the paint color and=20 the border color differ. 48
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 EXAMPLES: 10 CLS : MODE 1 : PCLS 20 LINE 0,0,150,10,SET,B 30 PAINT 1,1 40 GOTO 40 will draw a box {line 20) and fill it in (line 30). (This could also have been done using the F option of LINE, of course.) Any point within the box (but not on it) would have worked; there is nothing special to the point 1,1. Replace line 30 with: 30 PAINT 150,10 and RUN. (Remember that holding down the <BREAK> key will stop PAINT from painting.) This example demonstrates why the point given must not be on the perimeter of the area to be painted. 10 MODE 0 : CLS 20 LINE 0,0,50,20,SET,B 30 PLOT 2,2 40 PAINT 1,1 50 GOTO 50 demonstrates that PLOT cannot be used effectively with PAINT. Changing line 30 to: 30 PLOT will properly set the graphics to "normal" to insure that PAINT works as it should. This is necessary only when PLOT has been used prior to PAINT (since the last RUN or NEW) to set a graphics pattern. 10 CLS : MODE 1 : PCLS 20 DRAW "B,M246,96,S8,R5,U5,R5,D15,E10,R5,G20,H25,E20,D25" 30 FOB X=3D1 TO 1000 : NEXT 40 PAINT 241,97 50 FOR X=3D1 TO 1000 : NEXT 66 PAINT 241,97,RESET will draw a figure, paint it, and then "erase" it. Line 20 draws a complex figure, and line 30 causes a short delay to allow you to see the figure before it is painted. Line 48 paints the figure, and line 50 causes another short delay. Finally, line 60 paints the figure using the RESET option, which resets all set points in an area bounded by reset points. In the example, this causes the entire figure to be reset. 49
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 10 MODE 2: PCLS: FLS 20 COLOR 1 : CIRCLE 50,50,28 30 COLOR 2 : CIRCLE 59,50,l8 40 PAINT 50,50 56 PAINT 50,50,3,1 60 PAINT 50,50,,1 70 PAINT 50,50,0,0 demonstrates the PAINT command in lo-res color graphics (MODE 2). In line 10 the MODE is set to lo-res color, the background color is set to white (0), and the lo-res color graphics sreen is enabled by whiting the text screen. Line 20 sets the current default COLOR to green (1), and draws a circle of radius 20, Line 30 sets COLOR to yellow and draws a concentric circle of radius 10. Before line 40 is executed, there is a small yellow circle inside a larger green circle. Line 40 paints in yellow, up to a yellow border (due to the defaults of the missing arguments). This results in a solid yellow circle inside a larger green (not solid) circle. Line 50 paints in red (3), up to a green (1) border, resulting in a large solid red circle with a green circumference. Line 60 paints in yellow (the last, COLOR value) up to a green border, changing the solid red circle to solid green. Line 70 resets the solid green circle by painting in white (the background color), up to a white border. 50
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PCLS {int-expression} This command is used to set the graphics screen to a specified value.=20 PCLS used without a following expression sets all graphics points=20 off. This is equivalent to a PCLS 0 command. PCLS with an optional=20 argument sets graphics points as specified by the argument=92s value.=20 The value specified must be in the range 0 to 7 inclusive. If the=20 evaluated expression (i.e. value) falls outside of this range, an=20 ILLEGAL FUNCTION CALL error will occur. The PCLS command is useful in clearing (PCLS 0) or "filling" (PCLS 7)=20 the hi-res B/W (MODE 1) or hi-res color (MODE 3) graphics screen. In=20 MODE 2 (lo-res color) graphics, the PCLS command is used to set the=20 background color. The argument specifies the color (see COLOR=20 command) to set the background color to. All subsequent MODE 2=20 graphics involving RESETting points will set points to this=20 background color. EXAMPLES: 10 MODE 1 20 PCLS will turn on the hi-res B/W graphics screen and "clear" the graphics screen. l0 MODE 1=20 20 FCLS is equivalent to the above example. 10 MODE 1 20 PCLS 7 will turn on the hi-res 8/W graphics screen and fill in the screen - i.e. turn the entire screen white. 10 MODE 2 20 FLS 30 PCLS 3 will turn on the lo-res color graphics screen, map all points "on" (FLS whites the text screen), and turn the screen red (COLOR 3 =3D red). 10 MODE 2 20 FLS 30 FOR I=3D0 TO 7 40 PCLS I 50 FOR J=3Dl TO 500 60 NEXT J,I will turn on the lo-res color graphics screen, map all points "on", and alternate between all 8 colors - delaying between each. 51
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 10 MODE 2 : FLS 20 PCLS 4 : COLOR 7 38 LINE 0,0,50,50,SET,BF 40 FOR X=3Dl TO 1000 : NEXT 50 LINE 0,0,50,50,RESET,BF will set the MODE to lo-res color, "white" the text screen (enabling color graphics), set the background color to magenta (4), set the current (foreground) COLOR to black (7), draw a solid, black rectangle, and then (after a short delay), reset the rectangle to the background color of magenta. 10 MODE 3 28 PCLS 7 30 FLS 2*9+64 will set the MODE to hi-res color, set all hi-res graphics points on, and "map" the color yellow (2) onto all graphics points (thereby turning the hi-res graphics screen yellow). 10 MODE 3 28 FLS (RND(8)-1)*9+64 38 PCLS RND(8)-1 40 FOR Ill TO 588 : NEXT 50 GOTO 20 will turn on the hi-res color mode, map all graphics points to a random color, "fill" the graphics screen with random vertical line patterns and loop. 52
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PGET array-name,X1,Y1,X2,Y2 PGET array-name,old-color TO new-color The first argument form of the PGET command saves the graphics data=20 from the specified rectangle into the specified array. (The array=20 should be dimensioned large enaugh to hold the desired data prior to=20 the PGET, or a SUBSCRIPT OUT OF RANGE error will occur.) PGET is to=20 be used in conjunction with the PPUT command to speed up the=20 displaying of complex graphics images. The second argument form of=20 PGET changes the data already in an array. The first argument, array-name, must be a string constant. It=20 denotes the name of a dimensioned array. The array most not be a=20 string array or a TYPE MISMATCH error will occur. It is recommended=20 for clarity that an integer array be used with PGET and PPUT. The arguments X1,Y1,X2,Y2 are int-expressions, and give the=20 coordinates of the two corners of the desired rectangle. The point=20 Xl,Yl should be the upper-left corner point of the rectangle, and the=20 point X2,Y2 should be the lower-right corner point. The rectangle is=20 limited to a size of 256 X 256. The second argument of the second argument, form is similar in syntax=20 to the "initial-value TO final-value" portion of a "FOR variable-name=20 =3D initial-value TO final-value" statement. That is, "int-expression=20 TO int-expression", where the evaluated expressions in this case=20 represent a color, and must be in the range of 0-7. If the data in=20 the specified array represents MODE 2 or 3 (color) graphics data,=20 then this argument form allows all points of a particular color to be=20 changed to another color. If the data in the array did not came from=20 a PGET of MODE 2 or 3 graphics data, the result vill be=20 unpredictable. The following formulas will be useful in calculating the miniaaan=20 dimension of an integer array to be used with PGET: # of points (X2 - X1 + 1) * (72 - Y1 + 1) Minimum DIM =3D (# of points / 16) + 2 (MODES 0 & 1) Minimum DIM =3D (# of points / 4) + 2 (MODES 2 & 3) EXAMPLES: 10 DIM A%(30) 20 MODE 0 : CLS 30 LINE 0,0,20,20,GET,B 40 PGET A%,0,0,20,20 50 FOR X=3D0 TO 100 STEP 25 60 PPOT A%,X,25 78 NEXT 80 GOTO 80 53
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 demonstrates PGET in MODE 0. The rectangle drawn in line 30 is read into the array A% by line 40. The loop in lines 50-70 causes 5 images of the data in A% to be displayed. 10 DEFINT A: DIN A(250) 20 MODE 1: PCLS: CLS 30 CIRCLE 240,96,36,,,,90 40 FOR X=3D1 TO 10 50 LINE 210,64,270,127,SET,B: LINE 210,64,270,127,RESET,B 60 NEXT 70 PGET A,210,64,270,127 80 PPUT A,150,64: PPUT A,276,64,MERGE is an example of PGET & PPUT in MODE 1. The flashing rectangle created by the loop in lines 40-60 shows the exact area that is transferred to the array A in line 70. ln line 80, 2 images of the data in A are displayed. (Note how much faster the data is displayed with the MERGE option of the PPUT command.) 10 DEFINT C: DIM CI(375) 20 MODE 2: FLS: PCLS 5 30 COLOR 2: CIRLCE 50,50,10: LINE 40,40,60,60,SET 40 PAINT 50,45,4: PAINT 50,60,1 50 PGET CI,35,30,70,70 60 PGET CI, 1 TO 6: PGET CI,4T07 70 PPUT CI,100,100 80 PGET CI,5 TO 1: PPUT CI,100,50 90 DO : UNTIL (INKEY<>:) 100 PCLS:1 : PPUT CI,50,50 demonstrates PGET a PPUT in MODE 2 graphics. Line 20 sets the background color to blue (5). A yellow (2) circle with a line through it is drawn by line 30. Line 40 paints half the circle magenta (4), and half green (1). Line 50 reads the area containing this circle into the array CI. Line 60 changes the circle to half blue-green (6), and half black. Line 70 displays the new circle. Line 80 changes the background portion of the circle from blue to green, and displays it. Line 90 delays until a key is pressed. Line 100 clears the graphics screen and sets the background color to green. The circle is then displayed again, looking much better now that the background color has been changed to match the data in CI. 54
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PLOAD filespec {,MERGE} The PLOAD command loads a disk file into graphics memory. Normally, the disk file to be loaded is a graphics memory-image created by the PSAVE command. However, PLOAD does not restrict the loading of any kind of file. The first argument indicates the disk file to be loaded. When the=20 second argument is not used, the contents of this disk file will=20 replace the current contents of graphics memory (regardless of the=20 current graphics mode). If the second argument is used, it indicates=20 that the contents of the file are to be merged (OR'd) with = graphics=20 memory. The MERGE option provides a way of loading various portions=20 of the screen at different times. This can be accomplished by=20 loading several PSAVE files, eich of which were created with only=20 parts of the screen filled. When a file is MERGEd with graphics=20 memory, only the area which contained an image when the file was=20 created will be affected; the rest of graphics memory will be=20 unaltered. EXAMPLES: 10 CLS : PCLS : MODE 1 20 PLOAD "PAGE1/GRF" : REM GET 1ST PAGE OF DISPLAY . . . when executed, will load the file "PAGEl/GRF" from disk into graphics memory. PCLS : MODE 1 : PLOAD"TEST/GRF" will load the file "TEST/GRF" into graphics memory. 10 DATA "FIG1/GRF", "FIG2/GRF", "FIG3/GRP", "FIG4/GRF"=20 20 FOR X=3D1 TO 4 : READ FIG$(X) : NEXT . . . 10000 PCLS : POR I=3D1 TO 4 : PLOAD FIG$(X), MERGE : NEXT : RETURN lines 10-20 read in 4 filenames into the array FIG$. When the subroutine at line 10000 is called, the graphics screen is cleared, and each of the 4 files is loaded into graphics memory. Since the "MERGE" option is used, the contents of the files will be merged into graphics memory. 55
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PLOT {SET-count {,RESET-count}} The PLOT command initializes the SET (on) and RESET (off) counters=20 used by all LNWBASIC graphics commands. These counters determine = the=20 "pattern of dots" which make up a line, circle, DRAW-figure, etc.=20 Only SET graphics are affected by PLOT; there is no way to affect=20 RESET graphics. The command PLOT l,l will cause the line drawn by=20 LINE 0,0,20,0,SET te consist of alternating SET and RESET dotsg it=20 has no affect on LINE 0,0,20,8,RESET. Both arguments of PLOT must be integer expressions in the range of=20 0-255. The first argument determines the number of consecutive=20 points that will be SET in all subsequent graphics drawn. The second=20 argument determines the number of consecutive RESET points that vill=20 be drawn after all the consecutive SET points have been drawn. = For=20 example, PLOT 5,5 will cause a pattern of 5 dots on (SET), followed=20 by 5 dots off (RESET). This pattern repeats until another PLOT=20 command is issued. The pattern does not start over for each new=20 figure drawn; instead, the pattern continues its sequence uninterrupted. If the second argument is missing, it defaults to the value of the first argument. For example, PLOT 1,1 is identical in=20 meaning to PLOT 1. PLOT with no arguments will force graphics to the "normal" pattern of=20 all dots on (SET). This can also be accomplished by PLOT n,0 (n any=20 value between 1 and 255). (This is because the RESET count is 0.)=20 PLOT 0, as well as PLOT 0,n (n any value between 0 and 255), will=20 force the graphics to a pattern of all dots off (RESET). (This is=20 because the SET count is 0.) PLOT 0 can be used to erase various=20 graphics such as circles, DRAW-figures, etc., which cannot otherwise=20 be easily erased. The PLOT command affects all LNWBASIC graphics commands, including=20 PAINT. In order for PAINT to work properly, graphics must be set to=20 "normal" prior to PAINT by issuing a PLOT {no arguments) command. EXAMPLES: 10 MODE 1 : FLS 20 PLOT 3,2 30 LINE 100,70,206,130,SET,B 40 PLOT 50 CIRCLE 150,100,30 60 PAINT 150,100 70 GOTO 70 draws a box using the PLOT command. Line 20 causes all subsequent LNWBASIC SET graphics to use a pattern of 3 dots "on" (SET) and 2 dots "off" {RESET). Line 30 draws a box using this pattern. Line 40 returns graphics to normal {all dots SET). This allows a solid circle to be drawn and painted by lines 50-60. 56
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 l0 MODE 2 : PCLS 5 : FLS : COLOR 4 20 PLOT 30 CIRCLE 64,30,20,,,,45 48 PLOT 0 50 CIRCLE 64,30,20,,,,45 60 GOTO 20 is an example of how to erase (RESET) a circle. The circle is drawn in line 30, after graphics was set to all dots "on" in line 20. Line 40 sets graphics to all dots "off", causing the CIRCLE command in line 50 to erase the circle. 18 CLS : MODE 0 20 FOR Y=3D0 TO 47 30 PLOT Y+1 40 LINE 0,Y,127,Y,SET 58 NEXT 60 GOTO 60 demonstrates various effects of PLOT on a simple line. After running this example, replace the first Y coordinate in line 40 with 0 and run the new program. Than, change the first Y coerdinate in line 40 back to Y, replace the second Y coordinate with 0, and run this program. Finally, replace both Y coordinates in line 40 with 0 and RUN. 57
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 POFF PON The PON command, when executed, will cause video output to be echoed=20 to the printer. The printer must be on and ready or the system will=20 "hang". The POFF command is used to disable the video to printer=20 echo. The command may be used with custom printer driver routines=20 (serial,TRS232,etc.) providing the routine has been loaded before=20 issuing a PON. See SPOOLON for the use of it and PON simultaneously. EXAMPLES: 10 PON 20 PRINT"THIS IS A TEST" 30 POFF will display the line "THIS IS A TEST" on the video display and also output the line to the printer. PON : LIST this command will cause a proqram in memory to be listed on the video display and to also be output to the printer. 58
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 POINT( X,Y) The POINT command is used to return the status or color of the=20 specified graphics point. The arguments X,Y are mandatory, and may=20 be constants, variables, or integer expressions. In MODEs 0 or 1, POINT returns the value 0 if the point is not set=20 (reset) or the value -1 if the point is set. This is the same as=20 found in LEVEL XI or DISK BASIC. The value -1 is used by BASIC as=20 TRUE. Any value other than -1 is considered FALSE. If the evaluated=20 expression, "IF POINT(X,Y) " is TRUE (i.e. =3D -1) then the rest of the=20 statement line is executed. POINT is used in MODEs 2 6 3 to return the color of the tested point. If the point 100,20 had been PSET with COLOR 3, then POINT(100,20)=20 would be equal to 3. In MODE 2 a point is always on (set), and POINT=20 will always return a value of 0-7 to denote its color. In MODE 3,=20 however, a point can be off (reset), as well as being set to a color=20 0-7. To identify a point which is off in MODE 3, a value of -1 will=20 be returned. Note that -1 in this case has the opposite meaning as=20 in MODEs 0 a l. POINT will always return a value of 0 if the paint specified falls=20 outside of the displayable area. EXAMPLES: 10 MODE 0 20 SET(10,10} 30 IF POINT(10,10) THEN PRINT"POINT 10,10 IS SET" will set the graphics mode to lo-res B/W, set point 10,10 and print the statement, "POINT 10,10 IS SET" to the video screen. 10 MODE 0 20 CLS 30 PRINT POINT(127,47) will set the mode to lo-res B/W, clear the text screen and print the value 0. This is due to the fact that in "normal" graphics mode (128 X 48 B/W), CLS clears all grahics points. If a point is not set, POINT will return a 0 value. 10 MODE 2 : PCLS : FLS , COLOR 3 20 LINE 0,0,100,106,SET 30 PRINT POINT(50,50) will set the mode to lo-res color mode, clear the graphics screen, enable all graphics points (by "whiting" the text screen), set the default color to red, draw a red diagonal line and print the value 3. This is due to the fact that in MODE 2 graphics, POINT returns the color value of the tasted point. 70 PRINT POINT (10,190) will, if added to the the above example, print the value 0. A PCLS command, without an argument, sets all graphics points to 0. 59
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PPUT array-name,X,Y {,option}=20 Where option =3D MERGE or RESET.=09 The PPUT command transfers graphics data stored by the PGET command=20 from an array to graphics-memory "array-name=94 is a string constant,=20 specifying the array containing the data to transfer to graphics=20 memory. The arguments X,Y are int-expressions, specifying the=20 upper-left corner point of the rectangular area where the data is to=20 be transferred.=09 If no option is given, PPUT will simply transfer the data to graphics=20 memory exactly as stored in the specified array. In other words, the=20 contents of the array will replace the contents of graphics memory in=20 the area given.=09 If the MERGE option is used, only those points which are set (i.e.,=20 not equal to the background color), will be transferred to graphics=20 memory. The MERGE option is usually considerably faster, but it can=09 produce different results from transferring the entire array. If the RESET option is used, those points which are set (i.e., not=20 equal to the background color), will be reset when transferred to=20 graphics memory. EXAMPLES: 10 MODE 0 : CLS : DEFINT A : DIN A(30) 20 LINE 35,10,55,20,SET,B 30 LINE 38,13,52,17,SET,BF 40 PGET A,35,18,55,20 50 PPUT A,40,15 60 PPUT A,45,20,MERGE demonstrates the difference between using and not using the MERGE option. 10 DEFINT A : DIM A(975) 20 MODE 2 : PCLS 7 : FLS 30 COLOR 0 : CIRCLE 59,50,29 40 PGET A,25,10,75,85 50 PCLS 5 : PPUT A,0,58 60 PGET A,7 TO 5 : POET A,0 TO 1 70 PPUT A,60,50,MERGE 89 DO : UNTIL (INKEY$<>"") 90 PPUT A,0,50,RESET 100 DO : UNTIL (INKEY$<>"") 110 PGET A,5 TO 7 : PPUT A,0,50,RESET demonstrates the RESET option. Line 26 sets the mode to lo-res color, the background color to black (7), and enables the color graphics display by whiting the text screen. Line 30 sets the default COLOR to white (0), and draws a white circle. Line 40 copies an area of graphics memory around this circle to the array A. Line 50 sets all of graphics memory to blue (5), thereby changing the background color, and transfers the white circle and surrounding area to graphics memory. Since the background color was changed, the 60
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 previously "transparent" black background is now quite visible. Line 60 changes all black points in A to blue, and also changes the color=20 of the circle from white to green. Line 70 transfers the new=20 contents of A to graphics memory. Note that the black background is=20 now blue, and is therefore not noticeable. Line 80 delays until a=20 key is pressed. Line 90 transfers the data in A to graphics memory=20 using the RESET option. Since only the circumference of the circle=20 is "set" (i.e., contains points not equal to the background color),=20 only these points are reset. This leaves the black area still=20 visible. After a key is pressed, line 110 will reset this area, by=20 changing the blue points in A back to black, and doing another PPUT=20 with the RESET option. 61
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PRESET X,V PSET X,Y The PRESET command in MODEs 0,1 or 3 will turn off the specified=20 point. In MODE 2, the specified point will be set to the background=20 color (see PCLS). The PSET command turns on the specified point. In=20 MODE 2 (lo-res color) and MODE 3 (hi-res color), the point will be=20 set to the color specified in the last COLOR command. In MODE 0, X may vary from 0 to 127 and Y from 0 to 47. PSET and=20 PRESET in MODE 0 are equivalent to SET and RESET in "normal" BASIC.=20 To MODEs 1 or 3, X may vary from 0 to 479 and Y from 0 to 191. In=20 lo-res colar mode (MODE 2), X should be in the range 0 to 159 and Y=20 in the range 0 to 191. If the value of X or Y is outside this=20 specified range, no operation will be performed. The inteqer portion of floating point numbers will be used in=20 determining the appropriate action - i.e. PSET 1.5,50.6666 will result in the point 1,50 being set. EXAMPLES: 10 CLS 26 PCLS 30 MODE I 40 PSET 240,96 will clear the text screen, clear the graphics screen, enter the hi-res B/W mode and set the point approximately in the middle of the screen. 10 MODE 20 FOR I=3D0 TO 127 30 PSET I,20 40 NEXT I will set the points in the horizontal line determined by 0,20 and 127,20. PSST X,20 in this example is equivalent to SET(I,20) in the "regular" BASIC. 10 MODE 2 20 er,s 30 FOR I=3D1 TO 56 40 COLOR RND(8)-1 50 PSET RND(128)-l,RND(192)-l 60 NEXT I will enter the lo-res color graphics mode, enable all graphics points, and turn-on 50 random points of random color. 62
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 10 MODE 3 : PCLS 20 COLOR 1 30 FOR I=3D0 TO 191 40 PSET X,I 50 NEXT I 60 FOR I=3D0 TO 191 70 PRESET I,I 80 NEXT I will turn on the hi-res color screen, clear graphics memory, set the color to reen, and draw e diagonal line from the top left corner of the RGB monitor to about the middle bottom of the screen. The line will then be erased. 10 CLS 20 PCLS 30 MODE 1 40 FOR I=3D0 TO 479 50 PSET I , SIN(I*2*3.14/479)*96+96 60 NEXT I will clear the text screen, clear the graphics screen, set the mode to hi-res B/W and draw a sine-wave on the video display. 63
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 PSAVE filespec The PSAVE command saves graphics memory to a disk file. The mandatory argument, filespec, indicates the disk file to use or=20 create. All of the contents of graphics memory, regardless of the=20 current graphics mode, are saved to the file specified. The contents=20 are saved in a special format -using-space compression, to save disk=20 space. Depending upon the contents of graphics memory, the file=20 contents can range in size from less than 1K bytes (all 0's in=20 graphics memory), to 16K bytes (all 1=92s in graphics memory). The=20 file may be loaded into graphics memory from disk using the PLOAD=20 command.=09 NOTE: While it is not required, it is suggested that the file=20 extension, "GRF" be used for graphics screen files.=09 EXAMPLES:=09 PCLS : PSAVE "BLANK/GRF"=20 will save a file which will clear the graphics screen when PLOADed=20 from disk.=09 500 PSAVE GR$ (X) +"/GRF" will save the current contents of graphics memory to the disk file determined by the specified string expression. 64
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 QUICKEY This command toggles the quick key entry method on and off. The=20 first time the command is given, quick key entry is enabled; the next=20 time it is given, quick key entry will be disabled. Quick keys have=20 been pre-defined and can not be modified; they are totally = distinct=20 from defined keys (see DEFKEY). Quick key entry allows you to enter entire BASIC keywords with just=20 one keystroke. While holding dovn the <CONTROL> key, press the=20 desired key. If the key you press is a defined quick key, then the=20 associated keyword will immediately be displayed on the video screen.=20 ignored, and the key will be displayed as usual. The table below lists BASIC keywords and associated keys, organized=20 alphabetically by the BASIC keyvord. An attempt has been made to=20 make quick key entries easily recallable. Many of the keywords are=20 mnemonic (that is, the first letter of the keyword matches the=20 associated key). Exceptions are the BASIC string keywords (that is,=20 keywords with "0" in them) which have bean assigned to numeric keys.=20 Other keywords also use mnemonics different from the BASIC keyword=20 (Xfer (X) for GOTO or Bring (B) for LOAD, for example). Some=20 keywords use keyboard position to aid in recalling their assigned=20 quick keys (RETURN (H), for example, is next to GOSUB (G)). Of=20 course, some keywords had to be assigned at random (you can't win=20 them all!) AUTO - A KILL" - K READ - Y=20 CHR$( - 4 LEFT$( - 1 RESET - Q=20 CLEAR - Z LIST - L RETURN - H=20 CLOSE - J LOAD" - B RIGHT$( - 3=20 CMD" - C MEM - M RUN <ENTER> - R=20 DATA - D MID$( - 2 SAVE" - S=20 DIM - U MKD$ - 8 SET( - W=20 ELSE - E MKI$ - 9 STR$( - 5=20 FOR - F MKS$ - 0 STRING$( - 7 GOSUB - G NEXT - N THEN - T G0T0 - X OPEN" - 0 VARPTR( - V=20 INKEY$ - 5 PEEK( - P blank:blank - : INPUT - I POKE - @ (The above table may be photocopied and placed on your LNW80 for easy=20 reference.) 65
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 REPEAT The REPEAT command implements the keyboard auto repeat and "beep" toggle. The first time this command is executed, the routine takes=20 effect. A key depressed for about half a second will repeat. If a=20 speaker/amplifier is hooked to the cassette-out line of the LNW 80=20 (the line that goes to the AUX on the cassette recorder), a beep=20 will be heard upon depressing a key. The second time this command is=20 executed, the auto repeat and "beep" are turned off. The REPEAT=20 command should not be used with Radio Shack=92s lower case software as=20 lower case characters cannot be input with REPEAT in use. NOTE: The use of REPEAT in double width character mode causes=20 keyboard bounce while its use with the lower CPU speed causes=20 character loss. EXAMPLES: REPEAT will enable key repeat and "beep" if this is the first time the command is issued. 20 REPEAT 30 INPUT"NAME?",A$ 40 REPEAT if a REPEAT command has already been issued, as in the preceding example, line 20 will turn off the auto repeat. Line 30 will input A$ without allowing auto-repeat. Line 40 will again enable repeat/"beep". 66
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 REST line number=20 REST #"label"=09 This command allows for selected reading of DATA statements. The=20 argument specifies a BASIC program line number containing a DATA=20 statement. After the MST command is executed, the next READ will=20 start with the first item in the DATA statement within the line=20 just RESTored.=09 The "line number" argument form may be given as a constant, variable,=20 or expression. The second REST argument form (I"label=94) refers to a=20 line which has been so labeled. With either argument form, if the=20 line referenced does not contain a DATA statement, an ILLEGAL=20 FUNCTION CALL error will result.=09 EXRNPLBSs=09 10 REST 40000=20 will reset the DATA pointer so that the next READ will start with=20 the first item in the DATA statement in line 40000.=09 10 REST A(X)*100=20 will cause the next READ to start with the first item in the DATA=20 statement in the line determined by the product of A(X) and 100.=09 67
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 RS232 This command initiates dialog that will result in the initialization=20 of the RS-232-C interface. Current status of the GART sense switches will be displayed within vertical bars. If the baud setting is not=20 within the range possible to set with RS232, the word "OTHER" will be=20 displayed. To use the parameters that were switch set, hit "ENTER" in=20 reply to each question. To change settings, enter the appropriate=20 number. Recommended settings are denoted by an asterisk. EXAMPLE: RS232 will result in the following dialog: RS-232-C INITIALIZATION BAUD RATE (0=3D110, 1=3D134.5, 2=3D300*) !2!? 0 PARITY (0=3DENABLE, 1=3DDISABLE) !0!? 0 STOP BITS (1*, 2) )!1! 1 WORD LENGTH (5, 6g 7*, 8) !7!? 7=20 PARITY (0=3DODD, 1=3DEVEN*) !1!? the numbers after the "?" are user entered. The numbers inside the vertical bars are the current UART switch settings. This dialog has resulted in a baud rate of 110, parity enabled, 1 stop bit, 7 bit word length excluding parity bits, and even parity. 68
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 RSIN {,R} The RSIN command without the trailing ",R" will enable the input of=20 characters from either the keyboard or the RS-232-C interface.=20 Provided processing is not too lengthy between input of characters,=20 rates up to and including 300 baud can be supported. The RSIN command=20 with the trailing ",R" (i.e. RSIN,R) will inhibit input from the=20 serial port. Further input will only be from the keyboard. This command used in conjunction with the RSOUT command makes=20 possible the implementation of terminal programs, automatic logon=20 to time share networks, and remote terminal input, and output in BASIC! NOTE: Do not implement the RSIN command if a RS-232-C board or=20 similar serial I/0 device is not installed. An infinite loop will=20 occur and a system reset will be necessary. 16 RSIN : RSOUT 20 LPRINT : LPRINT 30 LINEINPUT A$ : IF A$<>"USER ID?" THEN 30 40 LPRINT"123,45,6789" : REM USER LOGON XD this example shows how simple an automatic logan procedure for a time share system is to implement. In line 10, the RSIN command enables input from the serial port. "RSOUT" routes printer output to the serial port. Line 20 outputs two carriage returns. This is usually necessary to establish baud rate synchronization with a time share network. In line 30, a character stream, up to a carriage return, is stored in the string variable A$. If A$ is not equal to "USER ID?" the program loops at line 30. Once the IF/THEN clause is true, the string "123,45,6789" is output to the serial port in line 40. Further processing could include an interactive terminal program - etc. 100 RSIN,R will inhibit any further input from the serial port. 69
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 RSOUT {,R} The RSOUT command without the trailing ",R" will route printer output=20 to the RS-232-C interface. The serial port should be initialized=20 before implementing this command. While any baud rate possible with=20 RS-232-C is supported, no provision has been made for outputting=20 nulls after a carriage return. Nulls are required by some serial=20 printers and other devices. The RSOUT cemmand with the trailing ",R"=20 (i.e. RSOUT,R) will reset printer output to the condition existing=20 before the RSOUT command. Refer to the RSIN command. EXAMPLES: 10 RSOUT 20 FOR X=3D1 TO 10 : LPRINT"HELLO" : NEXT I 30 RSOUT,R this example uses the RSOUT command in line 10. The 10 "HELLO"'s output to the printer in line 20 will go to the serial output port. Line 30 resets to conditions existing before line 10 was executed. 10 RSOUT : PON 20 PRINT"THIS IS A TEST" 30 POFF : RSOUT,R line 10 first routes printer output to the RS-232-C interface and then echoes all video output to the printer (i.e. the serial port). Line 20 outputs the line "THIS IS A TEST" to the video display and the serial port. Line 30 turns off the video ta printer echo and reroutes further printer output as per the conditions existing before line 10 was executed. 70
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 SAVEKEY filespec The SAVEKEY command saves the current defined key list (see DEFKEY) to the specified disk file. The file may be an LNWBASIC module, or a file containing only defined keys. If the file is an LNWBASIC module, the defined key list within the module on disk will be replaced by the current defined key list. Whenever the LNWBASIC module is subsequently executed, the newly saved key list will appear as the current defined key list. If he file is not an LNWBASIC module, then LOADKEY must be used to load the key list from the file. NOTE: While it is not required, it is suggested the extension, "KEY"=20 be used for defined key files. EXAMPLES: SAVEKEY "LNWBASIC/CMD:0" will save the current defined key list to the file specified. Whenever this LNWBASIC module is executed, the defined keys will be those defined keys just saved. 200 SAVEKEY "F1/KEY" when executed, will save the current defined key list to the file "Pl/KEY". The defined key list from this file can be loaded at any time by the command 'LOADKEX "Pl/KEY" =92. 71
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 SOUND SET value SOUMD freq1 {,freq2} {,step} {,duration} {,repeat) The SOUND command produces many varied-sound effects. It's=20 versatility ranges from making music to imitating phaser-gun sound=20 effects. The first form of the SOUND command sets a constant duration value=20 which is used for all subsequent SOUND commands. This value ranges=20 from 1-255, and is initially set at 128. However, it is not reset by=20 NEW or RUN. It is up to you to keep track of the current value. The second form of the SOUND command plays the desired tone(s). All=20 arguments range from 1 to 255. 0 and values greater than 255 will=20 result in an ILLEGAL FUNCTION CALL error. Only the 1st argument of=20 SOUND is mandatory; all other arguments will use a default value if=20 missing. You must use ",," (comma, comma) as a place-holder for missing arguments if you desire to specify a later argument. For example, SOUND 50,,,100 will use default values for the missing 2nd = & 3rd arguments, and the specified values (50 & 100) for the 1st and=20 4th arguments. The 5th argument is missing entirely and will also=20 default. The 1st & 2nd arguments of SOUND (freql & freq2) specify a = range of=20 frequencies to play. If the 2nd argument is missing, it will default=20 to freql. Thus, SOUND 100 and SOUND 100,100 are functionally=20 identical. The SOUND command will "step" up or down from freq1 to=20 freq2, depending upon their values. For example, SOUND 180,150 will=20 step from 100 to 150, while SOUND 150,100 will step from 150 to 100. The 3rd argument of SOUND specifies the step count to use while=20 stepping from freq1 to freq2. If this argument is missing, a step=20 count of 1 will be used. The step count is analogous to STEP in a=20 FOR/NEXT loop, except that a negative count is not allowed. As=20 explained above, SOUND will automatically step down if freq1 is=20 greater than freq2. The 4th argument of SOUND specifies the duration for each frequency in the range. If missing, the longest duration (255) will be used.=20 The SOUND SET command alters the effect of this argument, making it=20 possible to play a song in 2 different tempos just by changing the=20 SET value. A little experimenting will help clarify the interaction=20 between this argument and the SET value. The 5th (last) argument of SOUND specifies the number of times to=20 repeat the entire frequency range determined by the previous 4=20 arguments. For example, SOUND 100,150 will step from 100 to 150 one=20 time, while SOUND 100,150,,,5 will repeat the sequence five = times.=20 If this argument is missing, a repeat count of 1 will be used. The=20 repeat count allows several minutes of SOUND to be played from a=20 single command. If desired, you may stop SOUND by holding down the=20 <BREAK> key. 72
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 EXAMPLES: 10 SOUND SET 160 : GOSUB 20 : SOUND SET 95 : GOSUB 20 : STOP 20 SOUND 30 : SOUND 27 : SOUND 34 : SOUND 69 30 SOUND SET 255 : SOUND 45 : RETURN demonstrates a use of the SOUND SET value. (The notes shown are for the Model I. Model III users should find the matching values to use, and should also increase the 2 SET values in line 10 to 185 and 110 respectively.) The 2 SET values in line 10 are used to play the notes in line 20 in different tempos. The SET in line 30 is used to achieve the longest possible single tone. The following examples all assume a SOUND SET value of 128: SOuNo 50,100,5,80 will play every 5th frequency from 50 to 100. A duration of 80 is used. SOUND 180,58,5,80 will play the same frequencies as above in reverse order. SOUND 50,100,5,86,2 will play the entire sequence 2 times. FOR X=3D1 TO 8 : SOUND 50,100,5,X,10 : NEXT demonstrates the effect of ehanging the duration argument. 73
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 SPOOLOFF SPOOLON filespec The SPOOLON command directs printer output to the specified disk=20 file. The command is disabled and the disk file closed by the=20 SPOOLOFF command. Spooling, used in conjunction with the DESPOOL command, allows for more efficient hardcopy output. Printouts that=20 normally would require a large amount of time to output may be=20 quickly spooled. Later the created file may be despooled while other=20 computer operations are being performed. SPOOLON may be used before a PON command. This allows all output to=20 the video display to also be output to a disk file. This capability=20 is useful for keeping track of programs run, or for debugging=20 purposes. A POFF command should be issued before SPOOLOFF if PON was=20 previously used and a printer is not "ready". If this is not done,=20 and the printer is not powered up and ready, the system may "hang". Only one file at a time may be spooled to. If there is a problem=20 initializing the requested file, or SPOOLON has already been issued,=20 an ILLEGAL FUNCTION CALL will occur. If an error such as DISK SPACE FULL occurs during spooliag, an error message will be displayed and the spooled-to file will be closed. If PON was used, a POFF command=20 will be issued. NOTE: While it is not required, it is suggested that the file=20 extension, "SPL" be used for SPOOL files. EXAMPLES: 10 SPOOLON"HOLD/TXT" this creates a file "HOLD/TXT" and future output directed to the printer will be placed in the file. 100 SPOOLON"JUNK/PRT.PASSWORD:1" vill create a file "JUNK/PRT" on drive 1 with the password, "PASSWORD". Printer output will be directed to this file. 10 SPOOLON"TEST/HLD" 2C PON 30 PRINT"TESTING ... 1 2,3" 40 POFF : SPOOLOFF this program will create the file, "TEST/HLD", output the line "TESTING ... 1,2,3" to both the video display and the file, stop video-to-printer echo, and close the file. 74
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 XSTR$( string) This command allows a string to be executed as though it were a BASIC statement. Any statement or statements which can appear within a BASIC program line or in command mode may be used. The only exception to this is the XSTR$ command itself; the XSTR$ command may not be nested. That is, the command XSTR$("XSTR$(A$)") is not allowed, and will result in an OVERFLOW error if used. Similarly, the statements: 10 A$=3D"GOSUB 20" s GOTO 36 20 XSTR$("INPUT B$") ! RETURN 30 XSTR$(A$) : PRINT "I'M BACK" will cause an OVERFLOW error. Line 10 sets the string variable A$ to the executable BASIC statement "GOSUB 20", and then transfers execution to line 30. Line 30 executes the string assigned to A$, "GOSUB 20". Line 20 causes the OVERFLOW error by attempting to execute an XSTR$ command within an XSTR$ command (line 30). The syntax of the executable statement(s) used in an XSTR$ command is identical to that required by BASIC. The only exception is that strings must always be delimited by a closing quote. For = example, 10 PRINT "HELLO 20 A$=3D"YES are valid BASIC statements, but must not be used in an XSTR$ command without a closing quote. 10 XSTR$("PRINT=94+CHR$(34)+=94HELLO"+CHR$(34)) 20 XSTR$("A$=3D"+CHR$(34)+"YES") demonstrates both the correct a incorrect methods of using the above BASIC statements within an XSTR$ command. (In both cases it is necessary to use "CHR$(34)" to insert a double quote (") within the string being used.) Line 10 correctly delimits the string with a closing quote and will work properly. The command when executed will be 'PRINT"HELLO"'. Line 20 does not delimit the string, and will cause improper results. This is because the string to be executed is 'A$=3D"YES'; it does not have the required closing quote. EXAMPLES: 10 XSTR$("PRINT A") will print the value of the variable, A. 10 LINEINPUT"ENTER THE EQUATION AS =92X=3Df(Y)' (e.g X=3DY*3) ";A$ 20 INPUT "ENTER THE VALUE OF Y";Y 30 XSTR$(A$) : PRINT"THE RESULT IS X=3D";X 40 GOTO 10 will allow an equation to be entered from the keyboard and executed. Line 10 inputs the equation into the variable A$. Line 30 executes the equation and prints the result. 75
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 ZGET array-name,X1,Yl,X2,Y2 The ZGET command saves the graphics data from the specified rectangle=20 into the specified array. ZGET differs from PGET in that PGET is=20 based upon single points while ZGET worlds directly on bytes. = This=20 means that ZGET is much faster than PGET and when used in = conjunction=20 with the ZPUT command is suitable for graphic animation. The first argument of the command, array-name, must be of the string=20 constant type. It denotes the name of the referenced, = dimensioned,=20 array. The array must not be a string array (A$, for example) or a=20 TYPE MISMATCH error will occur. For clarity, an integer array is=20 recommended. The arguments Xl,Y1 and X2,Y2 are int-expressions, and give the=20 coordinates of diagonally oposite corners of the desired rectangle.=20 As ZGET works on contiguous bytes of graphics memory, the values = of=20 Xl and X2 may range from 0 to 63. In MODEs 1 and 3, this corresponds=20 to 0 - 383; in MODE 2 from 0 - 127 in point (bit) notation. This = means that in MODEs l and 3, there are 6 points per byte and in MODE=20 2 there are 2 points per byte. The values of Yl and Y2 may range=20 from 0 - 191 in all modes. This directly corresponds to Y-axis point=20 valus. The designated area is limited to a size of 63 X 191.=20 Rectangles outside this range will result in an ILLEGAL FUNCTION CALL=20 error. The following formula will be useful in calculating the minimum=20 dimension of an integer array to be used by ZGET: Minimum DIR =3D (X2 =3D X1 + 1) * (Y2 - Y1 + 1) / 2 + 2 Where Zl and X2 are in the range 0-63 NOT in the range as specified=20 by the MODE, and Yl and Y2 are in the range 0-191. NOTE: ZGET and ZPUT are very fast. Thay are the most effective=20 commands for doing real-time animation under LNWBASIC. PGET and PPUT=20 are useful for manipulating shapes and moving them on a point by=20 point basis. EXAMPLES: 10 DIM A%(29) 20 CLS : PCLS 30 MODE 1 40 LINE 0,0,17,17,SET,B 50 ZGET A%,0,0,2,17 60 PCLS 70 ZPUT A%,32,96 will draw a box in the upper left corner of the screen, erase the screen and then make the box appear "instantly" in the center of the screen. In line 10, A$ is dimensioned to 39, the formula described in the text is as follows; 0-17 is 18 points or bits, there are 6 points per graphics byte in MODEs 1 and 3 so, 18/6 =3D 3 bytes, the X 76
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 axis in ZGET starts at 0 so 0-2 gives us the X-axis value - (2 - 0=20 +1) * (17 - 0 + 1) / 2 gives us 3*18/2 or 27, 27 + 2 =3D 29. Line 20=20 and 30, clear the text screen, clear the graphics screen and set the=20 MODE to 1 (hi-res B/W). Line 40 draws a rectangle in the upper left=20 corner of the display. Line 50 ZGETs the rectangle- into the array, A$. Line 60 clears the screen and line 70 ZPUTs the rectangle in=20 approximately the center of the screen. NOTE: the calculations = used=20 for DIMming the array as well as the fact that there are only 6=20 points to a byte (i.e. points 0,0 to 17,0 in MODE 1 and 3 are in the=20 range 0,0 to 2,0 for ZGET) in hi-res graphics. In MODE 2, there are=20 2 points to the byte (i.e. points 0,0 to 5,0 are in the range 0,0 to 2,0 for ZGET). 10 DIM A%(30),B%(30) 20 CLS : PCLS 30 MODE 1 40 LINE 0,0,l7,17,SET,B 50 ZGET A%,0,0,2,17 60 ZGET B%,0,18,2,35 70 PCLS 80 FOR I=3D8 TO 63 90 ZPUT A%,I,90 160 FOR J=3Dl TO 20 : NEXT J 116 ZPUT B%,I,90 120 NEXT I 130 GOTO 70 will form a rectangle in the upper left of the screen, erase the screen, and make the box "move" from left to right centered vertically on the display. Line 10 DIMmensions 2 arrays - the A% array will hold the rectangle figure as defined in line 40 and the B$ array will hold a "blank" area of the screen to erase the rectangle before it is moved to the next position across the screen. The program is the same as the preceding example up to line 50. Line 60 ZGETs a blank area under the rectangle to the array B%. Line 79 erases the graphics screen. Lines 80-120 draw the box, delay so we can see the box, erase the box (in line 110) by ZPUTting a blank array over the rectangle, and loop so the rectangle "moves" across the screen from left to right. Line 130 loops to the beginning of the movement. 77
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 ZPUT array-name,X,Y The ZPUT command transfers graphics data stored by the ZGET command=20 from an array to graphics memory. X and Y are int-expressions which=20 denote the upper left coordinate of the area to be displayed to. The=20 array-name is of the string constant type. This specifies the=20 numeric array from which the graphics data is to be gotten. If a=20 string array (i.e. A$) is specified, an ILLEGAL FUNCTION CALL error=20 will occur. The value of X may range from 0-63 and the value of Y from 0-191.=20 There are 6 points per X coordinate in MODEs 1 and 3 and 2 points per=20 X value in MODE 2. In other words, the X value specified is NOT the=20 point boundry for an area to be displayed to, but is a byte boundry. NOTE: the use of ZPUT and ZGET are the fastest method of=20 manipulating graphics shapes under LNWBASIC. EXAMPLES: 10 DIM A%(194) : REM" (7-0+1)*(47-0+1)/2 + 2" 20 CLS : PCLS 30 MODE 1 40 CIRCLE 24,24,23 50 ZGET A%,0,0,7,47 60 PCLS 70 FOR I =3D 1 TO 50 80 ZPUT A%,RND(64)-l,RND(192)-l 96 NEXT I will clear the screen, draw a circle in the upper left corner, erase the screen and then draw 20 "copies" of the original circle at random locations. Line 10 DIMmensions the array to the minimum size necessary for the holding the imaginary rectangle that will hold the circle to be drawn in line 40 (see the ZGET command). Line 20 clears the text screen and clears the graphics screen. Line 30 sets the MODE to 1 (hi-res B/W) and line 40 draws a circle in the upper left cornet of the display. Line 50 ZGETs the rectangle from 0,0 to 7,47 (coresponding to the point coordinates 0,0 to 47,47 in MODEs 1 and 3). See the ZPUT and ZGET command explanations for byte vs. point coordinates. Line 60 clears the graphics screen and the FOR-NEXT loop in lines 70-90 draw the original circle 20 times at random locations. 10 MODE 1 : CLEAR 500 20 DEFINT A,I 25 REM" (36-26+1) * {126-66+1) / 2 + 2 =3D 337 30 DIM A0{337),A1(337),A2(337),A3(337),A4(337),A5(373),A6(373) 40 DIN A7(373),A8(373),A9(373) 50 FOR I =3D 0 TO 9 60 CLS : PCLS 70 CIRCLE 192,96,30,30*.65*I/9+1,,,30 80 N$=3DRIGHT$(STR$(I),l) 90 XSTR$("ZGET A"+N$+",26,66,36,126") 100 NEXT I 78
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 110 PCLS 120 FOR 1 =3D 0 TO 9 130 GOSUB 190 140 NEXT I 150 FOR I =3D 9 TO 0 STEP -1 160 GOSUB 190 170 NEXT I 180 GOTO 120 190 N$=3DRIGHT${STR${I),1) 200 XSTR$("ZPUT A"+N$+",26,66") 210 RETURN will make an ellipse in the center of the screen, erase the screen, make a smaller and smaller ellipse (for nine times), erase the screen and then continuously "flip" (or rotate) the original ellipse. THIS IS AN EXAMPLE OF ANIMATION USING LNWBASIC. Line 10 sets the MODE to 1 (hi-res B/W) and CLEARS enough string space for use by the XSTR$ commands in lines 90 and 200. Line 20 defines the variables A and I to be integers. A is made an integer variable in order to make the calculations for the ZPUT commands simpler. Line 25 shows the calculations necessary for use with ZGET in line 90. See the ZGET command for an explanation. Lines 30 and 40 DIMmension the arrays that will hold the different ellipse aspects. The FOR-NEXT loop from line 50 to line 100 does the following; clears the text screen, clears the graphics screen (and erases any left-over images), draws an increasingly wider ellipse in about the center of the screen, converts the FOR-NEXT variable (I) to a String variable (N$) for use in the XSTR$ function in line 90, and obtains (ZGETs) the current ellipse from the screen and places it in the appropriate integer array (AS to A9). The FOR-NEXT loop from line 120 to line 140 puts {ZPUTs) to the screen 10 images very quickly. The images are of the wider and wider ellipse until the ellipse is at its widest. Linea 150 to 170 work in a similar fashion bu make the ellipse "skinnier". Do to the speed at which the images are placed onto the graphics screen, it appears that the ellipse is "flipping" or "rotating". Line 180 causes the rotation to coninue be looping to line 120. Lines 190 to 210 are a subroutine used by the preceding FOR-NEXT loops. Line 190 converts the FOR-NEXT index (I) to be converted to a string variable (N$). Line 209 obtains the various ellipse images to be obtained from the appropriate array (A0 to A9) and places then on the graphics screen. Line 210 returns to the calling routine.
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 GLOSSARY FOR LNWBASIC ASCII American Standard Code for Information Interchange. This method of=20 coding is used for textual data baud Signalling speed in bits per second. The term is usually used in=20 conjunction with serial input and output. See RS-232-C. command file A DOS file with the extension /CMD. The file consists of Z-80 object=20 code (machine language). DCB (data/device control block) An area in RAM associated with an input/Output device. expression A meaningful sequence of one or more constants or variables possibly=20 used with operators and functions. filespec A string constant or expression which specifies a particular disk=20 file. It consists of a mandatory filename, of up to eight characters,=20 followed by an optional extension, password, and drivespec. The=20 following file extensions are recommended: /GRF--For graphics image files used by PLOAD & PSAVE. /KEY--For defined key files used by LOADKEY & SAVEKEY. /LNW--For BASIC program files written using LNWBASIC. /SPL--For spool files as used by SPOOLON. int-expression An expression that when evaluated lies within the BASIC integer range=20 (-32768 to +32767). If the expression value is not an integer, it=20 will be rounded to the closest integer. Int-expressions may contain=20 hexadecimal constants but the hex number may not have a space between=20 it and the next part of the expression. Example: &HF000+ 10 * 5. 80
MODULAR SOFTWARE ASSOCIATES LNWBASIC 4.0 #"label" A string constant of up to 251 alphanumeric characters preceded by a=20 pound sign and enclosed in double quotes (#"ALABEL"). Any characters=20 other than a double quote may appear within the label defined by the=20 begin and end quotes. line number A constant, variable, or numeric expression which specifies a BASIC=20 program line number. Usually this line number must exist within the=20 BASIC program currently in memory, or an error will result. When=20 used within a "line range", however, "line number" need not exist. line range A line or a range of lines of a BASIC program. Whenever used it must=20 be enclosed by parentheses. See NTRON. lsb,msb expression lsb (least significant byte) is the remainder of a int-expression MOD=20 256 while msb (most significant byte) is the evaluation of an=20 int-expression MOD 256. pos-expression An expression preceded by a plus sign ("+") indicating that the value=20 of the expression should be evaluated as an integer between 0 and=20 65529 inclusive. RS-232-C Refers to a specific EIA (Electronics Industries Association)=20 standard which defines a widely accepted method for interfacing data=20 communications equipment. string A string variable, expression, or constant of length <=3D 255=20 characters. 81
------=_NextPart_000_000B_01C5F9E3.1D34A910 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.1000bit.net/support/manuali/lnw/lnwbasic/lnwb_i_1.gif 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 ------=_NextPart_000_000B_01C5F9E3.1D34A910--