Zedcor ZBasic v4.02

This commit is contained in:
davidly 2024-07-24 14:14:57 -07:00
parent 5684a37d8f
commit c79505a93c
46 changed files with 1312 additions and 0 deletions

View File

@ -0,0 +1,384 @@
'------------------------------------------------------------------------
' Array declarations
'------------------------------------------------------------------------
DIM ADRS%(15), BYTES(15)
DIM 30 MENU$(5), 7 LEP$(10), 40 MENU1$(5)
DIM 40 MENU2$(12), 7 SEP1$(10), SEP2$(10)
'------------------------------------------------------------------------
' Function declarations
'------------------------------------------------------------------------
LONG FN MENUKY$(ht,inc,top,P$)
COLOR ,&70 : PRINT @(ht,Line*inc+top-2) P$ ' Inverse text
DO
A$ = INKEY$
UNTIL LEN(A$) ' Wait for a keypress
A$ = RIGHT$(A$,1)
COLOR ,7 : PRINT @(ht,Line*inc+top-2) P$ ' Restore normal text
END FN = A$
LONG FN MAINMENU ' Used to put main menu on screen
CLS : LOCATE ,,0
FOR I = 1 TO 4
PRINT @(27,I*2+3) MENU$(I)
NEXT I
END FN
LONG FN Increment(X) ' Increment color attribute byte
X = (X AND &0F) + 1 : IF X > 15 THEN X = 0
X = X OR (BYTES(2) << 4) ' Combine with border color background
END FN = X
'------------------------------------------------------------------------
' Main program initialization
'------------------------------------------------------------------------
MODE 2 : CLS
PRINT "PLEASE ENTER COMPLETE PATHNAME TO FILE TO BE PATCHED:"
INPUT "-> "; FILE$
A$ = MID$(FILE$,2,1) ' Check for drive specifier
LONG IF A$ = ":"
DR$ = LEFT$(FILE$,2) ' Get drive specifier from string
FILE$ = RIGHT$(FILE$, LEN(FILE$)-2)
XELSE
A$ = PATH$(0) : DR$ = LEFT$(A$,2) ' Else use default
END IF
FOR I = LEN(FILE$) TO 1 STEP -1 ' Parse filename from full pathname
A$ = MID$(FILE$,I,1)
IF A$ = "\" THEN PSN = I : I = 1
NEXT I
LONG IF PSN <> 0
PTH$ = LEFT$(FILE$,PSN-1)
XELSE
PTH$ = PATH$(0)
END IF
OLDPTH$ = PATH$(0) : CHDIR PTH$ ' Save current path and set new
FILE$ = DR$ + FILE$ ' Build file specifier
OPEN "R", 1, FILE$, 1 ' Open the file
NUM_OF_BYTES = 0
DO
READ ADRS%(NUM_OF_BYTES) ' Get the addresses of the current values
NUM_OF_BYTES = NUM_OF_BYTES + 1
UNTIL ADRS%(NUM_OF_BYTES-1) = 0
DATA &6860 'COLOR1
DATA &6865 'COLOR2
DATA &6E6F 'COLOR3
DATA &6E85 'COLOR4
DATA &6EA7 'COLOR5
DATA &6ECD 'COLOR6
DATA &6EEF 'COLOR7
DATA &6EF0 'COLOR8
DATA &88DB 'COLOR9
DATA &88E4 'COLOR10
DATA &88EE 'COLOR11
DATA &8A49 'COLOR12
DATA &8A69 'COLOR13
DATA &89F6 'COLOR14
DATA 0
' Fill menu arrays
NUM_OF_BYTES = NUM_OF_BYTES - 2
FOR I = 1 TO 4
READ MENU$(I)
NEXT I
DATA " Line Editor Prompt Line "
DATA " Screen Editor Colors "
DATA " Abandon Changes and Exit "
DATA " Save Changes and Exit "
FOR I = 1 TO 10
READ LEP$(I)
NEXT I
DATA "LIST* ","RUN ","LOAD ","SAVE ","FIND "
DATA "EDIT ","CONFIG","COMPILE","KEY ","EDITOR"
FOR I = 1 TO 5
READ MENU1$(I)
NEXT I
DATA " Increment Text Color "
DATA " Increment Background Color "
DATA " Increment Numeric Color "
DATA " Increment Numeric Background Color "
DATA " Return to Main Menu "
FOR I = 1 TO 10
READ SEP1$(I)
READ SEP2$(I)
NEXT I
DATA "LOAD ","SAVE ","CUT ","PASTE "
DATA "COPY ","REPLACE","INSERT ","DELETE "
DATA "FIND ","FIND N ","TABS ","AUTOTAB"
DATA "RESTORE","LLIST ","SCROLL","SCROLL"
DATA "FREEZE","FREEZE","EXIT ","NEW "
FOR I = 1 TO 12
READ MENU2$(I)
NEXT I
DATA " Increment Border Color "
DATA " Increment Current Line Color "
DATA " Increment Non-Current Line Color "
DATA " Increment Warning Message Color "
DATA " Increment Load/Save Prompt Color "
DATA " Increment Load/Save Response Color "
DATA " Increment Function Key Text Color "
DATA " Increment ALT-Function Key Text Color "
DATA " Increment Function Key Numeral Color "
DATA " Increment FILE: Color "
DATA " Increment Memory Remaining Value Color "
DATA " Return to Main Menu "
FOR I = 0 TO NUM_OF_BYTES
RECORD #1, ADRS%(I)-&100 ' Get current values from file
READ #1, A$;1
BYTES(I) = ASC(A$)
NEXT I
CLOSE #1
'------------------------------------------------------------------------
' Main menu
'------------------------------------------------------------------------
Line = 1
FN MAINMENU ' Put up the first menu screen
QUIT = 0
DO
A$ = FN MENUKY$(27,2,5,MENU$(Line)) ' Get a keypress
SELECT ASC(A$)
CASE 72, 75 ' Up arrow or left arrow
Line = Line - 1 : IF Line < 1 THEN Line = 4
CASE 80, 77 ' Down arrow or right arrow
Line = Line + 1 : IF Line > 4 THEN Line = 1
CASE 13, 32 ' Return or Space
LineSave = Line
ON Line GOSUB "LINE","SCREEN","ABANDON","DONE"
IF QUIT THEN "SKIP"
Line = LineSave
FN MAINMENU ' Refresh the main menu screen
"SKIP"
END SELECT
UNTIL QUIT
COLOR ,7 : CLS
CHDIR OLDPTH$ ' Restore previous path
END
'------------------------------------------------------------------------
' Line editor function key prompt colors
'------------------------------------------------------------------------
"LINE"
COLOR ,7 : CLS : GOSUB "PUT FNKEYS" ' Simulate function key prompts
COLOR ,7
FOR I = 1 TO 5 : ' Put menu on screen
PRINT @(22,I*2+3) MENU1$(I)
NEXT I
Line = 1
QUIT = 0
DO
A$ = FN MENUKY$(22,2,5,MENU1$(Line)) ' Get a keypress
SELECT ASC(A$)
CASE 72, 75 ' Up arrow or left arrow
Line = Line - 1 : IF Line < 1 THEN Line = 5
CASE 80, 77 ' Down arrow or right arrow
Line = Line + 1 : IF Line > 5 THEN Line = 1
CASE 13, 32 ' Return or Space
ON Line GOSUB "LINE1","LINE2","LINE3","LINE4","LINE EXIT"
END SELECT
UNTIL QUIT
QUIT = 0 : RETURN
"LINE1" ' Increment function key text color
Y = BYTES(0) AND &0F
Y = Y + 1 : IF Y > 15 THEN Y = 0
BYTES(0) = (BYTES(0) AND &F0) OR Y
GOSUB "PUT FNKEYS"
RETURN
"LINE2" ' Increment function key background color
Y = (BYTES(0) AND &F0) >> 4
Y = Y + 1 : IF Y > 15 THEN Y = 0
BYTES(0) = (BYTES(0) AND &0F) OR (Y << 4)
GOSUB "PUT FNKEYS"
RETURN
"LINE3" ' Increment function key number color
Y = BYTES(1) AND &0F
Y = Y + 1 : IF Y > 15 THEN Y = 0
BYTES(1) = (BYTES(1) AND &F0) OR Y
GOSUB "PUT FNKEYS"
RETURN
"LINE4" ' Increment function key number background color
Y = BYTES(1) AND &F0
Y = Y + 16 : IF Y > 256 THEN Y = 0
BYTES(1) = (BYTES(1) AND &0F) OR Y
GOSUB "PUT FNKEYS"
RETURN
"LINE EXIT" ' Back to the main menu
QUIT = 1 : RETURN
"PUT FNKEYS" ' Simulate line editor function key prompt
LOCATE 0,24,0
FOR I = 1 TO 10
A$ = RIGHT$(STR$(I),1)
COLOR ,BYTES(1)
PRINT A$;
COLOR ,BYTES(0)
PRINT LEP$(I);
NEXT I
RETURN
'------------------------------------------------------------------------
' Full screen editor screen colors
'------------------------------------------------------------------------
"SCREEN"
COLOR ,7 : CLS
GOSUB "PAINT SCREEN" ' Simulate screen editor screen
COLOR ,7
FOR I = 1 TO 12 : ' Print the menu
PRINT @(20,I+2) MENU2$(I)
NEXT I
Line = 1 : QUIT = 0
DO
A$ = FN MENUKY$(20,1,4,MENU2$(Line))
SELECT ASC(A$)
CASE 72, 75 ' Up arrow or left arrow
Line = Line - 1 : IF Line < 1 THEN Line = 12
CASE 80, 77 ' Down arrow or right arrow
Line = Line + 1 : IF Line > 12 THEN Line = 1
CASE 13, 32 ' Return or Space
ON Line GOSUB "S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12"
END SELECT
UNTIL QUIT
QUIT = 0 : RETURN
"S1" ' Increment border color
BYTES(2) = BYTES(2) + 1
IF BYTES(2) > 7 THEN BYTES(2) = 0
GOSUB "PAINT SCREEN"
RETURN
"S2" ' Increment current line color
BYTES(3) = BYTES(3) + 1
IF BYTES(3) > 15 THEN BYTES(3) = 0
COLOR ,BYTES(3) : PRINT @(0,19) "10 REM This is the current cursor line"
COLOR ,7 : RETURN
"S3" ' Increment non-current line color
BYTES(4) = BYTES(4) + 1
IF BYTES(4) > 15 THEN BYTES(4) = 0
COLOR ,BYTES(4) : PRINT @(0,20) "20 REM This is not the current line"
COLOR ,7 : RETURN
"S4" ' Increment warning message color
BYTES(5) = FN Increment(BYTES(5))
COLOR ,BYTES(5) : PRINT @(60,21) "Warning message"
COLOR ,7 : RETURN
"S5" ' Increment Load/Save prompt color
BYTES(6) = FN Increment(BYTES(6))
COLOR ,BYTES(6) : PRINT @(0,21) "Enter filename to load [.BAS]:";
COLOR ,7 : RETURN
"S6" ' Increment Load/Save response color
BYTES(7) = FN Increment(BYTES(7))
COLOR ,BYTES(7) : PRINT @(31,21) "CONFIG.BAS";
PRINT @(6,22) "CONFIG.BAS";
COLOR ,7 : RETURN
"S7" ' Increment function key text color
BYTES(8) = FN Increment(BYTES(8))
GOSUB "PUT KEYS"
COLOR ,7 : RETURN
"S8" ' Increment ALT-function key text color
BYTES(9) = FN Increment(BYTES(9))
GOSUB "PUT ALTKEYS"
COLOR ,7 : RETURN
"S9" ' Increment function key number color
BYTES(10) = FN Increment(BYTES(10))
GOSUB "PUT KEYS" : GOSUB "PUT ALTKEYS"
COLOR ,7 : RETURN
"S10" ' Increment "FILE:" message color
BYTES(11) = FN Increment(BYTES(11))
COLOR ,BYTES(11) : PRINT @(0,22) "FILE:";
PRINT @(66,22) "MEMORY:";
COLOR ,7 : RETURN
"S11" ' Increment memory remaining color
BYTES(12) = FN Increment(BYTES(12))
COLOR ,BYTES(12) : PRINT @(74,22) "65535";
COLOR ,7 : RETURN
"S12" ' Back to the main menu
QUIT = 1 : RETURN
"PAINT SCREEN"
COLOR ,,BYTES(2) : BACKGROUND = BYTES(2)
FOR I = 5 TO 12
BYTES(I) = (BYTES(I) AND &0F) OR (BACKGROUND << 4)
NEXT I
GOSUB "PUT ALTKEYS"
GOSUB "PUT KEYS"
LOCATE 0,22,0
COLOR ,BYTES(11)
PRINT SPACE$(80);
PRINT @(0,22) "FILE: ";
PRINT @(66,22) "MEMORY: ";
COLOR ,BYTES(7) : PRINT @(6,22) "CONFIG.BAS";
COLOR ,BYTES(12) : PRINT @(74,22) "65535";
COLOR ,BYTES(6) : PRINT @(0,21) SPACE$(80);
PRINT @(0,21) "Enter filename to load [.BAS]: ";
COLOR ,BYTES(7) : PRINT "CONFIG.BAS";
COLOR ,BYTES(5) : PRINT @(60,21) "Warning message";
COLOR ,BYTES(3) : PRINT @(0,19) "10 REM This is the current cursor line"
COLOR ,BYTES(4) : PRINT @(0,20) "20 REM This is not the current line"
RETURN
"PUT KEYS"
COLOR ,BYTES(8) : PRINT @(0,23) SPACE$(80);
LOCATE 0,23,0
FOR I = 1 TO 10
COLOR ,BYTES(10)
A$ = RIGHT$(STR$(I),1)
PRINT A$;
COLOR ,BYTES(8)
PRINT SEP1$(I);
NEXT I
RETURN
"PUT ALTKEYS"
LOCATE 0,24,0
FOR I = 1 TO 10
COLOR ,BYTES(10)
A$ = RIGHT$(STR$(I),1)
PRINT A$;
COLOR ,BYTES(9)
PRINT SEP2$(I);
NEXT I
RETURN
'------------------------------------------------------------------------
' Abandon changes and quit program
'------------------------------------------------------------------------
"ABANDON"
QUIT = 1 : RETURN
'------------------------------------------------------------------------
' Save changes and quit program
'------------------------------------------------------------------------
"DONE"
OPEN "R", 1, FILE$, 1 ' Open the file with 1-byte long records
FOR I = 0 TO NUM_OF_BYTES
RECORD #1, ADRS%(I) - &100
A$ = CHR$(BYTES(I))
WRITE #1, A$;1
NEXT I
CLOSE #1
QUIT = 1 : RETURN
'------------------------------------------------------------------------
' End of program
'------------------------------------------------------------------------



