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...
Пока на собственное сообщение не было ответов, его можно удалить.