текстовый+графический режим в 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)
Re: текстовый+графический режим в DOS?
От: Пётр Седов Россия  
Дата: 16.01.08 17:17
Оценка:
Здравствуйте, def0e0, Вы писали:
D>Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами?
Может, сделать так. Основной интерфейс сделан с помощью Turbo Vision. Когда нужно показать пользователю график, программа переключается в графический режим и рисует картинку с помощью graphics.h. После того как пользователь увидел всё что хотел, он жмёт Esc и программа возвращается обратно в текстовый режим, в котором за содержимое экрана отвечает Turbo Vision.
Пётр Седов (ушёл с RSDN)
Re[3]: текстовый+графический режим в DOS?
От: Аноним  
Дата: 16.01.08 19:17
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>В смысле? Allegro сам умеет рисовать GUI.


В прямом смысле — в библиотеке MASking сделано много полезных классов-обёрток вокруг allegro, поэтому через MASking работать с полноценным GUI удобнее.
Re[2]: текстовый+графический режим в DOS?
От: Аноним  
Дата: 17.01.08 07:35
Оценка:
Поддержу.
GUI рисовать в ДОСе в графическом режиме — очень накладно — нет драйверов (если не закладываться на определённое железо), соотв. почти всё рисуется посредством проца, соотв. при нормальных разрешениях (больше 800*600) нужно хотя бы Р4.
Поэтому если есть возможность — рисовать GUI через TurboVision.
Хотя надо отметить, если хорошо подойти к делу GUI в графическом режиме можно нарисовать очень достойный.
Re[2]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 18.01.08 02:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это моя текущая работа (т.е. не теоретический, а практический совет).

А>Компилятор DJGPP, графика рисуется посредством allegro.
А>GUI можно рисовать непосредственно через allegro, но не очень удобно.
А>Есть довольно удобная либа — MASking — основные виджеты GUI поверх allegro.
А>Кстати, если потом будет переход под линух (а в случае серьёзной программы будете вынуждены) то всё это "безобразие" вроде как компилится под никсы (сам пока ещё не пробовал).
А>Но это в случае, если нет возможности обойтись TurboVision — ибо по простоте и быстродействию с текстовым режимом соревноваться не просто.

Собрал и посмотрел allegro под linux. Посмотрел примеры... Пока вроде подходит. Попытался собрать в DOS'е при попытке сделать make останавливается на следующей ошибке:
c:\src\allegro>make
Compiling Allegro for djgpp, optimised. Please wait...
obj/djgpp/asmdef.exe obj/djgpp/asmdef.inc
writing structure offsets into obj/djgpp/asmdef.inc...
gcc -Wall -Wno-unused -I. -I./include -x assembler-with-cpp -o obj/djgpp/alleg/i
blit16.o -c src/i386/iblit16.s
c:/djgpp/tmp\ccai4cjl: Assembler messages:
c:/djgpp/tmp\ccai4cjl:354: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:419: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:421: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:437: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:437: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:445: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:445: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:451: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:451: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:496: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:498: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:516: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:520: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:565: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:567: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:587: Error: operands given don't match any known 386 instruction
c:/djgpp/tmp\ccai4cjl:587: Error:
c:\src\allegro>

Перед make делал fix.bat djgpp --crlf --nomsvcpaths. В чем дело? Как собрать в DOS'e?
Re[2]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 18.01.08 03:33
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Здравствуйте, def0e0, Вы писали:

D>>Проблема в том, что мне необходимо в одном из окон нарисовать график. Но как это сделать, если весь интерфейс рисуется в текстовом режиме символами?
ПС>Может, сделать так. Основной интерфейс сделан с помощью Turbo Vision. Когда нужно показать пользователю график, программа переключается в графический режим и рисует картинку с помощью graphics.h. После того как пользователь увидел всё что хотел, он жмёт Esc и программа возвращается обратно в текстовый режим, в котором за содержимое экрана отвечает Turbo Vision.

Я бы наверно так и сделал, но мне необходимо вместе с графиками отображать и текстовые данные. Можно и текст в графическом режиме рядом расположить, но тогда смысл мне отдельно в текстовом режиме делать только меню с настройками... Как-то не удобно мне кажется...

У меня есть скриншот программы (постараюсь в ближайшее время выложить), где в текстовом режиме в отдельном нарисованном окне рисуют графики и одновременно рядом отображается текст. Вот мне бы узнать как это они сделали...