29
Zedcor ZBasic v402/E.BAS Normal file
View File

@ -0,0 +1,29 @@
100 DIGITS% = 200
110 DIM A%( 200 )
120 HIGH% = DIGITS%
130 X% = 0
140 N% = HIGH% - 1
150 IF N% <= 0 GOTO 200
160 A%( N% ) = 1
170 N% = N% - 1
180 GOTO 150
200 A%( 1 ) = 2
210 A%( 0 ) = 0
220 IF HIGH% <= 9 GOTO 400
230 HIGH% = HIGH% - 1
235 N% = HIGH%
240 IF N% = 0 GOTO 300
250 A%( N% ) = X% MOD N%
260 X% = ( 10 * A%( N% - 1 ) ) + ( X% / N% )
270 N% = N% - 1
280 GOTO 240
300 IF X% >= 10 GOTO 330
310 PRINT USING "#"; X%;
320 GOTO 220
330 PRINT USING "##"; X%;
340 GOTO 220
400 PRINT ""
410 PRINT "done"
420 SYSTEM

BIN
Zedcor ZBasic v402/HERC.COM Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,26 @@
Patch Locations for ZBasic v4.02
Initial
Name Address Value Description
LISTFLG &H5345 &H00 Set to 2Ah to highlight tokens during
list
INSRTFLG &H6F40 &H82 Set to 02h to default screen editor
to insert mode
COLOR1 &H6860 &H79 Line editor function key text
COLOR2 &H6865 &H07 Line editor function key number
COLOR3 &H6E6F &H01 Full Screen Editor (FSE) border
COLOR4 &H6E85 &H0F FSE current line
COLOR5 &H6EA7 &H03 FSE non-current line
COLOR6 &H6ECD &H1C FSE warning messages
COLOR7 &H6EEF &H1F FSE load/save filename prompt
COLOR8 &H6EF0 &H17 FSE load/save filename response
COLOR9 &H88DB &H1B FSE function key text
COLOR10 &H88E4 &H1A FSE ALT-function key text
COLOR11 &H88EE &H16 FSE function key number
COLOR12 &H8A49 &H1E FSE "File:" message
COLOR13 &H8A69 &H12 FSE memory remaining message
COLOR14 &H89F6 &H00 FSE exit border color


