HP OpenVMS Systems Documentation |
HP BASIC for OpenVMS
|
Previous | Contents | Index |
The SCRATCH statement deletes the current record and all following records in a sequential file.
Chnl-exp is a numeric expression that specifies a channel associated with a file. It must be immediately preceded by a number sign (#).
- Before you execute the SCRATCH statement, the file must be opened with ACCESS SCRATCH.
- The SCRATCH statement applies to ORGANIZATION SEQUENTIAL files only.
- The SCRATCH statement has no effect on terminals or unit record devices.
- For disk files, the SCRATCH statement discards the current record and all that follows it in the file. The physical length of the file does not change.
- For magnetic tape files, the SCRATCH statement overwrites the current record with two end-of-file marks.
- Use of the SCRATCH statement on shared sequential files is not recommended.
SCRATCH #4%
The SEG$ function extracts a substring from a main string, leaving the original string unchanged.
None
- HP BASIC extracts the substring from str-exp, the main string, and stores the substring in str-var. The substring begins with the character in the position specified by int-exp1 and ends with the character in the position specified by int-exp2.
- If int-exp1 is less than 1, HP BASIC assumes a value of 1.
- If int-exp1 is greater than int-exp2 or the length of str-exp, the SEG$ function returns a null string.
- If int-exp1 equals int-exp2, the SEG$ function returns the character at the position specified by int-exp1.
- Unless int-exp2 is greater than the length of str-exp, the length of the returned substring equals int-exp2 minus int-exp1 plus 1. If int-exp2 is greater than the length of str-exp, the SEG$ function returns all characters from the position specified by int-exp1 to the end of str-exp.
- If you specify a floating-point expression for int-exp1 or int-exp2, HP BASIC truncates it to a LONG integer.
DECLARE STRING alpha, center alpha = "ABCDEFGHIJK" center = SEG$(alpha, 4, 8) PRINT centerOutput
DEFGH
The SELECT statement lets you specify an expression, a number of possible values the expression may have, and a number of alternative statement blocks to be executed for each possible case.
- Exp1 is the expression to be tested against the case-clauses and the else-clause. It can be numeric or string.
- Case-clause consists of the CASE keyword followed by a case-item and statements to be executed when the case-item is true.
- Else-clause consists of the CASE ELSE keywords followed by statements to be executed when no previous case-item has been selected as true.
- Case-item is either an expression to be compared with exp1 or a range of values separated with the keyword TO.
- Rel-op is a relational operator specifying how exp1 is to be compared to exp2. If you do not include a rel-op, HP BASIC assumes the equals (=) operator. HP BASIC executes the statements in the CASE block when the specified relational expression is true.
- Exp3 and exp4 specify a range of numeric or string values separated by the keyword TO. Multiple ranges must be separated with commas. HP BASIC executes the statements in the CASE block when exp1 falls within any of the specified ranges.
- A SELECT statement can have only one else-clause. The else-clause is optional and, when present, must be the last CASE block in the SELECT block.
- Each statement in a SELECT block can have its own line number.
- The SELECT statement begins the SELECT block and the END SELECT keywords terminate it. HP BASIC signals an error if you do not include the END SELECT keywords.
- Each CASE keyword establishes a CASE block. The next CASE or END SELECT keyword ends the CASE block.
- You can nest SELECT blocks within a CASE or CASE ELSE block.
- HP BASIC evaluates exp1 when the SELECT statement is first encountered; HP BASIC then compares exp1 with each case-clause in order of occurrence until a match is found or until a CASE ELSE block or END SELECT is encountered.
- The following conditions constitute a match:
- Exp1 satisfies the relationship to exp2 specified by rel-op.
- Exp1 is greater than or equal to exp3, but less than or equal to exp4, greater than or equal to exp5 but less than or equal to exp6, and so on.
- When a match is found between exp1 and a case-item, HP BASIC executes the statements in the CASE block where the match occurred. If ranges overlap, the first match causes HP BASIC to execute the statements in the CASE block. After executing CASE block statements, control passes to the statement immediately following the END SELECT keywords.
- If no CASE match occurs, HP BASIC executes the statements in the else-clause, if present, and then passes control to the statement immediately following the END SELECT keywords.
- If no CASE match occurs and you do not supply a case-else clause, control passes to the statement following the END SELECT keywords.
100 SELECT A% + B% + C% CASE = 100 PRINT 'THE VALUE IS EXACTLY 100' CASE 1 TO 99 PRINT 'THE VALUE IS BETWEEN 1 AND 99' CASE > 100 PRINT 'THE VALUE IS GREATER THAN 100' CASE ELSE PRINT 'THE VALUE IS LESS THAN 1' END SELECT
The SET PROMPT statement enables a question mark prompt to appear after HP BASIC executes either an INPUT, LINPUT, INPUT LINE, MAT INPUT, or MAT LINPUT statement on channel #0. The SET NO PROMPT statement disables the question mark prompt.
None
- If you do not specify a SET PROMPT statement, the default is SET PROMPT.
- SET NO PROMPT disables HP BASIC from issuing a question mark prompt for the INPUT, LINPUT, INPUT LINE, MAT INPUT, and MAT LINPUT statements on channel #0.
- Prompting is reenabled when either a SET PROMPT statement or a CHAIN statement is executed.
- The SET NO PROMPT statement does not affect the string constant you specify as the input prompt with the INPUT statement.
DECLARE STRING your_name, your_age, your_grade INPUT "Enter your name";your_name SET NO PROMPT INPUT "Enter your age"; your_age SET PROMPT INPUT "Enter the last school grade you completed";your_gradeOutput
Enter your name? Katherine Kelly Enter your age 15 Enter the last school grade you completed? 9
The SGN function determines whether a numeric expression is positive, negative, or zero. It returns 1 if the expression is positive, --1 if the expression is negative, and zero if the expression is zero.
None
- If real-exp does not equal zero, SGN returns MAG(real-exp)/real-exp.
- If real-exp equals zero, SGN returns a value of zero.
- SGN returns an integer.
DECLARE INTEGER sign sign = SGN(46/23) PRINT signOutput
1
The SIN function returns the sine of an angle in radians or degrees.
Real-exp is an angle specified in radians or degrees depending upon which angle clause you choose with the OPTION statement.
- The returned value is from --1 to 1.
- HP BASIC expects the argument of the SIN function to be a real expression. When the argument is a real expression, HP BASIC returns a value of the same floating-point size. When the argument is not a real expression, HP BASIC converts the argument to the default floating-point size and returns a value of the default floating-point size.
OPTION ANGLE = RADIANS DECLARE REAL s1_angle s1_angle = SIN(PI/2) PRINT s1_angleOutput
1
The SLEEP statement suspends program execution for a specified number of seconds or until a carriage return is entered from the controlling terminal.
- Int-exp is the number of seconds HP BASIC waits before resuming program execution.
- Int-exp must be from 0 to the largest allowed positive integer value; if it is greater, HP BASIC signals the error "Integer error or overflow" (ERR=51).
- Pressing the Return key on the controlling terminal cancels the effect of the SLEEP statement.
- All characters typed while SLEEP is in effect, including a Return entered to terminate the SLEEP statement, remain in the typeahead buffer. Therefore, if you type RETURN without preceding data, an INPUT statement that follows SLEEP completes without data.
SLEEP 120%
The SPACE$ function creates a string containing a specified number of spaces.
Int-exp specifies the number of spaces in the returned string.
- HP BASIC treats an int-exp less than 0 as zero.
- If you specify a floating-point expression for int-exp, HP BASIC truncates it to an integer.
DECLARE STRING A, B A = "1234" B = "5678" PRINT A + SPACE$(5%) + BOutput
1234 5678
The SQR function returns the square root of a positive number.
None
- HP BASIC signals the error "Imaginary square roots" (ERR=54) when real-exp is negative.
- HP BASIC assumes that the argument of the SQR function is a real expression. When the argument is a real expression, HP BASIC returns a value of the same floating-point size. When the argument is not a real expression, HP BASIC returns a value of the default floating-point size.
DECLARE REAL root root = SQR(20*5) PRINT rootOutput
10
The STATUS function returns an integer value containing information about the last opened channel. Your program can test each bit to determine the status of the channel.
The STATUS function is supported only for compatibility with other versions of BASIC. It is recommended that you use the RMSSTATUS function for new program development. |
None
- The STATUS function returns a LONG integer.
- The value returned by the STATUS function is undefined until HP BASIC executes an OPEN statement.
- The STATUS value is reset by every input operation on any channel; therefore, you should copy the STATUS value to a different storage location before your program executes another input operation.
- If an error occurs during an input operation, the value of STATUS is undefined. When no error occurs, the 6 low-order bits of the returned value contain information about the type of device accessed by the last input operation. Table 3-5 lists STATUS bits set by HP BASIC.
Table 3-5 HP BASIC STATUS Bits Bit Set Device Type 0 Record-oriented device 1 Carriage-control device 2 Terminal 3 Directory device 4 Single directory device 5 Sequential block-oriented device (magnetic tape)
150 Y% = STATUS
The STOP statement halts program execution allowing you to optionally continue execution.
None
- The STOP statement cannot appear before a PROGRAM, SUB, or FUNCTION statement.
- The STOP statement does not close files.
- When a STOP statement is in an executable image, the line number, module name, and a number sign (#) prompt are printed. In response to the prompt, you can type CONTINUE to continue program execution or EXIT to end the program. If the program module was compiled with the /NOLINE qualifier, no line number is displayed.
PROGRAM Stopper PRINT "Type CONTINUE when the program stops" INPUT "Do you want to stop now"; Quit$ IF Quit$ = "Y" THEN STOP ELSE PRINT "So what are you waiting for?" STOP END IF PRINT "You told me to continue... thank you" END PROGRAMOutput
Type CONTINUE when the program stops Do you want to stop now?n So what are you waiting for? Stop In module STOPPER Ready continue You told me to continue... thank you Ready
The STR$ function changes a numeric expression to a numeric character string without leading and trailing spaces.
None
- If num-exp is negative, the first character in the returned string is a minus sign (--).
- The STR$ function does not return leading or trailing spaces.
- When you print a floating-point number that has 6 decimal digits or more but the integer portion has 6 digits or less (for example, 1234.567), HP BASIC rounds the number to 6 digits (1234.57). If a floating-point number's integer part is 7 decimal digits or more, HP BASIC rounds the number to 6 digits and prints it in E format.
- When you print a floating-point number with magnitude from 0.1 to 1, HP BASIC rounds it to 6 digits. When you print a number with magnitude smaller than 0.1, HP BASIC rounds it to 6 digits and prints it in E format.
- The STR$ function returns up to 10 digits for LONG integers and up to 31 digits for DECIMAL numbers.
DECLARE STRING new_num new_num = STR$(1543.659) PRINT new_numOutput
1543.66
The STRING$ function creates a string containing a specified number of identical characters.
- Int-exp1 specifies the character string's length.
- Int-exp2 is the decimal ASCII value of the character that makes up the string. This value is treated modulo 256.
- HP BASIC signals the error "String too long" (ERR=227) if int-exp1 is greater than 65535.
- If int-exp1 is less than or equal to zero, HP BASIC treats it as zero.
- HP BASIC treats int-exp2 as an unsigned 8-bit integer. For example, --1 is treated as 255.
- If either int-exp1 or int-exp2 is a floating-point expression, HP BASIC truncates it to an integer.
DECLARE STRING output_str output_str = STRING$(10%, 50%) !50 is the ASCII value of the PRINT output_str !character "2"Output
2222222222
The SUB statement marks the beginning of a HP BASIC subprogram and specifies the number and data type of its parameters.
- Sub-name is the name of the separately compiled subprogram.
- Formal-param specifies the number and type of parameters for the arguments the SUB subprogram expects to receive when invoked.
- Empty parentheses indicate that the SUB subprogram has no parameters.
- Data-type specifies the data type of a parameter. If you do not specify a data type, parameters are of the default data type and size. When you do specify a data type, all following parameters are of that data type until you specify a new data type. Data type keywords and their size, range, and precision are listed in Table 1-2.
- Sub-name can have from 1 to 31 characters and must conform to the following rules:
- The first character of an unquoted name must be an alphabetic character (A to Z). The remaining characters, if present, can be any combination of letters, digits (0 to 9), dollar signs ($), periods (.), or underscores (_).
- A quoted name can consist of any combination of printable ASCII characters.
- Data-type can be any HP BASIC data type keyword or a data type defined by a RECORD statement.
- Pass-mech specifies the parameter passing mechanism by which the subprogram receives arguments.
- A pass-mech clause outside the parentheses applies by default to all SUB parameters. A pass-mech clause in the formal-param list overrides the specified default and applies only to the immediately preceding parameter.
- The SUB statement must be the first statement in the SUB subprogram.
- Compiler directives and comment fields created with an exclamation point (!), can precede the SUB statement because they are not BASIC statements. Note that REM is a BASIC statement; therefore, it cannot precede the SUB statement.
- Every SUB statement must have a corresponding END SUB statement or SUBEND statement.
- If you do not specify a passing mechanism, the SUB program receives arguments by the default passing mechanisms.
- Parameters defined in formal-param must agree in number, type, ordinality, and passing mechanism with the arguments specified in the CALL statement of the calling program.
- You can specify up to 255 parameters.
- Any HP BASIC statement except those that refer to other program unit types (FUNCTION, PICTURE or PROGRAM) can appear in a SUB subprogram.
- All variables, except those named in MAP and COMMON statements are local to that subprogram.
- HP BASIC initializes local variables to zero or the null string.
- SUB subprograms receive parameters by reference, by descriptor, or by value.
- BY REF specifies that the subprogram receives the argument's address.
- BY DESC specifies that the subprogram receives the address of a BASIC descriptor. For information about the format of a BASIC descriptor for strings and arrays, see the HP BASIC for OpenVMS User Manual. For information about other types of descriptors, see the VAX Architecture Handbook.
- BY VALUE specifies that the subprogram receives a copy of the argument value.
- By default, HP BASIC subprograms receive numeric unsubscripted variables by reference, and all other parameters by descriptor. You can override these defaults for strings and arrays with a BY clause:
- If you specify a string length with the =int-const clause, you must also specify BY REF. If you specify BY REF and do not specify a string length, HP BASIC uses the default string length of 16.
- If you specify array bounds, you must also specify BY REF.
- Subprograms can be called recursively.
SUB SUB3 BY REF (DOUBLE A, B, & STRING Emp_nam BY DESC, & wage(20)) . . . END SUB
Previous | Next | Contents | Index |