home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
No Fragments Archive 10: Diskmags
/
nf_archive_10.iso
/
MAGS
/
ST_USER
/
1990
/
USERJL90.MSA
/
SHEET_MANUAL.ARC
/
MANUAL.DOC
Wrap
Text File
|
1990-05-15
|
212KB
|
6,535 lines
SHEET -- FOR ATARI ST
A BASIC interpreter in a spreadsheet environment
Atari, 520 ST and ST are trademarks of Atari Corporation
GEM is trademark of Digital Research, Inc.
Lotus 123 is trademark of Lotus Development Corporation
Copyright (C) 1988, Chor-ming Lung. All rights reserved.
Table of Content
________________
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
PART I -- TUTORIAL . . . . . . . . . . . 3
Example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Example 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Example 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Example 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Example 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Example 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Example 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
PART II -- Spreadsheet operations . . . . . . . . 22
MENU SELECTIONS . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Desk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
About SHEET . . . . . . . . . . . . . . . . . . . . . . . 23
File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
New N . . . . . . . . . . . . . . . . . . . . . . . . 23
Load L . . . . . . . . . . . . . . . . . . . . . . . . 23
Load WKS . . . . . . . . . . . . . . . . . . . . . . . . 23
Load PART . . . . . . . . . . . . . . . . . . . . . . . . 23
Save S . . . . . . . . . . . . . . . . . . . . . . . . 23
Save WKS . . . . . . . . . . . . . . . . . . . . . . . . 23
Save PART . . . . . . . . . . . . . . . . . . . . . . . . 23
Print P . . . . . . . . . . . . . . . . . . . . . . . . 23
Quit Q . . . . . . . . . . . . . . . . . . . . . . . . 23
Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Erase . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Defaults . . . . . . . . . . . . . . . . . . . . . . . . 23
Options . . . . . . . . . . . . . . . . . . . . . . . . . 24
Dates . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Row/Col . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Insert I . . . . . . . . . . . . . . . . . . . . . . . . 25
Delete D . . . . . . . . . . . . . . . . . . . . . . . . 25
Col widths . . . . . . . . . . . . . . . . . . . . . . . 25
Cells . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Reformat R . . . . . . . . . . . . . . . . . . . . . . . 25
Erase E . . . . . . . . . . . . . . . . . . . . . . . 25
Copy C . . . . . . . . . . . . . . . . . . . . . . . 25
Move M . . . . . . . . . . . . . . . . . . . . . . . 25
Adjust A . . . . . . . . . . . . . . . . . . . . . . . 25
Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
- i -
MOVING AROUND . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
EDITING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Types of cell entry . . . . . . . . . . . . . . . . . . . . . 28
Formula . . . . . . . . . . . . . . . . . . . . . . . . . 28
Constant . . . . . . . . . . . . . . . . . . . . . . . . 28
Statement . . . . . . . . . . . . . . . . . . . . . . . . 28
Command . . . . . . . . . . . . . . . . . . . . . . . . . 28
Text . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Rules for constructing formula . . . . . . . . . . . . . . . . 29
Cell input . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Move the editing cursor . . . . . . . . . . . . . . . . . 30
Modify your input . . . . . . . . . . . . . . . . . . . . 30
Terminate your input . . . . . . . . . . . . . . . . . . 30
Miscellaneous operations . . . . . . . . . . . . . . . . 30
Modify a cell . . . . . . . . . . . . . . . . . . . . . . . . 31
Editing direction . . . . . . . . . . . . . . . . . . . . . . 31
CUSTOMIZED DISPLAY . . . . . . . . . . . . . . . . . . . . . . . . 32
Change column width . . . . . . . . . . . . . . . . . . . . . 32
Default display format . . . . . . . . . . . . . . . . . . . . 33
Display format: . . . . . . . . . . . . . . . . . . . . . . . 33
Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
De-select blocks . . . . . . . . . . . . . . . . . . . . . . . 34
Change display format . . . . . . . . . . . . . . . . . . . . 35
COPY AND MOVE . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Relative and Absolue cell reference . . . . . . . . . . . . . 37
ERASE CELLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
INSERT AND DELETE . . . . . . . . . . . . . . . . . . . . . . . . . 39
Row/Column selection . . . . . . . . . . . . . . . . . . . . . 39
LOAD, SAVE AND PRINT . . . . . . . . . . . . . . . . . . . . . . . 40
File extension . . . . . . . . . . . . . . . . . . . . . . . . 40
Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Save . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Load PART . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Save Part . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Lotus files . . . . . . . . . . . . . . . . . . . . . . . . . 41
Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
PART III -- SHEET BASIC . . . . . . . . . . 43
Cells and Variables . . . . . . . . . . . . . . . . . . . . . . . . 44
Cell reference with dimension . . . . . . . . . . . . . . . . 44
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Cell reference with variables . . . . . . . . . . . . . . . . 44
String . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
String operators
String operators . . . . . . . . . . . . . . . . . . . . . . . 45
Flow control Statements . . . . . . . . . . . . . . . . . . . . . . 47
IF .. THEN .. ELSE .. . . . . . . . . . . . . . . . . . . . . 47
GOTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
GOSUB .. RETURN . . . . . . . . . . . . . . . . . . . . . . . 47
- ii -
LOOP .. EXIT IF .. ENDLOOP . . . . . . . . . . . . . . . . . . 47
FOR .. NEXT . . . . . . . . . . . . . . . . . . . . . . . . . 48
RUN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
I/O Statements . . . . . . . . . . . . . . . . . . . . . . . . . . 49
REDIRECT TO . . . . . . . . . . . . . . . . . . . . . . . . . 49
PRINT statement . . . . . . . . . . . . . . . . . . . . . . . 49
Miscellaneous statements . . . . . . . . . . . . . . . . . . . . . 51
SAVE SCREEN . . . . . . . . . . . . . . . . . . . . . . . . . 51
RESTORE SCREEN . . . . . . . . . . . . . . . . . . . . . . . . 51
WAIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
DEFINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
MESSAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Text files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
GET_FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
OPEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
CLOSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
INPUT #n . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
PRINT #n . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Worksheet commands . . . . . . . . . . . . . . . . . . . . . . . . 55
COPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
MOVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
ERASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
REFORMAT . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
SORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
SWAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Console commands . . . . . . . . . . . . . . . . . . . . . . . . . 57
CLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
CURSORON . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
CURSOROFF . . . . . . . . . . . . . . . . . . . . . . . . . . 57
VIDEOHIGH . . . . . . . . . . . . . . . . . . . . . . . . . . 57
VIDEONORM . . . . . . . . . . . . . . . . . . . . . . . . . . 57
GOTOXY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
INKEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
UNGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
INPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Graphic commands . . . . . . . . . . . . . . . . . . . . . . . . . 59
Setup commands . . . . . . . . . . . . . . . . . . . . . . . . 60
WINDOW . . . . . . . . . . . . . . . . . . . . . . . . . 60
VIEWPORT . . . . . . . . . . . . . . . . . . . . . . . . 61
SCALE . . . . . . . . . . . . . . . . . . . . . . . . . . 61
CLEAR . . . . . . . . . . . . . . . . . . . . . . . . . . 61
EXITGRAPH . . . . . . . . . . . . . . . . . . . . . . . . 61
Line/Dot commands . . . . . . . . . . . . . . . . . . . . . . 62
ATTRIBUTE . . . . . . . . . . . . . . . . . . . . . . . . 62
LINE . . . . . . . . . . . . . . . . . . . . . . . . . . 62
LINE_TO . . . . . . . . . . . . . . . . . . . . . . . . . 62
PLOT . . . . . . . . . . . . . . . . . . . . . . . . . . 63
PLOT DATA . . . . . . . . . . . . . . . . . . . . . . . . 63
SPLINE . . . . . . . . . . . . . . . . . . . . . . . . . 63
Turtlegraphics . . . . . . . . . . . . . . . . . . . . . . . . 64
- iii -
FORWARD . . . . . . . . . . . . . . . . . . . . . . . . . 64
TURN . . . . . . . . . . . . . . . . . . . . . . . . . . 64
TURN_TO . . . . . . . . . . . . . . . . . . . . . . . . . 64
Axis command . . . . . . . . . . . . . . . . . . . . . . . . . 65
MARKX . . . . . . . . . . . . . . . . . . . . . . . . . . 65
MARKY . . . . . . . . . . . . . . . . . . . . . . . . . . 65
LABELX . . . . . . . . . . . . . . . . . . . . . . . . . 65
LABELY . . . . . . . . . . . . . . . . . . . . . . . . . 65
Text command . . . . . . . . . . . . . . . . . . . . . . . . . 66
PTEXT . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . 67
MOUSE_POS . . . . . . . . . . . . . . . . . . . . . . . . 67
Tips on using SHEET BASIC . . . . . . . . . . . . . . . . . . . . . 68
Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Using previous row format . . . . . . . . . . . . . . . . . . 68
Error
Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Multiple statements . . . . . . . . . . . . . . . . . . . . . 68
Garbled screen . . . . . . . . . . . . . . . . . . . . . . . . 68
Adjust . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Appendix A BUILT-IN FUNCTIONS . . . . . . . . . . . . . . . . . . . 69
Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
General functions . . . . . . . . . . . . . . . . . . . . 69
ABS . . . . . . . . . . . . . . . . . . . . . . . . 69
INT . . . . . . . . . . . . . . . . . . . . . . . . 69
FRAC . . . . . . . . . . . . . . . . . . . . . . . . 69
FACT . . . . . . . . . . . . . . . . . . . . . . . . 69
SQR . . . . . . . . . . . . . . . . . . . . . . . . 69
SQRT . . . . . . . . . . . . . . . . . . . . . . . . 69
Trigo & logarithm functions . . . . . . . . . . . . . . . 69
SIN . . . . . . . . . . . . . . . . . . . . . . . . 69
COS . . . . . . . . . . . . . . . . . . . . . . . . 69
TAN . . . . . . . . . . . . . . . . . . . . . . . . 69
ASIN . . . . . . . . . . . . . . . . . . . . . . . . 69
ACOS . . . . . . . . . . . . . . . . . . . . . . . . 69
ATAN . . . . . . . . . . . . . . . . . . . . . . . . 69
LOG . . . . . . . . . . . . . . . . . . . . . . . . 69
LN . . . . . . . . . . . . . . . . . . . . . . . . . 69
EXP . . . . . . . . . . . . . . . . . . . . . . . . 69
RAD_DEG . . . . . . . . . . . . . . . . . . . . . . 69
DEG_RAD . . . . . . . . . . . . . . . . . . . . . . 69
DATE functions . . . . . . . . . . . . . . . . . . . . . 69
DATE . . . . . . . . . . . . . . . . . . . . . . . . 69
DAY . . . . . . . . . . . . . . . . . . . . . . . . 69
MONTH . . . . . . . . . . . . . . . . . . . . . . . 69
YEAR . . . . . . . . . . . . . . . . . . . . . . . . 69
Matrix functions . . . . . . . . . . . . . . . . . . . . 69
INVERSE . . . . . . . . . . . . . . . . . . . . . . 69
TRANSPOSE . . . . . . . . . . . . . . . . . . . . . 69
Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . 70
AVERAGE . . . . . . . . . . . . . . . . . . . . . . . . . 70
MEDIAN . . . . . . . . . . . . . . . . . . . . . . . . . 70
STD . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
VAR . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
SQR_SUM . . . . . . . . . . . . . . . . . . . . . . . . . 70
- iv -
Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . 70
MAX . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
SUM . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
RAND . . . . . . . . . . . . . . . . . . . . . . . . . . 70
IFF . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
ISEMPTY . . . . . . . . . . . . . . . . . . . . . . . . . 70
TRUE . . . . . . . . . . . . . . . . . . . . . . . . . . 70
FALSE . . . . . . . . . . . . . . . . . . . . . . . . . . 70
ALERT . . . . . . . . . . . . . . . . . . . . . . . . . . 70
COL_WIDTH . . . . . . . . . . . . . . . . . . . . . . . . 71
LAST_ROW . . . . . . . . . . . . . . . . . . . . . . . . 71
LAST_COL . . . . . . . . . . . . . . . . . . . . . . . . 71
SEARCH . . . . . . . . . . . . . . . . . . . . . . . . . 71
Finance . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Future growth . . . . . . . . . . . . . . . . . . . . . . 71
GRATE . . . . . . . . . . . . . . . . . . . . . . . 71
GBASE . . . . . . . . . . . . . . . . . . . . . . . 71
GFUTURE . . . . . . . . . . . . . . . . . . . . . . 71
Investment . . . . . . . . . . . . . . . . . . . . . . . 71
INVEST_PV . . . . . . . . . . . . . . . . . . . . . 71
INVEST_FV . . . . . . . . . . . . . . . . . . . . . 72
INVEST_INTEREST . . . . . . . . . . . . . . . . . . 72
INVEST_TERM . . . . . . . . . . . . . . . . . . . . 72
Loan . . . . . . . . . . . . . . . . . . . . . . . . . . 72
LOAN_PAY . . . . . . . . . . . . . . . . . . . . . . 72
LOAN_AMOUNT . . . . . . . . . . . . . . . . . . . . 72
LOAN_TERM . . . . . . . . . . . . . . . . . . . . . 72
Withdraw . . . . . . . . . . . . . . . . . . . . . . . . 72
WDRAW_SAVE . . . . . . . . . . . . . . . . . . . . . 72
WDRAW_AMOUNT . . . . . . . . . . . . . . . . . . . . 72
WDRAW_TERM . . . . . . . . . . . . . . . . . . . . . 72
Deposit . . . . . . . . . . . . . . . . . . . . . . . . . 72
DEPOSIT_FV . . . . . . . . . . . . . . . . . . . . . 72
DEPOSIT_AMOUNT . . . . . . . . . . . . . . . . . . . 72
DEPOSIT_TERM . . . . . . . . . . . . . . . . . . . . 72
String functions: . . . . . . . . . . . . . . . . . . . . . . 72
FILENAME$ . . . . . . . . . . . . . . . . . . . . . . . . 72
BUF$ . . . . . . . . . . . . . . . . . . . . . . . . . . 72
MID$ . . . . . . . . . . . . . . . . . . . . . . . . . . 72
LEFT$ . . . . . . . . . . . . . . . . . . . . . . . . . . 73
RIGHT$ . . . . . . . . . . . . . . . . . . . . . . . . . 73
SPACE$ . . . . . . . . . . . . . . . . . . . . . . . . . 73
CHR$ . . . . . . . . . . . . . . . . . . . . . . . . . . 73
STR$ . . . . . . . . . . . . . . . . . . . . . . . . . . 73
VAL . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
LEN: . . . . . . . . . . . . . . . . . . . . . . . . . . 73
POS . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Appendix B CONTROL KEYS . . . . . . . . . . . . . . . . . . . . . . 74
Non-editing . . . . . . . . . . . . . . . . . . . . . . . . . 74
Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Appendix C Program specification . . . . . . . . . . . . . . . . . 75
Appendix D Lotus and SHEET . . . . . . . . . . . . . . . . . . . . 76
- v -
Appendix E Recalculation . . . . . . . . . . . . . . . . . . . . . 77
Appendix F FILE FORMAT . . . . . . . . . . . . . . . . . . . . . . 78
Header for SHT . . . . . . . . . . . . . . . . . . . . . . . . 78
Cell contents for SHT format . . . . . . . . . . . . . . . . . 78
Header for PRT . . . . . . . . . . . . . . . . . . . . . . . . 78
Cell contents for PART format . . . . . . . . . . . . . . . . 78
Appendix G Problems . . . . . . . . . . . . . . . . . . . . . . . . 78
Biorthym program . . . . . . . . . . . . . . . . . . . . . . . . . 80
Calendar program . . . . . . . . . . . . . . . . . . . . . . . . . 82
Roots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
- vi -
SHEET User manual By Chor-ming Lung October 9,
1988
Preface:
________
I have used spreadsheet programs for quite a while. I feel
they are fantastic tools. I am quite familiar with Lotus 123. One
thing that I feel terrible is its MACRO language. It is not as
user-friendly as its display. I feel that BASIC is more powerful
and yet easier to use than MACRO.
Thinking that may be profitable to write a BASIC interpreter
in a spreadsheet environment, I started to write the program on
Oct. 1987. After a few months' struggle, I have created the
program and named it SHEET.
Making SHEET as shareware, I uploaded the first version on
February 1988 to GEnie and CompuServe. Right now, SHEET can do not
only numerical calculation, but also, graphic, string operations
and text files access. Its growth depends on you. If you like it,
please send me $25 or whatever you think it is worth. My address
is:
Mr. Chor-ming Lung
330 Tremont St A-708
Boston, MA 02116
U.S.A.
You can also send your comments or suggestions by Email. My
addresses are:
GEnie: LUNG
CompuServe: 72740,40
If you have access of GEnie, you can also leave your message
on the bulletin board. It is Page 475, Category 2, Topic 28.
Disclaimer:
__________
I have made every effort to insure the accuracy of the
program. However, there is no warranty either express or implied
for its uses.
Requirements:
____________
* Atari 520 ST or 1040 ST with disk drive(s).
* Monochrome or color monitor.
* SHEETxxx.PRG, CALC.RSC and SHEET.CFG on the same directory. (xxx
is the version number of SHEET. Currently, it is SHEET20.PRG or
version 2.0)
* You must know how to operate with GEM.
* Some BASIC programming experience is desirable if you want to
use SHEET BASIC effectively.
Page 1
SHEET User manual By Chor-ming Lung October 9,
1988
Introduction:
____________
Thank you for using SHEET. SHEET is a combination of spreadsheet
and BASIC. The spreadsheet functions and commands make this BASIC
interpreter a lot easier to handle data and the BASIC interpreter make
the spreadsheet a lot powerful than many other spreadsheet programs
commercially available.
The arrangement of this manual consists of three parts. The first
part consists of 9 example worksheets as a tutorial. The second part
shows the details of how to use the spreadsheet commands. The last part
consists of BASIC commands and their usage.
If you have problems in locating cell cursor with the mouse, you
should read Appendix G. You should read example 1 thoroughly. It
contains informations for operating the spreadsheet. Example 3 is a
trivial program but it is an important one too. If you do not
understand the cell reference method in this program. You cannot
understand the rest examples. I have tried my best to describe how it
works. If you still have problem, you should read PART III about cell
reference.
There are three "big" program listings after the Appendixes. They
use many commands of SHEET BASIC. You should not miss them too.
Finally, I would like to thank all the users who provide
suggestions to make SHEET more useful and reliable. I like to thank Mr.
Donald A. Edwards and Dr. Stan Liebowitz specifically. Without their
enthusiasm, I can hardly imagine some of the features found in version
2.0. If you have made suggestions but they are not implemented yet, it
is not because they are being ignored. Instead, I do not have enough
time to get everything done on this version.
Page 2
SHEET User manual By Chor-ming Lung October 9,
1988
PART I -- TUTORIAL
Example 1: "AMORT.SHT"
This example shows you how to operate with SHEET. A lot of
the basic ideas of how to use the mouse and your keyboard with
your worksheet are being introduced. If you understand it, you can
read PART II without any difficulty.
Example 2: "ROSES.SHT"
This example shows you some advanced feature of spreadsheet
design. It introduces the idea of absolute and relative cell
reference.
Example 3: "RANDOM.SHT"
This example is a simple SHEET BASIC program. The main idea
introduces in this example is a new cell reference method. You can
use the cell as a cell reference or as a BASE which you can
stretch horizontally or vertically.
Example 4: "LOTTERY.SHT"
This example shows you how to print your output to your
printer. It generates 6 different numbers from 1 to 36, and sorts
those numbers in ascending order, and then prints those numbers to
your printer.
Example 5: "FTEST.SHT"
This file shows you the commands for ASCII file accesses.
Example 6: "NUMBER.SHT"
This file shows you how to use the file access commands to
retrieve data stored in ASCII file and then put them into
individual cells.
Example 7: "GRID.SHT"
This first graphic program shows the basic process of using
the graphic commands.
Example 8: "SINCURVE.SHT"
This file shows you how to draw a sine curve with the graphic
commands.
Example 9: "SPLINE.SHT"
This file shows you how to draw graph using data stored in
your worksheet.
Page 3
SHEET User manual By Chor-ming Lung October 9,
1988
Example 1:
_________ AMORT.SHT
Amortization means killing something bit by bit. That is the
way we handle loans -- we pay little by little.
Suppose you are trying to borrow $100,000. Your financial
company provides two options for this loan.
- 30 years with annual interest rate 9%
- 20 years with annual interest rate 10.5%
Intuitively, you may choose option 1. Well, let us analyze this
problem with SHEET and see whether it is a wise choice.
First, we have to design our layout. We plan to use column A
for labels, column B for option 1 and column C for option 2.
Following are the steps for creating the template:
Cell entry Cell cursor Menu option/Description
---------------------------------------------------------
Find menu title "Sheet" and
select "Defaults". Choose Text
justification for Center (^)
and select OK.
B1 To move your cell cursor to B1,
either move the mouse cursor to
B1 and click the mouse button,
or use the arrow keys to move
the cell cursor. If you use the
mouse to move your cell cursor
and if the cell cursor
disappears, then you should
refer to Appendix F.
Option 1<Return> Type "Option 1" and terminate
it with <Return> key.
C1 Press the -> arrow key to move
from cell B1 to C1.
Option 2<Return>
B2
\-<Return> Type "\-" and terminate it with
<Return> key.
C2
\-<Return>
Find menu title "Sheet" and
choose "Defaults". Choose Text
justification for Right (")
A3
Amount borrowed<Return>
A4
Annual interest rate<Return>
A5
Total number of terms<Return>
A6
Terms per year<Return>
A7
Page 4
SHEET User manual By Chor-ming Lung October 9,
1988
\-<Return>
B7
\-<Return>
C7
\-<Return>
A8
Payment<Return>
"\-" means to fill up the cell with "-". You should notice
that entries on column A occupy some areas of column B and C. We
need to enlarge the width of column A to make rooms for entries on
column B and C. To widen column A, you need to place the mouse
pointer within the gap between column letter A and B. Press the
mouse button and drag it to the right hand side. (Alternately, you
can select the menu item "Col widths", enter the column name and
your desired width.) When you press and drag you mouse, you should
see the rubber box expanding. If the rubber box is large enough
to cover all the characters of column A, then you can release your
mouse button. Every text in column A is right justified now.
Well, a template without formulas is not a template at all.
The formula we need for this calculation is "LOAN_PAY". It needs
four arguments -- amount borrowed, annual interest rate, total
number of terms, terms per year. That is "LOAN_PAY(B3,B4,B5,B6)".
If you enter the above line into cell B8, SHEET will treat it as a
TEXT string instead of formula. That is because the leading
character of a cell entry determines its type. A cell starts with
"+", "-", digit, "(" or "." is a formula. A cell starts with alpha
character is a TEXT string. A '+' symbol before "LOAN_PAY" will
tell SHEET to treat it as a formula. (NOTE: If you are used to
Lotus 123, you may tempt to add @ symbol before "LOAN_PAY". @
symbol in SHEET has different meaning. All the functions in SHEET
does not require @ symbol.) Here is the steps for entering
"+loan_pay(b3,b4,b5,b7)" on cell B8 and copy the content of B8 to
C8.
Entry Mouse Mouse button Editing buffer
cursor display
--------------------------------------------------------------
+loan_pay( +loan_pay(
B3
Mouse click +loan_pay(B3
B4
<Control>+ Mouse click +loan_pay(B3,B4
B5
<Control>+ Mouse click +loan_pay(B3,B4,B5
B6
<Control>+ Mouse click +loan_pay(B3,B4,B5,B6
) +loan_pay(B3,B4,B5,B6)
<Return>
B8
Page 5
SHEET User manual By Chor-ming Lung October 9,
1988
<Control>+ Mouse click
C8
<Control>+ Mouse click
<Control C>
<Return>
"<Control>+Mouse click" means press the Control key and left mouse
button simultaneously. SHEET is case-insensitive. It will treat
"loan_pay" as "LOAN_PAY". After those steps, you should see
0.1e+38 on both B8 and C8. Don't panic. You are not suppose to pay
that much money even you borrow nothing. This number means
calculation error. During calculation, Lotus uses 11 bytes
(instead of 8 bytes) to store real number. Special bit pattern is
set in these 11 bytes to represent ERR. Unfortunately, I do not
have that much energy to create my own math package. So, I choose
the largest number to represent error.
It seems column B and column C are too close to each other.
You should be able to change the column width of column B and C
without any difficulty now. How wide should they be? It is up to
you.
It is time to enter our data to do analysis.
Entry Cell cursor
-----------------------------------
B3
100000 <Down arrow>
B4
0.09 <Return>
B5
360 <Return>
B6
12 <Return>
After you have typed 100000, you terminate your input by the
down arrow key. This action changes the editing direction to DOWN.
Whenever you terminate your input with <Return>, the cell cursor
will automatically move DOWN. B3 holds the $100,000 you want to
borrow. B4 holds the annual interest rate 9%. B5 holds the total
number of terms you must pay back to your financial company. It is
supposed to be a monthly payment. You have to pay 12 times each
year. Hence, the total number is 30*12 or 360. B6 holds the number
of terms per year. It is 12. NOTE: if your payment is collected
quarterly, then B6 should be 4 and B5 should be 30*4 or 120.
It is an exercise for you to enter 100000, 0.105, 240 and 12
into cells C3, C4, C5, and C6 are respectively. The payment for
option 1 is 804.622617 and it is 998.379887 for option 2. Probably
Page 6
SHEET User manual By Chor-ming Lung October 9,
1988
your financial company will ask you to pay $804.62 and $998.38
respectively. To reflect this fact, you must reformat your
display. We need to change B3..C3 and B8..C8 to DOLLAR format and
B4..C4 to percent (%) format.
Key Mouse button Mouse cursor position
----------------------------------------------------
B3
<Control>+Mouse click
C3
<Shift>+ Mouse click
B8
<Control>+Mouse click
C8
<Shift>+ Mouse click
<Control R>
Select DOLLAR
The above operations define two blocks. <Control>+mouse click
on a cell defines the start of a block and <Shift>+Mouse click on
a cell defines the end of a block. The first block is B3..C3 and
the second block is B8..C8. <Control R> activates the reformat
dialog box. Selection DOLLAR will change cells contained in those
blocks to DOLLAR format. I think it is an easy exercise for you to
change B4..C4 to percent format.
The payment just tells us we need to pay more for less terms.
That is natural. The hidden truth is: we pay more money in option
1 than option 2. How can we find it? Well, we pay 804.62 each
month, and we need to do it 360 times. So, the total amount we pay
for option 1 is 360*804.62, and 240*998.38 for option 2. In cell
A9, enter "Total payment". In B9, enter 360*b8 and in C9, enter
240*c8. Comparing the results on B9 and C9, you will find you pay
$50,000 less in option 2. So, if you can affort $998.38 per month,
you should choose option 2.
Now, it is up to you whether you want to save your first
worksheet. If you think you don't need it any more. Press the
window close button and SHEET will give you a last chance to save
it. If you want to save it for future reference, you should press
<Control S> and enter the file name in the file selector dialog
box.
You may even want to print it out to show your spouse that
his/her decision is right or wrong. The following steps will print
cells A1..C10.
Key Mouse button Mouse cursor
----------------------------------------------------
A1
<Control>+Mouse click
C10
Page 7
SHEET User manual By Chor-ming Lung October 9,
1988
<Shift>+ Mouse click
<Control P>
Fill out the Print dialog box
<Return>
After this example, I assume you can operate this program without
any difficulty. The tedious description of cell entries and mouse
operations will not appear in the following examples.
Page 8
SHEET User manual By Chor-ming Lung October 9,
1988
Example 2:
_________ ROSES.SHT
This is an inventory problem. Assume that you are selling
roses. Each dozen costs 4 dollars and you are selling for 12
dollars per dozen. According to your pass experience, you know the
probabilities you can sell 10 dozens, 11 dozens, 12 dozens in one
day are 0.60, 0.23, 0.17. How many dozens of roses should you
order to get the best profit?
PROFIT= 12 * actual number of dozens sold - 4 * number of dozens
ordered
For example, if you order 11 dozens and you sell only 10 dozens of
them, then you earn:
PROFIT = 12*10-4*11=76
Here we need to create the array of profits for actual
calculation.
ordered/ 10 11 12
sold
10 80 76 72
11 80 88 84
12 80 88 96
You may ask what is the meaning of ordered 10 and sold 11? It
means you sell all the 10 dozens of roses and still there are
customers asking for roses. The number of roses sold includes
actual number of dozens sold and number of dozens customers
asking. If you have sold all the roses you have, you cannot give
anything to the late customers. So, your profit is 12*10-4*10=80.
If you are using calculator to find out those number, then you are
not a good spreadsheet user. To calculate the profit table, you
must use formula. Now, we assume that the numbers ordered are
stored from C1..E1 and the numbers sold are stored from B3..B5.
The function we need is IFF which means IF Function (I choose this
name because IF is a reserved key word for BASIC). This function
require 3 arguments. The first one is a conditional expression,
the second one is an expression returned when the condition is
true, the last one is an expression returned when the condition is
false.
Here is the logic: IF the number of dozens we order is greater
than the number of dozens we sell, we use the following formula to
calculate PROFIT:
PROFIT = 12 * dozens ordered - 4 * dozens sold
That is because we can sell no more than we ordered. On the other
hand, if the number of dozens we order is not greater than the
number of dozens we sell, then we can sell as many as we can. The
PROFIT will be:
PROFIT = 12 * dozens sold - 4 * dozens ordered
Page 9
SHEET User manual By Chor-ming Lung October 9,
1988
So, we enter the following formula in C3:
+IFF(C1<B3,12*C1-4*C1,12*B3-4*C1)
Now, we can copy this formula to the rest of the table. The COPY
command does not handle overlap cells correctly. So, we need to do
it twice. The first COPY copies C3 to C4..C5 and the second one
copies C3 to D3..E5.
If you compare the result you get from SHEET with the above table,
you may say, column C is correct, but column D and E is totally
different. What is wrong? Let us examine the content in cell D3.
It is:
+IFF(D1<C3,12*D1-4*D1,12*C3-4*D1)
COPY command will copy the source to destination and modify the
destination cell if its content refers to other cells. The column
letter in C3 is increased by one in D3. Let us examine the cell
content in cell D4. It is:
+IFF(D2<C4,12*D2-4*D2,12*C4-4*D2)
In cell D4, not only the column letter changes but also the row
number changes. Well, the cell reference we choose is called
relative cell reference. We want COPY command just changes what we
want but not every cell reference. To do this, we need to add a $
symbol before the column letter or the row number. The corrected
formula for cell B3 should be:
+IFF(C$1<$B3,12*C$1-4*C$1,12*$B3-4*C$1)
and you should do the COPY again.
Now, we need to find the EXPECTED PROFIT. It is:
EP = prob selling 10 * PROFIT selling 10 + prob selling 11 *
PROFIT selling 11 + prob selling 12 * PROFIT selling 12
You can setup the one formula and copy it to find EP for ordering
10, 11 and 12. But you can also use the MATRIX function to
calculate it easily. Assume we put the probabilities (0.6, 0.23,
0.17) in cells C7..E7. Enter "Expected profit" in cell A8 and
enter the formula "+matrix(c8,[c7..e7]*[c3..e5]) in cell A7. You
should get 80, 80.8 and 78.84 in cells C8..E8. Hence to get more
profit, you should order 11 dozens of roses.
The above two examples show you some fundamental operations and
calculations for using SHEET. The following examples will show you how
to program in SHEET BASIC. Some BASIC experience is required.
Page 10
SHEET User manual By Chor-ming Lung October 9,
1988
Example 3
_________ RANDOM.SHT
Now, I am going to show you the unusual part of this
spreadsheet program -- the BASIC interpreter. This example will
generate 100 random numbers and calculate the AVERAGE, MEDIAN,
MINIMUM, MAXIMUM, VARIANCE and STANDARD DEVIATION of those
numbers. "C1 : !R=0" means that cell C1 has the statement
"!R=0". If you want to enter the program yourself, you should move
your cell cursor to C1 and then enter "!R=0" without the double
quotes. To run the following BASIC program, please load
"RANDOM.SHT" and enter "@run c1" without the double quotes in your
editing buffer.
C1 : !R=0
C2 : ! LOOP
C3 : ! EXIT IF R=100
C4 : !A1[0,R]= RAND
C5 : !R=R+1
C6 : ! ENDLOOP
C7 : !B3= AVERAGE(A1..A100)
C8 : !B4= STD(A1..A100)
C9 : !B5= VAR(A1..A100)
C10 : !B6= MIN(A1..A100)
C11 : !B7= MAX(A1..A100)
C12 : !B8= MEDIAN(A1..A100)
The above listing is printed by SHEET. Here is a brief
explanation for each line.
C1: R is a variable and its content is initialized to 0. There is a
fundamental difference between SHEET BASIC and traditional BASIC
in handling variables -- YOU MUST initialize all the variables
first. If any calculation involved with uninitialized variables,
you will be flagged and SHEET BASIC will terminate its operation.
Other BASICs treat uninitialized variables as zero. You may have a
hard time to check typo errors. So, I FORCE users to initialize
variables to eliminate this problem.
C2: LOOP is not available in other BASICs. This flow control command
is from Modula-2. I think sometimes it is better than WHILE ..
WEND.
C3: EXIT IF is part of LOOP statement. It is an exit for the LOOP. If
the conditional expression for EXIT IF is true, then the next
command being executed is the one following ENDLOOP.
C4: RAND is the random number generating function. The left hand side
of the assignment statement is A1[0,R] which is a new way to
access or store result in cells. We treat cells in spreadsheet as
two dimensional array. You can use the column letter and row
number as a cell reference or use the cell reference as a BASE and
increases the BASE vertically or horizontally by two numbers.
These two numbers are separated by comma and embraced by "[" and
"]". For example A2[3,4] is equivalent to D6. (We assume column
letter A is 1 and B is 2 and so on. A2=[1,2] and A2[3,4] =
[1,2]+[3,4] = [4,6]= D6). In the above listing, if R=12, A1[0,R]
Page 11
SHEET User manual By Chor-ming Lung October 9,
1988
is referred to cell A13 (A1[0,12] = [1,1]+[0,12] = [1,13] = A13).
C5: Increase the variable R by one.
C6: ENDLOOP statement will force the BASIC interpreter jumps back to
C3 and test whether R=100. If it is, then the next statement being
executed is in C7.
C7: Stores the AVERAGE values of the 100 random number in cell B3
C8: Stores the STANDARD DEVIATION in cell B4
C9: Stores the VARIANCE in cell B5
C10: Stores the minimum value to B6
C11: Stores the maximum value to B7
C12: Stores the MEDIAN in cell B8
The logic of the above program will be more straight forward
if we use FOR .. NEXT statement..
You can generate 100 numbers by using the spreadsheet
commands only. In cell A1, enter "+rand". COPY a1 to a2..a100.
Enter "+average(a1..a100)" in cell b3 and so on.
Well, there are some difference between these two approach.
If you want to get another set of random numbers, you can "@run
c1" again. But if you are using the spreadsheet commands, you must
COPY it over and over again to get another 100 random numbers.
Those AVERAGE, MIN,MAX .. functions will hinder your inputs when
you are in automatic recalculation mode.
If you are programming in traditional BASICs, you know that
it is inconvenient to view the array which holds the 100 random
numbers and you need to write a lot of subroutine to calculate
AVERAGE,MIN,MAX .... SHEET provides you the spreadsheet
functionality to help you to handle your date easily and the BASIC
interpreter helps the spreadsheet perform something that many
other spreadsheet users cannot dream of. That is some of the
benefit of having a BASIC interpreter in a spreadsheet
environment.
Page 12
SHEET User manual By Chor-ming Lung October 9,
1988
Example 4:
_________ LOTTERY.SHT
Everyone wants to be rich. Here is a program in SHEET BASIC
which may help you to get rich. Well, if you do get any profit,
please share it with me (grin). This is a lottery numbers
generating program. Here is the listing from SHEET.
C1 : ! REDIRECT TO "prn:"
C2 : !R=1
C3 : ! LOOP
C4 : !A1[0,R]= INT( RAND*36+1)
C5 : !J=1:F= TRUE
C6 : ! LOOP
C7 : ! EXIT IF J=R
C8 : ! IF A1[0,J]=A1[0,R] THEN F= FALSE
C9 : ! EXIT IF F= FALSE
C10 : !J=J+1
C11 : ! ENDLOOP
C12 : ! IF F= TRUE THEN R=R+1
C13 : ! EXIT IF R=7
C14 : ! ENDLOOP : SAVE SCREEN
C15 : ! SORT "A", A2..A7, A1
C16 : ! PRINT A2,A3,A4,A5,A6,A7
C17 : ! WAIT : RESTORE SCREEN : EXITGRAPH
Here is a brief explanation.
C1: REDIRECT TO a file. This I/O redirection command causes all the
subsequent PRINT commands output to the file specified. There are
some pre-defined files. "prn:" is the printer, "con:" is the
monitor and "aux:" is the rs-232 port.
C2: R is a loop counter.
C3: The outer loop for generating 6 different numbers.
C4: INT( RAND*36+1) will generate a random number from 1 to 36, and
this number is stored from A2..A7 depends on the value of R. If
R=1 then A1[0,R] will be A2 (Remember A1 is the BASE and its
coordinate is [1,1], A1[0,R] = [1,1]+[0,1]=[1,2] = A2).
C5: J is another loop counter which increases from 1 to R. F is a flag
to see whether the previous generated number has been picked. F is
TRUE means no it is not. By the way, TRUE and FALSE are pre-
defined constants. TRUE is equal to 1 and FALSE is 0.
C6: An inner loop to check whether the last number has been picked.
C7: If J=R, it means we check every numbers.
C8: Otherwise, compares each old numbers with the new number, if one
of them are equal to it, then we set F to FALSE
C9: Well, this is the second EXIT IF statement within a LOOP. You can
have multiple EXIT IF within a LOOP. There is no limit about it.
C10: Increase J by 1
C11: End of the inner loop
C12: If no numbers is equal, then we request for another random number.
C13: If 6 numbers have been picked, the loop should be terminated.
C14: SAVE SCREEN is a command to save your current display. It is
useful if you are printing on screen.
C15: SORT is a worksheet command which sort a block in descending or
ascending order. The first string "A" tells SORT to sort in
Page 13
SHEET User manual By Chor-ming Lung October 9,
1988
ascending order. A2..A7 is the block being sorted and A1 holds the
column that we used for determining the place where we try to
compare.
C16: PRINT cell A2 to A7. You can use comma or semicolon to separate
each item for PRINT statement. Comma will make the next print
position align to 10 characters wide tab.
C17: WAIT is useful when you output the data to screen. It stops all
the process just wait for you to press <Return> key. It should be
placed before you restore your screen. SORT will not change the
appearance of the updated cells. We need to refresh the screen.
EXITGRAPH is a command to refresh the screen. By the way, you can
update your screen manually by pressing <Alt-F>.
One thing you may notice in this program is I/O redirection.
Here is a reason why you need to redirect your data to disk file.
A user from Canada told me that his JUKI 6100 Daisywheel printer
does not respond to the "end of line" character. So, he prints his
worksheet to disk and then use 1st Word to print it. If I don't
support I/O redirection in SHEET BASIC, he may need to buy another
printer or stop using SHEET..
Currently, SHEET BASIC has command to redirect output only.
Future version should provide input redirection.
Page 14
SHEET User manual By Chor-ming Lung October 9,
1988
Example 5:
_________ FTEST.SHT
The file name of this example is "FTEST.SHT". A1..A5 is a
program testing the output file commands. A7..A13 is a program
testing the input file commands. To run it, enter "@run a1" and
"@run a7" separately.
A1 :! OPEN "o",#1,"test.txt"
A2 :! PRINT #1,"123,456 789": PRINT #1
A3 :! PRINT #1,"5623.23,84.38 723.12"
A4 :! CLOSE #1
A5 :! END
A7 :! GET_FILE "\*.txt", FILENAME$
A8 :! OPEN "i",#1, FILENAME$
A9 :!R=1: SAVE SCREEN
A10 :! LOOP
A11 :! INPUT #1, BUF$
A12 :! PRINT BUF$
A13 :!R=R+1: ENDLOOP
A14 :! END
Explanation:
Explanation
A1: Before we can access a file, we need to open it first. Statement
A1 open an output file in channel #1 and the file name is
"test.txt". Channel number is in the range of 0~9.
A2: Print the string "123,456 789" and a blank line to the file
A3: Print another string to the file. You can output not only a string
but also numeric data on the same line separated by comma or
semicolon.
A4: Close channel number 1.
A7: Use the file selector to get the file name from user. Note:
FILENAME$ is a string variable that is changed whenever you change
the content of the file selector dialog box.
A8: Open that file as input file on channel #1
A9: R is the counter for line being read. Save our current screen
first.
A10: Enter a loop to read the file line by line.
A11: Read a line from the file to BUF$. BUF$ is a string variable which
can be modified by INPUT statement only.
A12: Print the line being read to the terminal.
A13: Increase the counter of line number and repeat the loop. NOTE,
there is no EXIT IF statement. There is no way to detect end of
file in current SHEET BASIC. You must let it go forever until the
interpreter finds end of file error and stops your program. You
may have some extra "Syntax error" errors. It is normal.
NOTE: After you are done, you can enter the command "@restore
screen" to restore your screen. Also, program A7 can be used
to read other text files. You can even read this document by
choosing this file and you can stop and resume the print
action by <Ctrl-S> and <Ctrl-Q>.
Page 15
SHEET User manual By Chor-ming Lung October 9,
1988
Example 6:
_________ NUMBER.SHT
The file name for the following program is "NUMBER.SHT".
There are two programs in this spreadsheet. The first program
generates data to file "test.txt". It is exactly the same program
of Example 5. L7..L16 reads the data from the file "test.txt" and
separate each of line into different cells. Subroutine P1..P11 is
used to separate each data into different cells.
L1 :! OPEN "o",#1,"test.txt"
L2 :! PRINT #1,"123,456 789": PRINT #1
L3 :! PRINT #1,"5623.23,84.38 723.12"
L4 :! CLOSE #1
L5 :! END
L7 :! GET_FILE "*.txt", FILENAME$
L8 :! OPEN "i",#1, FILENAME$
L9 :!R=0
L10 :! LOOP
L11 :! INPUT #1, BUF$
L12 :! IF ( ASC( BUF$)<>0) THEN GOSUB P1
L13 :!R=R+1
L14 :! ENDLOOP
L15 :! CLOSE #1
L16 :! END
P1 :!P=1:C=1
P2 :! LOOP
P3 :!Q= POS(" ,", BUF$,P)
P4 :! EXIT IF Q=0
P5 :!A1[C,R]= VAL( MID$( BUF$,P,Q-P))
P6 :!C=C+1
P7 :!P=Q+1
P8 :! ENDLOOP
P9 :!A1[C,R]= VAL( MID$( BUF$,P,100))
P10 :! RETURN
Explanation:
Explanation
L1~L5: It is the same code for Example 5 A1~A5.
L7: Uses the file selector to get the file name
L8: Open the file for INPUT.
L9: R is a counter for row number.
L10: We enter an infinite loop to read data lines.
L11: Read a line from the data file.
L12: Test whether the line being read is empty or not. If it is not,
then we call subroutine P1 to separate the data into cells.
L13: Increase our row number by one.
L14: Repeat our loop
L15 and L16 is never being executed. They are there for decoration
only.
P1: P is the starting search position and C is the column number. It
is zero origin. C=1 means we start from column B.
P2: Enter the loop to separate BUF$ into pieces.
P3: We assume the number is separate by a blank space or comma. POS is
a function that tries to find the position of a blank space or
Page 16
SHEET User manual By Chor-ming Lung October 9,
1988
comma from BUF$ starting from P. If POS cannot find it, Q will be
zero.
P4: Check whether Q is zero. If it is, then we have checked the whole
data line for space and comma and that is the end of our loop.
P5: Store the value of BUF$ from P up to Q-1. It depends on the value
of C and R. If C is 1 and R is 0, then the value will be stored in
cell B1. (A1[1,0] is equivalent to B1).
P6: Increase our column number by one.
P7: Change our starting position for P to Q+1
P8: Repeat from P2.
P9: We still have one value after the last space or comma. It is
stored from P to the last character of BUF$. If the len of MID$ is
larger than the length of BUF$, then it returns a string from P to
the last character of BUF$.
P10: End our subroutine.
Page 17
SHEET User manual By Chor-ming Lung October 9,
1988
Example 7:
_________ GRID.SHT
This small program shows the setup and exit process for using
graphics in SHEET BASIC. It just uses window 1 to draw the x and y-
axis then marks them. To run it, enter the command "@run d1"
D1 : ! WINDOW 1
D2 : ! SCALE -7,-2,7,2
D3 : ! CLEAR
D4 : ! LINE -7,0,7,0: LINE 0,-10,0,10
D5 : ! MARKX 0,-6,6,0.1,0.5
D6 : ! MARKY 0,-2,2,0.2,1
D7 : ! EXITGRAPH
D8 : ! END
Explanation:
Explanation:
D1: The first command for graphics is WINDOW/VIEWPORT. WINDOW 1 means
that we are using window 1 for output.
D2: Setup the scaling factors. The minimum number for X is -7 and the
maximum number is 7 and -2, 2 for Y.
D3: Clear the window being used.
D4: Draws the x-axis and y-axis
D5: Making marks on x-axis from -6 to 6 with increment 0.1. A bigger
marker on increment of 0.5.
D6: Marks y-axis
D7: Legal way to exit from graphics commands
NOTE:
____
The first step on graphic command is WINDOW/VIEWPORT followed by
SCALE. After that, you can enter any graphic commands. After the graph
is done, you should use EXITGRAPH to reset the clipping area.
Otherwise, your screen may seem to be locked up.
Page 18
SHEET User manual By Chor-ming Lung October 9,
1988
Example 8:
_________ SINCURVE.SHT
This example draws a sine curve on the current window. To run it,
enter the command "@run a1".
A1 : ! WINDOW
A2 : ! SCALE -7,-1.2,7,1.2
A3 : ! CLEAR
A4 : ! PLOT -2*PI, SIN(-2*PI)
A5 : ! FOR X=-2*PI TO 2*PI+0.1 STEP 0.1
A6 : ! LINE_TO X, SIN(X)
A7 : ! NEXT X
A8 : ! LINE -7,0,7,0: LINE 0,-1.2,0,1.2
A9 : ! MARKX 0,-7,7,0.5,1
A10 : ! MARKY 0,-1.2,1.2,0.1,0
A11 : ! LABELX 0,-7,7,1,"f0"
A12 : ! LABELY 0,-1.2,1.2,0.2,"f2"
A13 : ! WAIT 5: EXITGRAPH
Explanation:
Explanation:
A1: WINDOW with no parameter means we are using current window for
output.
A2: SCALE for our sine curve.
A3: Clear our window
A4: Plot the first point of our sine curve
A5: A FOR loop to generate a sine wave from -2*PI to 2*PI
A6: Instead of plotting dots, we want to connect all the dots with
lines.
A8: Draws the x- and y-axis.
A9: Marks x-axis
A10: Marks y-axis
A11: Draws the labels on x-axis. They are integers (f0). F means the
number is displayed in fixed format. 0 means decimal place is 0.
So, it has no decimal place or it is integer.
A12: Draws the labels on y-axis. They are real number with 2 decimal
points.
A13: Waits for 5 seconds and then refreshes our window.
Page 19
SHEET User manual By Chor-ming Lung October 9,
1988
Example 9:
_________ SPLINE.SHT
This time, we are going to use PLOT DATA and SPLINE to see how
wonderful SPLINE will be. This program has a lot of subroutines. I will
explain each. To run it, enter the command "@run c1".
F1 : !R=0
F2 : ! FOR X=-2*PI TO 2*PI+1 STEP 2
F3 : !J1[0,R]=X:K1[0,R]= SIN(X)
F4 : !R=R+1
F5 : ! NEXT X
Subprogram F1 generates 7 data sets for sine curve. The data for x
is stored in cells J1..J7 and data for y is stored in cells K1..K7.
D1 : ! WINDOW 1
D2 : ! CLEAR : SCALE -7,-2,7,2
D3 : ! PLOT DATA J1..J7,K1..K7,0,1
D4 : ! GOSUB C13
D5 : ! RETURN
Subroutine D1 plots the data stored in J1..J7,K1..K7 using no
marker and solid line. The command PLOT DATA plots data stored in
worksheet. J1..J7 and K1..K7 for x,y respectively. 0 means using dot
instead of marker for each point and 1 means using solid line to
connect points.
D7 : ! WINDOW 1
D8 : ! SCALE -7,-2,7,2
D9 : ! ATTRIBUTE 1,1
D10 : ! SPLINE J1..J7,K1..K7,0.1
D11 : ! RETURN
This subroutine draws the spline curve using color 1 (Black). The
first argument for ATTRIBUTE sets the color to 1 (Black) and using line
width 1. SPLINE uses cubic-spline method to draw smooth curve. J1..J7
and K1..K7 define the value for x,y. 0.1 defines the increment for
generating data on the spline-curve.
F7 : ! WINDOW 1
F8 : ! SCALE -7,-2,7,2
F9 : !X=-2*PI: PLOT X, SIN(X)
F10 : ! ATTRIBUTE 3,1
F11 : ! FOR X=-2*PI TO 2*PI STEP 0.1
F12 : ! LINE_TO X, SIN(X)
F13 : ! NEXT X
F14 : ! RETURN
Subroutine F7 draws the actual sine curve using color 3 (Green).
C13 : ! LINE 0,-2,0,2: LINE -7,0,7,0: RETURN
Subroutine C13 draws the x- and y-axis
Page 20
SHEET User manual By Chor-ming Lung October 9,
1988
C1 : ! GOSUB D1
C2 : ! GOSUB D7
C3 : ! GOSUB F7
C4 : ! WAIT 5
C5 : ! EXITGRAPH
C6 : ! END
Our main program. First, draws the sine curve with PLOT DATA. Plot
the sine curve with cubic spline routine, then draws the actual sine
curve. The sine curve using SPLINE is closer to the actual sine curve.
Actually, if you change cell F2 with "STEP 1" instead of "STEP 2" and
change cells D3 and D10 for ranges J1..J14,K1..K14, then you can hardly
tell the difference between the spline-curve and the actual sine-curve.
NOTE: the actual sine-curve generates 126 points and spline-curve uses
14 data points! Isn't it wonderful?
Page 21
SHEET User manual By Chor-ming Lung October 9,
1988
PART II -- Spreadsheet operations
MENU SELECTIONS: Briefly describes all the menu selection and its
usage.
MOVING AROUND: This session explains how to move the working area
to display different part of your worksheet.
EDITING: This session discusses about cell entries for
formula, constant, text, BASIC statement and
command. It shows you how to use the line editor.
CUSTOMIZED DISPLAY: This chapter tells you how to change the width of
individual column and the display format of
individual cell. Block is introduced in this
_____
chapter too. Block is important to many worksheet
commands.
COPY AND MOVE: This chapter shows you how to reorganize your
worksheet. You need to know how to select blocks.
It also discusses about absolute and relative cell
references.
ERASE CELLS: This chapter explains to you how to erase the
unnecessary cells.
INSERT AND DELETE: This session discusses how to delete or insert a
row or a column. Column and row selection is
different from block.
LOAD, SAVE, PRINT: It explains the menu items under menu title "File".
Page 22
SHEET User manual By Chor-ming Lung October 9,
1988
MENU SELECTIONS
The menu titles are the strings that appear on the menu bar.
____________
Menu items refer to the strings that drop down when a menu title
__________
is selected.
The menu titles for SHEET looks like this:
Desk File Sheet Row/Col Cells Graph Help
______________________________________________
TITLE ITEM Description
--------------------------------------------------------------------
Desk
Desk
About SHEET General information about SHEET.
File
File For a detail description of the following menu
items, please refer to the chapter "LOAD,
SAVE, PRINT"
New N Open a new worksheet window. The N on the
right hand side means that you can activate
this menu item by pressing <Control-N>. You
have a choice for changing your new worksheet
size. The maximal number of rows can be 50 to
9999.
Load L Load an old worksheet file from disk drive.
You can use <Control-L> to activate this menu
item.
Load WKS Load files in the format of Lotus 123 release
1A or 2. SHEET is not a Lotus clone, so it
will not translate everything. Whenever it
encounters problem, the translation process
will be terminated.
Load PART Load SHEET files saved by using "Save PART".
Its file extension is PRT.
Save S Save the whole worksheet file into your
diskette.
Save WKS It is supposed to save your worksheet in Lotus
123 file format. It is not working right now.
Save PART Save part of your worksheet into diskette. You
need to select blocks of cells before you
activate this menu item.
Print P Print part of your worksheet to disk/printer.
You need to select a block before you activate
this menu item.
Quit Q Quit to desktop.
Sheet
Sheet
Erase Erase your current worksheet.
Defaults Set some default states of SHEET. You can
change the recalculation order which is saved
with your worksheet, change the TEXT
justication, change the current window name,
takes 32K back for screen redraw and have a
Page 23
SHEET User manual By Chor-ming Lung October 9,
1988
look of the memory remains.
Options In the dialog box of Options, you have three
choices.
Users have suggested for a Global format
for each column. "Cell format using previous
row" means that whenever you enter a new
element for the worksheet, it will try to find
the format of previous row on the same column
and uses it as default format. So, you do not
need to reformat again and again.
If you are moving the worksheet with
arrow keys, you will find that moving up and
down is a lot faster than moving left and
right. "Move to left/right Fast" provides an
option that you can move left and right faster
than before. One drawback for this option is
that the new column being displayed is
truncated to its own width. Hence you may have
problem in displaying BASIC program or text
string which spilled over other cells. If you
want to redraw the screen to display them
properly, you can use the command "@exitgraph"
or <Alt-F> to redraw the screen.
Two monochrome users have suggested me to
give an option for using the Small font to
display more rows per screen. I have make the
option available but it is not working yet.
Dates SHEET can display three different Date
types. The Dates menu item under menu title
Sheet provides you a new way to show your date
data. The components for a DATE are day, month
and year. Normally, day and year are displayed
as digits. Month can be digit, the first three
characters of the month or the whole alphabets
for that month and some countries put month
before day and some put day before month. To
overcome these differences, the date format is
configurable to your favour. dd and yy
represent day and year in digit. mm represents
month in digit. mmm represents month in three
letters and mmmm represents month in full
alphabets. Here are some examples. Assume that
the date is March the first, 1988.
Date format: Display:
-------------------------------------------------
mmddyy 030188
dd-mmm-yy 01-Mar-88
mmmm dd,19yy March 01,1988
dd/mm/yy 01/03/88
mm/dd/yy 03/01/88
NOTE: The file SHEET.CFG holds the defnition of
Date1, Date2 and Date3. It is updated whenever
Page 24
SHEET User manual By Chor-ming Lung October 9,
1988
you change the Date format. If SHEET.CFG is
not there when SHEET is loaded, then the
default formats will be used.
Row/Col
Row/Col
Insert I Insert a row or a column. You need to select
that particular row/column first. Refer to the
chapter "INSERT AND DELETE" for detail
description.
Delete D Delete a row or a column. You need to select
that particular row/column first.
Col widths You can change the column width in a more
effecient way than just using mouse dragging
method. For example, if you want to make the
column width from column A to column O to
1,9,1,9,1,9,1,9,1,9,1,9,1,9,1, you can select
the menu item "Col widths" from menu title
"Row/Col", enter "A" for the leading column
and 1,9,1,9,1,9,1,9,1,9,1 in the edit field
"widths".
Cells
Cells NOTE: YOU HAVE TO SELECT BLOCKS BEFORE YOU
ACTIVATE THE FOLLOWING MENU ITEMS.
Reformat R Changes the format of blocks. For a detail
description, please refer to "CUSTOMIZED
DISPLAY"
Erase E Erase cells on blocks specified. Please refer
to "ERASE CELLS".
Copy C Copy a block of cells to other block. Please
refer to "COPY AND MOVE"
Move M Move a block of cells to other place
Adjust A Adjust is used for changing TEXT string
to BASIC statements or changing TEXT
justifications. The first step in using ADJUST
is: Select the blocks being ajusted and then
press <Control A> or select this menu item.
You MUST not change TEXT that are not supposed
to be BASIC statements to BASIC statements.
The program may not recognize all your
characters and part of them may be truncated
with a character #.
Graph
Graph This selections is not available yet.
This selections is not available yet.
Selections
Layout
Legend
X-axis lable
Data Variable A
Data Variable B
Data Variable C
Data Variable D
Data Variable E
Data Variable F
Page 25
SHEET User manual By Chor-ming Lung October 9,
1988
Help
Help
Entry Helps for entering formula, text strings,
BASIC statements and commands.
Formula Helps for formula, especially for calculation
priority
Built-in Func Helps for built-in functions.
Statement Helps for BASIC statements (v1.6)
Limits Helps for program limit (accuracy, maximum
numbe of variables and so on)
Graphic commands Helps for graphic commands for BASIC (v1.7)
PTEXT Helps for the graphic command PTEXT (PLOT
TEXT) (v1.7)
Commands Helps on other new BASIC commands (v2.0)
Console commands Helps on screen control and keyboard
commands. (v2.0)
Page 26
SHEET User manual By Chor-ming Lung October 9,
1988
MOVING AROUND
When you start SHEET, your screen is divided into menu bar and
worksheet window. The worksheet window can be divided into 5 major
areas. The status line is the first line under the window title. It is
___________
used for displaying current cell's content and worksheet status. The
editing buffer ,which is the line below status line, is used for
______________
entering or editing the current cell. The column bar is the line below
__________
the editing buffer. The row bar is located on the left hand side of the
_______
worksheet window. Both column and row bars are used for cell reference.
The biggest area is the working area for current worksheet.
____________
Each column is referred by a unique letter (from A to IU). The
first column is A, column B after A, C after B and so on. The one
following column Z is AA and after AZ comes BA, and so on. Each row
numbers are sequentially ordered from 1 to a variety of 50 to 9999
depends on the worksheet size you choose. A cell in the worksheet is
referred by column letter followed by row number. For example, at the
intersection of column B and row number 2 is cell B2.
Each spreadsheet can hold 255 columns and a variable number of
rows from 50 to 9999. It means you can access at most 2,549,745 cells.
Your screen can display a very small amounts of them. Therefore, you
have to view your spreadsheet by moving the working area. The following
operations let you move your working area by keyboard entry or mouse
button.
<Up arrow> If current cell cursor is not in row number 1, the
cell cursor will be moved one row up.
<Down arrow> If current cell cursor is not in row number 1280,
the cell cursor will be moved one row down.
<Left arrow> If current cell cursor is not in column A, the cell
cursor will be moved one column left.
<Right arrow> If current cell cursor is not in column IU, the
cell cursor will be moved one column right.
<Shift-arrows> If possible, the cell cursor will be moved by
"page" to the direction the arrow key specified.
<Clr-Home> This key moves the current cell cursor to A1.
<F5> When you press the function key F5, you can enter
the cell reference directly to move the cell cursor
to that cell. If the cell specified is not in the
working area, then the working area will be changed
and the new upper left cell is the cell specified.
You can use the slider bars to change the working area quite fast.
Also, you can locate a cell with mouse much faster than arrow keys. To
locate a cell with mouse:
- use vertical and horizontal slider bars to move to the
desired working area.
- put the mouse cursor over the desired cell and press
left button on your mouse.
Page 27
SHEET User manual By Chor-ming Lung October 9,
1988
EDITING
Types of cell entry:
___________________
There are 4 different types of cell entries in SHEET: numeric
constant, formula, text and BASIC statement. BASIC commands will
be executed immediately but it will not be stored in any cell. The
leading character of each entry will differentiate one from the
other.
Formula: Input string starts with "+", "-", DIGIT, "." or "("
Formula
Constant: Input string starts with "+", "-", DIGIT, "." or
Constant
"("
Statement: Input string starts with "!"
Statement
Command: Input string starts with "@"
Command
Text: Input string starts with double quote, single quote,
Text
"^", "\" or character other than "+", "-", DIGIT, ".",
"(", "!", "@".
Constant is an arithmetic expression which does not refer to
Constant
other cell(s) or variable(s). A constant cell will not be
constant
recalculated. You may notice that most of your inputs are
constants. Making the distinction between formula and constant
constants formula constant
helps speeding up the spreadsheet recalculation time.
Statement and command are for BASIC interpreter. The
Statement command
differences between statement and command are that command will be
statement command command
executed immediately but will not be stored in current cell and
statement will not be executed but will be stored in the current
statement
cell.
Text is a descriptive string. The first character of each
Text
text entry has special effect for display.
Single quote('): The text is left justified.
Double quote("): If the width of the cell is larger than
the length of the text, the text is right
justified.
Circumflex (^): if the width of the cell is larger than
the length of the text, the text is
centered within the cell width.
Back slash(\): The text following back slash will be
used repetively filling the cell.
If a text string starts with character other than single
quote, double quote, circumflex or back slash, then the character
selected on "TEXT justification" of menu item "Defaults" under
menu title "Sheet" will be used as its leading character.
There is a command which you can change the first character
from one of (' " ^ \) to one of (' " ^ \ !). It is the menu item
"Adjust" under menu title "Cells".
Page 28
SHEET User manual By Chor-ming Lung October 9,
1988
Rules for constructing formula:
______________________________
When you are entering formula, the first character of your entry
must be "+","-", "0".."9", "." or "(". The following table summarizes
all such first characters and their usage.
Char Usage Example
-----------------------------------------------------------------
+ Used when the formula begins with a cell +A1/A2
reference or calling built-in function +SIN(A1)
- Used when the formula begins with -A1*20
negative constant value or negative value -12*0.2
of cell reference or negative value of -COS(A1)
function call
0-9 Used when the formula begins with a 12.3*20
constant number.
. Used when the formula begins with a .05*120
constant number.
( Used when the beginning part of the (A1-A2)/A3
formula's natural order of calculation
must be altered through the use of a pair
of parentheses.
NOTE: 1.
____ Versions before 2.0 of SHEET did not know that .05 is
0.05.
2. If part of the expression returns a string, then it will
treat as 0. It means you cannot do string calculation in
any cell. But the BASIC interpreter can do string
operations.
eg. 34+chr$(12) ==>34
"test1"+"test2" ==>0
4+len("some") ==>8
Page 29
SHEET User manual By Chor-ming Lung October 9,
1988
Cell input:
__________
Whenever you type some keys, the corresponding characters
will be inserted into the editing buffer. You may notice the
status is changed from "Ready" to "Input". Your entry must be
terminated by the following method to change the status back to
"Ready". While you are in "Input" mode, the menu selections and
window resize function are not allowed, though you can change your
working area by moving the horizontal or vertical slider bars.
Whenever you terminate your input, you will get back to the
working area before you do editing.
Move the editing cursor:
Move the editing cursor
<Shift-Left arrow> Moves the editing cursor to left by 1/2 the
length of the editing buffer.
<Shift-Right arrow> Moves the editing cursor to right by 1/2 the
length of the editing buffer.
MOUSE cursor Moves the mouse cursor to the character you
want it be and press left button on your
mouse, then the editing cursor will move to
that character.
Modify your input:
Modify your input
<Insert> Toggles the INSERT mode to TYPEOVER mode and
vice versa.
<Backspace> Erases the character on the left hand side of
the editing cursor.
<Delete> Erases the character under the editing cursor.
Terminate your input:
Terminate your input:
<Undo> Terminates input and the cell content is not
modified.
<Return> Terminates input and the cell cursor moves to
the direction specified by editing direction
(see below).
<UP arrow> Terminates input and the cell cursor moves one
row up if possible.
<Down arrow> Terminates input and the cell cursor moves one
row down if possible.
<Left arrow> Terminates input and the cell cursor moves one
column left if possible.
<Right arrow> terminates input and the cell cursor moves one
column right if possible.
Miscellaneous operations:
Miscellaneous operations:
MOUSE if the mouse cursor is inside the working area
and if you press the left button on your
mouse, the cell coordinate that the mouse is
over will be inserted into the editing buffer.
<Control> MOUSE It works as above except a comma is inserted
before the cell coordinate.
<Shift> MOUSE Instead of comma, a through notation (..)
added before the cell coordinate.
Sliders You can change the working area by moving the
vertical or horizontal slider bars. Any
terminating key will resume the display back
to the working area before editing.
Page 30
SHEET User manual By Chor-ming Lung October 9,
1988
Modify a cell:
_____________
To modify a cell, you have to move the cell cursor to the
desired cell. Press the function key <F2> and use the above method
to modify the cell content but you must terminate your change by
______________
<Return>. If you change your mind, you can always <Undo> what you
have done.
Editing direction:
_________________
When you terminate your input by any arrow key, the editing
direction will be changed to the direction the arrow key
specified. When you press <Return> to terminate your input, the
cell cursor will move to the editing direction. If you want to
change the editing direction to neutral, you have to press
<Return> before your editing session.
e.g.
Cell Entry Cell cursor position
-------------------------------------------------------------
A1 1 <Down arrow> A2
A2 2 <Return> A3
The first entry change the editing direction to <Down>. The
second entry which terminates with <Return> is similar to
terminating with <Down arrow>.
Page 31
SHEET User manual By Chor-ming Lung October 9,
1988
CUSTOMIZED DISPLAY
SHEET can calculate number accurate up to 17 decimal places. In
most case, you need to display 2 decimal points only. For example, your
monthly loan payment may be 876.54321. You will not care about the
extra digits. You just want it to display as 876.54 or $876.54. That is
the situation in which you need to change its default display format.
There are two ways to change the appearance of your worksheets--
changing the width of individual column and changing the format of
individual cells.
Change column width:
___________________
The column width of a cell may affect the display. For numeric
result, if the format you specify cannot fit into the width of the
cell, then the cell will be filled up with "*". For text, you may not
be able to do right justification or center the text. To display the
result correctly, you may need to change the width of the column.
There are two ways to change the width of individual column. The
first way uses the mouse and the second way uses the menu item "Col
widths" under menu title "Row/Col".
MOUSE:
- Move the desired column within the working area
- Move the mouse cursor on the white gap after the column
letter (e.g. if you want to change the width of column
A, move the mouse cursor on the white gap after column
letter A)
- Press the left mouse button (do not release it)
- To expand the column width, drag the mouse to right and
release the button
- To shrink the column width, drag the mouse to left and
release the column
Col widths:
- Select the menu item "Col widths" under the menu title
"Row/Col".
- Enter the correct column letter
- Enter your desired column width.
- You can enter numbers separate by comma. Doing this will
change the column widths beginning from the column
letter specified.
Note:
Note if your column width is only 1 character wide, then the
column letter will be pushed to the next column.
Page 32
SHEET User manual By Chor-ming Lung October 9,
1988
Default display format:
______________________
Text:
Text Depends on the first character for justification.
Constant and Formula:
Constant and Formula
The number of digits after the decimal point is six. It
is right justified and if possible, a blank space is
added at the rightmost place.
Column width: 9 characters per column.
Column width
Display format:
_______________
There are 9 different predefined display formats for formula
formula
and constant types. The first one is the default format mentioned
constant
above. The others are %, Fixed, Scientific, Dollar, ,(comma),
% Fixed Scientific Dollar ,
Date1, Date2, Date3.
Date1 Date2 Date3
Type Usage Example
--------------------------------------------------------
Default Display up to 6 decimal points 3.1234
% Use for interest rate, 0.05 will be
discount, tax and so on. displayed as 5%
Fixed Use for data which have 1.00
different decimal places. (eg 1.50
1,1.5. Most likely, you want it 2.00
to be 1.00, 1.50)
Scienti- Use for display data which is a 3.24e12
fic big or small number.
Dollar Use for data which are related $1,245.12
to money.
, Comma format is similar to 1,245.12
Dollar format excep there is no
dollar sign in front of it.
Date1 Use for displaying date related 9-Jul-88
value. Its format is dd-MMM-yy.
Date2 Its format is dd-mmm. 18-Jul
Date3 Its format is mmm-yy. Jul-88
TEXT Display formula instead of its
value.
HIDE The information on this cell
will not appear on the working
area
Page 33
SHEET User manual By Chor-ming Lung October 9,
1988
Block:
_____
Before we reformat some cells, we need to tell SHEET which cells
we intend to do that. In SHEET, those cells are called blocks. In Lotus
123, we can define only one block at one time, but SHEET can accomodate
up to 18 blocks at one time.
A block is part of the spreadsheet. It is a rectangle which holds
at least one cell. To define a block, you need to select the starting
________
cell and stopping cell of the block. The process of defining the
____ _____________
starting cell requires mouse button and <Control> key, and stopping
______________ ________
cell requires mouse button and <Shift> key.
____
Here is an example to define cell A5 as a block:
- Move the mouse cursor within cell A5
- Press <Control> key and the left mouse button
simultaneously
You may notice that the selected block has been highlighted
by reversing its color.
Here is another example to show you how to define a block
containing cells from B5 to C14 (B5..C14):
- Move the mouse cursor within cell B5
- Press <Control> key and the left mouse button
simultaneously
- Move the mouse cursor within cell C14
-Press <Shift> key and the left mouse button simultaneously.
In summary, to define the starting cell, you have to move the
_____________
mouse cursor over the first cell and press <Control> and left
mouse button simultaneously. To define the stopping cell, you have
_____________
to move the mouse cursor over the last cell and press <Shift> and
left mouse button simultaneously. If no stopping cell is provided
_____________
then the stopping cell is the starting cell.
Using above example, if you want to define block B5..B14
instead of B5..C14
- Move the mouse cursor within cell B14
- Press <Shift> key and the left mouse button simultan-
eously.
If block B5..C14 is the first block you defined, there is
another way to select this block:
- move the mouse cursor within the cell B5
- press the left mouse button and drag until you reach
cell C14
- release mouse button.
De-select blocks:
________________
Selecting any cell by a mouse button click will de-select all
the blocks being selected.
Page 34
SHEET User manual By Chor-ming Lung October 9,
1988
Change display format:
_____________________
To reformat some cells:
- select blocks using above method
- Press <Control R>
or find menu title "Sheet" and choose menu item
"Reformat" under it.
- A dialog box will show up. Choose the format you want
from it.
You can also use the command "@REFORAMT" to reformat some
cells. The command should be:
- @reformat FORMAT_STRING, block1, block2, ....
- FORMAT_STRING consists of two part. The first part is
the format being used, and the second part is the
decimal places. The format of a cell can be "$", ",",
"%", "F", "S" "D1", "D2" and "D3". They represent the
format of "DOLLAR", ",", "PERCENT", "FIXED",
"SCIENTIFIC", "Date1", "Date2" and "Date3" respectively.
For example, if you want to reformat cell B2..C2 and B5..C5
to DOLLAR with decimal place of 2, you can issue the command
@reformat "$2",b2..c2,b5..c5
instead of selecting blocks and press <Control R>.
NOTE:
NOTE YOU CAN ONLY REFORMAT THOSE CELLS WHICH EXIST. That is
because of Sparse Matrix. After a cell has been created,
the cell possesses attributes. If you format some empty
cells and insert something into those cells after that,
those cells appear as default. It is not a bug.
You can set the option in menu item "Options" under
"Sheet" to use the format of previous row. Then,
whenever you enter a new element for the worksheet, it
will try to find the format of previous row on the same
column and uses it as default format. So, you do not
need to reformat again and again.
Page 35
SHEET User manual By Chor-ming Lung October 9,
1988
COPY AND MOVE
COPY and MOVE commands require two blocks. The first block is
the source, and the second one is destination. You have to select
those blocks before you activate COPY command by <Control C> or
find the menu title "Cells" and choose menu item "Copy" under it.
To activate MOVE command, you press <Control M> or find menu title
"Range" and choose menu item "Move" under it.
You can use the command "@COPY source_block, dest_block" or
"@MOVE source_block, dest_block" to do the same thing.
Here is an example showing you how to copy the content on
cell A1 to A2..A5. Assume that the content of A1 is "1+A2". The
display of cell A1 should be 1.
Key Mouse button Effect Mouse cursor
position
-----------------------------------------------------------
A1
Control + Mouse click Cell A1 inverted
A2
Control + Mouse click Cell A2 inverted
A5
Shift + Mouse click Cell A2 through
A5 inverted.
Control C An alert box
display on screen
Return or Mouse click
on OK.
The operations prior to <Control C> define two blocks. The
first block consists of cell A1 only. The second block consists of
cells A2 through A5. <Control C> tells SHEET to copy the content
of the first block to the second block. If cell A6 does not
contain anything and you set the recalculation mode to Natural,
your display should be:
A Cell content
1 5 1+A2
2 4 1+A3
3 3 1+A4
4 2 1+A5
5 1 1+A6
Natural recalculation means formulas are calculated in their
dependent order. Cell A1 depends on the result of A2 (1+A2). So,
the calculation of A1 is postponed until A2 gets its result. A2
depends on A3 and A3 depends on A4 and so on. Thererfore, the
first formula being computed is A5. If a formula refers to an
empty cell, a zero will be returned. Hence, A5=1+A6=1+0=1, cell
A4=1+A5=1+1=2 and A3=1+A4=1+2=3 ...
Page 36
SHEET User manual By Chor-ming Lung October 9,
1988
One question you may ask: Why the cell reference of A2 in
cell A1 has been changed to A3, A4, A5 and A6 in cell A2, A3, A4
and A5 respectively? The answer is relative cell reference.
Relative and Absolue cell reference:
___________________________________
Cell reference can be absolute or relative. By adding a $
symbol before the column letter or/and row number, we designate a
part of a cell address as absolute or both parts as absolute. For
example:
$A2 denotes column (A) is absolute and the row (2) is
relative.
$A$2 denotes column (A) and row (2) are both absolute.
A$2 denotes column (A) is relative and the row (2) is
absolute
A2 denotes column (A) and row (2) are both relative.
During COPY, a formula in source block which contains
relative cell references will be modified. If the formula is
copied down, then the relative row number will be increased. If
the formula is copied to right hand side, then the relative column
letter will be increased. If you intend to copy "1+A2" to A2..A5,
then you must use formula "1+A$2" instead of "1+A2".
NOTE:
NOTE:
A block can be a single cell (A2), part of a column
(A2..A5),part of a row (B20..E20) or a range (A4..C10). The
following describes how the program handle different types of
block COPY. Source is the first block and destination is the
second block. Result is the range size chosen by COPY.
Source Destination Result size
---------------------------------------------------------
Single cell any kind of block the largest range
column reference any kind of block the largest range
row reference any kind of block the largest range
range reference any kind of block the source range
You can use "@COPY" to copy from source to destination too.
You can use "@COPY" to copy from source to destination too.
Examples:
- If you want to COPY C1 to C2..C20
* Control and mouse click on cell C1
* Control and mouse click on cell C2
* Shift and mouse click on cell C20
* <Control C>
OR: "@COPY c1,c2..c20"
- If you want to COPY C1..C12 to D1..D12
* Control and mouse click on cell C1
* Shift and mouse click on cell C12
* Control and mouse click on cell D1
* <Control C>
OR: "@COPY c1..c12,d1"
Page 37
SHEET User manual By Chor-ming Lung October 9,
1988
ERASE CELLS
After some practice, you may find some data in your worksheet
are no longer needed. Hence, you need the capability to erase
them. Before you activate the ERASE command, you must select the
desired cells as blocks. Yes, you can erase more than one block,
but the total number of blocks cannot exceed 18. Here is an
example showing you how to erase cells C1..D11, E5, F8 at one
time.
Key Mouse button Effect Mouse cursor
Position
----------------------------------------------------------------
C1
Control + Mouse button C1 is inverted
D11
Shift + Mouse button C1 through D11
are inverted
E5
Control + Mouse button E5 is inverted
F8
Control + Mouse button F8 is inverted
Control E An alert box for
ERASE command on
screen
Return or Mouse button The screen will be
on OK redrawn to show the
effect of erase.
Note:
____ Instead of using mouse operations, you can use the command
"@ERASE" to erase part of your worksheet. To do the same
thing as above, you can issue the command:
@erase c1..d11,e5,f8
Page 38
SHEET User manual By Chor-ming Lung October 9,
1988
INSERT AND DELETE
INSERT and DELETE commands work with row and column only. The
first thing before we activate INSERT or DELETE command, we must
select a row/column.
Row/Column selection:
____________________
Here is an example to show you how to select column D:
Mouse cursor position Mouse button
------------------------------------------------------
COLUMN BAR
column letter D
Click the mouse button
After you select column D, the whole column will be inverted.
This is an example showing you how to select row 3
Mouse cursor position Mouse button
------------------------------------------------------
ROW BAR
row number 3
Click the mouse button
After you select row 3, the whole row will be inverted.
To delete or insert a row/column, you must first select the
row/column by clicking on the column or row bar with desired
column letter or row number. After that, you can press <Control I>
or <Control D> for inserting or deleting. You can choose the menu
title "Row/Col" and choose menu item "Insert" or "Delete" to do
the same thing.
Note:
____ INSERT and DELETE commands work with row and column only.
- If you intend to add some blank rows or column but you do not
want to add the whole rows/columns, then you must use MOVE
command instead.
- If you intend to delete some cells, use ERASE instead of
DELETE.
Page 39
SHEET User manual By Chor-ming Lung October 9,
1988
LOAD, SAVE AND PRINT
If you take a look of the menu title "File", you may notice
that there are three types of load and save commands. Menu item
"Load" will load the ordinary SHEET files (they have a file
extension SHT). "Load WKS" will load Lotus 123 release 1A or
release 2 files. "Load PART" is similar to Lotus file combine
command. It is used for merging other worksheet with current
worksheet. The file you "Load" with part should be saved with
"Save PART" command and its file extension should be PRT.
Menu item "Save" will save the current file using SHT format.
"Save WKS" will save file in Lotus WKS format. "Save PART" is
similar to Lotus file extract command. It is used for saving some
part of the current worksheet. To activate this command, you
should select blocks to hold cells being output, and activate this
command.
Currently, you cannot save your worksheet in Lotus release 1A
format. Other than that, every thing is functional.
File extension:
______________
Lotus 123 release 1A uses WKS as its file extension. SHEET
uses SHT as its file extension. If you enter a file name in your
file selector dialog box, you should include the file extension.
The file extension for PART is PRT. If you are printing the
spreadsheet to disk, the file extension for this file should be
PRN.
Load:
____
There are three way to load a spreadsheet:
- From the menu title, choose "File"
Choose menu item "Load"
Select your file from the file selector box
- <Control-L>. Press <Control> and L key simultaneously
Select your file from the file selector box
- @load (This is a BASIC command).
Save:
____
There are three way to save a spreadsheet:
- From the menu title, choose "File"
Choose menu item "Save"
Enter your file in the file selector dialog box
- <Control-S>. Press <Control> and S key simultaneously
Enter your file in the file selector dialog box
- @save "filenmae" (This is a BASIC command.)
Load PART:
_________
You can merge those cells that are saved with "Save PART"
into your current worksheet. To load those files, you should
select the menu item "Load PART" from the menu title "File".
Page 40
SHEET User manual By Chor-ming Lung October 9,
1988
Save Part:
_________
You can save part of your worksheet to a file and then merge
it with other worksheet. It is especially useful for BASIC
programmer. They may create some BASIC routines that are needed
from file to file. Save them as PART and load them back for other
files. To save part of your worksheet, you need to select those
cells as blocks and activate the menu item "Save PART". The file
extension for this kind of file is PRT.
Lotus files:
___________
In many ways, SHEET is quite similar to Lotus 123. But I must
emphasize that I am not writing a Lotus clone. Instead, I am
trying to write a BASIC interpreter in a spreadsheet environment.
Even though, SHEET can read Lotus files, you may not be lucky
enough to convert all your existing Lotus files. SHEET will
convert those functions it supports. When SHEET encounters problem
in function convertion, it will stop loading the file. It can read
Lotus 123 release 1A or 2 files.
You may also notice that the converted SHT files are normally
bigger than WKS files. There are two reason for that. First, I use
a single data type -- double -- for all constant number. Lotus
separates number from integer to double. An integer is two bytes
long while a double is eight bytes. The second reason is that
Lotus stores formula in suffix order while SHEET stores formula in
infix order (e.g. 3+4 is in infix order, its suffix order
representation is 3 4 +). Suffix order not only saves storage (in
suffix order, parenthesis can be discarded and comma between
parameters can be discarded too), it also speeds up formula
calculation. You may ask me why I use infix order? Well, it is not
easy to write a BASIC interpreter using suffix order.
Print:
_____
You can print your work sheet to a file or to printer. Before
Before
you print, please specify the block which you want to print. The
you print, please specify the block which you want to print
print routine will print those columns that fits on the margins.
If some columns on the print range are not print on the first
pass, they will be printed on later passes.
Note:
Note The information you enter for the PRINT DIALOG will
not be saved with your spreadsheet file. It means
you have to type in your format each time you want
to print it.
Here is an example showing how to print the block A1..E12
Key Mouse button Effect Mouse cursor
position
----------------------------------------------------------------
A1
Control + Mouse button A1 is inverted
E12
Shift + Mouse button A1 through E12
are inverted
Page 41
SHEET User manual By Chor-ming Lung October 9,
1988
<Control P> PRINT dialog box
display
Change dialog box contents.
<Return> or Mouse button
on OK.
Let us examine what the components of the print dialog box
mean. If you want to print your worksheet to disk instead of
printer, enter D in the box after "Print to (P)rinter/(D)isk:".
Otherwise, enter P. If you want to print the formula (including
BASIC statement) of each cell, then enter Y for the question
"Print Formula (Y)es/(N)o"". Otherwise, enter N. NOTE: versions
before 2.0 prints formula row after row. The new version prints
formula column after column. It makes printing BASIC program
easier.
Right margin-->
<---------------------- Page width --------------------->
^ ********************************************************
| * ^ *
| * | Top margin and titles *
| * v *
| * ************************************** *
| * * * *
*<------>* * *
Page * Left * * *
Length * Margin * * *
* * * *
| * * * *
| * * * *
| * * * *
| * * * *
| * * * *
| * * * *
| * * * *
| * * * *
| * ************************************** *
| * ^ *
| * | Bottom margin *
| * v *
v ********************************************************
If you want to test your output before you actually print it,
you can enter the command:
@redirect to "prn:"
@print_block a1..g4,4,76
The commands above will print row 1 to row 4 from column A to
column G using left margin 4 and right margin 76 to your printer.
You can check the result before you actually print it. (That is
useful because you cannot stop PRINT when it actually prints).
Page 42
SHEET User manual By Chor-ming Lung October 9,
1988
PART III -- SHEET BASIC
A spreadsheet is a powerful computing tool. It is also a handy
environment for handling data. Yon can add, delete and change your data
with ease, and the spreadsheet program modifies all the required places
to reflect the changes.
Let the spreadsheet handle your data and numurical calculations,
and let the BASIC interpreter do the rest. SHEET BASIC can do
calculations, string operations, graphics and text files. The
combination of spreadsheet and BASIC provides an ideal environment for
using your computer productively.
The following is a brief explanation of each session of PART III.
Cells, Variables, String: This chapter introduces the new cell
reference method, variables and their naming
convention.
You cannot assign a string to a variable, but
you can assign a string to a cell. The rules for
accessing and operating strings are introduced too.
Flow control Statements: These statements change the execution sequence
of BASIC commands. The commands include:
IF .. THEN .. ELSE, GOTO, GOSUB .. RETURN, LOOP ..
EXIT IF .. ENDLOOP, FOR .. NEXT, and RUN
I/O Statements: REDIRECT TO, PRINT
Miscellaneous statements: SAVE SCREEN, RESTORE SCREEN, WAIT, DEFINE,
MESSAGE
Text files: GET_FILE, OPEN, CLOSE, INPUT, PRINT
Worksheet commands: COPY, MOVE, ERASE, REFORMAT, SORT, SWAP
Console commands: CLS, CURSORON, CURSOROFF, VIDEOHIGH, VIDEONORM,
GOTOXY, INKEY, UNGET, INPUT
Graphic commands:
Setup commands: WINDOW, VIEWPORT, SCALE, EXITGRAPH, CLEAR
Line/Dot commands: ATTRIBUTE, LINE, LINE_TO, PLOT, PLOT DATA,
SPLINE
Turtlegraphics: FORWARD, TURN, TURN_TO
Axis commands: MARKX, MARKY, LABELX, LABELY
Text command: PTEXT
Miscellaneous: MOUSE_POS
Page 43
SHEET User manual By Chor-ming Lung October 9,
1988
Cells and Variables
Cell reference with dimension:
_____________________________
A cell reference is a combination of column letter and row number.
This type of access method is not enough for a programming language. In
SHEET, you can use a cell as a BASE and move it horizontally or
vertically by appending two numbers which are separated by comma and
embraced by "[" and "]". Each column letter has its own value. Column A
is 1, B is 2 and so on. For example, A2[3,4]. A2 is the BASE whose
coordinate is [1,2] and
A2[3,4]=[1,2]+[3,4]=[4,6]=D6.
Here are some other examples:
C1[4,7] which is equivalent to cell G8. C1 is equal to
[3,1] and C1[4,7]=[3,1]+[4,7] = [7,8]. Column G is
7. So the combination of this cell is G8.
H123[-2,4] H123=[8,123] and H123[-2,4] = [8,123]+[-2,4] =
[6,127] or F127.
Variables:
_________
Variables must be initialized before being used. You can define up
to 150 variables. A variable name starts with an alpha character which
is followed by alphanumeric characters. Up to 15 characters are
significant. A variable name must not be identical with reserved
keywords, built-in functions and cell reference.
examples:
row=4 correct
pi=3.1415 incorrect (PI is a predefined constant)
a1=12 incorrect (it is cell A1)
1and2 incorrect (the first character is not letter)
There are so many keywords and built-in functions, how can one
differentiate them from the other? Keywords are embraced by leading and
trailing spaces. For example, IF is a keyword and when it is displayed,
it is " IF ". A built-in function has a leading space before the name.
For example, SIN(x) will be displayed as " SIN(X)". Variables do not
have any leading or trailing space.
Cell reference with variables
_____________________________
The whole worksheet can be viewed as a two dimensional array. You
can access any cell by A1[c,r] where c is the column number and r is
the row number.
Not only you can access individual cell by using this method, you
can also use it for block. For example, assume that you store your
square matrix in cells a1..c3 and you want to store the inverse of this
matrix to d1..f3. You can use the following program to do this.
! matrix(d1,inverse[a1..c3])
! end
Assume that you need to solve another square matrix in which you
Page 44
SHEET User manual By Chor-ming Lung October 9,
1988
store it in cells a1..d4. You can easily change the argument of matrix
to:
! matrix(e1,inverse[a1..d4)
If you keep using this method to solve square matrix in different
sizes, you may find it is clumsy and easy to make mistakes. Here is
another program that makes the whole process of changing a lot easier
for you and less error prone.
!n=3
! matrix(a1[n,0],invers[a1..a1[n-1,n-1])
! end
n=3 so a1[3,0]=[1,1]+[3,0]=[4,1]=d1 and
a1[n-1,n-1]=[1,1][2,2]=[3,3]=c3.
All you need to change is the constant n.
String
______
You may store numerical data or TEXT string in a cell. To access a
cell as a string, you should add the "$" at the end of each cell
reference. For example:
A1$, A1[i,j]$
String operators for comparisons, concatenation and string
functions are added for BASIC users. REMEMBER, string functions and
concatenation are available only in BASIC statements and commands.
Currently, you can assig string to ceeells but not the 150 variables.
Two predefined string variables are provided for file name and input
buffer. They are FILENAME$ and BUF$. You can use them but you cannot
assign new value to them. FILENAME$ is changed whenever you use the
file item selector and BUF$ is changed whenever you use the command
INPUT. For more details, please refer to "Text files" for GET_FILE,
INPUT #n and "Console:" for INPUT.
If an empty cell is referred as a string, a null string will be
returned. If a cell with number is referred as a string, then a string
that is exactly being displayed for that cell will be returned. If the
cell is a TEXT string, a string excluding the leading character will be
returned. The leading character for a TEXT string is one of ' " ^ and
\.
If you are assigning a string to a cell, and if the string does
not contain one of those leading character, then the default character
defined in "TEXT justification" of menu item "Defaults" will be used as
the leading character for that cell.
WARNING: DO NOT MAKE ANY STRING LONGER THAN 249 CHARACTERS.
String operators:
String operators
+: string concatenation. For example "Thi"+"s a test" will
return a string "This is a test".
=: string assignment or string equal comparison. E.g.
!a1$="^123": END. or !if a1$=b1$ then ...
Page 45
SHEET User manual By Chor-ming Lung October 9,
1988
<>, >, <, =>, >=, =<, <=
string comparisons for not equal, greater, less, equal or
greater and equal or less than.
Page 46
SHEET User manual By Chor-ming Lung October 9,
1988
Flow control Statements
IF .. THEN .. ELSE ..
Syntax:
IF conditionn THEN statements:ELSE statements
Description:
This statement is used to make a decision regarding program
flow based on the result returned by an expression.
Example:
IF A1=12 THEN A2=20:ELSE A2=30
NOTE: The following statements are not valid:
IF A1=12 THEN G3:ELSE GOTO G4
IF A1=12 GOTO G3
If you have used traditional BASICs before, you would know that
you can write "IF A1=12 THEN 120:ELSE GOTO 130" and "IF A1=12 GOTO
120" They are not valid in SHEET. Instead, you must change them
to:
IF A1=12 THEN GOTO G3:ELSE GOTO G4
IF A1=12 THEN GOTO G3
GOTO
Syntax:
GOTO cell.
Description:
This statement is used to branch unconditionally to a
specified cell.
Example:
GOTO A1
GOSUB .. RETURN
Syntax:
GOSUB cell
...
RETURN
Description:
These statements uses in pair for branching to, and returning
from a subroutine.
LOOP .. EXIT IF .. ENDLOOP
Syntax:
LOOP
...
EXIT IF condition
....
ENDLOOP
Description:
Those commands are used to execute a series of statements in
Page 47
SHEET User manual By Chor-ming Lung October 9,
1988
a loop until some conditions are true. Condition is a logical
expression which may be either TRUE or FALSE. Within the
LOOP, multiple EXIT IFs are allowed. It is adviced not to use
GOTO statement to break the loop.
Example:
The following example assigns 1 to 20 to cell A1 through A20.
R=0
LOOP
A1[0,R]=R+1
R = R+1
EXIT IF R=20
ENDLOOP
FOR .. NEXT
Syntax:
FOR assignment TO expression [STEP expression]
...
NEXT variable_being_assigned
Description:
These commands are used to execute a series of statements in
a definite number of times. STEP is optional. If no STEP
value being provided, it is assumed to be one. In other BASIC
interpreters, NEXT I,J means: increases value of I, when the
_________
FOR loop for I is done, then increases value of J. You must
use NEXT I: NEXT J in SHEET BASIC. The number of nesting FOR
_______________
loops is infinite.
RUN
Syntax:
RUN cell
Description:
RUN is similar to GOTO. The only difference is that RUN will
initialize the runtime stack and reset the symbol table. Most
of the time, RUN is used to execute BASIC codes starting from
a specified cell. If the cell is C1, you should enter "@run
c1" in the editing buffer.
Page 48
SHEET User manual By Chor-ming Lung October 9,
1988
I/O Statements
REDIRECT TO
Syntax:
REDIRECT TO "file"
Description:
This statement changes the output path of subsequent
PRINT commands to the specified file. There are a few
predefined files. prn: is the printer, con: is your monitor
____ ____
and aux: is the rs-232 port. Otherwise, they are disk files.
____
The default file is con:. Except con:, all the file output
are buffered. It means you may not get instant response.
If you redirect the output to printer and if your
printer is not on, an alert box will show up. If you choose
"Quit", the BASIC program being executed will be stopped. If
you choose "Continue", the subsequent PRINT commands will
output to the file prior to REDIRECT TO command. Most likely,
it is con:. You should turn your printer on before you choose
"Try again".
EXAMPLE:
REDIRECT TO "prn:"
PRINT statement
Syntax:
PRINT cell/cell$/number/string[,/;...]
Description:
This command prints numeric or string data to the file
specified by REDIRECT TO command. Implicitly, it is your
monitor. If no data following the PRINT command, a blank line
will be printed. String data must be enclosed by double
quotation marks. Each datum can be a cell reference,
variable, string or number. If more than one datum is going
to print, each of them should be separated by comma or
semicolon. If you are using comma to separated two data, the
second data will be aligned to the next TAB position. Each
TAB is 10 characters wide.
If you are printing cell content, the format specified
in that cell is used exactly as display. If the cell you
intended to print contains TEXT string, you should add "$" at
the end of the cell reference. Otherwise, you will print a
cell with zero.
If a number is being printed, the number will be
surrounded by a leading space and a trailing space. The
output format of variables is similar to a number.If you are
printing string, the text inside the embraced double
quotation marks will be outputed.
While you are printing, you can use <Control S> and
<Control Q> to suspend and resume your display. BUT don't
_________
press <Control C> to stop your PRINT session. If you do press
_____________________________________________________________
<Control C> while PRINT command is printing on console, YOU
_____________________________________________________________
Page 49
SHEET User manual By Chor-ming Lung October 9,
1988
WILL GET back to desktop and you need to reboot the system to
_____________________________________________________________
use SHEET. UES <ESC> to stop your BASIC program.
________________________________________________
Example:
PRINT a1,12;b1$;20;"This is a test"
Page 50
SHEET User manual By Chor-ming Lung October 9,
1988
Miscellaneous statements
If you print to console, your current display may be garbled.
Therefore, you need to save your screen before printing and
restore it after you are done.
SAVE SCREEN
Syntax:
SAVE SCREEN
Description:
Save current display to SCREEN reserved area. That is
the same area that is used for FAST screen update. If you
deny to reserve 32K for fast screen update, you may crash the
system when you use this command.
RESTORE SCREEN
Syntax:
RESTORE SCREEN
Description:
Restore the screen to the old display.
WAIT
Syntax:
WAIT
WAIT #
Description:
This statement suspends the execution of BASIC commands.
# means an integer number. If no number follows WAIT, it will
print "Press return to continue ..." on console and you must
press <Return> key to resume its operations. The printed
message will damage your display. Hence, you should save your
screen before calling WAIT.
If WAIT followed by an integer x, then the system will
wait for x seconds.
Example:
WAIT 5 (System suspends for 5 seconds)
DEFINE
Syntax:
DEFINE fname(parameters) = expression
Description:
This statement let user define its own functions. Fname
is the function name. Its naming convention follows the rule
for naming variable. You can put up to 9 parameters for each
user function. Each parameter is a variable separated by
comma. Each DEFINE statement must occupy a single cell and
user defined function is useful for numerical calculation
only.
Page 51
SHEET User manual By Chor-ming Lung October 9,
1988
MESSAGE
Syntax:
MESSAGE "text"
Description:
This command uses the GEM alert box to display a
message. "text" can be a string of up to 5 lines. Each line
is separated by "|" and the length of each line should not be
bigger than 40.
Example:
MESSAGE "Hello|World"
EXAMPLE: Address label program
EXAMPLE
Assume that you store your address data in the current
spreadsheet. Column A holds the Last name. Column B holds the
First name. Column C holds the address and D,E,F holds City, State
and Zip respectively. The data starts from row 3. The following
program will print the data in your address sheet to the address
label for handling mails. Assume the program stores from cell
G1..G10 and you run it by "@run g1".
G1 : ! REDIRECT TO "prn:"
G2 : !R=0: SAVE SCREEN
G3 : ! LOOP
G4 : ! EXIT IF ISEMPTY(A3[0,R]): PRINT
G5 : ! PRINT A3[1,R]$;A3[0,R]$
G6 : ! PRINT A3[2,R]$
G7 : ! PRINT A3[3,R]$;A3[4,R]$;A3[5,R]$
G8 : ! PRINT : PRINT :R=R+1
G9 : ! ENDLOOP : WAIT
G10 : ! RESTORE SCREEN
Page 52
SHEET User manual By Chor-ming Lung October 9,
1988
Text files
SHEET should be the first spreadsheet which has the commands
for you to access any TEXT files. The command is line oriented.
These commands are intended for people who need to acquire data
from other sources. There are two constant strings that are
related to some of the Text file commands. FILENAME$ is a constant
string that can be changed by file item selecto dialog box. BUF$
is a constant string that is modified by any INPUT statement.
Using the file commands and string functions, you can do some
thing that is impossible for user of other spreadsheet programs.
GET_FILE
Syntax:
GET_FILE def_search, name$
Description:
Use the file item selector to find the file name.
Def_search is the default search string. It can be a string
with wild characters. For example "\*.SHT". name$ can be
FILENAME$ or a cell reference.
Example:
GET_FILE "\*.*",filename$
GET_FILE "\*.txt",a1$
OPEN
Syntax:
OPEN "o",#n,filename$
OPEN "i",#n,a1$
Description:
Open a file for input or output. "o" means output and
"i" for input. #n means the channel number. N should be a
number from 0 to 9. Filename can be FILENAME$ or a cell
reference.
Example:
OPEN "o",#1,FILENAME$
OPEN "i",#2,"test.txt"
CLOSE
Syntax:
CLOSE #n[,#m,...]
Description:
Close opened files. #n , #m are the channel number. They
should be in the range of 0 to 9. If you try to close an
unopened file, you will get an error message "Cannot close an
unopened file".
Example:
CLOSE #1
Page 53
SHEET User manual By Chor-ming Lung October 9,
1988
INPUT #n
Syntax:
INPUT #n,buf$
Description:
Read a line from the input file. #n is the channel
number. buf$ can be BUF$ or a cell reference. If the channel
number being referred is an output file or an unopened file,
you will get an error message "Channel number error".
Example:
INPUT #1, BUF$
INPUT #1, a1$
PRINT #n
Syntax:
PRINT #n, cell/cell$/string/number[,/;....]
Description:
PRINT #n is similar to PRINT except that PRINT outputs
to the file specified by REDIRECT TO (implicitly your
terminal). PRINT #n outputs to the channel number being
opened by OPEN command.
Example:
Assume that cell a1$="This is a test" and b1=12.34 and the
widths of column A and B are 9.
PRINT #1,a1;b1 ==> " 0 12.34 " to #1
PRINT #1,a1$;b1 ==> "This is a test 12.34 " to #1
Page 54
SHEET User manual By Chor-ming Lung October 9,
1988
Worksheet commands
SHEET BASIC is part of SHEET -- the spreadsheet program. It
is more convenient if you can use some of those worksheet commands
to handle data in your BASIC program. This new version of SHEET
provides some of the essential worksheet commands for you to
incorporate with your program. They are COPY, MOVE, ERASE,
REFORMAT, SORT and SWAP. SORT and SWAP are new commands for SHEET
too. Currently, they can be activated by BASIC commands only. They
work fine with cells whose formula do not refer to other cells.
That is because the cell references in those formula are not
updated when you SWAP them. Next release should remove this
restriction.
COPY
Syntax:
COPY block1, block2
Description:
Copy block1 to block2. A block can be a single cell or a
rectangle portion of the worksheet. The COPY command follows
the rule for COPYing cells by <Ctrl-C>.
Example:
COPY a1..b3, c1
MOVE
Syntax:
MOVE block1, block2
Description:
Move block1 to block2. It is similar to the command
<Ctrl-M>.
Example:
MOVE a1..b3, c1
ERASE
Syntax:
ERASE block1[,block2,...]
Description:
Erase portion of the worksheet specified by the blocks.
Up to 18 blocks can be erased at one time.
Example:
ERASE a1..b3,c1..d3
REFORMAT
Syntax:
REFORMAT FORMAT,block1[,block2,...]
Description:
Reformat portion of the worksheet. Up to 18 blocks can
Page 55
SHEET User manual By Chor-ming Lung October 9,
1988
be reformat at one time. FORMAT is a string which consists of
two part -- format and decimal places. A format can be "$",
",", "F", "S", "D1", "D2", "D3". "$" for DOLLAR, "," for
COMMA, "F" for FIXED, "S" for SCINETIFIC and "D1", "D2", "D3"
for DATE1, DATE2, and DATE3 respectively. No decimal places
should follow "D1","D2" and "D3".
Example:
REFORMAT "$2",A1..B3
(reformat a1..b3 for dollar and 2 decimal places)
REFORMAT "D1", C1..C12
(reformat C1..c12 for Date1 format)
SORT
Syntax:
SORT "A",block, cell1[,cell2,...]
SORT "D",block, cell1[,cell2,...]
Description:
Sort followed by "A" means sort block in ascending order
and "D" for descending order. Only the block will be affected
by the sort command. Cell1 points to the first column that is
used for comparison. Up to 6 of these cells can be used as
criteria for comparisons. In comparison, an empty cell is
smaller than a cell with numerical value and a cell with
numerical value is smaller than a cell contains TEXT string.
If the column being compared consists of BASIC statements,
SORT will be stopped. Currently, SORT does not modify the
formula on each cell being affected. You may have trouble in
sorting cells whose formula refers to other cells.
Example:
SORT "A",A1..B3,A1
SWAP
Syntax:
SWAP cell1, cell2
Description:
This command swaps cell1 with cell2. It swaps between
two cells. If you want to swap a row with other row, you
should use a FOR loop to do it one by one. Again, it has
problem with cell whose formula refers to other cell.
Example:
SWAP a1,b2
Page 56
SHEET User manual By Chor-ming Lung October 9,
1988
Console commands
________________
The Atari monitor emulates the VT52 terminal. You can use
those VT52 commands to control your output. This version of SHEET
provides some of the VT52 commands in the SHEET BASIC. They are
CLS, CURSORON, CURSOROFF, VIDEOHIGH, VIDEONORM and GOTOXY. One
function and two commands for reading keyboard entries are
provided. They are INKEY, UNGET and INPUT.
Screen coordinate: (1,1) is the upper left-corner, (80,1) is
the upper right-corner, (1,25) is the bottom left-corner and
(80,25) is the bottom right-corner.
CLS
Syntax:
CLS
Description:
Clear the current screen and move the cursor to the position
1,1.
CURSORON
Syntax:
CURSORON
Description:
Makes the screen cursor visible.
CURSOROFF
Syntax:
CURSOROFF
Description:
Turns the screen cursor off.
VIDEOHIGH
Syntax:
VIDEOHIGH
Description:
Makes the subsequent output characters in reverse color
VIDEONORM
Syntax:
VIDEONORM
Description:
Makes the subsequent output characters in normal color
GOTOXY
Syntax:
GOTOXY x,y
Description:
Moves the screen cursor to position x,y. x is in the
Page 57
SHEET User manual By Chor-ming Lung October 9,
1988
range of 1 to 80 and y is in the range of 1 to 25.
INKEY
Syntax:
a=INKEY
Description:
It is a function that returns the ASCII number of a key
being pressed. If no key or special keys are being pressed -1
will be returned. Arrow keys for Up, Down, Left, Right have
value of 129,130,131 and 132 respectively . Arrow keys with
Shift keys for Up, Down, Left, Right have values of
133,134,135 and 136.
Example:
A=INKEY
UNGET
Syntax:
UNGET x
Description:
Put x back to the input stream for later INPUT uses.
Example:
A=INKEY:.... :UNGET a
INPUT
Syntax:
INPUT buf$
Description:
buf$ can be either BUF$ or a cell reference. This
routine calls the standard C function gets to get your input.
If you UNGET a character before calling this command, the
UNGET character cannot be altered or displayed but it will be
the first character in your buf$.
Page 58
SHEET User manual By Chor-ming Lung October 9,
1988
Graphic commands
________________
Your monitor can be used to display pictures. A picture is a
collection of picture elements (pixels). Some people prefer to call a
pixel a dot. Normal graphic commands in other BASIC languages provide
you a mean to change each pixel in your display. The addressing method
they used are called Raster coordinate. The left top-corner is (0,0)
and the right bottom-corner is (639,399), (639,199) or (319,199) for
high, medium and low resolution.
In real world, we are dealing with Cartesian coordinate instead of
Raster coordinate. The left bottom-corner is the minimal point we can
use for display and the right top-corner is the maximal point. The
graphic commands provided by SHEET BASIC use the Cartesian coordinate
and those commands will translate Cartesian points to pixels.
SHEET BASIC is not the first BASIC interpreter which provide
scientific graphics (at least True BASIC is a few years earlier). But I
think it is the first BASIC provides cubic spline curves. Cubic spline
is a method scientists use to draw smooth curves.
The graphic commands are highly relocatable and they work on any
resolution. Hence, it is possible to use 16 colors to plot your graph
in low resolution.
The graphics commands are separated into the following categories:
Setup commands:
Setup commands: WINDOW or VIEWPORT, SCALE, EXITGRAPH,
CLEAR
Line/Dot commands:
Line/Dot commands: ATTRIBUTE, LINE, LINE_TO, PLOT, PLOT
DATA, SPLINE
Turtlegraphics:
Turtlegraphics FORWARD, TURN, TURN_TO
Axis commands:
Axis commands MARKX, MARKY, LABELX, LABELY
Text command:
Text command: PTEXT
Miscellaneous:
Miscellaneous: MOUSE_POS
CONVENTION:
CONVENTION Optional parameters are bracketed. # means a
number. (x,y), (x1,y1) and (x2,y2) are measured in
Cartesian coordinate. An r added before x or y
means the point is in Raster coordinate.
Page 59
SHEET User manual By Chor-ming Lung October 9,
1988
Setup commands:
______________
WINDOW or VIEWPORT defines the part of the screen being used for
graphic output. They are the only commands whose parameters are in
Raster coordinate. SCALE defines the scaling factors that translate the
Cartesian corrdinate data into location on your display. CLEAR cleans
up the area defined by WINDOW or VIEWPORT. WINDOW and VIEWPORT change
the clipping area. The last command after your graph is done should be
EXITGRAPH which resets the clipping area to the current window.
Otherwise, you may have an illusion that your system is locked. In case
you feel your system is locked, you should try <Esc> first to see
whether a BASIC program is running. If the system is still lock-up,
enter the command "@EXITGRAPH" in blind and you should have the system
back.
WINDOW:
______
Syntax:
WINDOW [# [,rx1,ry1,rx2,ry2] ]
Description:
If no parameter provides for this command, then the
current window will be used for graphic output.
SHEET supports up to 4 windows. Each window has its
own number ranging from 1 to 4. This number corresponds
to the number you press ALT-1, ALT-2, ALT-3 or ALT-4.
So, you can use any window for graphics output.
If raster parameters provide, then the window
specified will be resized to those coordinates and the
work area of that window will be used for graphics
output. If a window changes it size, AES will ask SHEET
to redraw it. So, you may need to run your program twice
to get the graph.
If the window number specified has not been opened,
then you won't see the graph, but the BASIC interpreter
will not stop.
Examples:
WINDOW using the current window
WINDOW 1 using window 1
WINDOW 1,0,20,350,120 reposition and resize window 1
Hints:
If your program involves a lot of calculation, and
you don't want to run the program twice to get the
graph, you can stop your program by <Esc> key when you
see the window has been resized and then enter the same
run command again in blind. So, you have better to put
your WINDOW command on the first line.
Page 60
SHEET User manual By Chor-ming Lung October 9,
1988
VIEWPORT:
________
Syntax:
VIEWPORT rx1,ry1,rx2,ry2
Description:
WINDOW lets you to borrow the working area of a
spreadsheet window. VIEWPORT command lets you put your
picture anywhere in your screen. If the raster
parameters are 0,0,0,0 then the whole screen will be
used for graphic display. It is desirable if you want to
test the graph on medium resolution and display the
final graph on low resolution.
Examples:
VIEWPORT 0,0,0,0
VIEWPORT 0,0,350,120
SCALE:
_____
Syntax:
SCALE xmin, ymin, xmax, ymax
Description:
SCALE setup the scaling factors which are used for
mapping Cartesian coordinate data to Raster coordinate
pixels. xmin,ymin specifies the left bottom-corner
coordinate and xmax,ymax the right top-corner. You
should make the scale a little bit larger than what you
want to leave some spaces for texts.
CLEAR:
_____
Syntax:
CLEAR
Description:
This command clears the screen specified by WINDOW
or VIEWPORT commands.
EXITGRAPH:
_________
Syntax:
EXITGRAPH
Description:
WINDOW and VIEWPORT commands will change the
clipping area. EXITGRAPH resets the clipping area to the
current window and refreshes it (sometimes your graph
may overwrite part of the current window).
Page 61
SHEET User manual By Chor-ming Lung October 9,
1988
Line/Dot commands:
_________________
Each line posseses some attributes. It has color, width and its
type. A line can be a solid, or broken line. This is the type of a line
and there are 6 line types defined.
A dot has color and width. Instead of dot, sometimes you may want
to display your data using markers. There are 6 different markers
defined in SHEET BASIC graphic commands.
SHEET BASIC is part of the spreadsheet SHEET. You may have your
data stored in the spreadsheet. There are two special commands to plot
data stored in cells. They are PLOT DATA and SPLINE.
ATTRIBUTE:
_________
Syntax
ATTRIBUTE color#,width
Description:
ATTRIBUTE command changes the color and width of
subsequent graphic commands. The default color is 2
which is red and the default width is 1.
LINE:
____
Syntax:
LINE x1,y1,x2,y2[,linetype]
Description:
This command draws a line from (x1,y1) to (x2,y2).
If no type specified, it is supposed to be solid line.
The parameter type is a number ranging from 1 to 6.
linetype:
1: solid line
2: long dashes
3: dots
4: dash-dots
5: dashes
6: dash-dot-dot
LINE_TO:
_______
Syntax:
LINE_TO x1,y1[,type]
Description:
This command draws a line from the previous
position to (x1,y1). The last line/dot commands
specified the previous position. If the program is newly
executed, the previous position is (0,0).
Page 62
SHEET User manual By Chor-ming Lung October 9,
1988
PLOT:
____
Syntax:
PLOT x,y[,marker#]
Description:
If no marker number specified, PLOT command will
draw a dot on the position (x,y). The markers chosen for
SHEET BASIC are model after Lotus 123.
MARKER:
1: square
2: +
3: diamond
4: up-triangle
5: x
6: down-triangle
PLOT DATA:
_________
Syntax:
PLOT DATA xrange, yrange[,marker#, linetype]
Description:
The data are stored in the spreadsheet. PLOT DATA
accesses x,y pairs from the xrange and yrange specified.
It will plot data from the first row to the last row in
the range. Please refers to PLOT for marker number and
LINE for linetype. NOTE: if your data are quite dense,
the linetype other than 1 may not break the line the way
you specified.
SPLINE
______
Syntax:
SPLINE xrange, yrange,increment
Description:
Given n points (knots), mathematicians can find n-
1 different cubic polynomials that pass through the n
_________
points. This curve generated by those polynomials is
called spline-curve. It is a smooth curve and it may
represent the data more closely than connecting the
points with lines. Increment should be smaller than any
subinterval of the n points. NOTE: To use SPLINE, you
NOTE: To use SPLINE, you
must provide at least 4 points.
must provide at least 4 points.
Page 63
SHEET User manual By Chor-ming Lung October 9,
1988
Turtlegraphics:
______________
Turtlegraphics is quite interesting. I add these commands just for
fun. Only three commands are provided though.
FORWARD:
_______
Syntax:
FORWARD distance
Description:
FORWARD command in LOGO uses pixel as measurement
for distance. SHEET BASIC uses the scale factors
specified by SCALE as measurement for distance. This
command moves the drawing pen specified by the parameter
distance. Distance can be negative which make FORWARD
acts as BACK in LOGO.
Example:
FORWARD 5.2
TURN, TURN_TO:
____ _______
Syntax:
TURN degree
TURN_TO degree
Description:
They are the only commands in SHEET BASIC using
degrees instead of radians. Degree 0 points to North.
East is 90 degree, South is 180 and West is 270. TURN
turns the active turtle by the amount specified in
rotation. TURN is similar to LEFT if the degree is
positive and RIGHT if the degree is negative. TURN_TO is
similar to SETHEADING in LOGO, which sets the direction
of the active turtle to a specified angle.
Page 64
SHEET User manual By Chor-ming Lung October 9,
1988
Axis command:
____________
It is easy to draw the x-axis and y-axis by using LINE command,
but you may also want to know where x=3 on the x-axis. MARKX and MARKY
commands help you to mark your axes with measurement. LABELX and LABELY
let you add the number 3 under the mark.
MARKX/MARKY:
___________
Syntax:
MARKX y_origin, xmin, xmax, xinc, xstep
MARKY x_origin, ymin, ymax, yinc, ystep
Description:
An example may help me to explain better. Suppose
that you are drawing an x-y graph for your income from
1970 to 1988 and your income ranges from 12,000 to
40,000.
SCALE 1969, 0, 1989, 45000
Making the x-axis one year larger on both sides give you
some blank spaces. You do not care about amount smaller
than 12,000. The following command draws the x-axis.
LINE 1969,12000,1989,12000
Your y_origin starts from 12000. xmin is 1970 and xmax
is 1988. You want to mark each year and have a bigger
mark on each five year. Here is the command:
MARKX 12000,1970,1988,1,5
MARKY works similarly.
NOTE: xstep should be a multiple of xinc.
LABELX/LABELY:
_____________
Syntax:
LABELX y_origin, xmin, xmax, xinc, format
LABELY x_origin, ymin, ymax, yinc, format
Description:
I am using the same example on MARKX. Now, you want
to add the year 1970 to 1988 on your graph. The command
to do this is:
LABELX 12000,1970,1988,1,"f0"
You may find some of the numbers are overlapped. Then
you should adjust xinc.
Format is a string that specified what kind of format we
are going to use for displaying the labels. Currently,
there are two formats supported by LABELX and LABELY.
They are FIXED andCIENTIFIC. Theee string starts with an
f or F means the labels are FIXED number. The number
following f/F is the decimal place. A scientific format
starts with an s/S. The format string ("f0") on the
example means that we are displaying integers.
Page 65
SHEET User manual By Chor-ming Lung October 9,
1988
Text command:
____________
PTEXT:
_____
Syntax:
PTEXT x,y,string[,color, effects, rotation, height]
Description:
PTEXT plots string on the location (x,y). There are
some special effects:
1: bold face
2: light
4: italic
8: underline
16: outline
32: shadowed
If you want to use more than one special effects, you
can do that by adding the number for each effects. For
example, if you want to plot the string with bold face
and underline, you should use 9 (1+8) for the effects.
Rotation changes the direction the characters being
displayed.
0: East
900: North
1800: West
2700: South
Height of a font may be changed but you may not get a
good result. The following height numbers provide the
best result for small and normal fonts.
Color monitor:
small font: 4
normal font: 6
Monochrome monitor:
small font: 6
normal font: 13
Page 66
SHEET User manual By Chor-ming Lung October 9,
1988
Miscellaneous:
_____________
MOUSE_POS:
_________
Syntax:
MOUSE_POS x,y
Description:
x,y should be variables or cell references.
MOUSE_POS will wait for you to press the left button on
your mouse. If your mouse cursor is within the block
specified by WINDOW or VIEWPORT, then the Cartesian of
the mouse cursor will be stored on x,y. Otherwise, the
Raster coordinate is stored on x,y.
This command is useful for finding the value for
WINDOW, VIEWPORT or PTEXT. It is also useful to find
some data points from your graph.
Hints:
Mouse click response time varies not in a constant
way (refer to problems part). You may better add a WAIT
____
1 statement after the MOUSE_POS. So, user can press the
_
button a little bit longer without caing problem.
Also, MOUSE_POS will keep polling until you press your
mouse button. It means your system is suspended for
mouse click. You cannot break its operation by pressing
<Esc>. You have better add an ALERT or MESSAGE telling
user to press the mouse button.
Page 67
SHEET User manual By Chor-ming Lung October 9,
1988
Tips on using SHEET BASIC
Interrupt:
Interrupt
You can stop your BASIC program by pressing <Esc> key.
Using previous row format:
Using previous row format
If your BASIC program generates a lot of data to the
worksheet, you should choose "Using previous format" from menu
item "Options" to non. It will speed up a little of your BASIC
program.
Error:
Error
When the BASIC interpreter encounters error, it will tell you
what is wrong and where the offending code is. You can use F2 to
edit that line and re-run it again. If your offending cell is for
example G12, instead of re-run it, you can use "@goto g12" to
continue your program. It may save you some time.
Multiple statements:
Multiple statements
You can enter more than one statement in a cell. Each
statement must be separated by colon. Entering multiple statements
in one cell will save some memory, but don't enter too many
because your editing buffer can hold 250 characters only.
Garbled screen:
Garbled screen
If you output some data to your monitor, your current screen
display will be garbled. In case you forget to save your screen
before you print, you can rebuild your display by the following
steps:
- Select the menu bar and choose "About SHEET"
- Press return when the dialog shown up.
- If the number of windows being opened is less than 4,
you can choose "New" to open up a new worksheet and then
close it.
- If the number is 4, then you must move your window out
of the screen and move it back.
Adjust:
Adjust
When I wrote the first SHEET BASIC program, I felt it is
clumsy to enter "!" at the beginning of each statement and I
forgot to enter "!" in some cells. If you have the same problems,
you can use the following technique to enter BASIC statement.
As we know, each BASIC statement starts with an alpha letter.
SHEET will treat any cell entry starts with an alpha letter as
TEXT string. You can enter your BASIC codes as text string and
then adjust them to BASIC statements. The steps to adjust codes:
- select blocks to cover the desired cells
- Press <Control A> and choose "BASIC (!)" to adjust the
text string to BASIC statements.
Page 68
SHEET User manual By Chor-ming Lung October 9,
1988
Appendix A BUILT-IN FUNCTIONS
_____________________________
Math:
____
General functions:
ABS(x): Absolute function of x
INT(x): Integer part of x (e.g. +int(12.4) = 12)
FRAC(x): Fraction part of x (e.g. +frac(12.4) = 0.4)
FACT(x): Factorial of x. X < 34
SQR(x): Square function of x
SQRT(x): Square root of x
Trigo & logarithm functions:
SIN(x): Sine function of x. X is measured in radian
COS(x): Cosine function of x.
TAN(x): Tangent function of x.
ASIN(x): Arc sine function of x
ACOS(x): Arc cosine function of x
ATAN(x): Arc tangent of x
LOG(x): Logarithm base 10
LN(x): Logarithm base e
EXP(x): Exponent of x
RAD_DEG(x): Radian to degree
DEG_RAD(x): Degree to radian
DATE functions:
DATE(mm,dd,yy): Function for calculating Julian days.
DAY(x): Day of x. X is Julian day
MONTH(x): Month of x
YEAR(x): Year of x
NOTE: 1. You can use the following formula to find the
weekday of the date:
(date(mm,dd,yy)+1) mod 7
0 if Sunday, 1 if Monday and so on.
2. You can use the following formula to find the
number of days on a specific month.
case 1: mm<12 date(mm+1,1,yy)-date(mm,1,yy)
case 2: mm=12 date(1,1,yy+1)-date(mm,1,yy)
Matrix functions:
A matrix in a worksheet is a block embraced by "[" and
"]". For example, to make A1..C3 as a matrix, it should be
[A1..C3]. Versions before 2.0 of SHEET restrict individual
matrix size within 64K. This limit has been removed.
Matrix operators include *,+ and -. There is no priority
for those matrix operators. Formula is calculated from left
to right. Parenthesis can be used to change the calculation
order.
There are only two matrix functions. They are INVERSE
and TRANSPOSE. Their arguments must be a matrix or a matrix
operations grouped by parenthesis.
The sequence of activating matrix operations is:
Page 69
SHEET User manual By Chor-ming Lung October 9,
1988
MATRIX(cell, matrix_operations)
Cell: The cell reference of the MATRIX is the leading
location where matrix operations put their result.
Matrix_operations: Matrix operations can be matrix functions
or combination of matrix operators.
For example, to store the inverse of matrix [a1..c3] in
matrix [d1..f3], you should store the following formula
somewhere:
+MATRIX(d1,inverse[a1..c3])
Statistics:
__________
AVERAGE( any number of parameters ): Average of parameters.
Parameters can be a single cell reference, an
expression, a block of cells.
MEDIAN( any number of parameters ): Median of parameters.
STD( any number of parameters): Standard deviation of parameters.
VAR( any number of parameters): Variance of parameters.
SQR_SUM( any number of parameters): Square sum of parameters.
eg. +AVERAGE(A1..F4,234,12+24.5,H2+34*sin(pi))
Miscellaneous:
_____________
MAX(any number of parameters): Maximum value of parameters.
MIN(any number of parameters): Minimum value of parameters.
SUM(any number of parameters): Sum of all parameters.
RAND: Random number between 0 and 1.
IFF(condition,true_value, false_value): IF function
ISEMPTY(cell): return 1 if cell is empty, otherwise 0
TRUE: it is equal to 1
FALSE: it is equal to 0
ALERT ALERT(default, "[icon#][text][exit]")
Uses the alert box to get user's response.
icon#:
0: no icon
1: NOTE icon (!)
2: WAIT icon (?)
3: STOP icon (stop sign)
text:
text string can be up to 5 lines. Each line is separated by
"|". You cannot have more than 40 characters per line. If you
use icon, then the number of character per line must be
lesser than 40. Keep your character per line less than 30
will be safe.
exit:
Up to 3 exit button can be defined. Each of them is separated
by "|".
eg.
!A3=ALERT(1,"[1][This is a test|Wow][Ok|Cancel]")
Page 70
SHEET User manual By Chor-ming Lung October 9,
1988
COL_WIDTH COL_WIDTH(block)
Returns the total column widths that holds the block.
For example, if column width of A is 8 and B is 12 and C
is 4:
eg COL_WIDTH(a1) ==> 8
COL_WIDTH(b1..c1) ==> 16
LAST_ROW LAST_ROW(cell,r)
Returns the value stores in the last row on the column
the cell is. r tells you where the last row is. r is
zero origin. For example, if the last row of column B is
12 and cell B12 has a value of 123.45:
eg LAST_ROW(b20,row) ==> 123.45 and row=11
You can access the last cell by using B1[0,row]
LAST_COL LAST_COL(cell,c)
Returns the value stores in the last column on the row
the cell is. c tells you where the last column is. c is
zero origin. For example, if the last column of row 4 is
H and cell H4 has a value of 456.77:
eg LAST_COL(a4,col) ==> 456.77 and col=7
You can access the last cell by using a4[col,0]
SEARCH SEARCH(STRING,block,r,c)
A boolean function to find out whether STRING in the
block and r,c tell you where the cell is. r and c are
zero origin so you can access the cell by using a1[c,r].
NOTE: the comparison is case insensitive and a cell of
the block which has a substring includes STRING, then
the location of that cell will be stored in r and c. If
search fails, r and c will not be changed.
eg. Assume that cell A5$="What",b5$="is",c5$="your",
d5$="name?".
SEARCH("You",a5..d5,r,c) ==> 1 and r=4, c=2. To access
the cell that holds a substring of "YOU", you should use
a1[c,r]$ (it is c5$ in this case).
Finance:
_______
Future growth:
GRATE(a time series data): Average growth rate.
GBASE(a time series data): Adjusted base value
GFUTURE(grate,gbase, predict time): Future values based on
grate and gbase
A time series data is data being collected in a fixed
frequency of time. They may be gathered yearly, quarterly,
monthly or daily. For example, you income is a time series
data that is increased yearly. For a more detail example,
refer to the example file "FG.SHT"
Investment:
INVEST_PV(final value, interest, compound frequency, terms):
Present value of investment
Page 71
SHEET User manual By Chor-ming Lung October 9,
1988
INVEST_FV(present value, interest, compound frequency,
terms): Future value of investment
INVEST_INTEREST(present value, final value, compound
frequency, terms):Compound interest of investment
INVEST_TERM(present value, final value, interest, compound
frequency): Terms of investment.
Please refer to the file "INVEST.SHT" for using those
functions.
Loan:
LOAN_PAY(amount borrowed, interest,total terms, number of
terms per year): Payment for each term.
LOAN_AMOUNT(payment, interest, total terms, terms per year):
Amount borrowed.
LOAN_TERM(amount borrowed, payment, interest, terms per
year): Total number of terms for loan.
Please refer to the file "LOAN.SHT" for using those
functions.
Withdraw:
WDRAW_SAVE(amount withdrawn, interest, terms, terms per
year): Initial Investment
WDRAW_AMOUNT(amount saved, interest, terms, terms per year):
Amount withdrawn.
WDRAW_TERM(amount saved, amount withdrawn, interest, terms
per year): Total terms
Please refer to the file "WITHDRAW.SHT" for using those
functions.
Deposit:
DEPOSIT_FV(amount, interest, total terms, terms per year):
Final value for deposit
DEPOSIT_AMOUNT(final value, interest, total terms, terms per
year): Regular deposit
DEPOSIT_TERM(amount, final value, interest, terms per year):
Total number of terms.
Please refer to the file "DEPOSIT.SHT" for using those
functions.
String functions:
_________________
FILENAME$ FILENAME$ is a string variable that can only be modified
by file selector dialog box.
BUF$ BUF$ is a string variable that can be changed by the
command INPUT only.
MID$: MID$(STRING,s,len)
Returns a substring of STRING, starting from s with
Page 72
SHEET User manual By Chor-ming Lung October 9,
1988
length len. If s is larger than the length of the string
STRING, then a substring range error occur. If len+s is
larger than the length of STRING, then up to the last
character will be returned.
eg MID$("12345678",4,3) ==> "456"
MID$("12345678",14,3) ==> substring range error
MID$("12345678",4,20) ==> "45678"
LEFT$: LEFT$(STRING,len)
Returns a substring of STRING, starting from 1 with
length len. If len is larger than the actual length of
STRING, the whole STRING will be returned.
eg LEFT$("12345678",4) ==> "1234"
LEFT$("12345678",20) ==> "12345678"
RIGHT$: RIGHT$(STRING,len)
Returns a substring of STRING, from the far right
portion of STRING with length len. If len is larger than
the length of STRING, then substring range error occurs.
eg. RIGHT$("12345678",4) ==> "5678"
RIGHT$("12345678",20) ==> substring range error
SPACE$: SPACE$(num)
Returns a string with num of blank spaces. num must be a
positive integer.
eg. SPACE$(4) ==> " "
CHR$: CHR$(num)
Returns a string with one character whose ASCII number
is equal to num. num is in the range of 0 to 255.
eg CHR$(82) ==> "R"
STR$: STR$([FORMAT,]value)
Changes a number value to a string equivalent to that
value. FORMAT is optional. It is a string which consists
of three part -- width, format, decimal point. It is
equivalent to return a cell string with column width,
format and decimal place.
eg STR$(1234.5) ==> "1234.5"
STR$("12$2",1234.5) ==> " $1234.50"
VAL: VAL(STRING)
Returns the value of STRING. This function will strip
off characters other than "E", digits, "+", "-" and "."
first and do the translation later.
eg VAL("abc123.45") ==> 123.45
VAL(".23e-2") ==> 0.0023
VAL(".23ae-2") ==> 0.0023
LEN: LEN(STRING)
Returns the length of the STRING. An empty string has a
len of zero.
eg LEN("") ==> 0
LEN("123456") ==> 6
Page 73
SHEET User manual By Chor-ming Lung October 9,
1988
POS: POS(STRING1,STRING2,start)
Return the position of any character of STRING1 from
STRING2 beginning from start. All the character of
STRING1 and STRING2 will be changed to upper case first.
A zero will be returned if none has been found or start
is larger than the len of STRING2.
eg POS(" ", "What is this?",1)==> 5
A space in position 5.
POS("ts","What is this?",1)==>4
"t" is in position 4
POS("ts","What is this?",5)==>7
"s" is in position 7
POS("AT","What is this?",1)==>3
"A" is in position 3. Case insensitive.
POS(",-","What is this?",1)==>0
Appendix B CONTROL KEYS
_______________________
Non-editing:
___________
<Esc> stops a running BASIC program.
<Up arrow> moves cell cursor one row up.
<Down arrow> moves cell cursor one row down.
<Left arrow> moves cell cursor one column left.
<Right arrow> moves cell cursor one column right.
<Shift><arrows> moves cell cursor to the direction specified
by the arrow key by page.
<Return> changes the editing direction to neutral.
<Control><A> adjusts TEXT string to BASIC statements or
text justification.
<Control><N> creates a new sheet
<Control><L> loads a sheet file
<Control><S> saves current spreadsheet
<Control><P> prints current spreadsheet
<Control><Q> exits to desktop
<Control><I> inserts a row or a column
<Control><D> deletes a row or a column
<Control><R> reformats cells
<Control><E> erases cells
<Control><C> copies cells
<Control><M> moves cells
<Control><mouse click> defines the starting cell of a block
<Shift><mouse click> defines the stopping cell of a block
<Alternate><1> switches to the first window
<Alternate><2> switches to the second window
<Alternate><3> switches to the third window
<Alternate><4> switches to the fourth window
<Alternate><F> refreshes the current window.
<Alternate><C> recalculates the spreadsheet by column
<Alternate><N> recalculates the spreadsheet by natural order
<Alternate><R> recalculates the spreadsheet by row
Page 74
SHEET User manual By Chor-ming Lung October 9,
1988
<F2> modifies the current cell's content
<F5> Goto a specified cell.
Editing:
_______
<Up arrow> terminates and moves cell cursor one row up.
The editing direction changes to up direction.
<Down arrow> terminates and moves cell cursor one row down.
The editing direction changes to down.
<Left arrow> terminates and moves cell cursor one column
left. The editing direction changes to left.
<Right arrow> terminates and moves cell cursor one column
right. The editing direction changes to right.
<Shift><Left arrow> moves editing cursor to left.
<Shift><Right arrow> moves editing cursor to right.
<Return> terminates and moves cell cursor to the
direction specified by editing direction.
<Mouse click> if the mouse cursor is within working area,
the coordinate of the cell under mouse cursor
will be inserted into editing buffer; if the
mouse cursor is within the editing line, the
editing cursor will move to the character
under the mouse cursor.
<Control><mouse click> if the mouse cursor is within working area,
a comma and the coordinate of the cell under
mouse cursor will be inserted into editing
buffer.
<Shift><mouse click> if the mouse cursor is within working area, a
through symbol ".." and the coordinate of the
cell under mouse cursor will be inserted into
editing buffer.
Appendix C Program specification:
________________________________
SHEET is written in Mark Williams C. The accuracy for real
number (double) in Mark Williams C is up to 17 digits (Lotus 123
is up to 15 digits). The range of calculation is -1E-37 to
1E+37. Each spreadsheet can accomdate up to 2,549,745 (255*9999)
cells and the spreadsheet is implemented by using Sparse Matrix.
Any input to a cell will be tokenized before it is being inserted.
This program support up to 4 windows. The BASIC interpreter can be
used to handle graphics, string, and ASCII text files.
Accuracy:
Accuracy up to 17 digits
Range:
Range -1E-37 to 1E+37 (If you find 1e+37 in a cell, that
means the calculation for that cell is not correct)
Arithmetic operators:
Arithmetic operators
"+", "-", "*", "/", "^", MOD
Logical operators:
Logical operators:
AND, OR, NOT, "=", "<>", ">", "<", ">=", "<=",
"=>", "=<"
Built-In functions:
Built-In functions
Page 75
SHEET User manual By Chor-ming Lung October 9,
1988
Math: SIN, COS, TAN, ASIN, ACOS, ATAN, LOG, EXP, LN, ABS,
INT, FRAC, SQR, SQRT, DATE, FACT, RAD_DEG, DEG_RAD,
PI (constant)
Statistics:
AVERAGE, MEDIAN, STD, VAR, SQR_SUM
Miscellaneous:
MAX, MIN, SUM, COUNT, TODAY, DAY, MONTH, YEAR,
TRUE, FALSE (TRUE and FALSE are constant, TRUE is 1
and FALSE is 0), IFF, ISEMPTY, ALERT, LAST_ROW,
LAST_COL, SEARCH.
Finance: GRATE, GBASE, GFUTURE, INVEST_PV, INVEST_FV,
INVEST_INTEREST, INVEST_TERM, LOAN_PAY,
LOAN_AMOUNT, LOAN_TERM, WDRAW_SAVE, WDRAW_AMOUNT,
WDRAW_TERM, DEPOSIT_FV, DEPOSIT_AMOUNT,
DEPOSIT_TERM
String: MID$, CHR$, LEFT$, RIGHT$, SPACE$, STR$, VAL, LEN,
ASC, FILENAME$(a string variable used for file item
selector) and BUF$(a string variable used by the
command INPUT).
Matrix: MATRIX, TRANSPOSE, INVERSE, *, +, -
Priority:
Priority
Lowest: - AND, OR
- "+", "-"
- "*", "/", "^", MOD
- number, cell reference, variable, function call,
NOT, "+", "-" (unary operator)
Highest:- Parenthesis
Constants:
Constants PI(0.31415926535897932e+01), TODAY(Julian days when
you press TODAY), TRUE(1), FALSE(0).
Cell reference: A cell can be referred by using its spreadsheet
Cell reference
coordinate (e.g. D1) If you add a "$" in front of
the row number (in this example 1) or in front of
the column letter (D) then you make it an absolute
reference. If you add "$" at the end of the cell
reference, then you are using it as a string. You
can use a cell as BASE and move it vertically or
horizontally by appending two numbers which are
separated by comma and embraced by "[" and "]". The
first number increases the BASE horizontally and
the second number increases the BASE vertically.
For example A2[3,4]. You can separate A2 to [1,2]
(Column A has a value of 1, B has 2 and so on).
A2[3,4] = [1,2]+[3,4]=[4,6]=D6.
Variables:
Variables Up to 150 variables can be defined. This number
includes the user defined function. It is intended
for BASIC usage. For the time being, you cannot use
those variables to hold any string.
Appendix D Lotus and SHEET
__________________________
Page 76
SHEET User manual By Chor-ming Lung October 9,
1988
In Lotus, you must add a '@' symbol before every function
name. In SHEET, no special symbol is required to put before the
function name. However, if a function name is the first element of
your formula, a '+' or '(' is required to differentiate it from
TEXT.
Lotus requires you to put # symbol to embrace the logical
operators. For example , "+A1 #AND# A2". It is invalid in SHEET.
Actually, you will get 2 bombs if you enter the above formula. You
should avoid adding special character in your formula. The valid
form is "+A1 AND A2".
Lotus @COUNT function will count any cell containing a
numeric value or a label. SHEET will count only numeric value. For
example,
A
_ B
_
1
_ 12 This is a test
@COUNT(A1..B1) will return 2 and COUNT(A1..B1) will return 1.
Lotus @DATE function asks for arguments (YYYY,MM,DD) and DATE
function in SHEET asks for (MM,DD,YY). The first day of @DATE is
1-Jan-1900 while the first day of DATE is 1-Jan-4712 B.C.
Here is a list of Lotus functions which have equivalent SHEET
functions but using different names.
@FV(amount,interest,terms) = DEPOSIT_FV(amount,interest,terms,1)
@RATE(fv,pv,term) = INVEST_INTEREST(pv,fv,12,term*12)
@TERM(pmt,int,fv) = DEPOSIT_TERM(pmt,fv,int,12)
@PMT(amount,interest,terms) = LOAN_PAY(amount,interest,terms,12)
Appendix E Recalculation
________________________
Natural:
Natural Recalculates each cell in the dependent order. NOTE:
some spreadsheet programs use dependent list to find the
dependent order and they can quickly recalculate those
cells being affected. SHEET uses recursive method to
recalculates cells. The effect is that, it blindly
recalculate every cell which contains formula and it is
slower than using dependent list. The positive side is
that, you have more memory to use than those spreadsheet
programs. This is a trade-off between speed and space.
Row:
Row: Recalculate each row in the ascending order.
Column:
Column: Recalculate each column in the ascending order.
Manual:
Manual The spreadsheet stops automatic recalculation. User has
to press <ALT-N>, <ALT-R> or <ALT-C> for natural, row or
column recalculation, where <ALT-N> means press
<Alternate> key with character key <N> simultaneously.
Note: It is no longer true that natural recalculation is
slower than row or column recalculation.
Page 77
SHEET User manual By Chor-ming Lung October 9,
1988
Appendix F FILE FORMAT
______________________
Header for SHT:
Header for SHT
- 270 bytes reserved data.
Currently, there are a few bytes have been used.
- 2 bytes for file version number, current version is 1.4
- 1 bytes for screen type when the file saved. 1 for color
monitor and 0 for monochrome monitor.
- 2 bytes for maximum row number.
- 40 bytes for window title. (39 characters with a null
character)
- 2 bytes: check-sum of the window title to make sure we are
handling the right work sheet.
- 256 bytes for width of each columns
- 2 bytes for window type (It is useless)
- 8 bytes for current window size
- 4 bytes for working area top row, top column
- 4 bytes for current cell cursor address
- 2 bytes for current recalculation mode
Cell contents for SHT format:
Cell contents for SHT format
- 1 bytes for cell type (use this byte with 0x23 to do bit-wise
and. If it is not 0, then it is NUMBER).
- 2 bytes for length
- IF NUMBER:
2 bytes for row #, 1 byte for column #.
2 bytes for attribute and 1 byte for decimal place
8 bytes for calculating result.
- IF NOT NUMBER (it may be TEXT or STATEMENT, its decimal place
and calculating result are not needed)
2 bytes for row#, 1 byte for column #.
2 bytes for attribute (it may be blank cell)
- IF length <> 0, length bytes of tokens.
- The last cell type and length are 0 and 0.
Header for PRT:
Header for PRT
- 4 bytes holding "PART"
Cell contents for PART format:
Cell contents for PART format
- 4 bytes for cell row, column
- 2 bytes for display attribute
- 2 bytes for decimal place
- 2 bytes for tokens length
- 8 bytes for calculated result
- tokens length bytes of actual tokens
Appendix G Problems
___________________
A user told me his cell cursor keep flashing
ans: It won't happen very often. It seems it happens when the
system is newly bootup and you load SHEET right away. In
Page 78
SHEET User manual By Chor-ming Lung October 9,
1988
SHEET, you can locate the cell cursor by mouse click.
You can also select a block by prolonging your mouse
click (drag). When you press your mouse to move the cell
cursor, SHEET first moves your cell cursor to that
position and inverts the color of that cell. Mouse
response time seems a lot faster when the system is
newly bootup. Because of the fast response time, SHEET
thinks you are still pressing your mouse button. It
thinks you are trying to select a block then. That is
the reason why your cell cursor on and off. In case you
have this problem, you should choose some of the help
dialogs. 4 or 5 of them should slow down your mouse
response time. Another method found by a user is
provided here. After the system is booted, you type a
key and then load your SHEET program.
Why some of my input characters are being truncated?
ans: For versions before 2.0, if you type any illegal
character in your formula, you will be bombed out and
you must reboot your system to use SHEET. This new
version of SHEET prevents this problem but the rest
characters after the illegal character will be truncated
and a "#" symbol will be added at the end of the illegal
formula. You should rewrite your formula.
Page 79
SHEET User manual By Chor-ming Lung October 9,
1988
Biorthym program
________________
A German doctor found that our emotional, physical and
intellectual conditions change in sine curves with different
frequencies. Emotional condition changes in 23 days per cycle, physical
28 days, and intellectual 33 days. They are called biorthym.
The following SHEET BASIC program uses the data found to generate
the biorthym curves for you. You should enter your name in cell B1 and
your birthday in B2 using +DATE(mm,dd,yy), then you can run it by the
command "@run e1".
E1 : !B3= TODAY
E2 : !B4=B3-B2+1:START= DATE( MONTH( TODAY),1, YEAR( TODAY))-B2
E3 : ! IF B3<0 THEN MESSAGE "Date entry error": END
E4 : !EMOTION=START MOD 23
E5 : !PHYSICAL=START MOD 28
E6 : !INTELLECTUAL=START MOD 33
E7 : ! WINDOW 1,0,11,417,199
E8 : ! SCALE -4,-1.5,33,1.1
E9 : ! CLEAR :EC=2*PI/23:PC=2*PI/28:IC=2*PI/33
E10 : ! FOR X=1 TO 31
E11 : !Z1=EMOTION*EC:EMOTION=EMOTION+1
E12 : !Z2=PHYSICAL*PC:PHYSICAL=PHYSICAL+1
E13 : !Z3=INTELLECTUAL*IC:INTELLECTUAL=INTELLECTUAL+1
E14 : ! PLOT X, SIN(Z1),1: PLOT X, SIN(Z2),2: PLOT X, SIN(Z3),3
E15 : ! NEXT X
E16 : ! LINE 1,0,31,0
E17 : ! LINE 1,-1,1,1
E18 : ! MARKX 0,1,31,1
E19 : ! MARKY 1,-1,1,0.1,0
E20 : ! LABELX 0,2,30,2,"f0"
E21 : ! LABELY 1,-1,1,0.1,"f1"
E22 : ! PTEXT 11,-1.2,B1,1,1
E23 : ! PLOT -2,-1.35,1: PTEXT -1,-1.4,"Emotional"
E24 : ! PLOT 8,-1.35,2: PTEXT 9,-1.4,"Physical"
E25 : ! PLOT 20,-1.35,3: PTEXT 21,-1.4,"Intellectual"
E26 : ! EXITGRAPH
E27 : ! END
Explanations:
E1: Set the current date on cell B3.
E2: B4 holds the days of your life. Variable START holds the days from
your birth to the first day of current month. The plus 1 in
calculating B4 means that your first day is counted as 1. But
biorthym calculates the first day as 0. (Sine curve starts from 0
to 2*PI).
E3: This is unnecessary. I just want to show you how to display a
message.
E4: Since our emotional condition changes in a cycle of 23 days, we
can calculate the condition of the first day of current month by
using the operator MOD.
E5: Similar to E4
E6: Similar to E4
Page 80
SHEET User manual By Chor-ming Lung October 9,
1988
E7: Setup our graphic window
E8: Setup the scaling factor. Making the scaling factors a little
larger than what they actually are will provide some blank spaces
for texts.
E9: Clear the window area. EC is emotional constant. Emotional
condition changes in 23 days per cycle. Each cycle is 2*PI long.
PC for physical condition and IC for intellectual condition.
E10: A FOR loop to draw your graph. I just assume each month have 31
days. You may want to change 31 to its actual days.
E11~E13: Simple calculation for your conditions.
E14: Plot emotional condition with marker 1, physical with marker 2,
and intellectual with marker 3
E16~E17: Plot the x-axis and y-axis
E18: Draw marks on x-axis
E19: Draw marks on y-axis
E20: Draw label on x-axis. It is integer.
E21: Draw label on y-axis. It is real with 1 decimal place.
E22: Plot your name on screen. (B1 holds your name)
E23~E25: Plot texts showing the meaning for each marker.
E26: Legal way to return to your current window
E27: END program.
Page 81
SHEET User manual By Chor-ming Lung October 9,
1988
Calendar program
________________
The file name of this program is "CAL.SHT". This program
generates a month calendar and leaves some spaces for your monthly
activity. Here is the listing. To run it, enter "@run q1"
Q1 :!MON=10:YR=88:IBM= FALSE
Q2 :!WEEKDAY=( DATE(MON,1,YR)+1) MOD 7
Q3 :! IF (MON<12) THEN TDAY= DATE(MON+1,1,YR)- DATE(MON,1,YR): ELSE
TDAY= DATE(1,1,YR+1)- DATE(MON,1,YR)
Q4 :! IF IBM THEN GOSUB Q34: ELSE GOSUB Q42
Q5 :! ERASE A1..O64
Q6 :!B3$="^Sun":D3$="^Mon":F3$="^Tue":H3$="^Wed"
Q7 :!J3$="^Thu":L3$="^Fri":N3$="^Sat"
Q8 :!LINES=(WEEKDAY+TDAY)/7
Q9 :!LINES= INT(LINES)+( FRAC(LINES)>0)
Q10 :!WIDTH=60/LINES
Q11 :! FOR I=0 TO 62
Q12 :! FOR J=0 TO 14 STEP 2:A2[J,I]$= CHR$(VERT): NEXT J
Q13 :! NEXT I
Q14 :! FOR I=0 TO 12
Q15 :! IF (I MOD 2)=0 THEN B2[I,0]$="\"+ CHR$(HOR):B4[I,0]$="\"+
CHR$(HOR): ELSE B2[I,0]$="\"+ CHR$(MDOWN):B4[I,0]$="\"+ CHR$(PLUS)
Q16 :! NEXT I
Q17 :!A2$= CHR$(TLEFT):O2$= CHR$(TRIGHT):A4$= CHR$(PLEFT):O4$=
CHR$(PRIGHT)
Q18 :! FOR I=1 TO LINES
Q19 :!L=I*WIDTH: COPY A4..O4,A4[0,L]
Q20 :! NEXT I
Q21 :! FOR J=0 TO 12 STEP 2:C64[J,0]$= CHR$(MUP): NEXT J
Q22 :!A64$= CHR$(BLEFT):O64$= CHR$(BRIGHT)
Q23 :!L=1:J=1:M=WEEKDAY*2
Q24 :! FOR I=WEEKDAY TO WEEKDAY+TDAY+1
Q25 :! IF (I MOD 7)=0 THEN L=L+WIDTH:M=0
Q26 :!B4[M,L]=J:J=J+1:M=M+2: IF J=TDAY THEN I=42
Q27 :! NEXT I
Q28 :! SAVE SCREEN : REDIRECT TO "prn:"
Q29 :! PRINT SPACE$((80- LEN(V1$))/2);V1$: PRINT
Q30 :! PRINT_BLOCK A2..O64,4,76
Q31 :! WAIT 2: RESTORE SCREEN
Q32 :! END
Q34 :!MDOWN=194:MUP=193
Q35 :!PLEFT=195:PRIGHT=180
Q36 :!PLUS=197:VERT=179:HOR=196
Q37 :!TLEFT=218:TRIGHT=191
Q38 :!BLEFT=192:BRIGHT=217
Q39 :! RETURN
Q42 :!MDOWN=45:MUP=45
Q43 :!PLEFT=124:PRIGHT=124
Q44 :!PLUS=43:VERT=124:HOR=45
Q45 :!TLEFT=43:TRIGHT=43
Q46 :!BLEFT=43:BRIGHT=43
Q47 :! RETURN
Page 82
SHEET User manual By Chor-ming Lung October 9,
1988
Explanation:
Explanation
Q1 Set the month and year we interest about in the variable mon and
yr. You cannot use month and year for the variable names because
they are names for built-in functions. IBM is TRUE if your printer
can print the IBM graphic characters. If you change the month and
year in cell Q1, please change the string in cell V1 at the same
time.
Q2: WEEKDAY stores the weekday of the first day of the month. WEEKDAY
is 0 if it is Sunday and 1 for Monday and so on.
Q3: TDAY is the total number of days in the specified month. It can be
calculated easily by subtracting the first date of one month after
mon from the first date of mon.
Q4: Initializes some constants depend on whether IBM is TRUE or FALSE.
Q5: Erase cells from A1 through O64
Q6: Row 2 and 4 holds the frame for the title of weekdays. Row 3 holds
the title.
Q8: Normally, we need 4, 5 or 6 lines to hold a monthly calendar. To
calculate how many lines are need for our current month, we can do
it by adding the WEEKDAY and TDAY and divides it by 7.
Q9: This is a little bit tricky. FRAC is a function returns the
fractional part of a numerical value. In this case, LINES from Q8
is equal to 5.285714. FRAC(LINES) returns 0.285714. It is greater
than zero. TRUE is 1 and 0 is FALSE. (FRAC(LINES)>0) returns a
value of 1 and the INT(LINES) returns a value of 5. So we need 6
lines to hold our current monthly calendar.
Q10: The width for each line is 60/LINES. Since the value of LINES can
be 4,5 or 6. So, width is an integer.
Q11~Q22 Fills the frame for our calendar. TLEFT, is the TOP left-
corner, TRIGHT is the TOP right-corner, BLEFT is the Bottom left-
corner and BRIGHT is the Bottom right-corner. VER is a vertical
bar, HOR is a horizontal bar. PLEFT is a T character turns -90
degree and PRIGHT is a T character turns 90 degrees. MDOWN is a T
character and MUP is a T character turns 180 degrees. They are
used to join lines in the edges. PLUS is a + character.
Q23~Q27 Fills the Date into the calendar.
Q28~Q31 prints the calendar to your printer.
Q32: You should always end your program with END.
Q34~Q39: Defines constants for IBM=TRUE
Q42~Q47: Defines constants for IBM=FALSE
Page 83
SHEET User manual By Chor-ming Lung October 9,
1988
Roots
_____
ROOTS.SHT is a sample program which finds roots for any single
variable functions. There are some techniques which are not covered in
other sample programs. You should study it even you have no interest in
finding roots for a function.
B1 : !XMIN=-5:YMIN=-5:XMAX=5:YMAX=100:ST=0.1:ERR=0.000001
B2 : ! DEFINE F(X)=3*X*X-2
B3 : ! IF ALERT(2,"[0][Which resolution you are
in?][Medium|High]")=2 THEN WINDOW 0,0,20,639,399: ELSE WINDOW
0,0,11,639,199
B4 : ! SCALE XMIN,YMIN,XMAX,YMAX
B5 : ! CLEAR
B6 : ! PLOT XMIN,F(XMIN)
B7 : ! FOR X=XMIN TO XMAX STEP ST
B8 : ! LINE_TO X,F(X)
B9 : ! NEXT X
B10 : ! LINE XMIN,0,XMAX,0: LINE 0,YMIN,0,YMAX
B11 : !X= ALERT(1,"[0][Can you see any|root in your graph?][Yes|No]")
B12 : ! IF X=2 THEN MESSAGE "Change your minimum and|maximum values
and try again": EXITGRAPH
B13 : ! IF X=2 THEN END
B14 : ! MESSAGE "Locate mouse cursor|to the left of a|root in your
graph"
B15 : ! MOUSE_POS AX,AY
B16 : ! MESSAGE "Locate mouse cursor|to the right of a|root in your
graph"
B17 : ! MOUSE_POS BX,BY
B18 : ! LOOP
B19 : !AY=F(AX):BY=F(BX)
B20 : ! EXIT IF ( ABS(AY)<ERR OR ABS(BY)<ERR)
B21 : !HALF=(AX+BX)/2:HY=F(HALF)
B22 : ! IF (AY*HY<0) THEN BX=HALF: ELSE AX=HALF
B23 : ! ENDLOOP
B24 : ! IF ABS(AY)<ERR THEN A1=AX: ELSE A1=BX
B25 : ! EXITGRAPH
B26 : ! END
For solving different functions, you should adjust B1, B2.
Explanations:
Explanations
B1: min,ymin,xmax,ymax setup the scaling factors. ST is step value for
plot the function. ERR is the error tolerance. If you want to have
a more accurate result, you should make ERR smaller.
B2: The function we are trying to find roots for. Remember, each
function definition should have its own cell
B3: Open the largest window on Medium or High resolution. Remember
WINDOW 0 is the current window. The rest numbers are the raster
coordinate.
B4: Set the scaling factors.
B5: Clear our window
Page 84
SHEET User manual By Chor-ming Lung October 9,
1988
B6: Plot the first point
B7: Plot the rest of the graph.
B10: Draw the x- and y-axes.
B11: A root on a graph is the place where it hits the x-axis. If you
see the curve hits the x-axis, you should answer Yes.
B12: If the curve does not hit x-axis, then leave a reminder for user
to change the plotting range. If you set up a large value for x
range, and you still can't see the root, then the function defined
may not have a root. You cannot use this program to find it.
B13: EXITGRAPH command is not working quite well. It does not like
anything following it. I still don't know why. The END command
should follow EXITGRAPH, but there is a bug which force us to end
the program this way.
B14: If you see a root, you can use the mouse to locate the left handed
side value for the root. This message just reminds user to select
the left handed side value for the root. You may need to hold your
mouse a little longer that usual.
B15: User input the left handed side value by pointing the mouse cursor
to the left of the point that hits the x-axis, and click your
mouse button. You can point to anywhere on the left handed side of
the root.
B16~B17:We need the right handed side value. The program should be
stopped quite fast. If you see nothing happen for a long time, you
should press the mouse button again. If it is still waiting for
mouse button, <Esc> key will not stop the program.
B18: A loop using bi-section method to find the root of a function.
B24: If we found the root, we put it in cell A1
B25: Normal exit
B26 End of the program.