308
Zedcor ZBasic v402/READ.ME Normal file
View File

@ -0,0 +1,308 @@
ZBasic Version 4.02 - December 7, 1987
This file contains items of interest that didn't make it into the manual.
Anything not specified in the manual, or changed since the manual has been
printed, can be found in this file.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
The HERC.COM (and it's batch file loader, ZHERC.BAT) are only required if you
wish to intermix text and graphics on the Hercules graphics screen. If you
are only producing graphics, these files are not required. Just remember
that the HERC.COM driver is a software emulation of text on the graphics
screen. It works by actually drawing the characters on the screen from a
predefined software font. Therefore, there is a great speed difference
between text in MODE 2 and MODE 20.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
There are a couple of additional sample programs included on the disk which
are not mentioned in the program. One of them deserves mention here. The
ZCALC.BAS file contains the ZBasic source code to produce a spreadsheet with
a very familiar command structure. Try it out! If you don't like it, modify
it until you do!
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
The method used to store null (blank) lines in the tokenized source program
has been changed, since the full screen editor would go totally FUNGUS
(Fouled-Up, No Good, and generally UnSatisfactory) with the old way. Version
4.00 stored null lines as a single null byte within the tokenized program.
Version 4.02 and later stores null lines in the same format as the other
tokenized lines. The full screen editor is much happier now. This does
cause a problem with the programs that you've saved using version 4.0,
though. If the program was saved in tokenized format (using the SAVE
command), and it contained null lines, then that program will have to be
converted to the new tokenized format. There are two methods for doing
this. First method: Use version 4.00 to save the program in ASCII format
(using SAVE*), and then reload it into version 4.02. Second method: Use the
supplied conversion program which will translate any null lines into the new
format. The name of this program is "nullfix.bas", and can be found on this
distribution diskette. Run this program as you would any other ZBasic
program. Any old tokenized programs that do not contain null lines will not
cause any problems, and can be loaded normally.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Many people requested a way to change the colors of the screen in the line
and screen editors. There is an additional file on the diskette titled
"PATCHTBL.TXT" which lists the addresses within ZBasic which can be changed
to customize the screen colors. Simply use the Patch option on the ZBasic
startup screen to change the various attribute bytes. If you wish to save
the changes that you've made, select Save from the same menu.
In addition, the program "CONFIG.BAS" will allow you interactively alter the
colors used in the line and screen editor. Simply load the program into
ZBasic, and then RUN it. It will first ask you to specify the pathname of
the ZBASIC.COM file that you wish to alter. Next, you will be presented with
the main menu. Use the keypad arrow keys to move the cursor to the menu item
that you want, then press either the RETURN key or the space bar. This same
method is used to change the various colors within the submenus. When done,
select the SAVE option to save the changes in your ZBasic file on disk, or
select ABANDON to discard the changes.
This program is supplied in source code format so that you can modify it to
your own liking. Feel free to use the programming techniques in your own
programs.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
To maintain compatibility with our other machine versions, the LIST command
has reverted back to a normal screen display (no more highlighted tokens).
LIST* still will highlight the tokens for you though. F1 in the line editor
has been pre-defined as LIST* so that you can use it if you prefer the
highlighted tokens. If that`s still not good enough, you can patch the
location LISTFLG to 2ah to default to token highlighting. See the file
"PATCHTBL.TXT" for the current address of LISTFLG.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
A couple of additions have been added to the KEY command in the line editor.
Typing KEY without any parameters will toggle the current display state of
the function key prompt at the bottom of the screen. (turning it off if it
was on, and visa-versa).
The second new addition has the following syntax:
KEY x {,|=} ["]command["]
This will allow you to customize the actions of the function keys in the line
editor. For example, if you seldom use the CONFIG command, but frequently
use the RENUM command, you can use the following statement to change the
definition of the F7 key:
KEY 7 = RENUM
The  symbol represents a carriage return at the end of the command. It is
entered into the command string by pressing the ESC key. The editor will
translate it appropriately. The "command" can be optionally surrounded by
quotes, and must be a valid line editor command. It can be no longer than 15
characters. You can not use a string variable (as with some other BASIC's),
since this is not a program statement. This is ONLY a line editor command.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
If you happen to get to the LOAD prompt by mistake (for example, if you press
F1 in the screen editor instead of Alt-F1), you can press CTRL-C to exit the
prompt and then try again. Same goes for the SAVE prompt.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Many people have asked for a way to change the color of the text produced on
the EGA graphics screens. The COLOR statement can't be used, since it
affects the graphics colors while in graphics modes, and the MODE statement
resets the default character attribute to 7 whenever you change into a
graphics mode. The solution is to sidestep the system by POKEing into the
ZBasic data area. The character color attribute is stored at 033Bh in the
data segment. To change the attribute so that any characters will be printed
in blue (attribute = 1), use the following statement:
POKE &33B, 1
Any attribute value from 0 to 255 can be used, and follows the attribute
rules as outlined on page A-37, table 2, of the ZBasic reference manual.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
As stated in the manual, the CALL statement (pg. A-31), and the DEF USR
statement (pg. A-47) allow a segment specifier in addition to the address.
This way, the machine language routine can be anywhere in memory. The
segment specifier is optional, and I just wanted to clarify what happens with
and without the segment value.
If you use the statement
CALL LINE 100
or
DEF USR 0 = LINE 100
the compiler will generate the necessary code to perform a NEAR call (which
means that it must be within the current code segment). Therefore, your
subroutine must end with a NEAR RET (MACHLG &C3). If, on the other hand, one
of the following statements is used
CALL LINE 100, MEMC
or
DEF USR 0 = LINE 100, MEMC
then the compiler will generate a FAR call, and the subroutine MUST terminate
with a FAR RET (MACHLG &CB). These two examples would effectively accomplish
the same thing, except that the second examples would take a little longer to
execute.
One way to keep this all straight is this: if you are CALLing a MACHLG line
that is located somewhere within your ZBasic program, don't specify the
segment. The compiler will automatically assume that it is in the code
segment. If, on the other hand, you DIMension a dummy array, and then BLOAD
a machine language subroutine into that area of memory, then use the segment
specifier whenever you access that subroutine (and make sure that it
terminates with a FAR RET).
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
The EOF function behaves differently, depending on how you are accessing the
file. If you are using INPUT# or LINE INPUT#, then the EOF function will
return true (-1) if an end-of-file mark (1Ah) is encountered in the file. If
you are using the READ# statement to retrive data from the file, then the
function will not return true until the physical end-of-file is reached (i.e.
when MS-DOS returns an EOF error). Keep in mind that MS-DOS does not know
what your program's record length is. Therefore, it's physical end-of-file
error will occur when it has reached the end of the last allocated sector of
your file (which will probably be past the actual end of your file).
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
If you prefer to have the full screen editor default to insert mode (as
opposed to overwrite mode, as shipped), simply patch the INSRTFLG location
from 82H to 02H. Instructions for using the patch command can be found on
page B-15 of your ZBasic manual. The current address of INSRTFLG can be
found in the PATCHTBL.TXT file included on your master disk.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
We have discovered that ZBasic will run just fine within a Microsoft (R)
Windows window, as long as you follow a few simple rules. First, make sure
that your ZBasic is configured to be NOT IBM text compatible. This way,
Windows can intercept any text output and convert it to the necessary
graphical representation of the characters. Also, make sure that you don't
try to do any graphics while Windows is active. It won't hurt anything, but
it won't accomplish anything either (the graphics are invisible).
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
The TIMER function now returns the number of seconds since midnight down to
the nearest hundredth of a second. This matches BASICA's function.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
There have been numerous reports of little inconsistencies in the fourth
edition manual, so get your pen ready and follow along while I make
corrections.
Pg 77-
Line 9 of the "QUICK SORT" subroutine has a typographical error. The
variable 'R1' in the second statement should be 'RI'.
Pg 108, 111, 112, 117, 118-
The variable NAME$ contains an MS-DOS version reserved word. Change the
variable to NM$.
Pg 168-
The list of reserved words on the page pertain to the standard version
of the language. Due to the many enhancements made to the MS-DOS version,
the following are also reserved words for this version only. Page number
following the reserved word shows which page the word is referenced on.
' - 316 ARR - A58 AS - 278 BCD - A58 BEEP - 178
BLOAD - A29 BSAVE - A30 CARDTYPE - A33 CASE - 183 CHDIR - A34
CINT - A35 COM - A40,A66 COMBUFF - A38 COMMAND$ - A41 COMMON - 192
COORDINATE - 195 CSRLIN - 197 EOF - 220 FCB -
FILES - A50 FRE - A52 GET - 232 IS - KEY -
MKDIR - A60 NAME - 278 OFF - A40 PAINT - A72 PALETTE - A73
PATH$ - A74 PRESET - 306 PSET - 306 PUT - 306 RANDOMIZE - 309
RESET - 319 RMDIR - A79 SCREEN - A80,A81 SEG - A58
SELECT - 328 SHELL - A82 STR - A58 SYSTEM - 339 TFORMAT - A83
TIMER - A85 VARSEG - A91 VIEW - A92 WAIT - A93 WINDOW - 195
Pg 172-
The example run erroneously shows comma's between the printed numbers.
Those commas would not be printed by the example program.
Pg 201-
DATE$ function: In the remarks section, mention is made that the MSDOS
version can set the date from within a program. The example given is
incorrect (the slashes aren`t allowed in the string). See page A-42 for the
correct syntax.
Pg 232-
The formula for calculating the memory requirements for the GET
statement has an extra ")" character at the end.
Pg 255, 256-
The LINE INPUT statement is actually two words. The manual incorrectly
shows the command as one word, and the system will not parse the words as
keywords if SPACES BETWEEN KEYWORDS is selected in the configuration.
Pg 263-
The second word in the second line of DEFINITION should be "useful".
Pg 327-
The description for SAVE+ says to be sure that your program doesn't use
label references. This is exactly opposite from what it should say. Since
this command does not save the line numbers with the text of the program, the
program SHOULD use label references so that it will still run correctly when
reloaded.
Pg A-20-
The entry and exit parameters for address &118 are incorrect. On entry,
ES:SI should point to the destination string. On exit, ES:SI will point to
the standard ZBasic string.
Pg A-38-
The printed syntax shows that the command is made up of two words. This
is incorrect. It should read:
COMBUFF (port)
Pg A-61-
In the description for MODE 20, the address and size of the Hercules
graphics buffer is incorrect. Page 0 starts at &HB000 and is 32K bytes long.
Page 1 starts at &HB800 and is also 32K bytes long. Also, reference is made
to a HERC.BIN file on the diskette. This should read HERC.COM.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
The MOUSE(1) and MOUSE(2) functions normally return values using the
standard ZBasic coordinates of 1024 x 768. If your program uses a
COORDINATE statement to alter the screen coordinate system, the mouse
functions will return values to match your new coordinate system.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
For the mouse to operate properly on the Hercules Graphics Screen, your
program must perform it's MODE 20 statement prior to initializing the mouse
with the MOUSE(0) function.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
We have included a ZBasic cross-reference program on this master disk. It
can be found in the XREF subdirectory. Documentation is included in the same
subdirectory.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
We want to make this the best BASIC available on MS-DOS computers. We can't
do that without your feedback, though. If you have any comments,
suggestions, complaints, etc, please write us a letter and let us know your
thoughts. Try to be as specific as possible when suggesting something, or
complaining about something. We can't implement a suggestion, or fix a
complaint, unless we know exactly what you're talking about.
And lastly, thank you for purchasing ZBasic. We sincerely hope that we can
have a long and fruitful relationship!
Zedcor, Inc.
4500 E. Speedway, Suite 22
Tucson, AZ 85712


Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,21 @@
'Long Function to determine amount of free space on a drive
'Parameter to function is the drive specifier.
'0 = default drive, 1 = A:, 2 = B:, etc.
'Returns # of bytes free as a double-precision #
'Returns -1 if drive specifier is invalid
:
LONG FN GetSpace#(DRIVE)
MACHLG &B4, &36 : ' MOV AH,36H
MACHLG &8A, &16, DRIVE : ' MOV DL,[DRIVE]
MACHLG &CD, &21 : ' INT 21H
MACHLG &3D, &FFFF : ' CMP AX,FFFFH
MACHLG &75, &06 : ' JNE +6
MACHLG &BB, &01, &00 : ' MOV BX,1
MACHLG &B9, &01, &00 : ' MOV CX,1
MACHLG &A3, AX : ' MOV [AX],AX
MACHLG &89, &1E, BX : ' MOV [BX],BX
MACHLG &89, &0E, CX : ' MOV [CX],CX
Free# = AX * BX * CX * 1.0
END FN = Free#
:


Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,47 @@
'PRNTEST.APP
' by Chan Shippy
' Rt. 1 Box 87
' Colome, SD 57528
' For IBM/MS-DOS ZBasic ONLY!
'
' Modified to include check for printer selected
' Greg Branche, 10/21/87
'
CLS : MODE 3
GOSUB "Test Prn"
IF V$ = CHR$(27) THEN END 'Abort printing
LPRINT "Yep, the printer's ready!"
END
LONG FN Testprn(PRNum)
' PRNum should usually be 0
tst% = 0
MACHLG &8B,&16,PRNum
MACHLG &B4,&02,&CD,&17,&F6,&C4,&6F
MACHLG &75,&04,&FF,&06,tst%
' 1 = Printer Ready, 0 = Not Ready
END FN = tst%
"Test Prn"
LONG IF FN Testprn(0)
RETURN 'printer is ready!
XELSE
SOUND 800,50 : SOUND 600,50 : SOUND 800,50
LOCATE 0,24 : CLS LINE
LOCATE 10,24 : COLOR 15,0
PRINT "Printer NOT READY! ";
PRINT "<R> Retry, <ESC> Abort Printing";
COLOR 7,0
"Try Again"
DO
V$ = INKEY$
UNTIL LEN(V$)
V$ = UCASE$(V$)
LONG IF V$ = "R"
GOTO "Test Prn"
XELSE
IF V$ = CHR$(27) THEN RETURN
END IF
SOUND 800,130 : GOTO "Try Again"
END IF


Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,42 @@
"QUICK SORT"
L(1)=1:R(1)=NI:P2=1
DO
LONG IF L(P2)<R(P2)
Z=L(P2):J=R(P2)
SA=SA(J):M4=(Z+J)>>1
LONG IF J-Z>=6
SZ=SA(Z):SM=SA(M4)
LONG IF SA<= SZ OR SA>=SM OR SA>=SZ OR SA<= SM
LONG IF SZ>=SM OR SZ<= SA OR SZ<=SM OR SZ>=SA
SWAP SA(M4),SA(J)
XELSE
SWAP SA(Z),SA(J)
END IF
SA = SA(J)
END IF
END IF
WHILE Z<J
WHILE SA(Z) < SA
Z=Z+1
WEND
DO
J=J-1
UNTIL Z>= J OR SA>= SA(J)
LONG IF Z<J
SWAP SA(Z),SA(J)
END IF
WEND
J=R(P2):SWAP SA(Z),SA(J)
LONG IF Z-L(P2)<R(P2)-Z
L(P2+1)=L(P2): R(P2+ÿ1ÿ)=Z-1:L(P2)=Z+1
XELSE
L(P2+1)=Z+1:R(P2+1)=R(P2):R(P2)=Z-1
END IF
P2=P2+1
XELSE
P2=P2-1
END IF
UNTIL P2<=0
RETURN : REM SORT FINISHED HERE
END


