текстовый+графический режим в DOS?
От: def0e0  
Дата: 15.01.08 08:13
Оценка:
Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?
Re: текстовый+графический режим в DOS?
От: VsevolodC Россия  
Дата: 15.01.08 08:43
Оценка:
Здравствуйте, def0e0, Вы писали:

D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?


надо выводить текст в графическом режиме
была библиотека zinc с win-подобными окошками, но дальше просмотра демо я с ней дела не имел, написал свое

ps интересно, чем мотивировано использование дос?
Re: текстовый+графический режим в DOS?
От: Сергей  
Дата: 15.01.08 08:51
Оценка: 5 (2)
Здравствуйте, def0e0, Вы писали:

D>Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?


Можно попробовать http://www.japheth.de/HX.html — DOS-extender, с кое-какой эмуляцией Win32API. В нем можно использовать порт SDL (http://www.libsdl.org) под Win32, а для SDL существуют библиотеки для GUI, например http://libuta.sourceforge.net/.

Если неохота связываться со всем этим, то можно попробовать NXLIB или OpenGUI.

Есть еще замечание насчет компилятора. Скорее всего, у тебя какой-нибудь старый борладовский — и скорее всего он не подойдет для всего вышеуказанного, под DOS лучше использовать DJGPP — порт gcc под DOS.
Re: текстовый+графический режим в DOS?
От: icWasya  
Дата: 15.01.08 08:56
Оценка:
Здравствуйте, def0e0, Вы писали:

D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?


Я однажды сделал что-то подобное. Это было в прошлом веке на на позапрошлой работе, поэтому исходников нет.
Но идея такая. Память под текстовый режим(CGA — C80) и под графику в DOS разная. А в Turbo Vision кажется можно
и самому назначить буфер под текстовый режим.
1) переходишь в графический режим
2) назначаешь какой-нибудь символ (или несколько ) прозрачным
3) рисуешь графику
4) строишь текстовый интерфейс как обычно
5) заполняешь какое-нибудь текстовое окно прозрачным символом
А теперь фокус
в свободное время в цикле делаешь следующее

Анализируешь буфер текстового режима.
Если символ прозрачный — не делать ничего
Если символ непрозрачный —
a) определить цвет фона и нарисовать прямоугольник нужного цвета
b) определить цвет символа и нарисовать символ

отдельно нарисовать курсор

Была ещё жуткая оптимизация работы с видеопамятью в 16-цветном режиме,
но сейчас это не должно быть критично

Текстовый буфер устроен так
{ char Character;
{int ForeColor :4;
int BackColor :4;
} Attr;
} TextBufer [25/*или сколько там*/][80];
За давностью лет могу перепутать порядок байт (Character и Attr)
Re: текстовый+графический режим в DOS?
От: ДимДимыч Украина http://klug.org.ua
Дата: 15.01.08 09:15
Оценка:
Здравствуйте, def0e0, Вы писали:

D> Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями?


Вообще способ есть, но он Вам вряд ли подойдет. Этот способ позволяет выводить в текстовом режиме двоичные изображения размером 128x128 с раскраской отдельного знакоместа 8x16. Реализуется путем перепрограммирования верхней половины таблицы знакогенератора. Изображения символов с кодами больше 127 при этом естественно недоступны. Этот способ используется для вывода логотипа при старте системы.

D> Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?


Я когда-то давно переписывал библиотеку Turbo Professional для работы с фреймбуфером. Там ничего сложного, только переписать процедуры вывода символов на экран, текстового и мышиного курсора.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 15.01.08 09:51
Оценка:
VC>ps интересно, чем мотивировано использование дос?
Ну, во-первых, очень настоятельно рекомендует шеф. А, во-вторых, железо, на котором все это будет работать, не потянет Windows (разве что 95 или 3.11). Я бы конечно все это на линукс посадил, но опять же шеф пока не одобряет...
Re: текстовый+графический режим в DOS?
От: LaptevVV Россия  
Дата: 15.01.08 09:57
Оценка:
Здравствуйте, def0e0, Вы писали:

D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?

