Е:01.11.96 (С) 1996г. Орионсофт ________________________________________________________________________ Б Е Й С И К С о д е р ж а н и е 1. Введение .......................................................... 2. Вызов интерпретатора языка бейсик ................................. 3. Режимы работы интерпретатора языка бейсик.......................... 4. Компиляция программ на языке бейсик................................ 4.1 Старт компилятора языка бейсик..................................... 4.2 Старт редактора связей языка бейсик............................... 5. Директивы языка бейсик............................................. 5.1. Директива NEW ................................................... 5.2 Директива RESET.................................................... 5.3 Директива AUTо..................................................... 5.4 Директива CLEAR.................................................... 5.5 Директива CONT..................................................... 5.6 Директива SYSTEM................................................... 5.7 Директива EDIT..................................................... 5.8 Директива LIST и LLIST............................................. 5.9 Директива DELETE................................................... 5.10 Директива RENUM.................................................... 5.11 Директива SAVE..................................................... 5.12 Директива LOAD..................................................... 5.13 Директива RUN...................................................... 5.14 Директива MERGE.................................................... 5.15 Директива FILES.................................................... 5.16 Директива KILL..................................................... 5.17 Директива NAME..................................................... 5.18 Директивы TRON и TROFF............................................. 6. Константы в языке бейсик........................................... 7. Переменные в языке бейсик.......................................... 7.1 Обозначения переменных и явные декларации типов.................... 7.2 Операторы описания DEFINT, DEFSNG, DEFDBL и DEFSTR для имплицитной декларации типа.................................... 7.3 Оператор описания DEFFN для функций................................ 7.4 Преобразование типов данных........................................ 7.5 Функции CINT, CDBL и CSNG для вынужденных преобразований типов данных....................................................... 8. Символы операций в языке бейсик.................................... 9. Массивы (ARRAY) в языке бейсик..................................... 9.1 Оператор описания DIM для массивов................................. 9.2 Оператор OPTION BASE для произвольного задания нижней границы индекса при описании массива............................... 9.3 Оператор ERASE для стирания областей памяти, занятых массивами..... 10. Операторы цикла в языке бейсик..................................... 10.1 Операторы FOR, TO, STEP и NEXT для образования цикла с фиксированным числом прохождений................................. 10.2 Операторы WHILE и WEND для образования цикла с переменным числом прохождений (итерационные циклы) ........................... 11. Безусловные и условные программные разветвления в языке бейсик..... 11.1 Оператор GOTO для реализации программных переходов (безусловные программные переходы)................................. 11.2 Операторы IF, THEN и ELSE для реализации ысловных переходов........ 11.3 Оператор ON для формулирования перехода на номер из списка......... 12. Работа с подпрограммами в языке бейсик............................. 12.1 Операторы GOSUB и RETURN для обеспечения работы в подпрограммами... 12.2 Оператор CALL для вызова программ в машинном коде с организацией передачи параметров................................. 12.3 Функция VARPTR для подготовки адресов памяти....................... 12.4 Оператор описания DEF USR для условного перехода в пользовательскую машинную программу.............................. 12.5 Оператор CHAIN для построения оверлейных структур в программах на языке бейсик....................................... 12.6 Оператор описания COMMON........................................... 12.7 Оператор %INCLUDE для вставки исходного текста во время компиляции (может использоваться только в бейсик-компиляторе)................. 13. Операторы для ввода и вывода на дисплей и печатающее устройство, в канал ввода/вывода или по адресу памяти в языке бейсик........... 13.1 Оператор INPUT для загрузки переменных во время выполнения программы...................................... 13.2 Оператор LINE INPUT для ввода любых последовательностей знаков во время выполнения программы...................................... 13.3 Оператор PRINT для неформатированного вывода информации дисплея.... 13.4 Оператор PRINT USING для форматированного вывода информации на дисплей.............................................. 13.5 Опрераторы LPRINT и LPRINT USING для неформатированного или форматированного вывода на печатающее устройство................... 13.6 Оператор WRITE для вывода на дисплей............................... 13.7 Оператор WIDTH для задания длины выводимой строки ................ 13.8 Оператор OUT для физического вывода некоторой величины в канал вывода..................................................... 13.9 Оператор POKE для записи заданного байта по заданному адресу памяти......................................... 13.10 Оператор WATE для синхронизации с внешними устройствами........... 13.11 Оператор SWAP для перестановки величин двух любых переменных одинакового типа................................................... 14. Функции для обеспечения ввода/вывода в языке бейсик................ 14.1 Функция INKEY$..................................................... 14.2 Функция INPUT$..................................................... 14.3 Функция INP для физического ввода некоторой величины из канала ввода.................................................... 14.4 Функция PEEK для чтения байта из адреса памяти..................... 14.5 Функция SPC........................................................ 14.6 Функция TAB........................................................ 14.7 Функция LPOS....................................................... 14.8 Функция POS........................................................ 15. Работа с файлами в языке бейсик.................................... 15.1 Оператор DATA для задания программных констант и данных во внутрипрограммном файле......................................... 15.2 Оператор READ для чтения из внутрипрограммного файла.............. 15.3 Оператор RESTORE для установки индекса внутрипрограммного файла.... 15.4 Оператор OPEN для открывания файлов................................ 15.5 Оператор INPUT# для ввода из последовательных файлов............... 15.6 Оператор LINE INPUT# для ввода любых последовательностей знаков из последовательного файла............................................ 15.7 Операторы PRINT# и PRINT# USING для неформатированного и форматированного вывода в последовательный файл .................. 15.8 Оператор WRITE для вывода в последовательный файл.................. 15.9 Оператор GET для передачи блока файла прямого доступа в буферную область................................................. 15.10 Оператор PUT для передачи блока из буферной области в файл прямого доступа............................................................ 15.11 Оператор FIELD для выделения областей для переменных в буфере файла с прямым доступом............................................ 15.12 Операторы LSET и RSET для записи строк, выровненных по правому или левому краю (в блок текстового файла с прямым доступом)........ 15.13 Оператор CLOSE для закрытия файлов, открытых с помощью OPEN........ 16. Функции для обеспечения работы с файлами в языке бейсик............ 16.1 Функция EOF........................................................ 16.2 Функция LOF........................................................ 16.3 Функция LOC........................................................ 16.4 Функции MKI$, MKS$, и MKD$......................................... 16.5 Функции CVI, CVS и CVD............................................. 17. Работа с последовательностями знаков в языке бейсик................ 17.1 Функция CHR$....................................................... 17.2 Функция ASC........................................................ 17.3 Функция STR$....................................................... 17.4 Функция VAL........................................................ 17.5 Функция HEX$....................................................... 17.6 Функция OCT$....................................................... 17.7 Функция RIGHT$..................................................... 17.8 Функция LEFT$...................................................... 17.9 Функция SPACE$..................................................... 17.10 Функция STRING$.................................................... 17.11 Функция INSTR...................................................... 17.12 Функция MID$ для образования фрагмента последовательности знаков.. 17.13 Оператор MID$ для замены фрагмента в последовательности знаков..... 17.14 Функция LEN........................................................ 18. Числовые стандартные функции в языке бейсик........................ 18.1 Функция ABS........................................................ 18.2 Функция FIX........................................................ 18.3 Функция INT........................................................ 18.4 Функция SGN........................................................ 18.5 Функция SQP........................................................ 18.6 Функция EXP........................................................ 18.7 Функция LOG........................................................ 18.8 Функция SIN........................................................ 18.9 Функция COS........................................................ 18.10 Функция TAN........................................................ 18.11 Функция ATN........................................................ 18.12 Функция RND........................................................ 18.13 Оператор RANDOMIZE для задания точки старта генератора случайных чисел......................................... 19. Простые управляющие операторы и функции в языке бейсик............. 19.1 Оператор LET для идентификации операторов присваивания............. 19.2 Оператор REM для идентификации текстов примечаний.................. 19.3 Оператор END для завершения бейсик-программы....................... 19.4 Оператор STOP для выработки программного прерывания................ 19.5 Функция FRE........................................................ 20. Реакция на ошибки и обработка ошибок в языке бейсик................ 20.1 Оператор ERROR для определения пользовательского кода ошибки и для симуляции ошибки в рамках программного текста.................. 20.2 Оператор ON ERROR GOTO для успешного перехода в стандартную программу реакции на ошибку........................................ 20.3 Оператор RESUME для завершения стандартной программы обработки ошибок................................................... 20.4 Переменные ERR и ERL............................................... Приложение A: возможности вызова программ в машинных кодах языкA бейсик.. Приложение B: сообщения об ошибках бейсик-интерпретатора............... Приложение C: сообщение об ошибках бейсик-компилятора.................... Приложение D: таблица знаков в коде ASCII................................ Приложение E: различия между подлежащим интерпретации и подлежащим компиляции диалектами языка бейсик......................... Приложение F: контрольные знаки, которые могут быть использованы при обрAботKE бейсик-программ.............................. Приложение G: зарезервированные идентификаторы в языке бейсик............ I. Введение Название языка Бейсик является аббревиатурой от английского BEGINNERS ALL PURPOSE SYMBOLIC INSTRUCTION CODE, что уже само по себе говорит о том, что этот язык программирования был специально создан для новичков в области программирования. Язык был разработан в 1964 году как диалоговый язык для обучения студентов основам программирования. Бейсик справился с этой задачей и через 10 лет после создания, не получив особого международного значения. Лишь развитие микроэлектроники и ее применение в области вычислительной техники и при обработке информации привело к тому, что язык бейсик получил широкое международное признание и в настоящее время относится к наиболее распространенным языкам программирования во всем мире. Для такого развития есть в основном три причины: 1. Технология микроэлектроники привела к значительному снижению расходов на производство ЭВМ. Сегодня так называемые персональные ЭВМ, состоящие из клавиатуры (которая в общем входит в состав ЭВМ), дисплея, внешней памяти (накопитель на гибком диске и/или на кассете) и устройства печати могут стоять практически на каждом письменном столе. Устройства этого типа имеют однако такую же производительность, как традиционные средние эвм . Широкое распространение этих технических вспомогательных средств в области обработки информации делает возможным, прежде всего для самого широкого круга пользователей, личный контакт с ЭВМ. Одновременно возникает необходимость предложить этому кругу пользователей простой язык для начинающих, а именно бейсик, пригодный для введения в программирование. 2. Бейсик является диалоговым языком программирования, пригодным с точки зрения интерпретатора для машинной обработки. Это означает, что отдельный оператор , фрагмент программы или программа полностью сразу пригодны для выполнения. Тем самым возможна разработка программы в режиме диалога с ЭВМ. В ЭВМ вводят один или несколько операторов и можно сразу проверить, правильно ли они записаны и дают ли ожидаемый результат. 3. Бейсик является не только языком программирования, он содержит также все необходимые функции диалогово-ориентированной операционной системы. Для этого Бейсик различает программные операторы и директивы программиста (макрокоманды). В то время как первые служат для формулирования программы , т.е. для образования последовательности операций, необходимых для решения задачи, директивы программиста обеспечивают весь процесс программирования. С их помощью можно нумеровать строки программы (директива AUTO), модифицировать операторы (директива EDIT), переписывать программы из ОЗУ на внешнее зу (директива SAVE), или загружать с внешнего ЗУв ОЗУ (директива LOAD), и наконец, запускать программу (директива RUN). Для разных типов вычислительной техники, которые существенно отличаются друг от друга, были разработаны соответствующие версии языка, наиболее подходящие для данной области использования (например, графические задачи, процессы ON-LINE, коммерческое использование, научно-технические расчеты, проблемы обработки больших массивов и т.Д.). Версия языка Бейсик, предложенная в операционной системе SCPX, обеспечивает как коммерческое использование, так и решение проблемобработки больших массивов (с помощью расширенной работы с файлами), научно- технические расчеты (с помощью большого набора математических функций), обработку текста (за счет эффективной работы со знаковыми последовательностями), а также решение комплексных задач (за счет создания прерывающихся программных фаз). Для этой версии языка имеется как интерпретатор, так и компилятор. Компилятор осуществляет трансляцию программы. Написанная на Бейсике так называемая "исходная программа" один раз переводится в машинную программу, так называемую "об'ектную программу". Эта программа может быть затем выполнена ЭВМ любое число раз. Интерпретатор переводит отдельные операторы "исходной программы" при каждом выполнении программы заново, и сразу выполняет каждый оператор. Оба процесса имеют свое преимущества и недостатки: интерпретированная программа работает медленнее, т.к. при выполнении каждого оператора дополнительно необходимо время на его перевод. Однако, при этом легко делать изменения в программе: измененные операторы обрабатываются соответствующим образом при следующем прогоне программы. Компилированная программа работает быстрее, т.к. предварительно была проведена трансляция. При изменениях необходимо вновь транслировать всю программу. Интерпретатор обладает решающим преимуществом особенно при разработке программы, когда часто могут происходить изменения, или для новичка, т.к. в этих случаях скорость обработки не столь важна. Если программы не имеют ошибок, и длительное время используются без внесения изменений, то более предпочтителен компилятор. В этом случае можно смириться с разовой необходимостью расхода времени на трансляцию ради преимущества более высокой скорости обработки при последующих прогонах программы. В данной документации используются следующие стандартные обозначения: <идентификатор> Использование метапеременных. На этом месте может быть поставлена последовательность знаков, идентифицированная с помощью идентификатора. Угловые скобки являются метасимволом, который не используется в программах, написанных на Бейсике. [строка сим- Строка символов, заключенная в квадратные скобки, волов] считается необязательной и может отсутствовать. Квадрат- ные скобки являются метасимволом и не используются в про- граммах, написанных на Бейсике. Например /F: Отдельные буквы, специальные знаки и т.д. следует использовать так, как они заданы. ... Элемент, стоящий перед тремя точками может быть неодно- кратно повторен. Если при описании директивы или операторы нет особых указаний по использованию их только в интерпретаторе или только в компиляторе языка Бейсик, то данная синтаксическая единица может быть использована в обеих компонентах. 2. Вызов интерпретатора языка Бейсик После загрузки и запуска операционной системы CPM, она выводит сообщение в виде последовательности символов А>. После этого она ожидает ввода директив. Интерпретатор языка Бейсик вызывается следующими директивами: Формат: BASI [<название файла>] [/F:<максимальное число файлов, которые должны быть одновременно открыты>] [/M:<адрес байта, следующего непо- средственно за разделом памяти, отведенным интерпретатору и его ра- бочей области>] [/S:<максимальная длина буфера для файла>] С помощью названия файла указывается файл, который содержит программу на языке Бейсик в коде ASCII, подлежащую интерпретации. Эта программа автоматически загружается и обрабатывается. Перед названием файла может стоять логическая единица, отделенная двоеточием. Для названия файла в операционной системе SCPX имеются определенные правила. Интерпретатор языка бейсик принимает только файлы с меткой ".BAS". Параметр /F может иметь максимальное значение 15. Если параметр не задается, по умолчанию устанавливается значение, равное 3. Параметр /M может использоваться для резервирования определенной области памяти, которая предназначена для загрузки и обработки новых модулей Бейсика. Если параметр м не задан, интерпретатору предоставляется для этого вся свободная память. Область памяти, стоящая после адреса, указанного в /M:, Бейсиком не используется. Если не задан параметр /S, то все буферные области, предназначенные для подлежащих открыванию файлов, резервируются со стандартной длиной 128 байтов, более длинные блоки должны быть учтены с помощью параметра /S. Примеры: А>BASI Вызов интерпретатора языка бейсик в стандартном режиме. B>BASI FILE1.BAS Вызов бейсик-интерпретатора в стандартном режи- ме и обработка программы FILE1, которая находится в том же накопителе. B>BASI /F:5/S:200 Вызов бейсик-интерпретатора для одновременной работы с максимум 5 открытыми файлами, причем длина блоков равна 200 байтам. A>BASI C:FILE2.BAS/M:&H8000 вызов бейсик-интерпретатора в стандартном режи- ме: загрузка и обработка программы FILE2, нахо- дящейся на накопителе С. Интерпретатору предос- тавляется память до адреса &H8000. 3. Режимы работы интерпретатора языка Б е й с и к Интерпретатор языка бейсик может использоваться в двух различных режимах: -в режиме настольной ЭВМ или в режиме прямых директив -в программном режиме Интерпретатор языка Бейсик сообщает о своей готовности к приему операторов от пользователя с помощью выражения ок на дисплее. Прямые директивы заставляют интерпретатор возвращаться в состояние готовности после выполнения оператора. Прямые директивы набираются построчно с помощью клавиатуры, в соответсвии с синтаксическими правилами, описанными ниже; строка заканчивается нажатием кнопки "ВК". Пример: пользователь: А=SQR(3^2+4^2)+5*2 <кнопка "ВК"> интерпретатор: ОК пользователь: PRINT A <кнопка "ВК"> интерпретатор: 15 ОК в режиме прямых директив строки не нумеруются. В программном режиме отдельные строки программы вводятся с номером строки. Обработка отдельных строк программы осуществляется с помощью директивы RUN. Пример: пользователь: 10 а=SQR(3^2+4^2)+5*2 <кнопка "ВК"> 20 PRINT A <кнопка "ВК"> RUN интерпретатор: 15 ОК Строка программы в Бейсике имеет следующую структуру: Формат: (номер строки) <оператор> (:<оператор>)...('Комментарий) Строка завершается нажатием кнопки "ВК". <Номер строки> должен всегда указываться в программе и всегда отсутствовать в режиме прямых директив. Он может принимать значения от 0 до 65529. Строка может содержать максимум 255 знаков и занимать несколько строк на экране дисплея. 4. Компиляция программ на языке Б е й с и к 4.1. Старт компилятора языка Б е й с и к Компилятор языка бейсик вызывается следующей директивой: Формат: BASC (<об'ектный файл>) (,(<файл списка>)) = <исходный файл> (<варианты>) <Об'ектный файл> -это имя файла, в который записывается перемещаемый код. Он автоматически получает буквенную метку "REL". <Файл списка> -это имя файла, в котором записаны текст исходной программы в формате аSCII, и, в соответствии с выбранными вариантами, выработанные машинные команды в мнемоническом коде, а также сообщения об ошибках. Этот файл позже может быть выведен на дисплей или печатающее устройство. Если информация должна выводиться только на дисплей или только на печатающее устройство , вместо <файла списка> могут использоваться идентификаторы: LST: -для вывода на печатающее устройство; ТТY: -для вывода на дисплей. <Исходный файл> -это имя файла, в который записывается исходная программа в формате ASCII. Если исходный текст должен вводиться прямо с клавиатуры, вместо исходного файла может использоваться идентификатор-ТТY: Особенно интересным является вызов: BASC, TTY:=TTY: В этом режиме работы имеется возможность проверить синтаксис отдельных операторов в то время, когда они вводятся с клавиатуры. <Варианты> управляют условностями языка, обработкой ошибок и формированием специального машинного кода. Отдельные варианты идентифицируются с помощью косой черты "/". Несколько вариантов также отделяются друг от друга с помощью косой черты. Могут быть использованы слудующие варианты: /С Номера строк не имеют значения, за исключением оператора перехода /E В бейсик-программе содержатся операторы ON ERROR GOTO и RESUME <номер строки>. Компилятор формирует дополнительные коды, чтобы правильно об- работать эти операторы. /X В бейсик-программе содержатся один или несколько операторов RESUME, RESUME NEXT или RESUME O. Этот вариант включает вариант /E. /N Заблокирован вывод сформированных машинных кодов в мнемоническом пред- ставлении в файле списка. /D Формирование дополнительного кода для обработки ошибок. За счет этого могут использоваться операторы TRON и TROFF, которые в других случаях игнорируются. При этом опознаются следующие ошибки: - арифметическое переполнение - превышение границ индексов полей - ошибочные операторы RETURN /S Строка констант, имеющая длину более 4-х знаков, записывается при компиляции в файл REL, однако не запоминается в рабочей памяти (это имеет смысл только при выполнении больших программ).