2.5. С о о б щ е н и я об о ш и б к а х в с и с т е м е MSX-BASIC Дать подходящее сообщение об ошибке - верх справедливости. Старая пословица Получив сообщение об ошибке, сохраняй- те спокойствие. Маленькая хитрость К о д С о о б щ е н и е 1 NEXT without FOR (NEXT без FOR). ──────────────── Встречен оператор NEXT, но отсутствует переменная, определенная посредством оператора FOR. Переменная в операторе NEXT не соот- ветствует никакой ранее выполненной и не имеющей пары переменной оператора FOR. Либо в программе слишком много NEXT, либо ошибка в переменной, следующей за NEXT. 2 Syntax error (Синтаксическая ошибка). ──────────── Строка содержит неправильную последовательность символов (напри- мер, непарные скобки, неправильно написанная команда или опера- тор,неверная пунктуация и т.д.). Причиной ошибки является либо незнание синтаксиса, либо прос- тая описка! 3 RETURN without GOSUB (RETURN без GOSUB). ──────────────────── Встречен оператор RETURN, для которого нет предыдущего,не связан- ного в другой паре,оператора GOSUB. Это,например,происходит ког- да конец основной программы и начало подпрограммы не разделены посредством END. 4 OUT of DATA (Исчерпаны данные DATA). ─────────── При выполнении оператора READ в операторе DATA не хватает данных. В программе отсутствует RESTORE или условие прекращения действия оператора READ. 5 Illegal function call (Неправильный вызов функции). ───────────────────── Это сообщение появляется обычно в том случае, если аргумент функ- ции выходит за установленные пределы. Данная ошибка может произойти в следующих случаях: 1) отрицательный или слишком большой индекс; 2) отрицательный или нулевой аргумент в функциях LOG и SQR; 3) обращение к функции USR, для которой не задан начальный ад- рес; 4) использование операторов ERASE, SWAP, VARPTR с неопределенной (неиспользуемой) переменной; 5) неправильный аргумент в операторах MID$, RIGHT$,LEFT$, INP, OUT,WAIT,PEEK,POKE,TAB,SPC,STRING$,SPACE$,INSTR,ON...GOTO(GOSUB); 6) в операторах GET или PUT записано отрицательное число; 7) в режимах SCREEN0 или SCREEN1 использованы графические коман- ды/операторы; 8) неправильные переменные в GML (графический макроязык) или в MML(макроязык музыки); 9) использование SPRITE$ в режиме SCREEN 0. 6 Overflow (Переполнение). ──────── Результат вычисления превосходит формат представления числа в BASIC. Если появляется UNDERFLOW (потеря всех значащих цифр), то результат принимается равным нулю и выполнение программы продол- жается б е з сообщения об ошибке. 7 Оut of memory (Выход за пределы памяти). ───────────── Программа слишком велика или содержит слишком много переменных (слишком большие массивы), слишком много циклов FOR...NEXT, пере- ходов GOSUB (для которых требуются метки переходов в стеке). Иног- да этого можно избежать, записывая массивы в файлы на дискете, ис- правляя распределение памяти соответствующими операторами CLEAR или записывая подпрограммы в двоичные файлы. В некоторых случаях можно хранить данные в неиспользуемых областях видеопамяти (VRAM). 8 Undefined line number (Не определен номер строки). ───────────────────── Обращение к несуществующей строке в операторах GOTO,GOSUB,IF... THEN...ELSE или DELETE. Новая строка, которая содержит только но- мер строки, также вызывает это сообщение. Обратите внимание, что команда RENUM обнаруживает недостающие переходы! 9 Subscript out of range (Выход за пределы массива). ────────────────────── Обращение к элементу массива с индексом, превышающим размерность массива или с недопустимым количеством индексов. 10 Redimensioned array (Повторное задание размерности массива). ─────────────────── Один и тот же массив упоминается в двух операторах DIM или ис- пользуется оператор DIM для массива, который ранее был определен по умолчанию. Для изменения размерности массива его нужно предварительно уничтожить с помощью оператора ERASE. 11 Division by zero (Деление на нуль). ──────────────── В выражении встречается деление на нуль, или возведение нуля в отрицательную степень (нуль в нулевой степени принимается равным 1). Помните, что значение будет приравнено нулю, если оно меньше минимального числа, представимого в компьютере MSX ("машинного ну- ля"). 12 Illegal direct (Неправильная команда в режиме непосредственного ────────────── выполнения). В качестве команды режима непосредственного выполнения встреча- ется оператор, недопустимый в этом режиме (например, DEFFN). 13 Type mismatch (Несоответствие типа). ───────────── Присвоение строковой переменной числового значения или наоборот; аргументу функции, которому должно быть присвоено числовое значе- ние, присваивается строковое значение и наоборот. 14 Out of string space (Исчерпано место для строковых переменных). ─────────────────── Пространство в памяти,отведенное под строковые переменные по умол- чанию (200 байтов) или посредством CLEAR, исчерпано. Следует пере- задать размеры пространства, использовать файлы (дискету) или за- писать строки в неиспользуемые области видеопамяти (VRAM). 15 String too long (Слишком длинная строка). ─────────────── Попытка создания строки длиной более 255 символов. Такая строка должна быть разделена на меньшие части. 16 String formula too complex (Строковое выражение слишком сложно). ────────────────────────── Слишком длинное или слишком сложное строковое выражение. Его сле- дует разбить на более короткие выражения. 17 Can't continue (Продолжение невозможно). ────────────── Сделана попытка продолжения программы, которая: 1) прервана из-за ошибки, а не по нажатию клавиши STOP или CTRL+STOP 2) модифицирована после останова выполнения программы (Break); 3) не существует. 18 Undefined user function (Неопределенная функция пользователя). ─────────────────────── Вызов функции USR до того, как задано ее определение. 19 Device I/O error (Ошибка устройства ввода/вывода). ──────────────── Произошла ошибка во время операции ввода-вывода.Это может произой- ти, например, когда CTRL+STOP прерывает операцию чтения с кассет- ной ленты. 20 Verify error (Ошибка верификации). ──────────── Содержимое памяти или файла при проверке оказывается другим. Эта ошибка может появиться при использовании команды CLOAD. 21 No RESUME (Отсутствует оператор RESUME). ───────── В программе обработки ошибок нет оператора RESUME. 22 RESUME without ERROR (Оператор RESUME при отсутствии ошибки). ──────────────────── Оператор RESUME встречается прежде,чем запускается программа об- работки ошибок. 23 Unprintable error (Ошибка без вывода текста сообщения). ───────────────── Насколько известно, такая ошибка может быть вызвана только в резу- льтате действия оператора ERROR (имитация ошибки). 24 Missing operand (Пропущенный операнд). ─────────────── Выражение содержит оператор без последующих операндов; в команде/ операторе отсутствуют обязательные параметры. 25 Line buffer overflow (Переполнение буфера строки). ──────────────────── Попытка ввести с помощью оператора INPUT строку, содержащую более 255 символов (из файла). 26-49 Unprintable error (См. 23). ──────────────── 50 Field overflow (Переполнение поля). ────────────── Попытка размещения оператором FIELD количества байтов,превышающее то, которое определено для записи в файл произвольного доступа. 51 Internal error (Внутренняя ошибка). ────────────── Неисправность. Произведите "сброс" нажатием клавиши RESET, либо выключением компьютера. 52 Bad file number (Неправильный номер файла). ─────────────── Оператор или команда обращается к файлу с номером, для которого не был выполнен оператор OPEN, или этот номер превышает число,за- данное в операторе MAXFILES. 53 File not found (Файл не найден). ────────────── Оператор/команда LOAD,KILL,NAME или OPEN обращается к файлу,не су- ществующему на данной дискете. 54 File already open (Файл уже открыт). ───────────────── Оператор режима последовательного вывода OPEN задан для файла, ко- торый уже открыт таким оператором; либо оператор KILL относится к открытому файлу. 55 Input past end (Ввод после конца файла). ────────────── Оператор INPUT пытается прочитать больше данных, чем есть в файле. Во избежание этой ошибки используйте функцию EOF для обнаружения конца файла. 56 Bad file name (Неправильное имя файла). ───────────── В операторах LOAD, SAVE, KILL или OPEN использовано неверное имя файла (например, имя файла,в котором слишком много символов). 57 Direct statement in file (Оператор прямого режима в файле недопус- ──────────────────────── тим). Оператор прямого режима встречен при загрузке файла в формате ASCII оператором LOAD. Действие LOAD прекращается. Выдается также при попытке загрузить командой типа LOAD двоичный файл. 58 Sequential I/O only (Только последовательный ввод-вывод). ─────────────────── Использование операторов GET или PUT для файла,который был открыт посредством оператора OPEN как последовательный файл. 59 File not OPEN (Файл не открыт с помощью команды). ───────────── Команда (оператор) ввода/вывода используется для файла, который не был открыт оператором OPEN. 60 Bad FAT (Неверная информация в FAT(таблице распределения файлов)). ─────── Файловая таблица распределений FAT не в порядке. Вероятно,дискета не была инициализирована с помощью команды FORMAT. 61 Bad file mode (Неверный режим обращения к файлу). ───────────── Сделана попытка использовать операторы PUT, GET или LOF по отноше- нию к файлу последовательного доступа, загрузить командой LOAD файл произвольного доступа, или выполнить оператор OPEN в неподхо- дящем файловом режиме. 62 Bad drive name (Неправильное имя дисковода). ────────────── Использовано неправильное имя дисковода. 63 Bad sector number (Неправильный номер сектора). ───────────────── В последней версии дискового MSX-BASIC этой ошибки не должно быть! 64 File still open (Файл все еще открыт). ─────────────── Файл не был закрыт оператором CLOSE. 65 File already exists (Файл уже существует). ─────────────────── Имя файла,определенное в операторе NAME,является идентичным имени файла, уже имеющегося на дискете. 66 Disk full (Дискета заполнена до предела). ───────── RAM disk full (Виртуальный диск ОЗУ уже заполнен). ───────────── 67 Too many files (Слишком много файлов). ────────────── Попытка создания нового файла(использование команд SAVE или OPEN), когда все 255 элементов каталога заполнены. 68 Disk write protected (Дискета защищена от попыток записи). ──────────────────── Дискета защищена от попыток записи. 69 Disk I/O error (Ошибка при вводе/выводе на дискету).  ────────────── Неисправляемая ошибка, возникающая при выполнении операторов вво- да-вывода на дискету. 70 Disk offline (Дисковод в автономном режиме или выключен). ──────────── RAM disk offLine (Отключен виртуальный диск; ошибка для компьюте- ──────────────── ра серии MSX-2). 71 Rename across disks (Ошибка переименования файла). ─────────────────── Сделана попытка переименования файла с новым идентификатором дис- ковода. Это не допускается! 72-255 Unprintable error (Ошибка без вывода текста сообщения). См.23 . ───────────────── В н и м а н и е! 1. Сообщения об ошибках с кодами 60÷71 приведены для версии MSX-Disk BASIC. Для версии MSX-BASIC этим кодам соответствует сообщение об ошибке с номером 23: "Unprintable error" . 2. На компьютерах MSX-2 имеется ошибка без соответствующего номера, сигнализирующая о невозможности подключения диска ОЗУ: No RAM disk . ───────────