Мои студенты как-то в качестве курсовой сделали вращающийся кубик в текстовом режиме. Идея лежит в перезагрузке шрифтов в знакогенератор.
Работало все замечательно. Но требует тщательного программирования.
Книжки Фроловых про видеосистемы из библиотеки системного программирования должно быть достаточно. Еще на эту же тему были книжки по программированию игр — там об оптимизации вывода в режиме VGA на аппаратном уровне. К сожалению авторов не помню — более 10 лет назад дело было...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 15.01.08 10:01
Оценка:
Здравствуйте, Сергей, Вы писали:

С>Можно попробовать http://www.japheth.de/HX.html — DOS-extender, с кое-какой эмуляцией Win32API. В нем можно использовать порт SDL (http://www.libsdl.org) под Win32, а для SDL существуют библиотеки для GUI, например http://libuta.sourceforge.net/.


С>Если неохота связываться со всем этим, то можно попробовать NXLIB или OpenGUI.


С>Есть еще замечание насчет компилятора. Скорее всего, у тебя какой-нибудь старый борладовский — и скорее всего он не подойдет для всего вышеуказанного, под DOS лучше использовать DJGPP — порт gcc под DOS.


Ого. Здорово. Буду пока переваривать... Спасибо.
Re: текстовый+графический режим в DOS?
От: Кодт Россия  
Дата: 15.01.08 10:30
Оценка:
Здравствуйте, def0e0, Вы писали:

