[<>] ~~TOC wide~~ ====== 2.5. Сообщения об ошибках в системе MSX BASIC ====== FIXME \\ Дать подходящее сообщение об ошибке — \\ верх справедливости. —//Старая пословица// \\ Получив сообщение об ошибке, \\ сохраняйте спокойствие. —//Маленькая хитрость// |<100% 5% 30% 65%>| ^ //Код// ^ //Сообщение// ^ Описание ^ |{{anchor:error1}}1|NEXT without FOR \\ (NEXT без FOR).|Встречен оператор NEXT, но отсутствует переменная, определенная посредством оператора FOR. Переменная в операторе NEXT не соответствует никакой ранее выполненной и не имеющей пары переменной оператора FOR. Либо в программе слишком много NEXT, либо ошибка в переменной, следующей за NEXT.| |{{anchor:error2}}2|Syntax error \\ (Синтаксическая ошибка).|Строка содержит неправильную последовательность символов (например, непарные скобки, неправильно написанная команда или оператор, неверная пунктуация и т.д.). \\ Причиной ошибки является либо незнание синтаксиса, либо простая описка!| |{{anchor:error3}}3|RETURN without GOSUB \\ (RETURN без GOSUB).|Встречен оператор RETURN, для которого нет предыдущего, не связанного в другой паре,оператора GOSUB. Это,например,происходит когда конец основной программы и начало подпрограммы не разделены посредством END.| |{{anchor:error4}}4|OUT of DATA \\ (Исчерпаны данные DATA).|При выполнении оператора READ в операторе DATA не хватает данных. \\ В программе отсутствует RESTORE или условие прекращения действия оператора READ.| |{{anchor:error5}}5|Illegal function call \\ (Неправильный вызов функции).|Это сообщение появляется обычно в том случае, если аргумент функции выходит за установленные пределы. \\ Данная ошибка может произойти в следующих случаях: - отрицательный или слишком большой индекс; - отрицательный или нулевой аргумент в функциях LOG и SQR; - обращение к функции USR, для которой не задан начальный адрес; - использование операторов ERASE, SWAP, VARPTR с неопределенной (неиспользуемой) переменной; - неправильный аргумент в операторах MID$, RIGHT$, LEFT$, INP, OUT, WAIT, PEEK, POKE, TAB, SPC, STRING$, SPACE$, INSTR, ON...GOTO(GOSUB); - в операторах GET или PUT записано отрицательное число; - в режимах SCREEN0 или SCREEN1 использованы графические команды/операторы; - неправильные переменные в GML (графический макроязык) или в MML(макроязык музыки); - использование SPRITE$ в режиме SCREEN 0. | |{{anchor:error6}}6|Overflow \\ (Переполнение).|Результат вычисления превосходит формат представления числа в BASIC. Если появляется UNDERFLOW (потеря всех значащих цифр), то результат принимается равным нулю и выполнение программы продолжается //без// сообщения об ошибке.| |{{anchor:error7}}7|Оut of memory \\ (Выход за пределы памяти).|Программа слишком велика или содержит слишком много переменных (слишком большие массивы), слишком много циклов FOR...NEXT, переходов GOSUB (для которых требуются метки переходов в стеке). Иногда этого можно избежать, записывая массивы в файлы на дискете, исправляя распределение памяти соответствующими операторами CLEAR или записывая подпрограммы в двоичные файлы. В некоторых случаях можно хранить данные в неиспользуемых областях видеопамяти (VRAM).| |{{anchor:error8}}8|Undefined line number \\ (Не определен номер строки).|Обращение к несуществующей строке в операторах GOTO, GOSUB, IF...THEN...ELSE или DELETE. Новая строка, которая содержит только номер строки, также вызывает это сообщение. \\ Обратите внимание, что команда RENUM обнаруживает недостающие переходы!| |{{anchor:error9}}9|Subscript out of range \\ (Выход за пределы массива).|Обращение к элементу массива с индексом, превышающим размерность массива или с недопустимым количеством индексов.| |{{anchor:error10}}10|Redimensioned array \\ (Повторное задание размерности массива).|Один и тот же массив упоминается в двух операторах DIM или используется оператор DIM для массива, который ранее был определен по умолчанию. \\ Для изменения размерности массива его нужно предварительно уничтожить с помощью оператора ERASE.| |{{anchor:error11}}11|Division by zero \\ (Деление на нуль).|В выражении встречается деление на нуль, или возведение нуля в отрицательную степень (нуль в нулевой степени принимается равным 1). Помните, что значение будет приравнено нулю, если оно меньше минимального числа, представимого в компьютере MSX ("машинного нуля").| |{{anchor:error12}}12|Illegal direct \\ (Неправильная команда в режиме непосредственного выполнения).|В качестве команды режима непосредственного выполнения встречается оператор, недопустимый в этом режиме (например, DEFFN).| |{{anchor:error13}}13|Type mismatch \\ (Несоответствие типа).|Присвоение строковой переменной числового значения или наоборот; \\ аргументу функции, которому должно быть присвоено числовое значение, присваивается строковое значение и наоборот.| |{{anchor:error14}}14|Out of string space \\ (Исчерпано место для строковых переменных).|Пространство в памяти,отведенное под строковые переменные по умолчанию (200 байтов) или посредством CLEAR, исчерпано. Следует перезадать размеры пространства, использовать файлы (дискету) или записать строки в неиспользуемые области видеопамяти (VRAM).| |{{anchor:error15}}15|String too long \\ (Слишком длинная строка).|Попытка создания строки длиной более 255 символов. Такая строка должна быть разделена на меньшие части.| |{{anchor:error16}}16|String formula too complex \\ (Строковое выражение слишком сложно).|Слишком длинное или слишком сложное строковое выражение. Его следует разбить на более короткие выражения.| |{{anchor:error17}}17|Can't continue \\ (Продолжение невозможно).|Сделана попытка продолжения программы, которая: - прервана из–за ошибки, а не по нажатию клавиши STOP или CTRL+STOP; - модифицирована после останова выполнения программы (Break); - не существует. | |{{anchor:error18}}18|Undefined user function \\ (Неопределенная функция пользователя).|Вызов функции USR до того, как задано ее определение.| |{{anchor:error19}}19|Device I/O error \\ (Ошибка устройства ввода/вывода).| Произошла ошибка во время операции ввода–вывода.Это может произойти, например, когда CTRL+STOP прерывает операцию чтения с кассетной ленты.| |{{anchor:error20}}20|Verify error \\ (Ошибка верификации).|Содержимое памяти или файла при проверке оказывается другим. Эта ошибка может появиться при использовании команды CLOAD.| |{{anchor:error21}}21|No RESUME \\ (Отсутствует оператор RESUME).|В программе обработки ошибок нет оператора RESUME.| |{{anchor:error22}}22|RESUME without ERROR \\ (Оператор RESUME при отсутствии ошибки).|Оператор RESUME встречается прежде,чем запускается программа обработки ошибок.| |{{anchor:error23}}23|Unprintable error \\ (Ошибка без вывода текста сообщения).|Насколько известно, такая ошибка может быть вызвана только в результате действия оператора ERROR (имитация ошибки).| |{{anchor:error24}}24|Missing operand \\ (Пропущенный операнд).|Выражение содержит оператор без последующих операндов; в команде/операторе отсутствуют обязательные параметры.| |{{anchor:error25}}25|Line buffer overflow \\ (Переполнение буфера строки).|Попытка ввести с помощью оператора INPUT строку, содержащую более 255 символов (из файла).| |26–49|Unprintable error|(См. [[#error23|23]]).| |{{anchor:error50}}50|Field overflow \\ (Переполнение поля).|Попытка размещения оператором FIELD количества байтов,превышающеето, которое определено для записи в файл произвольного доступа.| |{{anchor:error51}}51|Internal error \\ (Внутренняя ошибка).|Неисправность. Произведите "сброс" нажатием клавиши RESET, либо выключением компьютера.| |{{anchor:error52}}52|Bad file number \\ (Неправильный номер файла).|Оператор или команда обращается к файлу с номером, для которого не был выполнен оператор OPEN, или этот номер превышает число, заданное в операторе MAXFILES.| |{{anchor:error53}}53|File not found \\ (Файл не найден).|Оператор/команда LOAD, KILL, NAME или OPEN обращается к файлу, не существующему на данной дискете.| |{{anchor:error54}}54|File already open \\ (Файл уже открыт).|Оператор режима последовательного вывода OPEN задан для файла, который уже открыт таким оператором; либо оператор KILL относится к открытому файлу.| |{{anchor:error55}}55|Input past end \\ (Ввод после конца файла).|Оператор INPUT пытается прочитать больше данных, чем есть в файле. \\ Во избежание этой ошибки используйте функцию EOF для обнаружения конца файла.| |{{anchor:error56}}56|Bad file name \\ (Неправильное имя файла).|В операторах LOAD, SAVE, KILL или OPEN использовано неверное имя файла (например, имя файла, в котором слишком много символов).| |{{anchor:error57}}57|Direct statement in file \\ (Оператор прямого режима в файле недопустим).|Оператор прямого режима встречен при загрузке файла в формате ASCII оператором LOAD. Действие LOAD прекращается. Выдается также при попытке загрузить командой типа LOAD двоичный файл.| |{{anchor:error58}}58|Sequential I/O only \\ (Только последовательный ввод–вывод).|Использование операторов GET или PUT для файла,который был открыт посредством оператора OPEN как последовательный файл.| |{{anchor:error59}}59|File not OPEN \\ (Файл не открыт с помощью команды).|Команда (оператор) ввода/вывода используется для файла, который не был открыт оператором OPEN.| |{{anchor:error60}}60|Bad FAT \\ (Неверная информация в FAT(таблице распределения файлов)).|Файловая таблица распределений FAT не в порядке. Вероятно, дискета не была инициализирована с помощью команды FORMAT.| |{{anchor:error61}}61|Bad file mode \\ (Неверный режим обращения к файлу).|Сделана попытка использовать операторы PUT, GET или LOF по отношению к файлу последовательного доступа, загрузить командой LOAD файл произвольного доступа, или выполнить оператор OPEN в неподходящем файловом режиме.| |{{anchor:error62}}62|Bad drive name \\ (Неправильное имя дисковода).|Использовано неправильное имя дисковода.| |{{anchor:error63}}63|Bad sector number \\ (Неправильный номер сектора).|В последней версии дискового [[msx:basic:|]] этой ошибки не должно быть!| |{{anchor:error64}}64|File still open \\ (Файл все еще открыт).|Файл не был закрыт оператором CLOSE.| |{{anchor:error65}}65|File already exists \\ (Файл уже существует).|Имя файла, определенное в операторе NAME, является идентичным имени файла, уже имеющегося на дискете.| |{{anchor:error66}}66|Disk full \\ (Дискета заполнена до предела).|RAM disk full \\ (Виртуальный диск ОЗУ уже заполнен).| |{{anchor:error67}}67|Too many files \\ (Слишком много файлов).|Попытка создания нового файла(использование команд SAVE или OPEN), когда все 255 элементов каталога заполнены.| |{{anchor:error68}}68|Disk write protected \\ (Дискета защищена от попыток записи).|Дискета защищена от попыток записи.| |{{anchor:error69}}69|Disk I/O error \\ (Ошибка при вводе/выводе на дискету).|Неисправляемая ошибка, возникающая при выполнении операторов ввода–вывода на дискету.| |{{anchor:error70}}70|Disk offline \\ (Дисковод в автономном режиме или выключен).|RAM disk offLine \\ (Отключен виртуальный диск; ошибка для компьютера серии MSX-2).| |{{anchor:error71}}71|Rename across disks \\ (Ошибка переименования файла).|Сделана попытка переименования файла с новым идентификатором дисковода. Это не допускается!| |72–255|Unprintable error \\ (Ошибка без вывода текста сообщения).| См. [[#error23|23]].| //Внимание//! - Сообщения об ошибках с кодами 60÷71 приведены для версии [[msx:disk_basic|]]. Для версии [[msx:basic:|]] этим кодам соответствует сообщение об ошибке с номером [[#error23|23]]: "Unprintable error". - На компьютерах MSX-2 имеется ошибка без соответствующего номера, сигнализирующая о невозможности подключения диска ОЗУ: "No RAM disk". ---- [<>] {{tag>MSX msxbdpl}}