View File

@ -0,0 +1,56 @@
REM *****************************************************
REM **** ZBasic 3.0 Scientific Functions 09/25/85 ****
REM **** Accuracy up to 50 digits, DBL & SCI set=54 ****
REM *****************************************************
REM ************ Constants used by Functions ************
Log10v# = LOG(10.) : e# = EXP(1.)
Pid4# = ATN(1.) : Pid2# = Pid4# << 1 : Pi# = Pid2# << 1
REM ********** Sub-function used by functions ***********
DEF FN Sqrxx#(x#) = SQR(x#*x#-1.)
REM ******************* Other TRIG Functions ************
DEF FN Sec#(x#) = 1. \ COS(x#)
DEF FN Csc#(x#) = 1. \ SIN(x#)
DEF FN Cot#(x#) = 1. \ TAN(x#)
REM ************** Inverse TRIG Functions ***************
DEF FN ArcSin#(x#) = ATN( x# \ SQR( 1. - x# * x# ) )
DEF FN ArcCos#(x#) = Pid2# - FN ArcSin#(x#)
DEF FN ArcCsc#(x#) = ATN(1\FN Sqrxx#(x#))+(x#<0) * Pi#
DEF FN ArcSec#(x#) = ATN(FN Sqrxx#(x#))+(SGN(x#)-1.)*Pid2
DEF FN ArcCot#(x#) = Pid2# - ATN(x#)
REM ************* Hyperbolic TRIG Functions *************
DEF FN SinH#(x#) = (EXP(x#)-EXP(-x#)) >> 1.
DEF FN CosH#(x#) = (EXP(x#)+EXP(-x#)) >> 1.
DEF FN TanH#(x#) = 1.-2.*EXP(-x#)/(EXP(x#)+EXP(-x#))
DEF FN SecH#(x#) = 2./(EXP(x#)+EXP(-x#))
DEF FN CscH#(x#) = 2./(EXP(x#)-EXP(-x#))
DEF FN CtnH#(x#) = (EXP(x#)+EXP(-x#))\(EXP(x#)-EXP(-x#))
REM ********* Inverse Hyperbolic TRIG Functions *********
DEF FN AsinH#(x#)= LOG(x#+SQR(x#*x#+1.))
DEF FN AcosH#(x#)= LOG(x#+SQR(x#*x#-1.))
DEF FN AtanH#(x#)= LOG((1.+x#)\(1.-x#)) >> 1.
DEF FN AsecH#(x#)= LOG((SQR(1.-x#*x#)+1.)\x#)
DEF FN AcscH#(x#)= LOG((SGN(x#)*SQR(x#*x#+1.)+1.)\x#)
DEF FN AcotH#(x#)= LOG((x#+1.)\(x#-1.)) >> 1.
REM **** Angle Conversions for RADIANS,DEGREES,BRADs ****
DEF FN DegRad#(x#) =x#*Pid4#\90.
DEF FN RadDeg#(x#) =x#*90\Pid4#
DEF FN DegBrad#(x#)=x#*Pid4#\64.
DEF FN BradDeg#(x#)=x#*64.\Pid4#
DEF FN BradRad#(x#)=x#*1.40625 : REM * 1.40625 = 90/64 *
DEF FN RadBrad#(x#)=x#*64.\90.
REM ***************** LOG base 10 ***********************
DEF FN Log10#(x#)= LOG(x#)/Log10v#
REM ************Test Routine For Accuracy ***************
DEFDBL A-Z
FOR I=.01 TO .76 STEP .25
TRON X : PRINT"Should be:";I#
PRINT FN ArcSin#(SIN(FN ArcCos#(COS(ATN(TAN(I#))))))
PRINT FN ArcCot#(FN Cot#(FN AcotH#(FN CtnH#(I#))))
PRINT FN AsecH#(FN SecH#(FN AcscH#(FN CscH#(I#))))
PRINT FN AtanH#(FN TanH#(FN ArcCot#(FN Cot#(I#))))
PRINT FN AcosH#(FN CosH#(FN ArcSec#(FN Sec#(I#))))
PRINT FN AsinH#(FN SinH#(FN ArcCsc#(FN Csc#(I#))))
PRINT FN DegRad(FN RadDeg(FN DegBrad(FN BradDeg(I#))))
PRINT FN RadBrad(FN BradRad(10^FN Log10(I#)))
NEXT


View File

@ -0,0 +1,26 @@
' These two functions can be used to scroll a window either up or down.
' X1,Y1 are the coordinates of the upper left corner of the window.
' X2,Y2 are the coordinates of the lower right corner of the window.
' ATTRIB is the color attribute for the new blank line
' Experiment with them a little to get a feel for them.
:
LONG FN Scrollup(X1,Y1,X2,Y2,ATTRIB)
MACHLG &B8,1,6
MACHLG &8A,&3E,ATTRIB
MACHLG &8A,&2E,Y1
MACHLG &8A,&0E,X1
MACHLG &8A,&36,Y2
MACHLG &8A,&16,X2
MACHLG &CD,&10
END FN
:
LONG FN Scrolldown(X1,Y1,X2,Y2,ATTRIB)
MACHLG &B8,1,7
MACHLG &8A,&3E,ATTRIB
MACHLG &8A,&2E,Y1
MACHLG &8A,&0E,X1
MACHLG &8A,&36,Y2
MACHLG &8A,&16,X2
MACHLG &CD,&10
END FN


View File

@ -0,0 +1,15 @@
"SHELL SORT" Y=NI
"Z1" Y = Y/2
IF Y = 0 THEN RETURN: REM SORT COMPLETE
Z99=NI-Y
FOR K9 = 1 TO Z99
I = K9
"X2" E2 = I+Y
REM: IN LINE BELOW CHANGE <= TO >= FOR DESCENDING ORDER
IF SA(I) <= SA(E2) THEN "X3" ELSE SWAP SA(I),SA(E2)
I=I-Y
IF I>0 THEN "X2"
"X3" NEXT K9
GOTO "Z1"
END


Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,20 @@
1 SIZE% = 8190
2 DIM FLAGS%(8191)
3 PRINT "10 iterations"
4 FOR X% = 1 TO 10
5 COUNT% = 0
6 FOR I% = 0 TO SIZE%
7 FLAGS%(I%) = 1
8 NEXT I%
9 FOR I% = 0 TO SIZE%
10 IF FLAGS%(I%) = 0 THEN 18
11 PRIME% = I% + I% + 3
12 K% = I% + PRIME%
13 IF K% > SIZE% THEN 17
14 FLAGS%(K%) = 0
15 K% = K% + PRIME%
16 GOTO 13
17 COUNT% = COUNT% + 1
18 NEXT I%
19 NEXT X%
20 PRINT COUNT%," PRIMES"

118
Zedcor ZBasic v402/TTT.BAS Normal file
View File

@ -0,0 +1,118 @@
1 REM Tic Tac Toe solving app that learns what WOPR learned: you can't win
2 REM Only three starting positions are examined. Others are just reflections of these
3 REM b% -- The board
4 REM al% -- Alpha, for pruning
5 REM be% -- Beta, for pruning
6 REM l% -- Top-level loop iteration
7 REM wi% -- The winning piece (0 none, 1 X, 2, O )
8 REM re% -- Resulting score of 4000/minmax board position. 5 draw, 6 X win, 4 Y win
9 REM sx% -- Stack array for "recursion" X can be P, V, A, or B for those variables.
10 REM v% -- Value of a board position
11 REM st% -- Stack Pointer. Even for alpha/beta pruning Minimize plys, Odd for Maximize
12 REM p% -- Current position where a new piece is played
14 REM rw% -- Row in the Winner function (2000)
15 REM cw% -- Column in the Winner function (2000)
18 REM mc% -- Move count total for debugging. Should be a multiple of 6493
19 REM Note: Can't use real recursion with GOSUB because stack is limited to roughly 5 deep
20 REM BASIC doesn't support goto/gosub using arrays for target line numbers
30 DIM b%(9)
32 DIM sp%(10)
34 DIM sv%(10)
36 DIM sa%(10)
37 DIM sb%(10)
38 mc% = 0
39 PRINT "start time: "; TIME$
40 FOR l% = 1 TO 100
41 mc% = 0
42 al% = 2
43 be% = 9
44 b%(0) = 1
45 GOSUB 4000
58 al% = 2
59 be% = 9
60 b%(0) = 0
61 b%(1) = 1
62 GOSUB 4000
68 al% = 2
69 be% = 9
70 b%(1) = 0
71 b%(4) = 1
72 GOSUB 4000
73 b%(4) = 0
74 REM print "mc: "; mc%; " l is "; l%
80 NEXT l%
85 PRINT "for "; l% - 1; " iterations"
86 PRINT "end time: "; TIME$
87 PRINT "final move count "; mc%
88 SYSTEM
100 END
2000 wi% = b%(0)
2010 IF 0 = wi% GOTO 2100
2020 IF wi% = b%(1) AND wi% = b%(2) THEN RETURN
2030 IF wi% = b%(3) AND wi% = b%(6) THEN RETURN
2100 wi% = b%(3)
2110 IF 0 = wi% GOTO 2200
2120 IF wi% = b%(4) AND wi% = b%(5) THEN RETURN
2200 wi% = b%(6)
2210 IF 0 = wi% GOTO 2300
2220 IF wi% = b%(7) AND wi% = b%(8) THEN RETURN
2300 wi% = b%(1)
2310 IF 0 = wi% GOTO 2400
2320 IF wi% = b%(4) AND wi% = b%(7) THEN RETURN
2400 wi% = b%(2)
2410 IF 0 = wi% GOTO 2500
2420 IF wi% = b%(5) AND wi% = b%(8) THEN RETURN
2500 wi% = b%(4)
2510 IF 0 = wi% THEN RETURN
2520 IF wi% = b%(0) AND wi% = b%(8) THEN RETURN
2530 IF wi% = b%(2) AND wi% = b%(6) THEN RETURN
2540 wi% = 0
2550 RETURN
4000 REM minmax function to find score of a board position
4010 REM recursion is simulated with gotos
4030 st% = 0
4040 v% = 0
4060 re% = 0
4100 mc% = mc% + 1
4102 REM gosub 3000
4104 IF st% < 4 THEN GOTO 4150
4105 GOSUB 2000
4106 IF 0 = wi% THEN GOTO 4140
4110 IF wi% = 1 THEN re% = 6: GOTO 4280
4115 re% = 4
4116 GOTO 4280
4140 IF st% = 8 THEN re% = 5: GOTO 4280
4150 IF st% AND 1 THEN v% = 2 ELSE v% = 9
4160 p% = 0
4180 IF 0 <> b%(p%) THEN GOTO 4500
4200 IF st% AND 1 THEN b%(p%) = 1 ELSE b%(p%) = 2
4210 sp%(st%) = p%
4230 sv%(st%) = v%
4245 sa%(st%) = al%
4246 sb%(st%) = be%
4260 st% = st% + 1
4270 GOTO 4100
4280 st% = st% - 1
4290 p% = sp%(st%)
4310 v% = sv%(st%)
4325 al% = sa%(st%)
4326 be% = sb%(st%)
4328 b%(p%) = 0
4330 IF st% AND 1 THEN GOTO 4340
4331 IF re% = 4 THEN GOTO 4530
4332 IF re% < v% THEN v% = re%
4334 IF v% < be% THEN be% = v%
4336 IF be% <= al% THEN GOTO 4520
4338 GOTO 4500
4340 IF re% = 6 THEN GOTO 4530
4341 IF re% > v% THEN v% = re%
4342 IF v% > al% THEN al% = v%
4344 IF al% >= be% THEN GOTO 4520
4500 p% = p% + 1
4505 IF p% < 9 THEN GOTO 4180
4520 re% = v%
4530 IF st% = 0 THEN RETURN
4540 GOTO 4280

Binary file not shown.

View File

@ -0,0 +1,76 @@
Well, you've been screaming for a cross-reference utility for your ZBasic
programs, so here it is! XREF was originally written by Jeff Moore on the
Apple //e in ZBasic, and then ported to the IBM and modified slightly (to
take advantage of the IBM's special features) by Greg Branche. This .DOC
file contains a little bit of information on how to use the darn thing!
The first thing you need to do is save the program that you want cross-
referenced in ASCII format, using the SAVE* command from within ZBasic. XREF
will only work with ASCII format source files. Once you've got the ASCII file
on disk, execute XREF (either from within ZBasic, or as a .COM file after
you've created one). The first thing you'll see is a prompt asking you for
the file name of the source file to cross- reference. This file MUST be in
the currently logged directory (if you want the program to support pathnames,
modify XREF!). After entering the filename, the program will ask you which
items you'd like a cross- reference listing on.
Line label definitions
This option will list every label defined in the program, and the line
number associated with that label.
String constants
This option will list every string constant used in the program, as well
as every line label reference. For example, the line
00010 GOSUB "INIT"
will be parsed by XREF and an entry will appear in the string constants
listing.
Numeric constants
This option will list every numeric constant used in the program. Again,
this includes line # references in GOSUB, GOTO, etc. statements.
Variables
This option will list the variables used in the program, and the line #
of each reference to the variable.
Keywords
This option will produce a listing of ZBasic keywords and the program
line that each keyword is used in.
Display parsing actions
Turning this option ON will have XREF display each line as it is read
in, and then each item within the line as the program parses the line. If
this option is turned off, XREF will display a dot for each line processed
(so that you know that it's at least doing SOMEthing!). At any time during
the parsing phase of operation, you can press the space bar to pause the
output. Once paused, the space bar will single step through each line. Any
other key will allow the program to continue. CTRL-C will abort the
process.
Require spaces between keywords
This option is the same as the one on the ZBasic configure page, and
should be set the same as ZBasic when the program was saved.
Printer on for X-Ref listing
This option simply routes output of the final XREF report to the
printer. If this option is turned off, the report is produced on the screen,
one screenful at a time. The program will pause at the end of each screenful
of information and wait for you to press a key to continue.
The default answer for each of these options is "N". If you just press
<RETURN> at each of the questions, the default will be accepted. At least
ONE of the first five questions must be answered as "Y". The program will
not continue until at least one of the report options has been selected (if
you didn't want a cross reference listing, you wouldn't have run the program
in the FIRST place).
This XREF utility is supplied in source code format so that you can modify it
to your own liking. If you make any modifications that you feel are
worthwhile, drop us a line! We'll put your fix in the newsletter (and our
copy of XREF) for all to enjoy.


Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,133 @@
ZCALC Notes
ZCalc is a spreadsheet program that uses a command structure similar to
Lotus 1-2-3. The following notes describe the various commands. If the
program doesn't do something that you'd like it to, feel free to modify it.
In addition, if you see something in the source code that you'd like to use
in your own programs, feel free to do so.
KEYBOARD
The following keys perform the following functions:
{HOME} : Move the cell pointer position to A1
{PGUP} : Move the cell pointer one page up
{PGDN} : Move the cell pointer one page down
{F6} : Go to a specific cell location
{F9} : Recalculate the contents of the spreadsheet
ENTERING NUMBERS, FORMULA AND LABELS
To enter a formula, press the '=' sign and then type the formula. A
formula can consist of numbers, cell references, and cell names.
In addition, the four basic mathematical operators and parentheses are
allowed. The program parses from left to right, with expressions inside
parentheses evaluated first.
Two functions are currently implemented. They are covered later in the
notes.
To enter a number, just type the number.
To enter a label, enter the label, or if the label begins with a number,
enter a double quote first.
CELL REFERENCES
Cell references consist of letters for columns and numbers for rows.
Cells past column Z are represented by double letters: AA, AB and so on.
Cell blocks are represented by the upper left and lower right
coordinates separated by a comma. For example: A1,B2 B5,E10 etc.
COMMANDS
The command menu is brought up with the '/' key.
A command can be executed by moving the bar to the command and pressing
enter, or just hitting the first key of the command (upper case only).
Sub-menus work in a similar fashion.
FILE COMMAND
The file command allows the user to load, save or delete a file.
ERASE COMMAND
The erase command erase the spreadsheet.
COPY COMMAND
The copy command allows a range of cells to be copied from one part
of the spreadsheet to another.
WIDTH COMMAND
The width command allows the width a column to be adjusted.
RANGE COMMAND
The range command allows ranges of cells to be erased or formatted
to look a different way.
The command will first ask for the range, and then whether or not the
range is to be deleted or re-formatted.
INSERT COMMAND
Insert allows the insertion of rows or columns in the spreadsheet. Cell
references are adjusted.
DELETE COMMAND
Delete allows the deletion of rows or columns in the spreadsheet. Cell
references are adjusted.
PRINT COMMAND
Print allows the spreadsheet to be printed.
NAME COMMAND
THe name command allows cells to be named, instead of referred to
by just their address. For example cell F1 could be named TAX, allowing
a formula like 'TAX*A1' instead of 'F1*A1'.
MSDOS COMMAND
This command returns temporarily to the operating system. Type EXIT
from the DOS prompt to return to the spreadsheet.
QUIT COMMAND
The quit command allows the user to exit the program.
MACROS
Macros are supported. To create a macro, do this:
1. Move to a cell and type a double quote followed by the keystrokes
you would normally type for the command.
2. Give this cell a name consisting of a backslash followed by a letter.
3. To invoke the macro, type Ctrl and the letter.
To use arrow and other special keys in a macro, type the key name
inside brackets. For example: {UP} {RECALC} {JUMP} {PGDN}.


Binary file not shown.

View File

@ -0,0 +1,3 @@
HERC
ZBASIC


8
Zedcor ZBasic v402/m.bat Normal file
View File

@ -0,0 +1,8 @@
echo I can't figure out a way to compile from the command line.
echo Enter this to build in ZBasic:
echo ntvdm zbasic sample.bas
echo run*
echo sample.com
echo system
echo ntvdm -c -p sample.com