Инструкция по устранению возможных конфликтов
при использовании Euphoria
Если, паче чаяния, вы стали свидетелем такого конфликта, есть
несколько верных способов разрешить его в вашу пользу:
| 1. |
- |
Наберите: guru
сопроводив команду несколькими ключевыми словами,
описывающими вашу проблему.
Например,
guru declare global include
|
| 2. |
- |
Просмотрите перечень возможных общих проблем
(ниже).
|
| 3. |
- |
Прочитайте соответствующий раздел документации, т.е.
refman_r.doc
или
libraryr.doc.
|
| 4. |
- |
Попытайтесь запустить вашу программу, включив в нее операторы:
|
| | |
with trace
trace(1)
|
| |
|
в самом начале вашего главного .ex-файла, чтобы понаблюдать,
как она исполняется.
|
| 5. |
- |
Интерфейс Web со списком рассылки почты Euphoria имеет режим поиска.
Вы можете провести поиск в архиве всех предыдущих сообщений. Вероятность
того, что ваш вопрос уже обсуждался, очень велика. Подробные сведения
о списке рассылки почты вы найдете в файле
web____r.doc.
|
| 6. |
- |
Разошлите сообщение о своей проблеме по списку рассылки почты.
|
Далее мы приводим перечень вопросов, возникавших у пользователей,
с рекомендациями по их решению -- вопрос
(
В:
) ответ (
О:
).
В: |
Я запускаю свою программу с exw,
но консольное окно исчезает раньше, чем я успеваю что-либо прочитать.
|
О: |
Консольное окно появляется только при необходимости ввода и вывода
данных, и будет исчезать немедленно по окончании вашей программы.
Добавьте в вашу программу операторы, требуюшие нажатия на клавишу
перед окончанием программы, например:
|
|
puts(1, "\nPress Enter\n")
if getc(0) then
end if
|
|
|
В: |
Мне бы хотелось изменить свойства консольного окна.
|
О: |
Щелкните правой кнопкой мыши на c:\windows\system\conagent.exe и
выберите "properties". Вы сможете изменить шрифт и некоторые другие
параметры консольного окна.
|
В: |
Когда я запускаю ex.exe
в окне Windows, нормальное окно DOS
раскрывается на весь экран.
|
О: |
Это будет случаться только при первом запуске
ex.exe
после создания нового
нормального окна DOS. Вы можете вернуть окно к нормальным размерам, нажав
клавиши Alt-Enter. После этого оно будет оставаться нормальным. Ваша
программа Euphoria может устанавливать окно нормальных размеров
выполнением оператора:
|
|
if graphics_mode(-1) then
end if
|
|
в начале файла. Иногда это будет сопровождаться коротким
мельканием экрана. Раскрыть текстовое окно на весь экран из
вашей программы можно выполнением оператора:
|
|
if graphics_mode(3) then
end if
|
В: |
Могу ли я читать порты и записывать в них?
|
О: |
Получите коллекцию Джекуса Дешенеса, включающую подпрограммы машинного
уровня и системные подпрограммы DOS, на
Web-странице Euphoria.
Просмотрите его файл ports.e.
|
В: |
У меня возникают проблемы при исполнении графической программы под
DOS32.
Я нажимаю control-Break и моя система как будто умирает.
|
О: |
Некоторые графические программы не будут исполняться, пока вы не
запустите их из DOS или из полноэкранного окна DOS под Windows. Иногда
вы должны будете исправить свою программу, чтобы перейти в графический
режим с меньшим разрешением, например, в режим 18. Некоторые графические
режимы SVGA могут не работать в окне DOS, но будут работать вполне
нормально после перезагрузки вашей машины в режиме MS-DOS.
Иногда может помочь замена программного драйвера вашей видеоплаты
на более новую версию.
Вы должны останавливать программу тем методом, который предусмотрен
программной документацией. Если вы прерываете программу с помощью
клавиш control-c или control-Break, может случиться так, что исходный
графический режим операционной системы не восстановится и экран
приобретет довольно странный вид. Такое случается не только с
программами Euphoria. Иногда даже бывает трудно или невозможно
разобрать то, что вы вводите с клавиатуры. Система может казаться
зависшей, хотя в действительности этого нет.
Попробуйте выполнить следующие команды DOS, соблюдая рекомендуемую их
очередность, пока ситуация не прояснится:
1. введите: cls
Даже если вы не видите на экране то, что набираете на клавиатуре,
нажатие после cls Enter может очистить экран и вернуть его
в исходное состояние.
2. введите: ex
Интерпретатор Euphoria возьмется за дело и попытается
перевести вашу машину в нормальный
текстовый режим.
3. введите: exit
Если программа исполнялась под Windows, данная команда
прервет сеанс DOS.
4. нажмите: Control-Alt-Delete
Данное сочетание клавиш прекращает сеанс DOS под Windows,
или вызывает мягкую перезагрузку вашего компьютера, если
он работал под управлением DOS.
5. Если эффект восстановления работоспособности все еще не
отмечен, нажмите кнопку reset или выключите питание
компьютера, чтобы через 10-15 секунд включить
его вновь. Вслед за этой последней и самой радикальной
мерой вам нужно будет запустить scandisk сразу же,
как только загрузится операционная система, если это не
произойдет автоматически.
|
В: |
Когда я запускаю программы Euphoria в режиме SVGA, вывод на экран
собирается в верхней части экрана.
|
О: |
Попробуйте: use_vesa(1) из
machine.e.
Попытайтесь получить наиболее свежую версию драйвера для своей
видеоплаты по Internet. Адрес узла Web ATI:
http://www.atitech.com
Некоторым удастся решить свои видеопроблемы, установив более новую
версию DirectX.
|
В: |
Моя программа оставляет окно DOS в беспорядочном состоянии. Я хочу,
чтобы оставалось нормальное текстовое окно.
|
О: |
Когда ваша программа заканчивается, она должна вызвать
функцию graphics_mode(-1), чтобы вернуть окно DOS в нормальное
состояние. Т.е., напишите в самом конце своей программы:
|
|
if graphics_mode(-1) then
end if
|
В: |
Когда я запускаю свою программу из редактора, а затем нажимаю control-c,
программа прерывается с сообщением об ошибке операционной системы.
|
О: |
Эта проблема известна. Запустите свою программу из командной строки,
вне редактора, если вам необходимо проверить действие на нее control-c
или control-Break.
|
В: |
Когда я запускаю свою программу, нет сообщений об ошибках, но не
происходит и ничего другого.
|
О: |
Вы, по всей вероятности, забыли вызвать свою главную подпрограмму.
В программе должен быть оператор верхнего уровня, который идет после
определения главной подпрограммы и вызывает эту главную подпрограмму
на исполнение. Если подпрограмма определена, но не вызвана, она
не будет исполняться.
|
В: |
Я пытаюсь вызвать подпрограмму, документированную в файле
libraryr.doc,
но получаю сообщение, что эта подпрограмма не определена.
|
О: |
Не забываете ли вы, что нужно подключить к вашей программе .e-файл из
каталога
euphoria\include? Если в
синтаксисе подпрограммы сказано,
например, "include graphics.e", то в вашей программе также должна быть
строка "include graphics.e" (без кавычек), и она должна идти
перед первым
вызовом подпрограммы.
|
В: |
У меня имеется include-файл с подпрограммой в нем, которую мне нужно
вызвать, но когда я пытаюсь вызвать эту подпрограмму, то получаю сообщение,
что подпрограмма не была объявлена. Но она была объявлена.
|
О: |
Не забываете ли вы, что в include-файле подпрограммы должны быть объявлены
с ключевым словом "global" перед каждым объявлением?
Без этого "global"
подпрограмма может быть вызвана только в том файле, где объявлена, и не
видна в подключающем файле, вне своего собственного файла.
|
В: |
Как я могу ввести строку текста от пользователя?
|
О: |
Просмотрите
gets()
в файле
libraryr.doc.
gets(0) будет читать строку со
стандартного входа, которым обычно является клавиатура.
Строка всегда
будет иметь в конце \n. Чтобы удалить закрывающий
символ \n из текста
строки, сделайте:
|
|
line = line[1..length(line)-1]
|
|
Просмотрите также
prompt_string() в файле
get.e.
|
В: |
После ввода строки от пользователя с помощью
gets() следующая строка,
выводимая на экран, начинается не у левого края экрана.
|
О: |
Ваша программа должна вывести символ новой строки, т.е. выполнить
puts(SCREEN, '\n')
после того, как вы сделали
gets(). Вывод символа
новой строки в этом случае не производится автоматически.
|
В: |
Как я могу преобразовать число в его строковое представление?
|
О: |
Используйте
sprintf(), см. файл
libraryr.doc, т.е.
|
|
string = sprintf("%d", number)
|
|
Кроме %d вы можете попробовать и другие форматы, такие как
%x (шестнадцатиричный) или %f (с плавающей точкой).
|
В: |
Как я могу преобразовать строковое представление в число?
|
О: |
Используйте
value(), см. файл
libraryr.doc, или, если вы производите
чтение из файла или с клавиатуры, используйте
get().
|
В: |
Я получил сообщение, что пытаюсь переопределить переменную цикла for.
|
О: |
Переменные цикла for объявляются автоматически. Видимо, в вашей программе
уже есть объявление переменной с тем же самым именем, что и у переменной
цикла, сделанное ранее. Удалите это более раннее определение или измените
ошибочное имя переменной цикла.
|
В: |
Я получаю сообщение "unknown escape character" о строке,
в которой я пытаюсь задать имя файла.
|
О: |
Никогда не говорите "C:\TMP\MYFILE". Вам нужно сказать
"C:\\TMP\\MYFILE".
Косая черта используется как символ escape, например, \n
или \t.
Для того, чтобы задать одинарную косую черту в символьной строке, вы
должны написать двойную \\.
|
В: |
Я пытаюсь запустить мышь в графическом режиме SVGA, но она совсем
не работает.
|
О: |
DOS
не поддерживает ввод от мыши в графических режимах старше
18 (640x480 16 цветов).
DOS 7.0 (часть Windows 95/98),
кажется, позволяет
вам читать координаты x-y и состояние кнопок мыши в режимах с высоким
разрешением, но вам прийдется рисовать свой собственный курсор мыши в этих
режимах. Грэм Барки, Питер Блю и другие программисты
нашли хорошие решения
этой проблемы. Просмотрите их файлы на Web-странице
Архива файлов Euphoria.
|
В: |
Я пытаюсь напечатать строку с помощью
printf(), но выводится только
первый ее символ.
|
О: |
Просмотрите описание
printf() в файле
libraryr.doc. Вам, вероятно, следует
поставить фигурные скобки вокруг вашей строки, чтобы она не выглядела как
единственный символ, подлежащий печати, т.е. вы пишете:
|
|
printf(1, "Hello %s", mystring)
|
|
но следует писать:
|
|
printf(1, "Hello %s", {mystring})
|
В: |
Когда я печатаю числа с помощью
print() или
?, выводится только 10
значащих цифр.
|
О: |
Euphoria обычно выводит именно 10 цифр. Во внутреннем представлении
все вычисления производятся с 15 значащими цифрами. Чтобы вывести
большее число значащих цифр, вы дожны применить
printf().
Например,
|
|
printf(1, "%.15f", 1/3)
|
|
В этом случае будет выведено 15 цифр.
|
В: |
Объявляя подпрограмму, я получаю сообщение "a type is expected here".
|
О: |
|
|
procedure foo(integer x, y) -- НЕПРАВИЛЬНО
procedure foo(integer x, integer y) -- ПРАВИЛЬНО
|
|
Во всех других контекстах можно использовать список:
|
|
atom a, b, c, d, e
|
В: |
Я объявляю некоторые переменные внутри подпрограммы и это приводит
к синтаксической ошибке.
|
О: |
Все ваши частные переменные должны быть объявлены в самом начале текста
подпрограммы, до любых исполняемых операторов.
(На верхнем уровне программы, вне любых подпрограмм, можно объявлять
переменные по ходу дела, когда в этом возникла необходимость.)
|
В: |
Я получил сообщение:
Syntax Error - expected to see possibly 'xxx', not 'yyy'
|
О: |
В этой точке программы вы набрали переменную, ключевое слово, число или
символ пунктуации, yyy, который синтаксически не вяжется с тем, что идет
перед ним. Компилятор предлагает вам один пример, xxx, который можно было
бы ожидать в этой точке вместо yyy. Имейте в виду, что может быть много
других законных (и более правильных) решений в этой точке, чем пресловутое
xxx, но именно такое предположительное xxx, как минимум, способно
подтолкнуть вас к мысли, что компилятор тоже "думает", хотя бы иногда.
|
В: |
У меня возникли проблемы с запуском Euphoria под DR-DOS.
|
О: |
В вашем файле config.sys должна быть только команда HIMEM.SYS,
но не EMM386.EXE.
|
В: |
Я пытаюсь запустить программу с
exw, но получаю сообщение
"this is a Windows NT character-mode executable".
|
О: |
exw.exe
является
32-битной программой Windows.
Этот интерпретатор
должен исполняться под Windows или в окне DOS. Он не будет работать
под чистой DOS на старых системах.
ex.exe
будет работать под
чистой DOS.
|
|