Jump to content

IBM System/36 BASIC

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Jessemckay (talk | contribs) at 08:00, 5 January 2007. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

IBM System/36 BASIC was an interpreter for the IBM System/36 midrange computer.

Like other BASICs licensed by IBM, S/36 BASIC was compatible with ANSI Minimal BASIC and had considerable extensions to it in order to be useful with the host.

These core BASIC statements, functions, and commands were used:


 DATA
 DIM
 END
 FOR...NEXT
 GOSUB...RETURN
 GOTO
 IF...THEN
 INPUT
 LET
 ON...GOTO
 PRINT
 PRINT USING
 READ
 REM
 STOP
  
 ASC()
 RND()
 SIN()
 COS()
 TAN()
 TAB()
 SQRT()
 LOG()
 
 LIST


More advanced IBM-supplied statements included:

 ON ERROR
 OPTION
 OPEN
 CLOSE
 WRITE
 REWRITE
 APPEND
 DELETE
 IMAGE
 FORM
 DEF FN..FNEND
 CHAIN
 
 PRINT #255:
 
 AIDX()
 DIDX()
 SRCH()
   
 RENUMBER
 LOAD
 SAVE
 OFF
 LISTP
 


ON ERROR is an error-trapping statement that allows BASIC to suspend an error that might otherwise stop a BASIC program from running and perform an error-handling routine instead. Variants include suffixing OFLOW, ZDIV, and other error types to a statement and immediately trap these errors.

OPTION allows the BASIC program to meet special criteria. Sometimes BASIC did not have very much user space (since all S/36 programs are limited to 64K) and the area called "code space" which contains the current user program must reside within the user space. Therefore, users could choose OPTION LPREC which causes BASIC to compute with double-precision (long) numerics, or OPTION SPREC which provides more space and single-precision (short) numerics. Some programmers prefer matrix mathematics where the lowest-numbered index is 0, others prefer 1. OPTION BASE 0 and OPTION BASE 1 accomplish this. There are other uses for OPTION.

RPG II programs on the S/34 and S/36 could not call each other, but BASIC programs could, using the CHAIN statement. CHAIN passes control from the current BASIC module to the named module, bearing a list of arguments which can become variables in the new module when it is loaded.

DEF FN allows the definition of a user function in BASIC which can be named and referred in the program. FNEND is placed after the last statement in a function.

There are four ways to format BASIC input and output. First, unformatted; just PRINT and INPUT to your heart's content. Second, with PRINT USING, which in S/36 BASIC can incorporate a constant, a string variable, a line number, or a label. Third, with PRINT FIELDS and INPUT FIELDS, which place 5250-type display fields on the CRT in immediate mode. Fourth, by using a workstation file (opened with OPEN #x: "WS,NAME=" and so forth) and performing various combinations of WRITE and READ to that workstation file, using SDA-generated screen formats similar to those in other S/36 applications. WRITE and READ, as well as PRINT USING and INPUT USING, can direct BASIC to a line number or a label that contains the keyword "IMAGE:".

An IMAGE statement contains decimals, commas, dollar signs, dashes, and pound signs ("#") in representation of the substituted numeric or alphameric values.

3540 IMAGE: ###-##-#### ############################# $#,###,###.##

A FORM statement denotes the size of the variables to be read or written. To save a numeric value of .00 to 99,999.99, use this notation:

2959 FORM N 7.2


A label is a tag on a line as follows:

260 BEGIN_CALCULATIONS:: 270 FOR X = 1 TO 12 280 Y = Y + X*1.08 290 NEXT X

If desired, the statement GOSUB BEGIN_CALCULATIONS can be used instead of GOSUB 260.

OPEN, CLOSE, WRITE, REWRITE, DELETE, and APPEND are already familiar to COBOL programmers and describe the actions taken to access S/36 disk files using BASIC. It isn't possible to access every single type of S/36 file because these include system files, libraries, and folders, but every user-created S/36 file with a fixed record length (only FORTRAN programs can use variable record lengths) will suffice. Disk files can be opened sequentially, by index, or relatively (by record number). If a file is delete-capable, records can be deleted using the DELETE statement. To add a record, use WRITE (with APPEND specified in the OPEN statement) and to update use REWRITE.

In S/36 BASIC, to print to the printer, a device file must be used. A default printer file called #255 always exists when BASIC is started. It has a printer name of BASIC255 and opens the device that is the default printer for the terminal that begins a BASIC session. If desired, it is possible to create a different printer file numbered between 1 and 254. Use "OPEN #x: PRINTER,NAME=" and so forth to do this, specifying columns or device ID or other parameters as needed.

Some versions of BASIC allow the programmer to sort an array. S/36 BASIC doesn't provide a function for this, but it does provide an interesting remedy. The programmer can define an array with the same number of elements as the target array and use AIDX or DIDX to create an ascending or descending index. Each element of the new array will contain a number representing the ordinal sorted position of the target array, so if AMERICA is the sixth element of array A$ but first in alphabetical order, then setting A() = DIDX(A$) would cause A(6) to contain the value 1.

Writing a BASIC program is much more fun than rewriting the same program each time you use it, therefore the authors of BASIC allow programmers to SAVE their program code to a library member and to REPLACE it when changes are made.

SAVE PROG1,PGMRLIB causes the current module to be saved as a subroutine member (type R) named PROG1 in a user library named PGMRLIB.

Note that System/36 files are not part of libraries. If a disk file is named FNF001, then an OPEN statement like this one can work:

OPEN #3:"NAME=FNF001,SEQUENTIAL",INPUT

It doesn't matter which library is used to access file FNF001.

RENUMBER is the S/36 BASIC command used to renumber statements. All internal references to statement numbers are immediately recalculated.

System/36 has a very dangerous command called FREE. Typing FREE followed by a filename deletes that file without a trace. It will work for every user file, unless there is a conflict of security or an in-use condition that blocks it.