PS: На графику мне нужно тратить как можно меньше ресурсов, так как главное успеть опросить, принять и обработать данные от устройств, а потом уже отображать полученные данные. Поэтому то и хочется весь интерфейс сделать в текстовом режиме, а графики рядом в небольшом окошке...
Re[3]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 18.01.08 04:20
Оценка:
Прочитав внимательно allegro\docs\build\djgpp.txt, оказалось, что Required software: Binutils 2.9.x or later, а у меня 2.8.1.
Re[4]: текстовый+графический режим в DOS?
От: Аноним  
Дата: 18.01.08 08:02
Оценка: 1 (1)
Имейте в виду, что большой, красивый, удобный GUI, написанный на MASking будет требовать производительного процессора (особенно в больших разрешениях — 800*600 ещё терпимо работает на Celeron P3 800 MGz) — об этом я ниже писал (работает в ДОСе через VESA биоса, а оно процом рисуется).
И второе — я работаю с версией allegro 4.2.0 и MASking 0.79. Они дружат. Пробовал собирать последние версии — были проблемы даже при сборке, что там будет если пробовать запускать — не знаю.
Если изначально ориентироваться на никс какой-нть, то надо смотреть в сторону более распространённых GUI (QT там всякие и тд). Иначе много всего придётся самому ковырять в allegro и MASking (есть сырые и не удобные места).
Re[2]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 18.01.08 10:06
Оценка:
Здравствуйте, Кодт, Вы писали:

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

К>Но беда в том, что TurboVision работает напрямую с видеобуфером, а не с терминалом, поэтому в лоб, просто переключив видеорежим, не получится.

А если не использовать TurboVision, то как "теоретически" можно сделать текстовый режим поверх графического?
Re[3]: текстовый+графический режим в DOS?
От: Кодт Россия  
Дата: 18.01.08 10:41
Оценка:
Здравствуйте, def0e0, Вы писали:

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

К>>Но беда в том, что TurboVision работает напрямую с видеобуфером, а не с терминалом, поэтому в лоб, просто переключив видеорежим, не получится.

D>А если не использовать TurboVision, то как "теоретически" можно сделать текстовый режим поверх графического?


Это не задача TV. Оно-то как раз очень не любит такое, потому что работает с текстовым буфером напрямую.

А теория очень простая.
Вариант номер 1: просто рисовать моноширинным шрифтом в графический буфер.
Вариант номер 2: завести текстовый буфер в основной памяти, и каждый раз, когда его содержимое меняется — смотреть вариант номер 1.

Переключать же видеорежимы — это смотри модуль Graph и драйвера cga.bgi, egavga.bgi к нему.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: текстовый+графический режим в DOS?
От: Аноним  
Дата: 18.01.08 16:17
Оценка: 1 (1)
Здравствуйте, def0e0, Вы писали:

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


Давненько я написал библиотечку для переключения Turbo Vision в графический режим, 100% совместимую с Turbo Vision, оказалось таки довольно легко, по сути два места перекрыть:
Re[2]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 19.01.08 10:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Давненько я написал библиотечку для переключения Turbo Vision в графический режим, 100% совместимую с Turbo Vision, оказалось таки довольно легко, по сути два места перекрыть:


Ух ты! То что надо! Можешь поделится библиотечкой?
Re: текстовый+графический режим в DOS?
От: def0e0  
Дата: 19.01.08 10:54
Оценка:
Вот примерно то, что я пытаюсь получить. Извиняюсь за такое качество фото, делал с телефона.
Re[2]: текстовый+графический режим в DOS?
От: OCTAGRAM Россия http://octagram.name/
Дата: 20.01.08 13:25
Оценка: +1
ДимДимыч пишет:
> Здравствуйте, def0e0, Вы писали:
>
> D> Но как это сделать, если весь интерфейс рисуется в текстовом режиме
> символами? Как в текстовом режиме работать с отдельными пикселями?
>
> Вообще способ есть, но он Вам вряд ли подойдет. Этот способ позволяет
> выводить в текстовом режиме двоичные изображения размером 128x128 с
> раскраской отдельного знакоместа 8x16. Реализуется путем
> перепрограммирования верхней половины таблицы знакогенератора.
> Изображения символов с кодами больше 127 при этом естественно
> недоступны. Этот способ используется для вывода логотипа при старте
> системы.
Продолжаю тему. Вместо того, чтобы менять старшую половину символов,
начиная с EGA, можно установить режим 512 символов вместо обычных 256
ценой одного бита цвета символа. Дело в том, что таблиц шрифтов может
быть не одна. В видеопамять EGA можно загрузить 4 шрифта, в VGA — 8
одновременно. Специальные видеорегистры позволяют переключать нулевой и
первый шрифт между загруженными. Обычно они указывают на одну и ту же
таблицу — на нулевую. Но можно поставить на разные, это и будет режим
512 символов. Нулевой или первый шрифт будет выбран, зависит от цвета
символа. В стандартной палитре это бит яркости. То есть, если не менять
палитру, то блеклые символы будут одним шрифтом, а светлые — другим. Но,
конечно, лучше поменять. В 8 цветов уложиться реально. Прежние 256
символов пусть будут выглядеть, как обычно, а на новых 256 как раз и
нужно рисовать. Площадь получается в два раза больше при таком подходе.
Я делал программу, которая рисует синусоиду и завершается. Можно было
даже в Norton Commander убрать и показать панели, синусоида остаётся.
В NC цвета преимущественно яркие, поэтому я менял цвет приглашения тоже
на яркий, а синусоиду рисовал на «тёмных» символах.

