home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-16 | 49.2 KB | 1,826 lines |
- ABS( n )
-
- Description:
-
- This function returns | n | (the absolute value of n).
-
- Usage:
-
- print abs( -5) produces: 5
-
- print abs( 6 - 13 ) produces: 7
-
-
-
- ASC( n$ )
-
- Description:
-
- This function returns the ASCII value of the first character of string n$.
-
- Usage:
-
- print asc( "A" ) produces: 65
-
- let name$ = "Tim"
- firstLetter = asc(name$)
- print firstLetter produces: 84
-
- print asc( "" ) produces: 0
-
-
-
- ACS( n )
-
- Description:
-
- Returns the arc-cosine of the number n.
-
- Usage:
-
- .
- .
- for c = 1 to 45
- print "The arc-cosine of "; c; " is "; acs(c)
- next c
- .
- .
-
- Note:
-
- See also COS( )
-
-
-
- ASN( n )
-
- Description:
-
- Returns the arcsine of the number n.
-
- Usage:
-
- .
- .
- for c = 1 to 45
- print "The arcsine of "; c; " is "; asn(c)
- next c
- .
- .
-
- Note:
-
- See also SIN( )
-
-
-
- ATN( n )
-
- Description:
-
- Returns the arc-tangent of the number n.
-
- Usage:
-
- .
- .
- for c = 1 to 45
- print "The arctangent of "; c; " is "; atn(c)
- next c
- .
- .
-
- Note:
-
- See also TAN( )
-
-
-
- BEEP
-
- Description:
-
- This command simply rings the system bell, as in CTRL-G
-
- Usage:
-
- .
- .
- [loop]
- input "Give me a number between 1 and 10?"; number
- if number < 1 or number > 10 then beep : print "Out of range!" : goto [loop]
- print "The square of "; number; " is "; number ^ 2
- .
- .
-
-
-
-
- BMPBUTTON #handle, filespec, return, corner, posx, posy
-
- Description:
-
- This statement lets you add bitmapped buttons to windows that you open. The
- main program window cannot have buttons added, but any window that you
- create via the OPEN command can have as many buttons as you want.
-
- Usage:
-
- Before you actually OPEN the window, each bitmapped button must be
- declared with a BMPBUTTON statement. Here is a brief description for
- each parameter as listed above:
-
- #handle - You must use the same handle that will be used for the window that
- the button will belong to.
-
- filespec - The full pathname of the *.bmp file containing the bitmap for the
- button you are creating. The button will be the same size as the
- bitmap.
-
- return - Again, use only one word and do not bound it with quotes or use a
- string variable. If return is set to a valid branch label, then when
- the button is pressed, execution will restart there (just as with
- GOTO or GOSUB), but if return is not a valid branch label, then the
- value of return is used as input to a specified variable (as in
- input a$).
-
- corner - UL, UR, LL, or LR specifies which corner of the window to anchor
- the button to. For example, if LR is used, then the button will
- appear in the lower right corner. UL = upper left, UR = upper
- right, LL = lower left, and LR = lower right
-
- posx, posy - These two parameters determine how to place the button relative to
- the corner it has been anchored to. For example if corner is LR,
- posx is 5, and posy is 5, then the button will be 5 pixels up and
- left of the lower right corner. Another way to use posx & posy is
- to use values less than one. For example, if corner is UL, posx
- is .9, and posy is .9, then the button will be positioned 9/10th of
- the distance of the window in both x and y from the upper left
- corner (and thus appear to be anchored to the lower right corner).
-
- A collection of button *.bmp has been included with Liberty BASIC, including
- blanks. Windows Paint can be used to edit and make buttons for Liberty BASIC.
-
- Program execution must be halted at an input statement in order for a button
- press to be read and acted upon.
-
-
- See also: BUTTON, MENU
-
-
-
- BUTTON #handle, label, return, corner, posx, posy
-
- Description:
-
- This statement lets you add buttons to windows that you open. The main
- program window cannot have buttons added, but any window that you create
- via the OPEN command can have as many buttons as you want.
-
- Usage:
-
- Before you actually OPEN the window, each button must be declared with a
- BUTTON statement. Here is a brief description for each parameter as listed
- above:
-
- #handle - You must use the same handle that will be used for the window that
- the button will belong to.
-
- label - Type the label desired for the button here. Do not bound the word
- with quotes, and do not use a string variable.
-
- return - Again, use only one word and do not bound it with quotes or use a
- string variable. If return is set to a valid branch label, then when
- the button is pressed, execution will restart there (just as with
- GOTO or GOSUB), but if return is not a valid branch label, then the
- value of return is used as input to a specified variable (as in
- input a$).
-
- corner - UL, UR, LL, or LR specifies which corner of the window to anchor
- the button to. For example, if LR is used, then the button will
- appear in the lower right corner. UL = upper left, UR = upper
- right, LL = lower left, and LR = lower right
-
- posx, posy - These two parameters determine how to place the button relative to
- the corner it has been anchored to. For example if corner is LR,
- posx is 5, and posy is 5, then the button will be 5 pixels up and
- left of the lower right corner. Another way to use posx & posy is
- to use values less than one. For example, if corner is UL, posx
- is .9, and posy is .9, then the button will be positioned 9/10th of
- the distance of the window in both x and y from the upper left
- corner (and thus appear to be anchored to the lower right corner).
-
- Program execution must be halted at an input statement in order for a button
- press to be read and acted upon. See below.
-
-
-
- BUTTON Continued
-
- Here is a sample program:
-
- ' this button will be labeled Sample and will be located
- ' in the lower right corner. When it is pressed, program
- ' execution will transfer to [test]
-
- button #graph, Bell, [bell], LR, 5, 5
-
- ' this button will be labeled Example and will be located
- ' in the lower left corner. When it is pressed, the string
- ' "Example" will be returned.
-
- button #graph, Quit, [quit], LL, 5, 5
-
- ' open a window for graphics
- open "Button Sample" for graphics as #graph
-
- ' print a message in the window
- print #graph, "\\This is a test"
- print #graph, "flush"
-
- ' get button input
- [loop]
- input b$ ' stop and wait for a button to be pressed
- if b$ = "Example" then [example]
- goto [loop]
-
- ' the Sample button has been pressed, ring the terminal bell
- ' and close the window
- [bell]
- beep
- close #graph
- end
-
- ' The Example button has been pressed, close the window
- ' without ringing the bell
- [quit]
- close #graph
- end
-
-
-
- See also: BMPBUTTON, MENU
-
-
-
- CHR$( n )
-
- Description:
-
- Returns a one character long string, consisting of the character
- represented on the ASCII table by the value n (0 - 255).
-
- Usage:
-
- ' print each seperate word in text$ on its own line
- text$ = "now is the time for all great men to rise"
- for index = 1 to len(text$)
- c$ = mid$(text$, index, 1)
- ' if c$ is a space, change it to a carraige return
- if c$ = chr$(32) then c$ = chr$(13)
- print c$ ;
- next index Produces:
-
- now
- is
- the
- time
- for
- all
- great
- men
- to
- rise
-
-
-
- CLOSE #handle
-
- Description:
-
- This command is used to close files and devices. This is the last step of
- a file read and/or write, or to close graphic, spreadsheet, or other
- windows when finished with them. If when execution of a program is
- complete there are any files or devices left open, Liberty BASIC will
- display a dialog informing you that it found it necessary to close the
- opened files or devices. This is designed as an aid for you so that you
- will be able to correct the problem. If on the other hand you choose to
- terminate the program early (this is done by closing the program's main
- window before the program finishes), then Liberty BASIC will close any open
- files or devices without posting a notice to that effect.
-
- Usage:
-
- open "Graphic" for graphics as #gWindow ' open a graphics window
- print #gWindow, "home" ' center the pen
- print #gWindow, "down" ' put the pen down
- for index = 1 to 100 ' loop 100 times
- print #gWindow, "go "; index ' move the pen foreward
- print #gWindow, "turn 63" ' turn 63 degrees
- next index
- input "Press 'Return'."; r$ ' this appears in main window
- close #gWindow ' close graphic window
-
-
-
- CLS
-
- Description:
-
- Clears the main program window of text and sets the cursor back at the
- upper left hand corner. Useful for providing a break to seperate
- different sections of a program functionally. Additionally, since the main
- window doesn't actually discard past information on its own, the CLS
- command can be used to reclaim memory from your program by forcing the main
- window to dump old text.
-
- Usage:
-
- .
- .
- print "The total is: "; grandTotal
- input "Press 'Return' to continue."; r$
- cls
- print "*** Enter Next Round of Figures ***"
- .
- .
-
-
-
- CONFIRM string; responseVar
-
- Description:
-
- This statement opens a dialog box displaying the contents of string and
- presenting two buttons marked 'Yes' and 'No'. When the selection is made,
- the string "yes" is returned if 'Yes' is pressed, and the string "no" is
- returned if 'No' is pressed. The result is placed in responseVar.
-
- Usage:
-
- [quit]
-
- ' bring up a confirmation box to be sure that
- ' the user wants to quit
- confirm "Are you sure you want to QUIT?"; answer$
- if answer$ = "no" then [mainLoop]
- end
-
-
-
- COS( n )
-
- Description:
-
- Returns the cosine of the number n.
-
- Usage:
-
- .
- .
- for c = 1 to 45
- print "The cosine of "; c; " is "; cos(c)
- next c
- .
- .
-
- Note:
-
- See also SIN( ) and TAN( )
-
-
-
- DATE$( )
-
- Description:
-
- Instead of adopting MBASIC's date$ variable, we decided to use a function
- instead, figuring that this might give us additional flexibility later.
- This function returns the current date in long format.
-
- Usage:
-
- print date$( )
-
- Produces:
-
- Feb 5, 1991
-
- Or you can assign a variable the result:
-
- d$ = date$( )
-
-
-
- DIM array(size, size)
-
- Description:
-
- DIM sets the maximum size of an array. Any array can be dimensioned to
- have as many elements as memory allows. If an array is not DIMensioned
- explicitly, then the array will be limited to 10 elements, 0 to 9. Non
- DIMensioned double subscript arrays will be limited to 100 elements 0 to 9
- by 0 to 9.
-
- Usage:
-
- print "Please enter 10 names."
- for index = 0 to 9
- input names$ : name$(index) = name$
- next index
-
- The FOR . . . NEXT loop in this example is limited to a maximum value of 9
- because the array names$( ) is not dimensioned, and therefore is limited to
- 10 elements. To remedy this problem, we can add a DIM statement, like so:
-
- dim names$(20)
- print "Please enter 20 names."
- for index = 0 to 19
- input names$ : names$(index) = name$
- next index
-
- Double subscripted arrays can store information more flexibly, like so:
-
- dim customerInfo$(10, 5)
- print "Please enter information for 10 customers."
- for index = 0 to 9
- input "Customer name >"; info$ : customerInfo$(index, 0) = info$
- input "Address >"; info$ : customerInfo$(index, 1) = info$
- input "City >"; info$ : customerInfo$(index, 2) = info$
- input "State >"; info$ : customerInfo$(index, 3) = info$
- input "Zip >"; info$ : customerInfo$(index, 4) = info$
- next index
-
-
-
- ELSE
-
- See IF . . . THEN . . . ELSE
-
-
-
- EOF(#handle)
-
- Description:
-
- Used to determine when reading from a sequential file whether the end of
- the file has been reached. If so, -1 is returned, otherwise 0 is returned.
-
- Usage:
-
- open "testfile" for input as #1
- if eof(#1) < 0 then [skipIt]
- [loop]
- input #1, text$
- print text$
- if eof(#1) = 0 then [loop]
- [skipIt]
- close #1
-
-
-
- END
-
- Description:
-
- Used to immediately terminate execution of a program. If any files or
- devices are still open (see CLOSE) when execution is terminated, then
- Liberty BASIC will close them for you and present you with a dialog
- expressing this fact. It is good programming practice to close files and
- devices before terminating execution.
-
- Note: The STOP statement is functionally identical to END and is
- interchangable
-
- Usage:
-
- .
- .
- print "Preliminary Tests Complete."
- [askAgain]
- input "Would you like to continue (Y/N) ?"; yesOrNo$
- yesOrNo$ = left$(yesOrNo$, 1)
- if yesOrNo$ = "y" or yesOrNo$ = "Y" then [continueA]
- ifYesOrNo$ = 'n" or yesOrNo$ = "N" then end
- print "Please answer Y or N."
- goto [askAgain]
- [continueA]
- .
- .
-
-
-
- EXP( n )
-
- Description:
-
- This function returns e ^ n, e being 2.7182818 . . .
-
- Usage:
-
- print exp( 5 ) produces: 148.41315
-
-
-
- FIELD #handle, # as varName, # as varName, . . .
-
- Description:
-
- FIELD is used with an OPEN "filename.ext" for random as #handle
- statement to specify the fields of data in each record of the opened file. For
- example in this program FIELD sets up 6 fields of data, each with an
- appropriate length, and associates each with a string variable that holds the
- data to be stored in that field:
-
- open "custdata.001" for random as #cust len = 70 ' open a random access file
- field #cust, 20 as name$, 20 as street$, 15 as city$, 2 as state$, 10 as zip$, 3 as age
-
- [inputLoop]
- input "Name >"; name$
- input "Street >"; street$
- input "City >"; city$
- input "State >"; state$
- input "Zip Code >"; zip$
- input "Age >"; age
-
- confirm "Is this entry correct?"; yesNo$ ' ask if the data is entered correctly
- if yesNo$ = "no" then [inputLoop]
-
- recNumber = recNumber + 1 ' add 1 to the record # and put the record
- put #cust, recNumber
-
- confirm "Enter more records?"; yesNo$ ' ask whether to enter more records
- if yesNo$ = "yes" then [inputLoop]
-
- close #cust ' end of program, close file
- end
-
- Notice that Liberty BASIC permits the use of numeric variables in FIELD
- (eg. age), and it allows you to PUT and GET with both string and numeric
- variables, automatically, without needing LSET, RSET, MKI$, MKS$, MKD$,
- CVI, CVS, & CVD that are required with Microsoft BASICs.
-
- Note: See also PUT and GET
-
-
-
- FILEDIALOG titleString, templateString, receiverVar$
-
- Description:
-
- This command opens a file dialog box. The titleString is used to
- label the dialog box. The templateString is used as a filter to
- list only files matching a wildcard, or to place a full suggested
- filename.
-
- The box lets you navigate around the directory structure,
- looking at files that have a specific extension. You can then select
- one, and the resulting full path specification will be placed into
- receiverVar$, above.
-
- The following example would produce the dialog box below:
-
- filedialog "test it", "*.txt", fileName$
-
-
-
- If then summary.txt were selected, and OK clicked, then program
- execution would resume after placing the string "c:\liberty\summary.txt"
- into fileName$.
-
- If on the other hand Cancel were clicked, then an empty string
- would be placed into fileName$. Program execution would then resume.
-
- Look at the program grapher1.bas for a practical application of
- this command.
-
-
-
- FOR . . . NEXT
-
- Description:
-
- The FOR . . . NEXT looping construct provides a way to repeatedly execute
- code a specific amount of times. A starting and ending value are specified
- like so:
-
- for var = 1 to 10
- {BASIC code}
- next var
-
- In this case, the {BASIC code} is executed 10 times, with var being 1 the
- first time, 2 the second, and on through 10 the tenth time. Optionally
- (and usually) var is used in some calculation(s) in the {BASIC code}.
- For example if the {BASIC code} is print var ^ 2, then a list of squares
- for var will be displayed upon execution.
-
- The specified range could just as easily be 2 TO 20, instead of 1 TO 10,
- but since the loop always counts +1 at a time, the first number must be
- less than the second. The way around this limitation is to place STEP n
- at the end of for FOR statement like so:
-
- for index = 20 to 2 step -1
- {BASIC code}
- next index
-
- This would loop 19 times returning values for index that start with
- 20 and end with 2. STEP can be used with both positive and and negative
- numbers and it is not limited to integer values. For example:
-
- for x = 0 to 1 step .01
- print "The sine of "; x; " is "; sin(x)
- next x
-
-
- Note:
-
- It is not recommended to pass control of a program out of a
- FOR . . . NEXT loop using GOTO (GOSUB is acceptable).
- Liberty BASIC may behave unpredictably. For example:
-
- for index = 1 to 10
- print "Enter Customer # "; index
- input customer$
- if customer$ = "" then [quitEntry] ' <- it isn't allowed to cut out of a for ... next loop like this
- cust$(index) = customer$
- next index
- [quitEntry]
-
- . . . is not allowed! Rather use while ... wend:
-
- index = 1
- while customer$ <> "" and index <= 10
- print "Enter Customer # "; index
- input customer$
- cust$(index) = customer$
- index = index + 1
- wend
-
-
-
- GET #handle, recordNumber
-
- Description:
-
- GET is used after a random access file is opened to get a record of information
- (see FIELD) out of the file from a specified position. For example:
-
-
- open "custdata.001" for random as #cust len = 70 ' open random access file
- field #cust, 20 as name$, 20 as street$, 15 as city$, 2 as state$, 10 as zip$, 3 as age
-
- ' get the data from record 1
- get #cust, 1
-
- print name$
- print street$
- print city$
- print state$
- print zip$
- print age
-
- close #cust
- end
-
-
- Note: See also PUT, FIELD
-
-
-
- GETTRIM #handle, recordNumber
-
- Description:
-
- The GETTRIM command is exactly like the GET command, but when data is
- retrieved, all leading and trailing blank space is removed from all data fields
- before being committed to variables.
-
-
-
- GOSUB label
-
- Description:
-
- GOSUB causes execution to proceed to the program code following the label
- if it exists, using the form 'GOSUB label'. The label can be either a traditional
- line number or a branch label in the format [???????] where the ?'s can be any
- upper/lowercase letter combination. Spaces and numbers are not allowed.
-
- Here are some valid branch labels: [mainMenu] [enterLimits] [repeatHere]
- Here are some invalid branch labels: [enter limits] mainMenu [1moreTime]
-
- After execution is transferred to the point of the branch label, then each
- statement will be executed in normal fashion until a RETURN is encountered.
- When this happens, execution is transferred back to the statement
- immediately after the GOSUB. The section of code between a GOSUB and its
- RETURN is known as a 'subroutine.' One purpose of a subroutine is to save
- memory by having only one copy of code that is used many times throughout a
- program.
-
- Usage:
-
- .
- .
- print "Do you want to continue?"
- gosub [yesOrNo]
- if answer$ = "N" then [quit]
- print "Would you like to repeat the last sequence?"
- gosub [yesOrNo]
- if answer$ = "Y" then [repeat]
- goto [generateNew]
-
- [yesOrNo]
- input answer$
- answer$ = left$(answer$, 1)
- if answer$ = "y" then answer$ = "Y"
- if answer$ = "n" then answer$ = "N"
- if answer$ = "Y" or answer$ = "N" then return
- print "Please answer Y or N."
- goto [yesOrNo]
- .
- .
-
- You can see how using GOSUB [yesOrNo] in this case saves many lines of code
- in this example. The subroutine [yesOrNo] could easily be used many other
- times in such a hypothetical program, saving memory and reducing typing
- time and effort. This reduces errors and increases productivity. See also
- GOTO
-
-
-
- GOTO label
-
- Description:
-
- GOTO causes Liberty BASIC to proceed to the program code following the
- label if one exists, using the form 'GOTO label'. The label can be either a
- traditional line number or a branch label in the format [???????] where the
- ?'s can be any upper/lowercase letter combination. Spaces and digits are
- not allowed.
-
- Here are some valid branch labels: [mainMenu] [enterLimits] [repeatHere]
- Here are some invalid branch labels: [enter limits] mainMenu [1moreTime]
-
- Usage:
-
- .
- .
- [repeat]
- .
- .
- [askAgain]
- print "Make your selection (m, r, x)."
- input selection$
- if selection$ = "M" then goto [menu]
- if selection$ = "R" then goto [repeat]
- if selection$ = "X" then goto [exit]
- goto [askAgain]
- .
- .
- [menu]
- print "Here is the main menu."
- .
- .
- [exit]
- print "Okay, bye."
- end
-
- Notes:
-
- In the lines containing IF . . . THEN GOTO, the GOTO is optional.
- The expression IF . . . THEN [menu] is just as valid as
- IF . . . THEN GOTO [menu]. But in the line GOTO [askAgain], the GOTO
- is required.
-
- See also GOSUB
-
-
-
- IF expression THEN expression(s)
-
- Description:
-
- The purpose of IF . . . THEN is to provide a mechanism for your computer
- software to make decisions based on the data available. A decision-making
- mechanism is used in very simple situations and can be used in combinations
- to engineer solutions to problems of great complexity.
-
- The expression (see above) is a boolean expression (meaning that it
- evaluates to a true or false condition). In this expression we place the
- logic of our decision-making process. For example, if we are writing a
- inventory application, and we need to know when any item drops below a
- certain level in inventory, then our decision-making logic might look like
- this:
-
- .
- .
- if level <= reorderLevel then expression(s)
- next BASIC program line
- .
- .
-
- The 'level <= reorderLevel' part of the above expression will evaluate to
- either true or false. If the result was true, then the expression(s) part
- of that line (consisting of a branch label or any valid BASIC statements)
- will be executed. Otherwise execution will immediately begin at the next
- BASIC program line.
-
- The following are permitted:
-
- if a < b then [lessThan]
-
- This causes program execution to begin at branch label [lessThan]
- if a is less than b.
-
- if sample < lowLimit or sample > highLimit then beep : print"Out of range!"
-
- This causes the terminal bell to ring and the message Out of range! to be
- displayed if sample is less than lowLimit or greater then highLimit.
-
-
-
- IF expression THEN expression(s)1 ELSE expression(s)2
-
- Description:
-
- This extended form of IF . . . THEN adds expressiveness and simplifies
- coding of some logical decision-making software. Here is an example of its
- usefulness.
-
- Consider:
-
- [retry]
- input"Please choose mode, (N)ovice or e(X)pert?"; mode$
- if len(mode$) = 0 then print "Invalid entry! Retry" : goto [retry]
- mode$ = left$(mode$, 1)
- if instr("NnXx", mode$) = 0 then print "Invalid entry! Retry" : goto [retry]
- if instr("Nn", mode$) > 0 then print "Novice mode" : goto [main]
- print "eXpert mode"
- [main]
- print "Main Selection Menu"
-
- Look at the two lines before the [main] branch label. The first of these
- two lines is required to branch over the next line. These lines can be
- shortened to one line as follows:
-
- if instr("Nn",mode$)> 0 then print "Novice mode" else print "eXpert mode"
-
- Some permitted forms are as follows:
-
- if a < b then statement else statement
- if a < b then [label] else statement
- if a < b then statement else [label]
- if a < b then statement : statement else statement
- if a < b then statement else statement : statement
- if a < b then statement : goto [label] else statement
- if a < b then gosub [label1] else gosub [label2]
-
- Any number of variations on these formats are permissible. The a < b
- boolean expression is of course only a simple example chosen for convenience.
- You must replace it with the correct expression to suit your problem.
-
-
-
- INPUT #handle "string expression"; variableName
-
- Description:
-
- This command has three possible forms:
-
- input var - stop and wait for user to enter data in the program's
- main window and press the 'Return' key, then assign
- the data entered to var.
-
- input "enter data"; var - display the string "enter data" and then stop
- and wait for user to enter data in the program's main window
- and press 'Return', then assign the data entered to var.
-
- input #name, var - or - input #name, var1, var2
-
- - Get the next data item from the open file or device using handle named
- #handle and assign the data to var. If no device or file exists that
- uses the handle named #handle, then return an error. In the second case,
- the next two data items are fetched and assigned to var1 and var2.
-
- Usage:
-
- 'Display a text file
- input "Please type a filename >"; filename$
- open filename$ for input as #text
- [loop]
- if eof(#text) <> 0 then [quit]
- input #text, item$
- print item$
- goto [loop]
- [quit]
- close #text
- print "Done."
- end
-
-
- Note: In Liberty BASIC release 1.0, INPUT cannot be used to input data
- directly into arrays, only into the simpler variables.
-
- input a$(1) - is illegal
- input string$ : a$(1) = string$ - use this instead
-
- This shortcoming will be addressed in a future release. This should not be a
- problem anyway if you will be checking the input for validity before
- ultimately accepting it.
-
-
-
- INPUT (continued)
-
- Most versions of Microsoft BASIC implement INPUT to automatically place a
- question mark on the display in front of the cursor when the user is prompted
- for information like so:
-
- input "Please enter the upper limit"; limit
-
- produces:
-
- Please enter the upper limit ? |
-
- Liberty BASIC permits you the luxury of deciding for yourself whether the
- question mark appears at all.
-
- input "Please enter the upper limit :"; limit
-
- produces:
-
- Please enter the upper limit: |
-
- and: input limit produces simply:
-
- ? |
-
- In the simple form input limit, the question mark is inserted automatically,
- but if you do specify a prompt, as in the above example, only the contents of
- the prompt are displayed, and nothing more. If for some reason you wish to
- input without a prompt and without a question mark, then the following will
- achieve the desired effect:
-
- input ""; limit
-
- Additionally, in most Microsoft BASICs, if INPUT expects a numeric value and
- a non numeric or string value is entered, the user will be faced with a
- comment something like 'Redo From Start', and be expected to reenter.
- Liberty BASIC does not automatically do this, but converts the entry to a zero
- value and sets the variable accordingly. This is not considered a problem but
- rather a language feature, allowing you to decide for yourself how your
- program will respond to the situation.
-
- One last note: In Liberty BASIC input prompt$; limit is also valid. Try:
-
- prompt$ = "Please enter the upper limit:"
- input prompt$; limit
-
-
-
- INPUT$(#handle, items)
-
- Description:
-
- Permits the retrieval of a specified number of items from an open file or
- device using #handle. If #handle does not refer to an open file or device
- then an error will be reported.
-
- Usage:
-
- 'read and display a file one character at a time
- open "c:\autoexec.bat" for input as #1
- [loop]
- if eof(#1) <> 0 then [quit]
- print input$(#1, 1);
- goto [loop]
- [quit]
- close #1
- end
-
- For most devices (unlike disk files), one item does not refer a single
- character, but INPUT$( ) may return items more than one character in length.
- In most cases, use of INPUT #handle, varName works just as well or better for
- reading devices.
-
-
-
- INSTR(string1, string2, starting)
-
- Description:
-
- This function returns the position of string2 within string1. If string2
- occurs more than once in string 1, then only the position of the leftmost
- occurance will be returned. If starting is included, then the search for
- string2 will begin at the position specified by starting.
-
- Usage:
-
- print instr("hello there", "lo")
-
- produces: 4
-
- print instr("greetings and meetings", "eetin")
-
- produces: 3
-
- print instr("greetings and meetings", "eetin", 5)
-
- produces: 16
-
- If string2 is not found in string1, or if string2 is not found after starting,
- then INSTR( ) will return 0.
-
- print instr("hello", "el", 3)
-
- produces: 0
-
- and so does:
-
- print instr("hello", "bye")
-
-
-
- INT(number)
-
- Description:
-
- This function removes the fractional part of number, leaving only the whole
- number part behind.
-
- Usage:
-
- [retry]
- input "Enter an integer number>"; i
- if i<>int(i) then bell: print i; " isn't an integer! Re-enter.": goto [retry]
-
-
-
- LEFT$(string, number)
-
- Description:
-
- This function returns from string the specified number of characters starting
- from the left. So if string is "hello there", and number is 5, then "hello"
- would be the result.
-
- Usage:
-
-
- [retry]
- input "Please enter a sentence>"; sentence$
- if sentence$ = "" then [retry]
- for i = 1 to len(sentence$)
- print left$(sentence$, i)
- next i
-
- Produces:
-
- Please enter a sentence>That's all folks!
- T
- Th
- Tha
- That
- That'
- That's
- That's_
- That's a
- That's al
- That's all
- That's all_
- That's all f
- That's all fo
- That's all fol
- That's all folk
- That's all folks
- That's all folks!
-
- Note:
-
- If number is zero or less, then "" (an empty string) will be returned. If
- the number is greater than or equal to the number of characters in string,
- then string will be returned.
-
- See also MID$( ) and RIGHT$( )
-
-
-
- LEN( string )
-
- Description:
-
- This function returns the length in characters of string, which can be any
- valid string expression.
-
- Usage:
-
- prompt "What is your name?"; yourName$
- print "Your name is "; len(yourName$); " letters long"
-
-
-
- LET assignment expression
-
- Description:
-
- LET is an optional prefix for any BASIC assignment expression. Most do leave
- the word out of their programs, but some prefer to use it.
-
- Usage:
-
- Either is acceptable:
-
- let name$ = "John"
- or
- name$ = "John"
-
- Or yet again:
-
- let c = sqr(a^2 + b^2)
- or
- c = sqr(a^2 + b^2)
-
-
-
- LOG( n )
-
- Description:
-
- This function returns the natural log of n.
-
- Usage:
-
- print log( 7 ) produces: 1.9459101
-
-
-
- MENU #handle, title, text, branchLabel, text, branchLabel, | , . . .
-
- Description:
-
- Adds a pull down menu to the window at #handle. Title specifies the title of
- the menu, as seen on the menu bar of the window, and each text,
- branchLabel pair after the title adds a menu item to the menu, and tells
- Liberty BASIC where to branch to when the menu item is chosen. The |
- character can optionally be placed between menu items, to cause a seperating
- line to be added between the items with the menu is pulled down.
-
- As an example, if you wanted to have a graphics window opened, and then
- be able to pull down some menus to control color and geometric objects, your
- opening code might look like this:
-
- menu #geo, &Colors, &Red, [setRed], &Green, [setGreen], &Blue, [setBlue]
- menu #geo, &Shapes, &Rectangle, [asRect], &Triangle, [asCircle], &Line, [asLine]
- open "Geometric wite-board" for graphics_nsb as #geo
- input r$ ' stop and wait for a menu item to be chosen
-
- Notice that the MENU lines must go before the OPEN statement, and must
- use the same handle as the window that it will be associated with (#geo in this
- case). This is the same with the BUTTON statement (see BUTTON). See
- that execution must be stopped at an input statement for the menu choice to
- be acted upon. This is also the same as with BUTTON.
-
- Also notice that the & character placed in the title and text items for the menu
- determines the accelerator placement for each menu. Try experimenting.
-
-
-
-
- MID$(string, index, number)
-
- Description:
-
- Permits the extraction of a sequence of characters from string starting at
- index. If number is not specified, then all the characters from index to the
- end of the string are returned. If number is specified, then only as many
- characters as number specifies will be returned, starting from index.
-
- Usage:
-
- print mid$("greeting Earth creature", 10, 5)
-
- Produces:
-
- Earth
-
- And:
-
- string = "The quick brown fox jumped over the lazy dog"
- for i = 1 to len(string$) step 5
- print mid$(string$, i, 5)
- next i
-
- Produces:
-
- The_q
- uick_
- brown
- _fox_
- jumpe
- d_ove
- r_the
- _lazy
- _dog
-
-
- Note:
-
- See also LEFT$( ) and RIGHT$( )
-
-
-
- NEXT var
-
- see FOR . . . NEXT
-
-
-
-
- NOMAINWIN
-
- Description:
-
- This command instructs Liberty BASIC not to open a main window for the
- program that includes this statement. Some simple programs which do not use
- seperate windows for graphics, spreadsheet, or text may use only the main
- window. Other programs may not need the main window to do their thing, and
- so simply including NOMAINWIN somewhere in your program source
- will prevent the window from opening.
-
- If NOMAINWIN is used, when all other windows owned by that program
- are closed, then the program terminates execution automatically.
-
- For examples of the usage of NOMAINWIN, examine the included Liberty
- BASIC programs (buttons1.bas for example).
-
-
-
- NOTICE "string expression"
-
- Description:
-
- This command pops up a dialog box which displays "string expression" and
- which has a button OK which the user presses after the message is read.
- Pressing Enter also closes the dialog box.
-
- Two forms are allowed. If "string expression" has no Cr character (ASCII 13),
- then the title of the dialog box will be 'Notice' and "string expression" will be
- the message displayed inside the dialog box. If "string expression" does have
- a Cr character, then the part of "string expression" before Cr will be used as
- the title for the dialog box, and the part of "string expression" after Cr will be
- displayed as the message inside.
-
- Usage:
-
- notice "Super Stats is Copyright 1992, Mathware"
-
-
- Or:
-
- notice "Fatal Error!" + chr$(13) + "The entry buffer is full!"
-
-
-
- OPEN string FOR purpose AS #handle {LEN = #}
-
- Description:
-
- This statement has many functions. It can be used to open disk files, or to
- open windows of several kinds.
-
- Using OPEN with Disk files:
-
- A typical OPEN used in disk I/O looks like this:
-
- OPEN "\autoexec.bat" for input as #read
-
- This example illustrates how we would open the autoexec.bat file for reading.
- As you can see, string in this case is "\autoexec.bat", purpose is input, and
- #handle is read.
-
- string - this must be a valid pathname. If the file does not exist, it will
- be created.
-
- purpose - must be input, output, or random
-
- #handle - use a unique descriptive word, but must start with a #.
- This special handle is used to identify the open file in later
- program statements
-
- LEN = # - this is an optional addition for use only when opening a random
- access file. The # determines how many characters long each
- record in the file is. If this is not specified, the default length is
- 128 characters. See FIELD, GET, and PUT.
-
- Using OPEN with windows:
-
- A typical OPEN used in windows looks like this:
-
- OPEN "Customer Statistics Chart" for graphics as #csc
-
- This example illustrates how we would open a window for graphics. Once the
- window is open, there are a wide range of commands that can be given to it.
- As you can see, string in this case is "Customer Statistics Chart", which is used
- as the title of the window, purpose is graphics (open a window for graphics),
- and the #handle is #csc (derived from Customer Statistics Chart), which will
- be used as an identifier when sending commands to the window.
-
- string - can be any valid BASIC string. used to label the window
- purpose - there are a several of possibilities here:
- graphics, spreadsheet, text
- any of these can end in _fs, _nsbars (or other suffixes)
- #handle - as above, must be a unique, descriptive word starting with #
-
-
- Note: Any opened file or window must be closed before program execution is
- finished. See CLOSE
-
-
-
- PRINT #handle, pression ; expression(s) ;
-
- Description:
-
- This statement is used to send data to the main window, to a disk file, or
- to other windows. A series of expressions can follow PRINT (there does not
- need to be any expression at all), each seperated by a semicolon. Each
- expression is displayed in sequence. If the data is being sent to a disk
- file, or to a window, then #handle must be present.
-
- PRINTing to a the main window:
- When the expressions are displayed, then the cursor (that blinking vertical
- bar | ) will move down to the next line, and the next time information is
- sent to the window, it will be placed on the next line down. If you do not
- want the cursor to move immediately to the next line, then add an additional
- semicolor to the end of the list of expressions. This prevents the cursor
- from being moved down a line when the expressions are displayed. The next
- time data is displayed, it will be added onto the end of the line of data
- displayed previously.
-
- Usage: Produces:
-
- print "hello world" hello world
-
- print "hello "; hello world
- print "world"
-
- age = 23
- print "Ed is "; age; " years old" Ed is 23 years old
-
- When sending to a disk file and in regard to the use of the semicolon at the
- end of the expression list, the rules are similar (only you don't see it
- happen on the screen). When printing to a window, the expressions sent are
- usually commands to the window (or requests for information from the window).
- For more information, see chapter ?, Liberty BASIC Graphics.
-
-
-
- PROMPT string; responseVar
-
- Description:
-
- The PROMPT statement opens a dialog box, displays string, and waits for the
- user to type a response and press 'Return' (or press the OK or Cancel
- button). The entered information is placed in responseVar. If Cancel is
- pressed, then a string of zero length is returned. If responseVar is set to
- some string value before PROMPT is executed, then that value will become the
- 'default' or suggested response. This means that when the dialog is opened,
- the contents of responseVar will already be entered as a response for the
- user, who then has the option to either type over that 'default' response, or
- to press 'Return' and accept it.
-
- Usage:
-
- .
- .
- response$ = "C:"
- prompt "Search on which Drive? A:, B:, or C:"; response$
- [testResponse]
- if response$ = "" then [cancelSearch]
- if len(response$) = 2 and instr("A:B:C:", response$) > 0 then [search]
- prompt "Unacceptable response. Please try again. A:, B:, or C:"; again$
- goto [testResponse]
-
- [search]
- print "Starting search . . . "
- .
- .
-
-
-
- PUT #handle, recordNumber
-
- Description:
-
- PUT is used after a random access file is opened to place a record of information
- (see FIELD) into the file at a specified position. For example:
-
-
- open "custdata.001" for random as #cust len = 70 ' open a random access file
- field #cust, 20 as name$, 20 as street$, 15 as city$, 2 as state$, 10 as zip$, 3 as age
-
- ' enter data into customer variables
- input name$
- .
- .
-
- ' put the data into record 1
- put #cust, 1
-
- close #cust
- end
-
-
- Note: See also GET, FIELD
-
-
-
- REM comment
-
- Description:
-
- The REM statement is used to place comments inside of code to clearly
- explain the purpose of each section of code. This is useful to both the
- programmer who writes the code or to anyone who might later need to modify
- the program. Use REM statements liberally. There is a shorthand way of
- using REM, which is to use the ' (apostrophe) character in place of the word
- REM. This is cleaner to look at, but use whichever you prefer. Unlike other
- BASIC statements, with REM you cannot add another statement after it on the
- same line using a colon ( : ) to seperate the statements. The rest of the
- line becomes part of the REM statement.
-
- Usage:
-
- rem let's pretend that this is a comment for the next line
- print "The mean average is "; meanAverage
-
- Or:
-
- ' let's pretend that this is a comment for the next line
- print "The strength of the quake was "; magnitude
-
- This doesn't work:
-
- rem thank the user : print "Thank you for using Super Stats!"
-
- (even the print statement becomes part of the REM statement)
-
-
- Note:
-
- When using ' instead of REM at the end of a line, the statement seperator :
- is not required to seperate the statement on that line from its comment.
-
- For example:
-
- print "Total dollar value: "; dollarValue : rem print the dollar value
-
- Can also be stated:
-
- print "Total dollar value: "; dollarValue ' print the dollar value
-
- Notice that the : is not required in the second form.
-
-
-
- RETURN
-
- See GOSUB
-
-
-
- RIGHT$(string, number)
-
- Description:
-
- Returns a sequence of characters from the right hand side of string using
- number to determine how many characters to return. If number is 0,
- then "" (an empty string) is returned. If number is greater than or equal to
- the number of characters in string, then string will itself be returned.
-
- Usage:
-
- print right$("I'm right handed", 12)
-
- Produces:
-
- right handed
-
- And:
-
- print right$("hello world", 50)
-
- Produces:
-
- hello world
-
- Note:
-
- See also LEFT$( ) and MID$( )
-
-
-
- RND(number)
-
- Description:
-
- This function returns a pseudo random number between 0 and 1. This can be
- useful in writing games and some simulations. The particular formula used
- in this release might more accurately be called an arbitrary number generator
- (instead of random number generator), since if a distribution curve of the
- output of this function were plotted, the results would be quite uneven.
- Nevertheless, this function should prove more than adequate (especially for
- game play).
-
- In MBASIC it makes a difference what the value of parameter number is, but
- in Liberty BASIC, it makes no difference. The function will always return
- an arbitrary number between 0 and 1.
-
- Usage:
-
- ' print ten numbers between one and ten
- for a = 1 to 10
- print int(rnd(1)*10) + 1
- next a
-
-
-
- SIN(number)
-
- Description:
-
- This function return the sine of number.
-
- Usage:
-
- .
- .
- for t = 1 to 45
- print "The sine of "; t; " is "; sin(t)
- next t
- .
- .
-
- Note:
-
- See also COS( ) and TAN( )
-
-
-
- STR$(numericExpression)
-
- Description:
-
- This function returns a string expressing the result of numericExpression.
- In MBASIC, this function would always return a string representation of the
- expression and it would add a space in front of that string. For example
- in MBASIC:
-
- print len(str$(3.14))
-
- Would produce the number 5 (a space followed by 3.14 for a total of 5
- characters).
-
- Liberty BASIC leaves it to you to decide whether you want that space or not.
- If you don't want it, then you need not do anything at all, and if you do
- want it, then this expression will produce the same result under Liberty
- BASIC:
-
- print len(" " + str$(3.14))
-
- Usage:
-
- .
- .
- [kids]
- ' use str$( ) to validate entry
- input "How many children do you have?"; qtyKids
- qtyKids$ = str$(qtyKids)
- ' if the entry contains a decimal point, then the response is no good
- if instr(qtyKids$, ".") > 0 then print "Bad response. Reenter." : goto [kids]
- .
- .
-
-
-
- TAN(number)
-
- Description:
-
- This function return the tangent of number.
-
- Usage:
-
- .
- .
- for t = 1 to 45
- print "The tangent of "; t; " is "; tan(t)
- next t
- .
- .
-
- Note:
-
- See also SIN( ) and COS( )
-
-
-
- TIME$( )
-
- Description:
-
- This function returns a string representing the current time of the system
- clock in 24 hour format. This function replaces the time$ variable used in
- MBASIC. See also DATE$( ).
-
- Usage:
-
- .
- .
- ' display the opening screen
- print "Main selection screen Time now: "; time$( )
- print
- print "1. Add new record"
- print "2. Modify existing record"
- print "3. Delete record"
- .
- .
-
-
-
- TRACE number
-
- Description:
-
- This statement sets the trace level for its application program. This is
- only effective if the program is run using the Debug menu selection
- (instead of RUN). If Run is used, then any TRACE statements are ignored by
- the interpreter.
-
- There are three trace levels: 0, 1, and 2. Here are the effects of these
- levels:
-
- 0 = single step mode or STEP
- 1 = animated trace or WALK
- 2 = full speed no trace or RUN
-
- When any Liberty BASIC program first starts under Debug mode, the trace
- level is always initially 0. You can then click on any of the three buttons
- (STEP, WALK, RUN) to determine what mode to continue in. When a
- TRACE statement is encountered, the trace level is set accordingly, but you
- can recover from this new trace level by clicking again on the desired button.
-
- If you are having trouble debugging code at a certain spot, then you can add
- a TRACE statement (usually level 0) just before that location, run in Debug
- mode and then click on RUN. When the TRACE statement is reached, then
- the debugger will kick in at that point.
-
- Usage:
-
- .
- .
- 'Here is the trouble spot
- trace 0 ' kick down to single step mode
- for index = 1 to int(100*sin(index))
- print #graph, "go "; index ; " "; int(100*cos(index))
- next index
- .
- .
-
-
-
- TRIM$(stringExpression)
-
- Description:
-
- This function removes any spaces from the start and end of the string in
- stringExpression. This can be useful for cleaning up data entry among other
- things.
-
-
- Usage:
-
- sentence$ = " Greetings "
- print len(trim$(sentence$))
-
- Produces:
-
- 9
-
-
-
- USING(templateString, numericExpression)
-
- Description:
-
- This function formats numericExpression as a string using templateString.
- The rules for the format are like those in MBASIC's PRINT USING statement,
- but since USING( ) is a function, it can be used as part of a larger BASIC
- expression instead of being useful only for output directly.
-
-
- Usage:
-
- ' print a column of ten justified numbers
- for a = 1 to 10
- print using("####.##", rnd(1)*1000)
- next a
-
-
-
- VAL(stringExpression)
-
- Description:
-
- This function returns a numeric value for stringExpression is
- stringExpression represents a valid numeric value or if it starts out as
- one. If not, then zero is returned. This function lets your program take
- string input from the user and carefully analyze it before turning it into
- a numeric value if and when appropriate.
-
- Usage:
-
- print 2 * val("3.14") Produces: 6.28
-
- print val("hello") Produces: 0
-
- print val("3 blind mice") Produces: 3
-
-
-
- WHILE expression . . . WEND
-
- Description:
-
- These two statements comprise the start and end of a control loop. Between
- the WHILE and WEND statements place code (optionally) that will be executed
- repeatedly while expression evaluates the same. The code between WHILE and
- WEND will always execute at least once. Once execution reaches the WEND
- statement, for as long as the WHILE expression evaluates to true, then execution
- will jump back to the WHILE statement. Expression can be a boolean,
- numeric, or string expression.
-
- Usage:
-
- ' loop until midnight (go read a good book)
- while time$ <> "00:00:00"
- ' some action performing code might be placed here
- wend
-
- Or:
-
- ' loop until a valid response is solicited
- while val(age$) = 0
- input "How old are you?"; age$
- if val(age$) = 0 then print "Invalid response. Try again."
- wend
-
- Or:
-
- ' generate a list of ten non-consecutive random numbers
- for count = 1 to 10
- while random : random = int(rnd(1)*10)+1 : wend
- print random
- next count
-
-
-
- WORD$( stringExpression, n )
-
- Description:
-
- This function returns the nth word in stringExpression. The leading and
- trailing spaces are stripped from stringExpression and then it is broken
- down into 'words' at the remaining spaces inside. If n is less than 1 or
- greater than the number of words in stringExpression, then "" is returned.
-
- Usage:
-
- print word$("The quick brown fox jumped over the lazy dog", 5)
-
- Produces:
-
- jumped
-
- And:
-
- ' display each word of sentence$ on its own line
- sentence$ = "and many miles to go before I sleep."
- token$ = "?"
- while token$ <> ""
- index = index + 1
- tokens$ = word$(sentence$, index)
- print token$
- wend
-
- Produces:
-
- and
- many
- miles
- to
- go
- before
- I
- sleep.
-