IBM System/36 БЕЙСИК
Впервые появился | 1983 год |
---|
IBM System/36 BASIC был интерпретатором компьютера среднего уровня IBM System/36 .
System/36 BASIC был впервые предложен в 1983 году и, как таковой, содержал многие атрибуты, с которыми программа BASIC могла столкнуться в период существования IBM PC , Commodore 64 , VIC-20 , TRS-80 или многие другие предложения семидесятых и начала восьмидесятых годов. Таким образом, S/36 BASIC использует соглашения, которые больше не являются стандартными в современных BASIC, такие как номера строк, и не поддерживает новые функции, такие как WHILE/WEND, DO/ENDDO, With/END With , процедуры, свойства и т. д.
Интерпретаторы BASIC, написанные в семидесятые годы, имели тенденцию «делать странные вещи странными способами». Например, на Apple II программист . мог встроить команду в программу через PRINT, если перед ней стояла строка символов CHR$(4)
. ПЭК и POKE можно использовать в различных BASIC-ах для проверки содержимого памяти или его изменения или даже для создания специальной программы на машинном языке и последующего ее запуска. System/36 BASIC стремится держаться подальше от этих странных соглашений; однако программист может вызвать сигнал тревоги (жужжащий звук, издаваемый терминалом) через PRINT CHR$(7)
.
Ожидается, что операторы BASIC будут вводиться заглавными буквами, и хотя оператор может нажать Cmd2, чтобы использовать нижний регистр, интерпретатор BASIC преобразует ключевые слова без комментариев в верхний регистр.
Чтобы BASIC мог быть полезен в вычислительной среде среднего уровня, IBM добавила к языку расширения, специфичные для аппаратного и программного обеспечения семейства IBM System/36, такие как WORKSTN , поддержка индексированных, прямых и последовательных дисковых файлов, возможность открывать и закрывать несколько файлов принтера, а также ЗАГРУЗИТЬ/СОХРАНИТЬ из библиотек на фиксированном диске.
Операторы, функции и команды
[ редактировать ]Были использованы следующие основные операторы, функции и команды BASIC:
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
Более продвинутые утверждения, предоставленные IBM, включали:
ON ERROR Allows error trapping OPTION Permits program-wide properties such as Base 1 or Base 0 array indexing, long or short precision, etc. OPEN Allows a file or device (formatted workstation, printer) to be opened CLOSE Closes a file or device WRITE Outputs to a file or device REWRITE Changes a record or display format APPEND Adds to a file DELETE Deletes a record from a file IMAGE Defines the format of a record using COBOL-like syntax FORM Defines the format of a record using RPG-like syntax DEF FN..FNEND Defines a function CHAIN Loads and passes control to another BASIC program PRINT #255: Prints to the (default) printer file PRINT NEWPAGE Clears the screen PRINT #255: NEWPAGE Advances to the next page on the printer file AIDX() Refers to the ascending index of an array, which is an array of relative sorted pointers to array elements DIDX() Same as AIDX but uses a descending index SRCH() Used to find a value in an array by retrieving the match pointer SRCH$() Used to find a string value in a string array by retrieving the match pointer
RENUMBER A command used to renumber the lines within a program LOAD A command used to load a program from a library on the fixed disk SAVE A command used to save a program to a library on the fixed disk OFF A command used to exit the interactive BASIC session LISTP A command used to list the current program to the printer
ON ERROR
это оператор перехвата ошибок, который позволяет BASIC приостановить ошибку, которая в противном случае могла бы остановить запуск программы BASIC, и вместо этого выполнить процедуру обработки ошибок. Варианты включают суффикс OFLOW, ZDIV и другие типы ошибок в операторе и немедленно перехватывают эти ошибки.
ОПЦИЯ позволяет программе BASIC соответствовать особым критериям. Иногда в BASIC не было очень много пользовательского пространства (поскольку все программы S/36 ограничены 64 КБ), и область, называемая «пространством кода», содержащая текущую пользовательскую программу, должна находиться в пользовательском пространстве. Таким образом, пользователи могут выбирать OPTION LPREC
что заставляет BASIC вычислять числа двойной точности (длинные), или OPTION SPREC
который обеспечивает больше места и числовые значения одинарной точности (короткие). Некоторые программисты предпочитают матричную математику, где индекс с наименьшим номером равен 0, другие предпочитают 1. OPTION BASE 0
и OPTION BASE 1
выполнить это. Есть и другие варианты использования ВАРИАНТ .
Программы RPG II на S/34 и S/36 не могли вызывать друг друга, но программы BASIC могли, используя ЦЕПЬ заявление. CHAIN передает управление от текущего модуля BASIC указанному модулю, перенося список аргументов, которые могут стать переменными в новом модуле при его загрузке.
DEF FN
позволяет определить пользовательскую функцию в BASIC, которой можно присвоить имя и использовать в программе. FNEND помещается после последнего оператора функции.
Существует четыре способа форматирования ввода и вывода BASIC. Во-первых, неформатированный; только ПЕЧАТЬ и ВВОД в свое удовольствие. Во-вторых, с PRINT USING
, который в S/36 BASIC может включать константу, строковую переменную, номер строки или метку. В-третьих, с PRINT FIELDS
и INPUT FIELDS
, которые размещают поля отображения типа 5250 на ЭЛТ в немедленном режиме. В-четвертых, используя файл рабочей станции (открытый с помощью OPEN #x: "WS,NAME="
и так далее) и выполнение различных комбинаций ПИШИТЕ и ПРОЧТИТЕ этот файл рабочей станции, используя форматы экрана, созданные SDA, аналогичные форматам в других приложениях S/36. ПИШИТЕ и ЧИТАЙТЕ , а также PRINT USING
и INPUT USING
, может направить BASIC на номер строки или метку, содержащую ключевое слово IMAGE:
.
Оператор IMAGE содержит десятичные дроби, запятые, знаки доллара, тире и знаки решетки («#») для представления замененных числовых или буквенно-цифровых значений.
3540 IMAGE: ###-##-#### ############################# $#,###,###.##
Оператор FORM обозначает размер переменных, которые необходимо прочитать или записать. Чтобы сохранить числовое значение от 0,00 до 99 999,99, используйте следующее обозначение:
2959 FORM N 7.2
Метка — это тег на строке следующего вида:
260 BEGIN_CALCULATIONS::
270 FOR X = 1 TO 12
280 Y = Y + X*1.08
290 NEXT X
При желании заявление GOSUB BEGIN_CALCULATIONS
можно использовать вместо GOSUB 260
.
ОТКРЫТЬ, ЗАКРЫТЬ, ЗАПИСАТЬ, ПЕРЕЗАПИСАТЬ, УДАЛИТЬ и APPEND уже знаком программистам на COBOL и описывает действия, предпринимаемые для доступа к дисковым файлам S/36 с использованием BASIC. Невозможно получить доступ к каждому типу файла S/36, поскольку к ним относятся системные файлы, библиотеки и папки, но возможен доступ к каждому созданному пользователем файлу S/36 с фиксированной длиной записи (только программы FORTRAN могут использовать переменную длину записи). будет достаточно. Файлы на диске можно открывать последовательно, по индексу или относительно (по номеру записи). Если файл поддерживает удаление, записи можно удалить с помощью УДАЛИТЬ заявление. Чтобы добавить запись, используйте ПИШИТЕ (с APPEND, указанный в оператор OPEN ) и для обновления использования ПЕРЕПИСАТЬ .
В S/36 BASIC для печати на принтере необходимо использовать файл устройства. Файл принтера по умолчанию с именем #255 всегда существует при запуске BASIC. Он имеет имя принтера BASIC255 и открывает устройство, которое является принтером по умолчанию для терминала, который начинает сеанс BASIC. При желании можно создать другой файл принтера с номером от 1 до 254. Используйте OPEN #x: PRINTER,NAME=
и т. д., указав столбцы, идентификатор устройства или другие параметры по мере необходимости. Ключевое слово PAGEOFLOW можно использовать для обнаружения состояния переполнения страницы для принтера.
Некоторые версии BASIC позволяют программисту сортировать массив. В S/36 BASIC нет функции для этой проблемы, но есть интересное решение. Программист может определить массив с тем же количеством элементов, что и целевой массив, и использовать AIDX или DIDX для создания возрастающего или нисходящего индекса. Каждый элемент нового массива будет содержать число, представляющее порядковую отсортированную позицию целевого массива, поэтому, если АМЕРИКА является шестым элементом массива A$ , но сначала в алфавитном порядке, затем установка A() = DIDX(A$)
вызовет A(6)
содержать значение 1.
Написание программы на BASIC гораздо увлекательнее, чем переписывать одну и ту же программу каждый раз, когда вы ее используете, поэтому авторы BASIC позволяют программистам СОХРАНИТЕ свой программный код для члена библиотеки и для ЗАМЕНИТЕ его при внесении изменений.
SAVE PROG1,PGMRLIB
заставляет текущий модуль сохраняться как член подпрограммы (тип R) с именем PROG1 в пользовательской библиотеке с именем ПГМРЛИБ .
Обратите внимание, что файлы System/36 не являются частью библиотек. Если файл на диске назван FNF001 , затем Оператор OPEN, подобный этому, может работать:
OPEN #3:"NAME=FNF001,SEQUENTIAL",INPUT
Не имеет значения, какая библиотека используется для доступа к файлу FNF001.
RENUMBER — это команда S/36 BASIC, используемая для изменения нумерации операторов. Все внутренние ссылки на номера операторов немедленно пересчитываются.
В System/36 BASIC есть очень опасная команда под названием БЕСПЛАТНО . Ввод текста FREE, за которым следует имя файла, удаляет этот файл без следа. Он будет работать для каждого пользовательского файла, если только не возникнет конфликт безопасности или условие использования, которое блокирует его.
В System/36 BASIC есть еще одна опасная команда под названием ЗАМОК . Команда LOCK сделает текущий исходный код программы недоступным, и это необратимо. Всегда сохраняйте разблокированную копию перед использованием LOCK.
Несовместимость между S/34 и S/36
[ редактировать ]System/34 BASIC и System/36 BASIC очень похожи; однако несовместимость машинного кода делает невозможным перенос программы BASIC-члена подпрограммы между этими системами.
См. также решение «Квадратный корень из 2» и «ПИ π» для решения, опубликованного для мэйнфреймов в 1980-х и 1990-х годах.