Если ещё и > 127 задействовать, то площадь в три(!) раза больше.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: текстовый+графический режим в DOS?
От: lxa http://aliakseis.livejournal.com
Дата: 21.01.08 10:16
Оценка: 2 (1)
Здравствуйте, def0e0, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


D>Ух ты! То что надо! Можешь поделится библиотечкой?


Попытался раскопать. К сожалению, то, что я делал для С++, потерялось. Здесь я собрал все постарше, что делал с паскалевским Turbo Vision. Тем не менее, насколько я помню, каких либо специфических проблем с C++ версией не было. Эти исходники можно рассматривать скорее как прототип не очень высокого качества , но тем не менее что-то можно найти. Чтобы убедиться в работоспособности, можно запустить grabber\myshell.exe, предварительно разрешив ему использовать XMS память, и потом открыть, например, pcx\r.pcx. Идея простая, насколько я помню нужно перекрыть функцию отображения знакоместа, пересчет координат мыши и инициализацию/деинициализацию. Знакоместо в функции отображения знакоместа фактически определяется двухбайтовым словом, в нашей функции бит мерцания определяет, показывать ли обычный символ или делать расширенный "рендеринг" фрагмента. Переопределение бита мерцания — это единственная "несовместимость" с TV. Pасширенный "рендеринг" можно реализовывать по-разному, как вариант, отображать эти знакоместа на фрагменты загруженных в память битмапок. Одна деталь исполнения: у меня не было всех исходников TV для Паскаля, и я перекрывал функцию отображения знакоместа через 55h-е прерывание, хакнув tpu файл.
Вопросы are welcome
Re[4]: текстовый+графический режим в DOS?
От: def0e0  
Дата: 22.01.08 02:38
Оценка:
Здравствуйте, lxa, Вы писали:

lxa>Попытался раскопать. К сожалению, то, что я делал для С++, потерялось. Здесь я собрал все постарше, что делал с паскалевским Turbo Vision. Тем не менее, насколько я помню, каких либо специфических проблем с C++ версией не было. Эти исходники можно рассматривать скорее как прототип не очень высокого качества , но тем не менее что-то можно найти. Чтобы убедиться в работоспособности, можно запустить grabber\myshell.exe, предварительно разрешив ему использовать XMS память, и потом открыть, например, pcx\r.pcx. Идея простая, насколько я помню нужно перекрыть функцию отображения знакоместа, пересчет координат мыши и инициализацию/деинициализацию. Знакоместо в функции отображения знакоместа фактически определяется двухбайтовым словом, в нашей функции бит мерцания определяет, показывать ли обычный символ или делать расширенный "рендеринг" фрагмента. Переопределение бита мерцания — это единственная "несовместимость" с TV. Pасширенный "рендеринг" можно реализовывать по-разному, как вариант, отображать эти знакоместа на фрагменты загруженных в память битмапок. Одна деталь исполнения: у меня не было всех исходников TV для Паскаля, и я перекрывал функцию отображения знакоместа через 55h-е прерывание, хакнув tpu файл.

lxa>Вопросы are welcome

Спасибо! Да уж... Разбираться видимо буду долго с этой темой...
Re: текстовый+графический режим в DOS?
От: def0e0  
Дата: 22.01.08 08:59
Оценка:
Ситуация резко изменилась. Шеф все таки согласился на linux...
Всем огромнейшее СПАСИБО!!!
Re: текстовый+графический режим в DOS?
От: Sashaka Россия  
Дата: 24.01.08 18:58
Оценка:
Здравствуйте, def0e0, Вы писали:

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


у Фаронова во второй книжке по Паскалю рассматривается примерно такой же вопрос. Книжка называется "Turbo Pascal 7.0 Практика программирования"
Re: текстовый+графический режим в DOS?
От: Аноним  
Дата: 29.01.08 10:58
Оценка:
Здравствуйте, def0e0, Вы писали:

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

По-моему, Вы отстали от жизни лет так на 15...
Re[3]: текстовый+графический режим в DOS?
От: Hard_Club  
Дата: 03.02.08 21:29
Оценка:
У меня есть zinc где-то далеко в архиве. Очень прикольная графическая библиотека под DOS. Я на ней как-то писал курсовую. Было прикольно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.