D>Пишу программу под DOS на С++. В программе должны быть меню, окна, строка статуса и прочие удобства (например как в TurboPascal'е ), для этого использую библиотеку Turbo Vision. Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами? Как в текстовом режиме работать с отдельными пикселями? Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?


Чисто теоретически, можно сделать текстовый режим поверх графического. (Даже старый добрый CGA это поддерживает).
Но беда в том, что TurboVision работает напрямую с видеобуфером, а не с терминалом, поэтому в лоб, просто переключив видеорежим, не получится.

По мотивам TV были сделаны разные библиотеки, например, Graphics Vision (Гугль в помощь).
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: текстовый+графический режим в DOS?
От: Пётр Седов Россия  
Дата: 15.01.08 12:49
Оценка:
Здравствуйте, def0e0, Вы писали:

D>Или может есть какая-то библиотека с помощью которой можно создавать пользовательский интерфейс в графическом режиме?

Borland-овские компиляторы для DOS (C++ и Pascal) предоставляют графическую библиотеку. В C++ надо #include-ить заголовочный файл graphics.h. Ещё там зачем-то есть файл egavga.bgi (BGI = Borland graphics instruments).

Но эта библиотека не имеет отношения к Turbo Vision. Рисовать widget-ы (элементы пользовательского интерфейса) и мышиный курсор придётся самому. Получать мышиный ввод – тоже (если я правильно помню, драйвер мыши доступен через программное прерывание 33h).

LaptevVV уже правильно посоветовал книги серии «Библиотека системного программиста», авторы: Александр Фролов, Григорий Фролов. Если хотите, могу выложить соответствующие тома в электронном виде.
Пётр Седов (ушёл с RSDN)
Re[2]: текстовый+графический режим в DOS?
От: ДимДимыч Украина http://klug.org.ua
Дата: 15.01.08 15:35
Оценка: +1
Здравствуйте, Пётр Седов, Вы писали:

ПС>Но эта библиотека не имеет отношения к Turbo Vision. Рисовать widget-ы (элементы пользовательского интерфейса) и мышиный курсор придётся самому. Получать мышиный ввод – тоже (если я правильно помню, драйвер мыши доступен через программное прерывание 33h).


Драйвер мыши сам рисует курсор в VGA-режимах.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 16.01.08 07:37
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>LaptevVV уже правильно посоветовал книги серии «Библиотека системного программиста», авторы: Александр Фролов, Григорий Фролов. Если хотите, могу выложить соответствующие тома в электронном виде.


Буду очень благодарен, если выложите книги! Мне очень пригодятся.
Re: текстовый+графический режим в DOS?
От: Аноним  
Дата: 16.01.08 08:03
Оценка: 1 (1)
Это моя текущая работа (т.е. не теоретический, а практический совет).
Компилятор DJGPP, графика рисуется посредством allegro.
GUI можно рисовать непосредственно через allegro, но не очень удобно.
Есть довольно удобная либа — MASking — основные виджеты GUI поверх allegro.
Кстати, если потом будет переход под линух (а в случае серьёзной программы будете вынуждены) то всё это "безобразие" вроде как компилится под никсы (сам пока ещё не пробовал).
Но это в случае, если нет возможности обойтись TurboVision — ибо по простоте и быстродействию с текстовым режимом соревноваться не просто.
Re: текстовый+графический режим в DOS?
От: def0e0  
Дата: 16.01.08 09:39
Оценка:
Кто-нибудь видел Norton PartitionMagic в досе? Как они это сделали кто-нибудь знает?
Re[2]: текстовый+графический режим в DOS?
От: Cyberax Марс  
Дата: 16.01.08 09:46
Оценка:
Здравствуйте, def0e0, Вы писали:

D>Кто-нибудь видел Norton PartitionMagic в досе? Как они это сделали кто-нибудь знает?

Сами рисуют все в графическом режиме.
Sapienti sat!
Re[3]: текстовый+графический режим в DOS?
От: Sergey Россия  
Дата: 16.01.08 12:02
Оценка:
> D>Кто-нибудь видел Norton PartitionMagic в досе? Как они это сделали кто-нибудь знает?
> Сами рисуют все в графическом режиме.

Я слышал, там используется библиотека MGL разработки http://www.scitechsoft.com/, для которой, кстати, имеется порт wxWidgets — wxMGL. Вот только сама scitech software, похоже, приказала долго жить...
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[4]: текстовый+графический режим в DOS?
От: Sergey Россия  
Дата: 16.01.08 12:05
Оценка:
Кстати, вроде бы у Microwindows (сейчас называется Nano-X) есть DOS порт.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: текстовый+графический режим в DOS?
От: Пётр Седов Россия  
Дата: 16.01.08 14:42
Оценка:
Здравствуйте, Аноним, Вы писали:
А>GUI можно рисовать непосредственно через allegro, но не очень удобно.
В смысле? Allegro сам умеет рисовать GUI.
allegro\include\allegro\gui.h
allegro\examples\exgui.c
Пётр Седов (ушёл с RSDN)
Re[3]: текстовый+графический режим в DOS?
От: Пётр Седов Россия  
Дата: 16.01.08 16:46
Оценка:
Здравствуйте, def0e0, Вы писали:

D>Буду очень благодарен, если выложите книги! Мне очень пригодятся.

Файл BSP.zip, лежит здесь: http://slil.ru/25366121
Размер: 1.66 мб
Файл будет удалён через 1 месяц после последнего скачивания.
В архиве:

Файл v02\index.html:
Том 2 «Аппаратное обеспечение IBM PC»
Там в главе 3 описан интерфейс драйвера мыши. Есть примеры кода (dbsp2.zip).

Файл v03\index.html:
Том 3 «Программирование видеоадаптеров CGA, EGA и VGA»
Есть примеры кода (dbsp3.zip).

Файл v21c\index.html:
Том 21 «Программирование видеоадаптеров»
К сожалению, содержимого книги нет, только оглавление. Правда, есть примеры кода (dbsp21.zip).

Файл v33c\index.html:
Том 33 «Аппаратное обеспечение персонального компьютера»
Тоже содержимого нет, есть примеры кода (dbsp33.zip).


Но я Вам не советую тратить время на изучение низко-уровневых деталей видеокарты, это всё давно потеряло актуальность. Лучше использовать какую-нибудь высоко-уровневую графическую библиотеку, вроде Borland-овского graphics.h.
Пётр Седов (ушёл с RSDN)
Re[3]: текстовый+графический режим в DOS?
От: Пётр Седов Россия  
Дата: 16.01.08 16:57
Оценка:
Здравствуйте, ДимДимыч, Вы писали:
ДД>Драйвер мыши сам рисует курсор в VGA-режимах.
Да, точно. Том 2 «Аппаратное обеспечение IBM PC»:

Глава 3. Мышь

3.2. Драйверы мыши в MS-DOS

Драйвер мыши выполняет следующие функции:
* отслеживает перемещения курсора и нажатия на клавиши мыши;
* рисует на экране курсор, повторяющий движения мыши в графическом или текстовом режимах;
* предоставляет программам интерфейс для работы с мышью, основанный на вызове прерывания INT 33h.

Пётр Седов (ушёл с RSDN)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.