Copyright
(C) 1998-2005 MKTMK Moscow, Russia
http://www.mktmk.narod.ru.
e-mail:
mktmk<at>narod.ru
This
document write in WIN1251 code (Russian).
Интегрированная среда разработки для Open Basic
(IDE OB)
Описание применения.
Версия 1.00.
Интегрированная среда разработки для Open Basic (IDE OB) предназначена для
поддержки отладки программ интерпретатора Open Basic.
Open Basic (OB) представляет собой реализацию интерпретатора языка Basic не
зависящую от ОС.
IDE OB может служить примером интеграции интерпретатора Open Basic и
ОС Windows.
IDE OB не является частью интерпретатора Open Basic.
IDE OB предоставляет обычный сервис отладочной среды:
- редактирование текста программ
- загрузка программ в интерпретатор (несколько режимов)
- запуск программ в интерпретаторе
- останов программ
- пошаговое исполнение программ
- анимированное исполнение программ
- точки останова (на уровне интерпретатора, без поддержки со стороны IDE OB)
- просмотр и модификация переменных (в окне Watch)
- просмотр диагностических сообщений интерпретатора (в окне Messages)
- поддержка операторов PRINT и INPUT (в окне I/O Terminal)
IDE OB написана на Borland C++
Builder 6.0 (BCB 6.0).
Copyright
(C) 1998-2005 MKTMK Moscow, Russia
http://www.mktmk.narod.ru.
e-mail:
mktmk<at>narod.ru
MKTMK
software company. Moscow, Russia
IDE OB и документация поставляются на условиях "как есть". Фирма MKTMK не
несет ответственности за возможные убытки, понесенные из-за использования
IDE OB.
Мы будем признательны за все найденные в программе ошибки.
Все упомянутые в тексте торговые марки являются собственностью их владельцев.
IDE OB поставляется в двух файлах.
1. Инсталлятор setup.exe.
2. Архив ide_ob.zip.
Инсталлятор setup.exe содержит исполняемую часть проекта.
Архив содержит полный проект IDE OB, включая исходные тексты.
Состав архива ide_ob.zip:
c:\ide_ob\htm
ide_rus.htm - файл с текстом данного описания на русском языке
ide_eng.htm - файл с текстом данного описания на английском языке
read_rus.htm - описание интерпретатора Open Basic на русском языке
read_eng.htm - описание интерпретатора Open Basic на английском языке
c:\ide_ob\include
mstore.h - стратегии хранения данных
mvect.h - вектор
mlist.h - список
mstack.h - стек
mhash.h - хеш-таблица
ob.h - основной заголовочный файл Open Basic
c:\ide_ob\lib
ob15_1.lib - библиотека интерпретатора Open Basic для BCB 6.0.
c:\ide_ob\exe
ide_ob.exe - выходной исполняемый файл IDE OB
c:\ide_ob\obj
- объектные файлы
c:\ide_ob\bas
test0.bas - пример *.bas программы
test1.bas - пример *.bas программы
test2.bas - пример *.bas программы
test3.bas - пример *.bas программы
test4.bas - пример *.bas программы
test5.bas - пример *.bas программы
test6.bas - пример *.bas программы
test7.bas - пример *.bas программы
test8.bas - пример *.bas программы
test9.bas - пример *.bas программы
test10.bas - пример *.bas программы
test11.bas - пример *.bas программы
test12.bas - пример *.bas программы
test13.bas - пример *.bas программы
test14.bas - пример *.bas программы
test15.bas - пример *.bas программы
test16.bas - пример *.bas программы
test17.bas - пример *.bas программы
c:\ide_ob
IDE_OB BPR
- файл проекта BCB 6.0.
UNIT1 CPP - исходный текст
UNIT10 CPP - исходный текст
UNIT2 CPP - исходный текст
UNIT6 CPP - исходный текст
UNIT7 CPP - исходный текст
UNIT8 CPP - исходный текст
UNIT9 CPP - исходный текст
userfun.cpp - исходный текст
UNIT1 DDP
UNIT2 DDP
UNIT6 DDP
UNIT7 DDP
UNIT8 DDP
UNIT9 DDP
UNIT1 DFM
UNIT2 DFM
UNIT6 DFM
UNIT7 DFM
UNIT8 DFM
UNIT9 DFM
IDE_OB DSK
MENUM H
- заголовочный файл
UNIT1 H - заголовочный файл
UNIT10 H - заголовочный файл
UNIT2 H - заголовочный файл
UNIT6 H - заголовочный файл
UNIT7 H - заголовочный файл
UNIT8 H - заголовочный файл
UNIT9 H - заголовочный файл
IDE_OB RES - ресурсы
IDE_OB ICO - пиктограмма
IDE_OB CPP - исходный текст
IDE_OB H - заголовочный файл
Содержание
1.
Описание задачи и назначение программы..
2.1.
Инсталляция проекта с помощью инсталлятора setup.exe.
2.2.
Инсталляция проекта из архива ide_ob.zip.
3.1.1.
Окно редактирования Edit
3.1.4.1.
Диагностика IDE OB в окне Messages
3.2.
Главное меню и инструментальная панель программы
3.2.2.1. Find/Replace (Ctrl+L)
3.2.3.2. Load overlay (кнопка Lo)
3.2.3.3. Load at cursor (кнопка Lc)
3.2.3.4. Load at cursor overlay (кнопка Lco)
3.2.3.5. Run/Continue (кнопка R/C)
3.2.3.6. Load and Run (кнопка L+R)
3.2.3.12.
Правила загрузки и запуска
3.4.
Меню окна Watch и Popup меню окна Watch
3.4.1.
Modification current line
3.6.
Подключение пользовательских функций к исполняющей системе интерпретатора Open
Basic в IDE OB.
3.6.1 Описание пользовательских
функций, подключенных к IDE OB
3.7.
Особенности запуска интерпретатора Open Basic в треде (thread) Windows
Open Basic (OB) представляет собой реализацию интерпретатора языка Basic не
зависящую от ОС.
IDE OB создана для облегчения отладки программ, написанных на Open Basic.
IDE OB написана на Borland C++ Builder 6.0 с использованием VCL.
Файл проекта и исходные тексты располагается на диске C:\IDE_OB.
Промежуточные файлы располагаются на диске C:\IDE_OB\OBJ.
Выходной файл располагается на диске C:\IDE_OB\EXE.
Запустите setup.exe и следуйте его подсказкам.
Проект рассчитан на то, что он располагается на диске C: в директории
C:\IDE_OB. При этом BCB 6.0 должен также располагаться на диске C: в
директориях по умолчанию.
Разархивируйте ide_ob.zip на диск C: с сохранением структуры каталогов и
загрузите файл проекта в BCB 6.0.
Главное окно программы. Содержит текст текущей программы. По команде "Load"
текущая программа загружается в интерпретатор Open Basic.
При пошаговом исполнении и при останове программы текущая исполняемая строка
выделяется в окне редактирования.
Содержит информацию, выводимую операторами PRINT из текущей Basic-программы.
При выполнении оператора INPUT окно I/O Terminal становится модальным и из него
осуществляется ввод информации с клавиатуры. Завершение ввода - клавиша Enter.
Строковые переменные при таком вводе должны заключаться в кавычки.
Строки этого окна имеют сквозную нумерацию. Максимальное количество строк в
окне - 1000.
Содержит информацию о просмотре и модификации переменных текущей
Basic-программы.
Имена переменных, массивов и элементов массивов набираются в отдельных
строках.
Имена элементов массивов должны указываться с индексами в круглых скобках.
Обновление информации в окне Watch производится при останове программы,
по кнопке Info или по командам меню окна Watch.
Кроме главного меню окно Watch имеет Popup меню.
При отображении переменные отделяются от своего значения знаком равенства.
Если переменная или массив не существует на данных момент, справа от знака
равенства выводится три вопросительных знака.
При отображении массивы заключаются в фигурные скобки и их элементы отделяются
запятыми.
Модификация переменных производится из меню окна Watch или из Popup меню
этого окна.
Модификация возможна только для переменных и элементов массивов в отдельных
строках.
Для элементов массивов, отображенных в составе массивов модификация
невозможна.
Чтобы включить переменную в список просмотра и модификации, необходимо
набрать ее имя в окне Watch и запустить обновление окна Watch командой Info
или через меню окна Watch.
Чтобы модифицировать переменную необходимо набрать ее новое значение справа от
знака равенства и запустить модификацию окна Watch командой
"Modification
current line" или
"Modification all list".
В это окно выводится информация о текущем состоянии IDE OB, об ошибках и
предупреждениях интерпретатора Open Basic и IDE OB. Некоторые критические
сообщения об ошибках имеют цветовое выделение.
Подробнее о диагностике Open Basic см. описание Open Basic.
Подробнее о диагностике IDE OB см. следующий пункт.
Строки этого окна имеют сквозную нумерацию. Максимальное количество строк в
окне - 1000.
1. "Load OK", - загрузка текущей программы в интерпретатор Open Basic успешно
завершена (норма)
2. "Load overlay OK", - загрузка текущей программы в интерпретатор Open Basic
успешно завершена (режим overlay) (норма)
3. "Running ...", - произведен запуск загруженной программы в
интерпретаторе Open Basic (норма)
4. "IDE system error - this messages do not
use", - не используется при
нормальной работе
5. "No action release, system error", - не используется при нормальной работе
6. "Get 'Terminated' signal", - тред, в котором исполняется интерпретатор
Open Basic остановлен (предупреждение)
7. "Load at cursor OK", - загрузка текущей программы в интерпретатор Open
Basic успешно завершена (режим загрузки от курсора)(норма)
8. "Load at cursor overlay OK", - загрузка текущей программы в интерпретатор
Open Basic успешно завершена (режим overlay загрузки от курсора) (норма)
9. "Edit file modified or not Basic loaded.
Please reload for run" - попытка
запустить не загруженный или модифицированный после последней загрузки
файл (предупреждение)
10.
"Load do not finished within 10sek. Run do not perform" - при выполнении
команды "Load and Run" загрузка не завершилась в течении 10 сек (истек
таймаут) (предупреждение или ошибка)
11. "Stop by stop code.
Stop code=ENDOPERATORDETECT" - программа завершилась
при обнаружении оператора END (норма)
12. "Stop by stop code. Stop code=ENDFILEEND" - программа завершилась из-за
исчерпания входного потока (норма)
13.
"Stop by stop code. Stop code=BREAKPOINTEND" - программа завершилась после
считывания символа '@', который является символом точки останова для
Open Basic (норма)
14.
"Stop by stop code. Stop code=NOLOADEND" - запуск невозможет т.к.не была
выполнена загрузка программы и входной поток не открыт (предупреждение)
15.
"Stop by stop code. Stop code=BREAKBEFOREOPERATOR" - программа завершилась
перед выполнением какого-то оператора OB (ошибка)
16.
"Stop by stop code. Stop code=BREAKAFTEROPERATOR" - программа завершилась
после выполнения какого-то оператора OB (ошибка)
17.
"Stop by stop code. Stop code=EOLEND" - программа завершилась после
исполнения очередной строки (норма)
18. "Stop by stop code. Stop code=Unknown stop code" - программа завершилась
с неизвестным кодом завершения (ошибка)
Открывает новый файл для редактирования.
Открывает существующий файл для редактирования.
Сохраняет существующий файл под тем же именем.
Сохраняет существующий файл под новым именем.
Выход из программы.
Вызывает стандартный диалог Find/Replace. Поиск и замена в текущей программе.
Загружает текущую программу из окна редактирования в интерпретатор Open Basic.
Таблицы переменных и массивов предыдущей программы очищаются.
Старт программы командой "Run" или "Step" будет осуществлен с первой строки.
Загружает текущую программу из окна редактирования в интерпретатор Open Basic.
Таблицы переменных и массивов предыдущей программы не очищаются.
Старт программы командой "Run" или "Step" будет осуществлен с первой строки.
Загружает текущую программу из окна редактирования в интерпретатор Open Basic.
Таблицы переменных и массивов предыдущей программы очищаются.
Старт программы командой "Run" или "Step" будет осуществлен с текущей позиции
курсора.
Загружает текущую программу из окна редактирования в интерпретатор Open Basic.
Таблицы переменных и массивов предыдущей программы не очищаются.
Старт программы командой "Run" или "Step" будет осуществлен с текущей позиции
курсора.
Запускает загруженную в интерпретатор Open Basic программу.
Загружает текущую программу из окна редактирования в интерпретатор Open Basic
и сразу запускает ее.
Таблицы переменных и массивов предыдущей программы очищаются.
Старт программы командой будет осуществлен с первой строки.
Останавливает запущенную программу.
Текущая исполняемая строка выделяется в окне редактирования.
После останова выполнение программы может быть продолжено командами
"Run/Continue"
или "Step".
Аварийно завершает тред, в котором исполняется текущая программа. Команда
"Abort" должна выполняться только при аварийных зависаниях (если команда
"Stop" не может завершить программу). При выполнении команды "Abort" возможен
крах IDE OB.
При выдаче команды "Abort" запрашивается подтверждение на выполнение.
Выполняет одну строку текущей программы и останавливается. Предварительно
программа должна быть загружена командой "Load".
Текущая исполняемая строка выделяется в окне редактирования.
Автоматически выполняет команду "Step" с задержкой между выполнениями. Период
задержки задается в команде "Options" и сохраняется в файле конфигурации.
Выводит в окно Messages информацию о текущем состоянии интерпретатора
Open Basic и обновляет информацию в окне Watch.
Перед запуском программы по команде "Run/Continue" или "Step" текущая
программа должна быть загружена в интерпретатор Open Basic одной из
команд "Load".
После выполнения одной из команд "Load" перед запуском нужно дождаться
появления сообщения об успешной загрузке в окне Messages.
При выполнении команды "Load and Run" на загрузку отводится 10 сек. Если за
10 сек загрузка не завершилась, запуск программы не производится и выводится
диагностика об ошибке (предупреждение).
Новая программа может быть загружена и запущена в интерпретаторе Open Basic
только после останова или окончания предыдущей запущенной программы.
Если программа запущена, а в окне редактирования производится модификация
файла, программа немедленно останавливается. Для последующего запуска
необходима перезагрузка программы. Это сделано для правильной синхронизации
текущей строки в отображаемой и запущенной программы при остановах.
Возможен одновременный запуск нескольких экземпляров IDE OB.
Панель содержит два поля:
1. IDE font size - задает размер шрифта в IDE OB.
2. Animate period (ms) - задает период для команды "Animate".
Оба параметра сохраняются в файле конфигурации.
Открывает окно I/O
Terminal.
Открывает окно Watch.
Открывает окно Messages.
Содержит информацию о производителе и версии Open Basic и IDE OB.
В первой половине панели статуса отображается информация о соответствии
редактируемого файла и его образа на диске.
Во второй половине панели статуса отображается информация о соответствии
редактируемого и загруженного в интерпретатор Open Basic файла.
Заносит указанное после знака равенства значение в переменную в строке
курсора. Если преобразование невозможно (например при попытке присвоить
числовой переменной строку), переменная сохраняет старое значение.
Заносит указанное после знака равенства значение в переменную во всех строках
watch листа. Если преобразование невозможно (например при попытке присвоить
числовой переменной строковое значение), переменная сохраняет старое значение.
Сохраняет содержимое окна Watch в файле ide_ob.wtl.
Обновляет содержимое окна Watch.
В процессе работы IDE OB создает три файла:
1. файл конфигурации ide_ob.cfg (двоичный)
2. файл просмотра и модификации переменных ide_ob.wtl (текстовый)
3. рабочий файл tmp1.$$$ с текстом текущей запущенной программы (текстовый)
В файле конфигурации ide_ob.cfg при выходе из программы сохраняется текущая
конфигурация IDE OB (форма и расположение окон, константы с панели Options
и т.д.). Если при старте программы файл конфигурации не найден, эти параметры
загружаются значениями по умолчанию.
В файле просмотра и модификации переменных ide_ob.wtl при выходе из программы
сохраняется текущее содержимое окна Watch.
Рабочий файл tmp1.$$$ создается в процессе работы и уничтожается при выходе
из программы. В нем хранится текущая программа из окна редактирования,
загруженная в интерпретатор Open Basic.
Чтобы подключить пользовательскую функцию к исполняющей системе интерпретатора
Open
Basic в IDE OB нужно:
1. В файле
userfun.cpp найти реализацию функций winuserfunc, winuserfunc1,
winuserfunc2, winuserfunc3, winuserfunc4,
winuserfunc5, winuserfunc6.
2. По этому образцу написать свою функцию.
3. В конце файла userfun.cpp найти пример подключения функций winuserfunc,
winuserfunc1, winuserfunc2,
winuserfunc3, winuserfunc4, winuserfunc5,
winuserfunc6 к исполняющей системе интерпретатора Open Basic с помощью
метода ob_obasic::setfun.
4. По этому образцу подключить свою функцию.
5. Перетранслировать проект.
6. Написать *.bas программу с использованием своей функции.
7. Запустить эту *.bas программу на исполнение.
Примечание:
Функции, описанные в этом разделе определены и подключены к исполняющей системе Open Basic только в IDE OB. В консольной Open Basic версии они не определены и не подключены.
Имя С++ функции |
Имя Basic функции (одна С++ функция может подключаться под разными именами к исполняющей системе Open Basic) |
Описание функции |
winuserfunc |
1.
Win_User_Function% 2.
MessBoxExample% |
Вызывает MessageBox и возвращает в Basic программу код нажатой клавиши (No=0, Yes=1, Cancel=2) |
winuserfunc1 |
1.
Win_User_Function1% 2.
CaptionMessBoxExample% |
Вызывает MessageBox, в качестве заголовка и сообщения которого используется первый и второй строковый параметр функции. Возвращает в Basic программу код нажатой клавиши (No=0, Yes=1, Cancel=2) |
winuserfunc2 |
1.
Win_User_Function2 2.
FloatQueryAndReturn |
Вызывает диалог запроса числа с плавающей запятой. После ввода возвращает число с плавающей запятой в Basic программу. Если в процессе ввода допущена ошибка, возвращает ноль и печатает сообщение. |
winuserfunc3 |
1.
Win_User_Function3$ 2.
StaticStringReturn$ |
Вызывает диалог запроса целого числа в диапазоне 0-9. После ввода рассматривает это число как индекс во внутреннем массиве строк и возвращает строку с указанным индексом в Basic программу. Если в процессе ввода допущена ошибка, возвращает предопределенную строку с сообщением об ошибке. Пример возврата строки, размещенной в статической памяти. |
winuserfunc4 |
1.
Win_User_Function4$ 2.
DynamicStringReverse$ |
Вызывает диалог запроса строки. После ввода возвращает строку в Basic программу. Пример возврата строки, размещенной в куче оператором new. |
winuserfunc5 |
MainFormResize% |
Принимает два аргумента с плавающей запятой. Первый аргумент это изменение высоты главного окна IDE OB (в процентах со знаком) от текущего значения. Второй аргумент это изменение ширины главного окна IDE OB (в процентах со знаком) от текущего значения. При вызове без аргумента устанавливает исходный размер главного окна IDE OB. Позволяет получить забавный эффект “ползающего” окна, когда ее вызывают в цикле с разными значениями параметров (см. пример test0.bas) |
winuserfunc6 |
SLEEP% |
Осуществляет задержку на количество миллисекунд, указанных в ее первом аргументе. Тип аргумента - целое. |
winuserfunc7 |
ShellExecute% |
Выполняет вызов Win API ShellExecute. В качестве аргумента ShellExecute используется первый строковый аргумент Basic-функции. В примере test18.bat эта функция используется для запуска экземпляров программ notepad.exe и wordpad.exe. |
В программе IDE OB метод "run" интерпретатора Open Basic запускается в
отдельном треде.
В программе IDE OB есть общие объекты VCL, доступ к которым осуществляется
из главного треда и из треда интерпретатора Open Basic. Примером такого объекта
может служить окно Messages. Вывод диагностики в него осуществляется и из
главного треда, и из треда интерпретатора Open Basic.
Для предотвращения коллизий обращение к таким общим объектам VCL из
пользовательских функций необходимо осуществлять через метод Synchronize.
Если объект VCL не используется в других тредах, обращение к нему может быть
оформлено без метода Synchronize.
В файлах userfun.cpp и UNIT10.h можно найти примеры реализации функций доступа
к общим объектам VCL через метод Synchronize (например при печати в окно
Messages).