Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.0.53] |
|
Сообщ.
#1
,
|
|
|
В то время, когда космические корабли бороздят просторы вселенной и все крутые поцики перешли на Microsoft Visual Studio, в университетах, тем временем, требуют решения на Borland C 3. Графика там выводится с помощью bgi-драйверов (пресловутых egavga.bgi). Соответственно, когда человек обращается на форум за помощью, не у каждого найдется досовский компилятор, чтобы посмотреть, а что там выводится.
Следовательно я решил написать библиотечку, которая подключается одним #includ'ом и вместо команд, направленных BGI, будет выводить графику средствами Windows GDI. Собственно, инициализация и вывод реализованы. Но там очень много рутины по написанию мелких функций (f.e. lineto, rectangle etc.). Основная концепция - чтоб скомпилировать исходник для доса в современном компиляторе, достаточно добавить лишь одну строчку. Можно написать исходник в любимой VS2005, стереть эту строчку и отдать преподу... Собственно, к чему этот сабж: Я хотел спросить, а нужна ли кому-нибудь эта библиотека? Не хотелось кому-нибудь иметь под рукой нечто подобное? Не хочу я зря кодить... Нужен конечный потребитель. |
Сообщ.
#2
,
|
|
|
Цитата Der Meister @ Соответственно, когда человек обращается на форум за помощью, не у каждого найдется досовский компилятор, чтобы посмотреть, а что там выводится. у меня где-то завалялся ВС++3.1, если нада |
Сообщ.
#3
,
|
|
|
Черный_Ворон
У меня он есть. Только кому охота, чтоб скомпилировать какой-нибудь бред запускать это убожество? Он так грузит проц, что аж плеер заикаться начинает... Вся фишка-то в том, чтоб писать курсовые в нормальной IDE! |
Сообщ.
#4
,
|
|
|
Цитата Der Meister @ Вся фишка-то в том, чтоб писать курсовые в нормальной IDE А я и писал в нормальной IDE Потом только собирал EXE'шник в Борланде. Правда, графику я не пользовал, без надобности было. Цитата Der Meister @ Только кому охота, чтоб скомпилировать какой-нибудь бред запускать это убожество? Ну не надо так... Старость надо уважать. Насчёт сабжа, я думаю, что спросу будет мало. |
Сообщ.
#5
,
|
|
|
Цитата Nich @ Правда, графику я не пользовал В том то и дело, что без графики хоть в чем компилиться будет. Цитата Nich @ Старость надо уважать. Я уважаю. Только этот компилер не отвечает официальным стандартам языка С++. Цитата Nich @ Насчёт сабжа, я думаю, что спросу будет мало. Ладно. Подождем еще. На всякий случай кидаю и примерчик: #include "DGML_init.h"//подцепляем нашу либу :wub: ... //а ниже код не меняется ;) void main() { int dr=0,m; initgraph(&dr,&m,""); for (int i=0;i<1000;i++) { setcolor(rand()%16); line(rand()%640,rand()%480,rand()%640,rand()%480); } DGML::getch(); cleardevice(); closegraph(); } |
Сообщ.
#6
,
|
|
|
Кстати, инклуд можно обозвать "graphics.h", и тогда вообще ничего менять не придется, все равно в MSVC такого файла нет .
#include <graphics.h> Выкладываю проект вместе с библиотекой. У кого мой не запустится - достаточно создать чистый проект Win32 Console Application и добавить туда test.cpp. Прикреплённый файлDGML_Test.rar (61.09 Кбайт, скачиваний: 1072) |
Сообщ.
#7
,
|
|
|
Цитата Der Meister @ Только этот компилер не отвечает официальным стандартам языка С++. Когда его сделали не было ещё никакого стандарта... P.S. Скачал, посмотрел, прикольно. Что-то в этом есть... однозначно. |
Сообщ.
#8
,
|
|
|
Цитата Nich @ Когда его сделали не было ещё никакого стандарта... Но теперь-то он уже устарел. Зато в учебных заведениях почему-то этого не понимают... И Microsoft же бесплатные компиляторы ВУЗам раздает... |
Сообщ.
#9
,
|
|
|
Der Meister, интересное начинание
Здесь можешь посмотреть, что вытворял я с BGI машиной: Окна под DOS'ом: стоит или нет? А писать лучше под SVGA - у меня учебничек соотв. есть |
Сообщ.
#10
,
|
|
|
Писал SVGA-графику под DOS. Посмотрите, может какие функции понравятся
Прикреплённый файлgraph.rar (3.27 Кбайт, скачиваний: 686) |
Сообщ.
#11
,
|
|
|
Neko
The-Boss Спасибо, посмотрю. Только писать это буду на высоком уровне: инициализируется режим 640х480х8, берется его hDC, а дальше шаманства. Прямой доступ к видеопамяти - не то... Добавлено The-Boss У тебя можно урвать геометрию. Вывод текста меня просто убил. Neko Кстати, библиотеку напишу (теперь уж стопудово решился) - попробую твои окна скомпилировать, авось получится! А там у тебя всего 16 цветов использовалось? |
Сообщ.
#12
,
|
|
|
Цитата Der Meister @ инициализируется режим 640х480х8, берется его hDC DirectDraw? Может тогда типа игрового интерфейса сделать |
Сообщ.
#13
,
|
|
|
Цитата Der Meister @ Только писать это буду на высоком уровне: инициализируется режим 640х480х8, берется его hDC, А зачем инициализировать какие-то режимы?! Удобнее просто по initgraph создавать новое окно - и рисовать на нем в truecolor. Режим - не более чем способ преобразования цветов и координат. |
Сообщ.
#14
,
|
|
|
Правильной дорогой идете, товарисчи... Недавно на заказ на ассемблере меню писал... Такие долбанутые преподы тоже есть еще...
|
Сообщ.
#15
,
|
|
|
Вот еще несколько функций + еще более ужасающий вывод текста (специально для Der Meister )
Прикреплённый файлgraphic_func.rar (1.98 Кбайт, скачиваний: 541) |
Сообщ.
#16
,
|
|
|
Если ddraw - то отлига! Он позволяет всё!
И пасквилянтов не забудьте! А то можно и засмесить - а-ля буилдер и сделать bgi32.dll. Главное - чтоб ellipse был! :) |
Сообщ.
#17
,
|
|
|
Нет, не DirectDraw. Win32API. И вывод осуществляется средствами GDI.
Один вопрос: сколько цветов надо? 16 или 256? Просто надо не отойти от синтаксиса прототипа, а там вроде 16 цветов определено. |
Сообщ.
#18
,
|
|
|
Цитата Der Meister @ Win32API А чем не устраивает DirectDraw + GDI Plus ? Цитата Der Meister @ Один вопрос: сколько цветов надо? 16 или 256? Просто надо не отойти от синтаксиса прототипа, а там вроде 16 цветов определено Скока запросит |
Сообщ.
#19
,
|
|
|
Der Meister, а можешь кинуть сюда список поддерживаемых и нет функций ?
ToDo? |
Сообщ.
#20
,
|
|
|
Цитата Neko @ А чем не устраивает DirectDraw + GDI Plus ? Слишком уж наворочено. Я не ставлю цели сделать вывод графики супербыстрым. Тут уж мелькала мысль, чтоб сделать вывод в окне. Может так и будет... Romtek #define closegraph DGML::closegraph #define line DGML::line #define linerel DGML::linerel #define lineto DGML::lineto #define cleardevice DGML::cleardevice #define getmaxx DGML::getmaxx #define getmaxy DGML::getmaxy #define setcolor DGML::setcolor #define getcolor DGML::getcolor #define putpixel DGML::putpixel #define outtextxy DGML::outtextxy Надо просто решить некоторые вопросы. А остальные функции (bar, ellipse, etc...) написать - как два пальца об асфальт. Работы много, но все это легко. Позже сообщу о результатах. TODO: Write all other functions from Borland's graphics.h. |
Сообщ.
#21
,
|
|
|
Цитата Der Meister @ Это, по большей части, я попросил за других пользователей. В файл DGML_init.h я и сам догадался посмотреть. Romtek #define closegraph DGML::closegraph #define line DGML::line #define linerel DGML::linerel #define lineto DGML::lineto #define cleardevice DGML::cleardevice #define getmaxx DGML::getmaxx #define getmaxy DGML::getmaxy #define setcolor DGML::setcolor #define getcolor DGML::getcolor #define putpixel DGML::putpixel #define outtextxy DGML::outtextxy Надо просто решить некоторые вопросы. А остальные функции (bar, ellipse, etc...) написать - как два пальца об асфальт. Работы много, но все это легко. Позже сообщу о результатах. А что насчёт исходников либы? У меня нет Студии и я не могу прилинковать .lib в GCC. |
Сообщ.
#22
,
|
|
|
Цитата Romtek @ А что насчёт исходников либы? Держи: Прикреплённый файлDGML_src_0_0_75.rar (5.82 Кбайт, скачиваний: 360) |
Сообщ.
#23
,
|
|
|
Уф. После нескльких попыток скомпилировать получилось (на знал как подключать gdi32 к линкеру).
Надо было добавить -lgdi32 . Теперь надо узнать как создавать библиотеку в GCC. Добавлено Der Meister, а какие файлы находятся в либе? Я скомпоновал DGML.o,DGML_Error.o,graphics.o,input.o,system.o в DGML.a. |
Сообщ.
#24
,
|
|
|
Цитата Romtek @ Я скомпоновал DGML.o,DGML_Error.o,graphics.o,input.o,system.o в DGML.a. Все правильно. Я сейчас занимаюсь реализацией остальных функций, некоторые пока закрыл заглушками. |
Сообщ.
#25
,
|
|
|
Один вопрос: можно ли как-нибудь выдрать help из bc? Или справочник по bgi? А то пришлось ему приоритет на "низкий" установить - сколько ресурсов дашь, столько и съест.
А сейчас я разбираюсь с параметрами вот так: Прикреплённый файлbc.jpg (69.45 Кбайт, скачиваний: 893) |
Сообщ.
#26
,
|
|
|
Цитата Der Meister @ #define Лучше так: using DGML::closegraph; В аттаче: краткая справка по BGI на русском Прикреплённый файлbgi.zip (17.67 Кбайт, скачиваний: 437) |
Сообщ.
#27
,
|
|
|
Цитата Neko @ using DGML::closegraph; Учтем. Цитата Neko @ В аттаче: краткая справка по BGI на русском Спасибо! |
Сообщ.
#28
,
|
|
|
Цитата Neko @ using DGML::closegraph; Не работает так. Как тогда сделать. Может вместо класса сделать namespace и туда засунуть все интерфейсные функции, а служебные ф-ции оставить в классе... Так и сделаю. |
Сообщ.
#29
,
|
|
|
Слава Аллаху! Я это сделал.
Теперь получилась максимально прозрачная интерфейсная часть и максимально уродливая реализация системы. Пространство имен DGML будет полностью по сигнатуре идентично содержимому graphics.h. Вот текущая версия: namespace DGML { // инициализирует графическую систему void initgraph(int *graphdriver, int *graphmode, const char *pathtodriver); // ждет, пока не будет нажата клавиша и возвращает ее код int getch(void); // чертит линию между заданными точками void line(int x1, int y1, int x2, int y2); // закрывает графическую систему void closegraph(void); // чертит линию относительно текущей позиции (ТП) void linerel(int dx, int dy); // чертит линию от текущей позиции (ТП) до (x,y) void lineto(int x, int y); // очищает графический экран void cleardevice(void); // возвращает максимальную x координату int getmaxx(void); // возвращает максимальную y координату int getmaxy(void); // устанавливает цвет пера void setcolor(int color); // возвращает текущий цвет пера int getcolor(void); // выводит пиксел в заданной точке void putpixel(int x, int y, int color); // выводит текст в заданной позиции void outtextxy(int x, int y, char* textstring); void arc(int x, int y, int stangle, int endangle, int radius); // Выводит окружность с центром в точке (x,y) и радиусом radius. void circle(int x, int y, int radius); // Выводит сектор круга от stangle до endangle с центром в точке (x,y) , радиусом radius. void pieslice(int x, int y, int stangle, int endangle, int radius); // Выводит закрашенный прямоугольник без контура. void bar(int left, int top, int right, int bottom); // Выводит прямоугольный параллелепипед. void bar3d(int left, int top, int right, int bottom, int topflag); // Выводит многоугольник из numpoints точек, переданных массивом polypoints. void drawpoly(int numpoints, int* polypoints); // Выводит закрашенный многоугольник, состоящий из numpoints точек, переданных в массиве polypoints. void fillpoly(int numpoints, int* polypoints); // Выводит эллиптическую дугу с центром в (x,y), радиусами xradius и yradius и сектором (stangle;endangle) void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius); // Выводит закрашенный эллипс с центром в (x,y) и радиусами xradius и yradius. void fillellipse(int x, int y, int xradius, int yradius); // Выводит закрашенный эллиптический сектор с центром в (x,y), радиусами xradius и yradius и сектором (stangle;endangle) void sector(int x, int y, int stangle, int endangle, int xradius, int yradius); } Проект перешел из разряда идей. Но не в "тестирование программ" же его засовывать?! |
Сообщ.
#30
,
|
|
|
Цитата Der Meister @ Самое время в "Коллективных Проектах" страничку создавать. Проект перешел из разряда идей. Но не в "тестирование программ" же его засовывать?! Добавлено Я уже предлагал, по-моему самое то. Можешь написать описание программы, привести пару примеров программ, добавить список поддерживаемых функций, скриншоты и т.д. |
Сообщ.
#31
,
|
|
|
Цитата Der Meister @ Но не в "тестирование программ" же его засовывать?! Точно не ко мне... |
Сообщ.
#32
,
|
|
|
Romtek
Хорошо. На днях создам страничку. Можешь записывать в девелоперы. Я уж зарегился как "Der Meister". |
Сообщ.
#33
,
|
|
|
А проект свой (Вики-страничку) развивать надо! Само под камень лежачий не потечёт!
|
Сообщ.
#34
,
|
|
|
Romtek
Это понятно. Приложу все усилия. |
Сообщ.
#35
,
|
|
|
Библиотека продолжает обрастать подробностями. Пока не могу написать документацию и выложить список поддерживаемых функций - слишком много TODO и HACK'ов.
По сравнению с предыдущей версией добавлены следующие функции: // Возвращает код ошибки для последней неудачной графической операции int graphresult(void); // Возвращает указатель на строку с сообщением об ошибке char *grapherrormsg(int errorcode); // Возвращает максимальное значение цвета int getmaxcolor(void); // Устанавливает стиль и цвет заливки void setfillstyle(int pattern, int color); Первые три не несут пока смысловой нагрузки и служат только для того, чтобы без проблем все компилировать. Последняя функция демонстрируется в подшитом примере. Он выводит функцией bar прямоугольник и меняет стиль заливки. |
Сообщ.
#36
,
|
|
|
DGML version 0.01.51
Library sources Bar output example sources Bar output example app Прикреплённый файлDGML_0_1_51.rar (47.46 Кбайт, скачиваний: 347) |
Сообщ.
#37
,
|
|
|
Слабо сделать поддержку для Unix-систем?
|
Сообщ.
#38
,
|
|
|
Romtek
Слабо. В принципе, цепляем SDL - и вперед, только мне лениво. Уже код движется в определенном направлении. |
Сообщ.
#39
,
|
|
|
Список поддерживаемых графических функций (служебные не указаны):
bar bar3d circle fillellipse line linerel lineto setfillstyle //поддерживается только 7 стилей из 13 |
Сообщ.
#40
,
|
|
|
Der Meister А меня заинтересовала твоя работа! Я тоже писал что-то подобное, но только для Delphi!
|
Сообщ.
#41
,
|
|
|
Адрес страницы на Коллективных Проектах: DGML (Dos Graphics Migration Library)
|
Сообщ.
#42
,
|
|
|
Вот я вернулся из командировки и буду продолжать писать...
|
Сообщ.
#43
,
|
|
|
Создана официальная страница: http://heavysoft.org/dgml/index.php.
Обновлена страница в wiki: http://sources.ru/wiki/doku.php?id=projects:dgml. Приглашаю всех помочь в написании библиотеки. Осталось около 50 нереализованных функций. |
Сообщ.
#44
,
|
|
|
В версии 0.01.97 реализованы все заглушки. Осталось только написать код. Если вы заинтересованы, можно легко реализовать любую функцию:
Цитата Краткий SDK для разработчиков Прототипы всех функций написаны и полностью совпадают по сигнатуре с аналогами Borland. Заглушки находятся в файле graphics.cpp. Чтобы реализовать функцию нужно просто написать вместо заглушки код и выложить его на форуме. Если необходимы дополнительные переменные, объявляйте их как puplic static в классе DGML_Stuff. скачать все можно с wiki-страницы. Добавлено Список поддерживаемых функций: + готово * частично реализовано - только заглушка * arc + bar + bar3d + circle + cleardevice - clearviewport + closegraph - detectgraph + drawpoly * ellipse + fillellipse + fillpoly + floodfill - getarccoords - getaspectratio - getbkcolor + getcolor - getdefaultpalette - getdrivername - getfillpattern - getfillsettings - getgraphmode - getimage - getlinesettings + getmaxcolor - getmaxmode + getmaxx + getmaxy - getmoderange + getpixel - getpalette - getpalettesize - gettextsettings - getviewsettings + getx + gety - graphdefaults * grapherrormsg - _graphfreemem - _graphgetmem * graphresult - imagesize + initgraph - installuserdriver - installuserfont + line + linerel + lineto - moverel - moveto - outtext + outtextxy - pieslice - putimage + putpixel + rectangle - restorecrtmode - sector - setactivepage - setallpalette - setaspectratio - setbkcolor + setcolor - setfillpattern * setfillstyle - setgraphbufsize - setgraphmode - setlinestyle - setpalette - setrgbpalette - settextjustify - settextstyle - setuser - setviewport - setvisualpage - setwritemode - textheight - textwidth |
Сообщ.
#45
,
|
|
|
> 3 месяцев на западном фронте без перемен. Все умерло?
|
Сообщ.
#46
,
|
|
|
Почему же сразу "умерло"? Просто у меня экзамены...
|
Сообщ.
#47
,
|
|
|
Вот экзамены и закончились...
Настало время возобновить работу над библой... |
Сообщ.
#48
,
|
|
|
http://www.codedread.com/code.php#BOSS
|
Сообщ.
#49
,
|
|
|
trainer
Где ж ты раньше был?! Ну все, что ж мне теперь делать... Добавлено Цитата Not_Implemented namespace. More... Functions BOSS_API void bar3d (int left, int top, int right, int bottom, int depth, int topflag) BOSS_API void detectgraph (int *graphdriver, int *graphmode) BOSS_API void floodfill (int x, int y, int border) BOSS_API void getarccoords (struct arccoordstype *arccoords) BOSS_API void getaspectratio (int *xasp, int *yasp) BOSS_API struct palettetype * getdefaultpalette (void) BOSS_API char * getdrivername (void) BOSS_API void getfillpattern (char *pattern) BOSS_API void getfillsettings (struct fillsettingstype *fillinfo) BOSS_API int getgraphmode (void) BOSS_API void getlinesettings (struct linesettingstype *lineinfo) BOSS_API int getmaxcolor (void) BOSS_API int getmaxmode (void) BOSS_API char * getmodename (int mode_number) BOSS_API void getmoderange (int graphdriver, int *lomode, int *himode) BOSS_API void getpalette (struct palettetype *palette) BOSS_API int getpalettesize (void) BOSS_API void getviewsettings (struct viewporttype *viewport) BOSS_API void graphdefaults (void) BOSS_API char * grapherrormsg (int errorcode) BOSS_API int installuserdriver (char *name, int(*detect)(void)) BOSS_API int installuserfont (char *name) BOSS_API void pieslice (int x, int y, int stangle, int endangle, int radius) BOSS_API int registerbgidriver (void(*driver)(void)) BOSS_API int registerbgifont (void(*font)(void)) BOSS_API void restorecrtmode (void) BOSS_API void sector (int x, int y, int stangle, int endangle, int xradius, int yradius) BOSS_API void setactivepage (int page) BOSS_API void setallpalette (struct palettetype *palette) BOSS_API void setaspectratio (int xasp, int yasp) BOSS_API unsigned setgraphbufsize (unsigned bufsize) BOSS_API void setgraphmode (int mode) BOSS_API void setlinestyle (int linestyle, unsigned upattern, int thickness) BOSS_API void setpalette (int colornum, int color) BOSS_API void setrgbpalette (int colornum, int red, int green, int blue) BOSS_API void setusercharsize (int multx, int divx, int multy, int divy) BOSS_API void setviewport (int left, int top, int right, int bottom, int clip) BOSS_API void setvisualpage (int page) BOSS_API void setwritemode (int mode) BOSS_API void getlinesettings (linesettingstype *lineinfo) BOSS_API void getpalette (palettetype *palette) BOSS_API void getviewsettings (viewporttype *viewport) Ха-ха-ха! У меня bar3d и то реализован! И еще несколько функций . Так что буду писать до конца, и басурманские либы нам не помеха... |
Сообщ.
#50
,
|
|
|
Цитата Der Meister @ Дык сам только недавно увидел Где ж ты раньше был?! Цитата Der Meister @ Так это я в качестве информации к размышлению. Может что у них подсмотришь Так что буду писать до конца, и басурманские либы нам не помеха... |
Сообщ.
#51
,
|
|
|
Цитата Der Meister @ Так что буду писать до конца, и басурманские либы нам не помеха... Давай, давай, я вот сессию щас досдам, может тоже чем-нить подсоблю, если надо |
Сообщ.
#52
,
|
|
|
Пишите наздоровье такие библиотеки. Сгодяться и их порты под Линукс.
|
Сообщ.
#53
,
|
|
|
Собран дистрибутив версии 0.02.01. В новой версии код избавлен от специфичных директив компилятора Microsoft. В дистрибутив включены исходники, краткая структура каталогов и бинарники для Microsoft Visual Studio 2003 и Borland C++ Builder 6.
Бинарники для BCB6 собраны Nich'ем, за что ему огромный респект. wiki: http://www.sources.ru/wiki/doku.php?id=projects:dgml site: http://heavysoft.org/dgml/index.php |
Сообщ.
#54
,
|
|
|
0.02.04
Реализована функция arc. Написана с нуля в 4 строчки за несколько минут. Это меня обрадавало, так что дальше пойдет быстрее. |
Сообщ.
#55
,
|
|
|
Der Meister, я вот тут в небольшом сомненьи... Поправь меня, если ошибаюсь... Кажется, в BGI можно рисовать разные толстые линии (прерывистые, точками и т.д.), а добрая Винда толстыми дает рисовать только сплошные [по крайней мере 9х]. Значит, для реализации придется рисовать поточечно?
|
Сообщ.
#56
,
|
|
|
Ты, вообще-то, на #pragma once не рассчитывай. Borland C++, например, такой не знает.
|
Сообщ.
#57
,
|
|
|
trainer
Уже исправлено. barazuk Пока до конкретной реализации стиля перьев не дошел, однако в функции присутствуют все параметры: HPEN CreatePen( int fnPenStyle, // pen style int nWidth, // pen width COLORREF crColor // pen color ); По идее должно работать. Однако с проблемами с заливкой я уже столкнулся. Либо придется представить borland'овские заливки как битовые образы, либо писать с нуля... Добавлено Цитата This style is valid only when the pen width is one or less in device units. barazuk Да, ты прав. Придется попотеть... |
Сообщ.
#58
,
|
|
|
Вроде получилось выдрать паттерны заливки из борланда:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000000 00000000 11111111 11111111 00000000 00000000 10101010 00000000 00000000 00000000 01010101 00000000 00000000 00000000 00000000 10101010 10101010 10101010 00000000 01010101 01010101 01010101 01010101 01010101 01010101 01010101 10101010 10101010 10101010 10101010 10101010 01010101 10101010 01010101 01010101 10101010 01010101 10101010 11111111 00000000 00000000 00000000 11111111 00000000 00000000 00000000 10101010 00000000 00000000 01010101 01010101 00000000 00000000 10101010 00000000 11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 |
Сообщ.
#59
,
|
|
|
Оказалось чуток неправильно, пришлось переделать...
11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111 00000000 00000000 11111111 11111111 00000000 00000000 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 11100000 11000001 10000011 00000111 00001110 00011100 00111000 01110000 11110000 01111000 00111100 00011110 00001111 10000111 11000011 11100001 10100101 11010010 01101001 10110100 01011010 00101101 10010110 01001011 11111111 10001000 10001000 10001000 11111111 10001000 10001000 10001000 10000001 01000010 00100100 00011000 00011000 00100100 01000010 10000001 11001100 00110011 11001100 00110011 11001100 00110011 11001100 00110011 10000000 00000000 00001000 00000000 10000000 00000000 00001000 00000000 10001000 00000000 00100010 00000000 10001000 00000000 00100010 00000000 |
Сообщ.
#60
,
|
|
|
Сборка 0.02.47
Полностью поддерживаются встроенные заливки. Пользовательские заливки будут дописаны завтра, а то охота есть и спать. Прикрепляю демку с заливками. Прикреплённый файлfill.rar (26.23 Кбайт, скачиваний: 267) |
Сообщ.
#61
,
|
|
|
Цитата Der Meister @ Работает Полностью поддерживаются встроенные заливки. |
Сообщ.
#62
,
|
|
|
Цитата Der Meister @ По идее должно работать. По идее - да. Но, помню, надо было - не работало... Пришлось откуда-то выдирать, и малевать через полигоны. |
Сообщ.
#63
,
|
|
|
Тока шо проверил.
Делаем пустой MFC SDI прожект (к примеру, TestGDI). void CTestGDIView::OnDraw(CDC* pDC) { CTestGDIDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPen* pOldPen = pDC->GetCurrentPen(); CPen red_dot_pen(PS_DOT, 10, RGB(255, 0, 0)); CPen green_dot_pen(PS_DOT, 1, RGB(0, 255, 0)); CRect rc; GetClientRect(rc); pDC->SelectObject(&red_dot_pen); pDC->MoveTo(rc.left, rc.top); pDC->LineTo(rc.right, rc.bottom); pDC->SelectObject(&green_dot_pen); pDC->MoveTo(rc.left, rc.bottom); pDC->LineTo(rc.right, rc.top); pDC->SelectObject(pOldPen); } Получаем, как я гениально предсказывал, пургу: |
Сообщ.
#64
,
|
|
|
Взялся я за компиляцию этой библы в Dev-C++ (компилятор GCC) и проверке примера.
В целях совместимости добавил следующие строки в файл dgmltest.cpp (переименован от test.cpp) : #ifdef __WIN32 #include "DGML_Init.h" #else #include <graphics.h> #include <conio.h> #endif На этом коде проверял, компилируется в Dev-C++ без проблем, но есть баги с выводом текста. #ifdef __WIN32 #include "DGML_Init.h" #else #include <graphics.h> #include <conio.h> #endif #include <stdlib.h> #include <stdio.h> int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int midx, midy; /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ } midx = getmaxx() / 2; midy = getmaxy() / 2; setcolor(getmaxcolor()); line (0, 0, getmaxx(), getmaxy()); /* for centering screen messages */ settextjustify(CENTER_TEXT, CENTER_TEXT); /* output a message to the screen */ outtextxy(midx, midy, "press any key to clear the screen:"); /* wait for a key */ getch(); setbkcolor(5); /* clear the screen */ cleardevice(); /* output another message */ outtextxy(midx, midy, "press any key to quit:"); /* clean up */ getch(); closegraph(); return 0; } Текста "press any key to clear the screen:" на экране не видно при использовании DGML (что-то с цветами?). В BC 3.1 же всё выводится. |
Сообщ.
#65
,
|
|
|
Romtek
Текст пока еще не реализован. Функция outtextxy пока выводит текст только для отладки. А в списке функций она отмечена знаком +, потому что сама ф-ция реализована, нет кода по управлению цветом и шрифтами... P.S. В дальнейшем знаком + будут отмечаться функции, полностью показавшие идентичный тест. Добавлено Перечитал и понял, какой бред написал. В общем, Romtek, спасибо за поддержку в отлавливании багов. |
Сообщ.
#66
,
|
|
|
Для компиляции libdgml в Dev-Cpp нужно указать линкеру ключ
-lgdi32 Для компиляции dgmltest нужно указать линкеру ключи -lgdi32 -ldgml 2Der_Meister Я внёс маленькие поправки в имена файлов: system.cpp -> dgmlcore.cpp test.cpp -> dgmltest.cpp , добавил заголовок с __Win32, остального не касался. Прилагаю архив с исходниками для компиляции в Dev-C++ (тестировал в 4.9.9.2). Там всё готово для компиляции. Нужно только запустить сначала libdgml.dev и скомпилировать, потом тоже самое с dgmltest.dev. Прикреплённый файлdgml.rar (19.27 Кбайт, скачиваний: 266) |
Сообщ.
#67
,
|
|
|
Romtek
Ок, скоро обновлю дистрибутив и wiki. Поскольку многие хотят пощупать либу прямо сейчас, выкладываю примеры, которые она уже реально обрабатывает на 100%. Скачать здесь (550кб) Если какой-нибудь пример работает некорректно, сообищите. |
Сообщ.
#68
,
|
|
|
Ты только разложи бинарники и исходники отдельно, чтобы не мешать всё до кучи.
Проверю твои примеры в Dev-C++. Добавлено Пример getbkcolor_d.exe (DGML) выводит надпись на центрированную относительно экрана, а начинается вместо этого с центра экрана. Непорядок. Аналогично и getcolor_d.exe |
Сообщ.
#69
,
|
|
|
Цитата Romtek @ Пример getbkcolor_d.exe (DGML) выводит надпись на центрированную относительно экрана, а начинается вместо этого с центра экрана. Непорядок. Аналогично и getcolor_d.exe Надо надписи пока хоть как-то универсально реализовать, а потом уже со шрифтами париться... |
Сообщ.
#70
,
|
|
|
Компилирую исходники в Dev-C++.
arc.cpp - некорректная работа MoveTo? (прикреплённая картинка) getbkcolor.cpp - пустой экран и надписей не видать. getcolor.cpp - аналогично getfillpattern.cpp - не скомпилировался, выдаёт ошибку на строке getfillpattern(pattern); error: invalid conversion from `char*' to `char' Простой пример с выводом текста на экран тоже не работает - ничего не видно. Баги... Прикреплённый файлarc.PNG (0.54 Кбайт, скачиваний: 601) |
Сообщ.
#71
,
|
|
|
Romtek
А... Я ведь последн.. версию так и не выложил... Там arc работает. |
Сообщ.
#73
,
|
|
|
Такой пример не работает:
#ifdef __WIN32 #include "DGML_Init.h" #else #include <stdlib.h> #include <graphics.h> #include <conio.h> #include <stdio.h> #endif #include <string.h> int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int color, maxcolor, x, y; char colname[35]; char msg[80]; printf ("Color: %i", getcolor()); setcolor(1200); /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); /* an error occurred */ if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); /* terminate with an error code */ exit(1); } /* maximum color index supported */ maxcolor = getmaxcolor(); /* for centering text messages */ settextjustify(CENTER_TEXT, CENTER_TEXT); x = getmaxx() / 2; y = getmaxy() / 2; /* loop through the available colors */ for (color=1; color<=maxcolor; color++) { /* clear the screen */ cleardevice(); /* select a new background color */ setcolor(color); /* output a messsage */ sprintf(msg, "Color: %d", color); outtextxy(x, y, msg); getch(); } /* clean up */ closegraph(); return 0; } Добавлено Цитата Der_Meister @ Вот редиска! Я то проверял по версии 2.01! А... Я ведь последн.. версию так и не выложил... |
Сообщ.
#74
,
|
|
|
А почему не сделать эту либу кросс-платформенной, с помощью других известны либ?
SDL - http://www.libsdl.org Pixel Toaster - http://www.pixeltoaster.com/ ... Имхо, в таком случае, популярность DGML значительно возрастёт. |
Сообщ.
#75
,
|
|
|
Romtek
Насколько я помню в SDL простейший вывод пиксела выливается в манипуляцию с памятью... Ну это конечно решаемо, если более высокоуровневую обретку еще не выпустили... А более сепрьезная проблема - шрифты и заливки. Так что пока,я думаю, просто избавлюсь от большинства GDI-функций. (В частности заменить все ellipse, polygone, moveto одним setpixel) И в дальнейшем надо будем заменить лишь процедуру инициализации и несколько абстрактных функций. |
Сообщ.
#76
,
|
|
|
Цитата Der_Meister @ Так что пока,я думаю, просто избавлюсь от большинства GDI-функций. Мне кажется, что вызов GDI-функций более приемлем в данном случае, а твоя реализация с помощью setpixel только затруднит понимание и ухудшит общую производительность dgml. Верни лучше обратно, к вызову GDI. |
Сообщ.
#77
,
|
|
|
Der_Meister, если есть желание все делать через SetPixel, могу дать линк на сырцы LIBGRX. Там именно так, из-за чего ограничено использование. Там, кстати, был модуль симуляции Багландовского БЖИ.
Цитата Romtek @ ухудшит общую производительность dgml. А кого производительность интересует? В любом случае, по функционированию под Виндами "симулятора" БЖИ нельзя сложить впечатление о производительности на тех 486-х компах, на которых преподы будут проверять ДОСовскую версию... Имхо, эмуляция все равно будет быстрее. Особенно, если делать вывод через BackBuffer (если такое есть в DGML). |
Сообщ.
#78
,
|
|
|
barazuk
В написании библиотек нужно как можно больше придерживаться вызовов стандартных фунций, имхо. Чем больше будешь отклоняться, тем больше проблем будет в дальнейшем с совместимостью, читабельностью, отловом ошибок и так далее. В обшем, тему лучше подробнее обсудить с профессионалами в разделе Software Design |
Сообщ.
#79
,
|
|
|
Цитата Romtek @ больше придерживаться вызовов стандартных фунций Проблема в том, что они не всегда далают то же самое, что мы хотим проэмулировать... Цитата Romtek @ тем больше проблем будет в дальнейшем с совместимостью Наоборот. Если максимально делать через SetPixel (а вывод примитивов типа линий, кругов и т.д. через SetPixel уже давно реализован, многократно проверен тысячами пользователей и отлажен в GRX), то можно портировать под практически любой компилятор/ось. Достаточно изменить функцию окна и этот самый SetPixel. А производительность для эмуляции столь древней библиотеки, ИМХО, в списке приоритетов на последнем месте... |
Сообщ.
#80
,
|
|
|
Цитата barazuk @ Документацию просто надо читать...Проблема в том, что они не всегда далают то же самое, что мы хотим проэмулировать... Цитата barazuk @ Я предупредил, а вы - как хотите. Наоборот. |
Сообщ.
#81
,
|
|
|
Цитата Romtek @ Документацию просто надо читать... См. выше. Почитали документацию. Винда не умеет паттерновые линии толще одного пиксела рисовать. BGI - может. Дальше что? Рисуем через полигоны, или реализуем через SetPixel. Если достаточно большой процент функций придется рисовать так - так не проще сразу все? По крайней мере будем на 100% уверены, какая функция что делает. Вне зависимости от реализации ее системой. |
Сообщ.
#82
,
|
|
|
Цитата Romtek @ Документацию просто надо читать... А что толкуто?! Взять ту же функцию arc. Аналог из GDI зачем-то еще соединяет арку с местом, где находится перо (в этом ты недавно убедился). Так что arc реализован вручную. И гнаться за производительностью здесь как-то... |
Сообщ.
#83
,
|
|
|
Цитата Romtek @ Пример getbkcolor_d.exe (DGML) выводит надпись на центрированную относительно экрана, а начинается вместо этого с центра экрана. Непорядок. Аналогично и getcolor_d.exe fixed. Добавлено Реализованы getfillpattern setfillpattern |
Сообщ.
#84
,
|
|
|
Der_Meister, заставь работать пример из эмуляция BGI графики (сообщение #1149448) (работа с цветом).
|
Сообщ.
#85
,
|
|
|
тестовый пример:
Прикреплённый файлgetfillpattern.rar (45.33 Кбайт, скачиваний: 197) |
Сообщ.
#86
,
|
|
|
Цитата Romtek @ заставь работать пример из эмуляция BGI графики (сообщение #1149448) Заставил. Щас еще реализую ф-цию settextjustify. И 8-й цвет (dark gray) че-то соысем не видно.. Прикреплённый файлcolor.rar (26.12 Кбайт, скачиваний: 189) |
Сообщ.
#87
,
|
|
|
settextjustify частично реализован.
По вертикали надо выровнять по центру, а GDI выравнивает по базовой линии... Добавлено Выложен дистрибутив версии 0.02.62 Исправлено несколько багов. Реализовано несколько функций. Добавлены проекты для Dev-C++. Добавлено Так же обновлена wiki. (собственно ссылка на архив там ) Прикреплённый файлsettextjustify.rar (45.17 Кбайт, скачиваний: 216) |
Сообщ.
#88
,
|
|
|
Реализовать ("!" - в срочном порядке, "?" - заглушку?) :
! delay (sleep ?) ! randomize ? sound ? nosound ! getimage/putimage ! settextstyle getmodename #include <float.h> #include <graphics.h> #include <math.h> #include <dos.h> int main(void) { int errorcode, mode, maxcolor,maxx, maxy, ballsize; void *ball; int i, j; int gdriver = VGA; int gmode = 2; char msg[80]; /* initialize graphics mode */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); /* an error occurred */ if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); /* *terminate with an error code */ exit(1); } mode = getgraphmode(); printf(" %d is the current mode number.\n", mode); printf("%15s is the current graphics mode\n", getmodename(mode)); maxx=getmaxx(); printf("X max = %d\n", maxx); maxy=getmaxy(); printf("Y max = %d\n", maxy); maxcolor=getmaxcolor(); printf("This mode supports colors %d\n", maxcolor); printf("This driver supports modes 0..%d\n", getmaxmode()); printf("Press any key to continue"); getch(); /* loop through the available colors */ cleardevice(); j=0; for (i=0; i<=maxcolor; i++) { setfillstyle(SOLID_FILL,i); j=j+8; if (i==0) setcolor(15); else setcolor(i); sprintf(msg, "<---- Color number %d", i); bar (0,j,20,j+8); outtextxy(30,j, msg); } printf("\n\nPress any key to continue"); getch(); cleardevice(); ballsize = imagesize(0,0,10,10); /* get byte size of image */ if ((ball = malloc(ballsize)) == NULL) { closegraph(); printf("Error: not enough heap space. Aborting\n"); exit(1); } i=0; for (i=1; i<=maxcolor; i++) /*make 15 non-black balls */ { cleardevice(); setcolor(15); circle(5,5,5); /* draw a white circle */ setfillstyle(SOLID_FILL,i); floodfill(5,5,15); /*fill with color */ getimage(0,0,10,10, ball); cleardevice(); for (j=0;j<=(maxx-10);j=j+2) /*throw it across the screen */ { putimage(j, 50, ball, XOR_PUT); delay(2); putimage(j, 50, ball, XOR_PUT); } } cleardevice(); printf("\nThe graphics demo is done. Press any key to quit completely."); getch(); closegraph(); return 0; } Добавлено В файле graphics.cpp: заменить void lineto(int x, int y) на void DGML::lineto(int x, int y) |
Сообщ.
#89
,
|
|
|
Выкладывай сюда новые исходники!!!
|
Сообщ.
#90
,
|
|
|
delay+
sleep+ lineto+ arcsupport А они лежат здесь: http://www.sources.ru/wiki/doku.php?id=projects:dgml Добавлено sound nosound ^ заглушки Кстати, кто-нибудь знает, как юзать pc-спикер под виндой? Добавлено randomize+ |
Сообщ.
#91
,
|
|
|
Цитата Der_Meister @ Beep вроде. Кстати, кто-нибудь знает, как юзать pc-спикер под виндой? |
Сообщ.
#92
,
|
|
|
Цитата trainer @ Beep вроде Фига. Эта функция работает только под линейкой NT. Под 9х - выдает через звуковуху дефолтовый звук. Хотя люди как-то делают - см. ХамелеонКлок. Одно из двух - либо прямо драйвер зовут, либо сами через порты. Или какой-то другой недокументированный хитропопый трюк мелкософтов. |
Сообщ.
#93
,
|
|
|
Сейчас эмуляция BGI-графики реализована?
|
Сообщ.
#94
,
|
|
|
Цитата helli @ да, но не полностью. Смотри на странмчке в Wiki. Сейчас эмуляция BGI-графики реализована? |
Сообщ.
#95
,
|
|
|
Пока машины у меня нет, появится через недельку. Планирую заняться DGML вплотную.
|
Сообщ.
#96
,
|
|
|
Вот и я. Пойду разгребать исходники...
|
Сообщ.
#97
,
|
|
|
Функции slepp, sound и т.п. выносить в отдельный хидер? То есть чтоб так и было, как в оригинале:
#include <graphics.h> #include <dos.h> или все в graphics.h спихнуть? Добавлено Такой вопрос возник в связи с заголовком stdlib.h, который заменятьб нельзя //====================================================================================== // ИЗ DOS.H //====================================================================================== // приостанавливает выполнение программы на заданное количество миллисекунд void delay(unsigned milliseconds); // приостанавливает выполнение программы на заданное количество секунд void sleep(unsigned seconds); // включает PC-спикер на заданную частоту void sound(unsigned frequency); // выключает PC-спикер void nosound(void); //====================================================================================== // ИЗ STDLIB.H //====================================================================================== // инициализирует генератор случайных чисел void randomize(void); |
Сообщ.
#98
,
|
|
|
Реализую функцию sound через таймер, который с интервалом воспроизводит короткие звуковые сигналы. Однако появились траблы с тем, что графику-то юзер может не инициализировать, поэтому функция обработки сообщений недоступна.
Если посылать сообщения другой функции, надо в прогу втыкать цикл обработки сообщений: Цитата MSDN If your application creates a timer without specifying a window handle, your application must monitor the message queue for WM_TIMER messages and dispatch them to the appropriate window. Замкнутый круг... Добавлено // включает PC-спикер на заданную частоту void DGML::sound(unsigned frequency) { //звук не воспроизводится if (!DGML_Stuff::timer_id) { //создаем таймер, который будет петь DGML_Stuff::timer_id=SetTimer(NULL, 10,100, (TIMERPROC)DGML_Stuff::sound_handler); } } // выключает PC-спикер void DGML::nosound(void) { KillTimer(NULL,DGML_Stuff::timer_id); DGML_Stuff::timer_id=0; } //обработчик звука void CALLBACK DGML_Stuff::sound_handler(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime) { Beep(440, 1000); } Добавлено Реализовал через timeSetEvent. Получилось убого. Требует Winmm.lib, хрипит и ресурсы жрет понапрасну. Надо искать другое решение... Да и вообще что-то кроссплатформенное. |
Сообщ.
#99
,
|
|
|
Пожалуйста, напиши kbhit()
Я уверен, это несложно |
Сообщ.
#100
,
|
|
|
Цитата Der_Meister @ Да и вообще что-то кроссплатформенное. Это вряд ли. Разве что использовать сторонние библиотеки - напр. http://www.fmod.org - моя любимая, есть практически под все. А так - очевидно нужно мспользовать DirectSound - но я тут не гуру - не было времени разбираться, в итоге заюзал ФМОД как обертку. |
Сообщ.
#101
,
|
|
|
barazuk
fmod не держит pc speaker имхо. А может ну его, pc speaker, выводить через колонки? angrylion ок Добавлено А насчет хидеров что? |
Сообщ.
#102
,
|
|
|
Цитата Der_Meister @ fmod не держит pc speaker имхо Ну конечно, кому оно надо? Цитата Der_Meister @ А может ну его, pc speaker, выводить через колонки? А я по-другому и не мыслил. Все равно через спикер под 9х не получится и вообще не портабельно... |
Сообщ.
#103
,
|
|
|
Ладно, оставим пока этот вопрос... Щас пляски с бубмном в расшифровке хранения картинок в BGI.
Ведь на уровне памяти тоже картинки должны совпадать, не так ли? А то было бы совсем легко... |
Сообщ.
#104
,
|
|
|
Цитата Der_Meister @ Ладно, оставим пока этот вопрос... Щас пляски с бубмном в расшифровке хранения картинок в BGI. Когда-то расковыривал. Ничего особо сложного - но аппаратно-зависимое там все. Так что для VGA 0х13, для а-ля EGA 16 цветов и CGA-шных - все разные... Кстати, а нужно ли вообще этим заниматься (реализацией 1:1)? Главное, чтобы сохраняло/восстанавливало... |
Сообщ.
#105
,
|
|
|
Цитата barazuk @ Кстати, а нужно ли вообще этим заниматься (реализацией 1:1)? Главное, чтобы сохраняло/восстанавливало... Я тоже над этим думаю, вдруг кому-нибудь, вроде меня, понадобится вывести битовый образ в файл. Там интересно так... 1 пиксел весит 10 байт. 4 пиксела весят 10 байт. 5 пикселов - уже 18 вроде. Самое главное, BGI "портит" всю предоставленную ему память. То есть обнуляешь массив, а он вместо 1 пиксела еще 3 левых пишет и т.д. |
Сообщ.
#106
,
|
|
|
Цитата Der_Meister @ Там интересно так... 1 пиксел весит 10 байт. 4 пиксела весят 10 байт. 5 пикселов - уже 18 вроде. Самое главное, BGI "портит" всю предоставленную ему память. То есть обнуляешь массив, а он вместо 1 пиксела еще 3 левых пишет и т.д. Да ничего интересного. Первые два слова - ширина/высота. Вид "кодирования" не указан нигде. Потом - данные для 4-х битовых плоскостей. См. руководство по программированию EGA. (это что касается 16-тицветных режимов). Для 8-битных и выше - проще. |
Сообщ.
#107
,
|
|
|
Да все я понимаю. Просто ты поробуй. На самом деле не все так просто.
|
Сообщ.
#108
,
|
|
|
Цитата Der_Meister @ Просто ты поробуй. На самом деле не все так просто. Дык пробовал. У меня даже редактор когда-то давно под это дело был. Вернее, конвертор из БМП. Кстати, а как ты вообще себе это представляешь? Большая часть задачек великомудрыми преподами задается в 16 цветах. Установка такого режима под виндой... Гм... Проблематична. Если без извратов. Так смысл вообще с этим разбираться? |
Сообщ.
#109
,
|
|
|
Цитата barazuk @ Кстати, а как ты вообще себе это представляешь? Большая часть задачек великомудрыми преподами задается в 16 цветах. Установка такого режима под виндой... Гм... Проблематична. Если без извратов. Так смысл вообще с этим разбираться? Так я и не устанавливаю режим. Просто в массив по указателю должен писать то же самое, что и BGI |
Сообщ.
#110
,
|
|
|
Т.е. ты хочешь из 256- или более цветного режима брать картинку, уменьшать в ней количество цветов до 16, отслеживать изменения палитры?...
|
Сообщ.
#111
,
|
|
|
Да я вообще-то битовые образы не гружу.
Добавлено Понял, про что ты.... Зачем уменьшать кол-во цветов? Я ведь и так знаю каждый цвет. |
Сообщ.
#112
,
|
|
|
angrylion
Так kbhit имеется в conio.h По крайней мере в MSVS2003. Работает без проблем. |
Сообщ.
#113
,
|
|
|
Цитата Der_Meister @ Так kbhit имеется в conio.h По крайней мере в MSVS2003. Работает без проблем. Так то ж в консольных приблудах. Или? |
Сообщ.
#114
,
|
|
|
А для неконсольных есть getch, которая уже реализована, или опять переопределять...
Структура картинок BGI: [w][w][h][h][x][x][1-2][3-4][5-6][7-8] w-ширина h-высота x-хз че, походу пустота. На начальном этапе выделяется 10 байт. Если картинка не влазит, память увеличивается с шагом в 4 байта. Короче, ща ф-цию imagesize напишу... Добавлено +imagesize Целых 11 строк Добавлено Я почти разобрался. BGI еще и строки выравнивает зачем-то. То есть какую-то дрянь после каждой строки приписывает. size=imagesize(0,0,1,0); size=10 size=imagesize(0,0,0,1); size=14 size=imagesize(0,0,0,2); size=18 size=imagesize(0,0,9,9); size=86 //Однако 6+10*10/2=56, плюс выравнивание, итого 58 size=imagesize(0,0,99,58); size=58 Получается 86-58=28 "лишних" байт. То есть по всем видам по 3 байта на строку + выравнивание до 16 бит. P.S. Я чувствую себя мастером, выполняющим подделку... |
Сообщ.
#115
,
|
|
|
Моя гипотеза [дожил, в проганье гипотезы... , все-таки как-то шатко это все...] оказалась верна: выравнивание 3 байта. Если строка одна, то выравнивание 2 байта.
[w][w][h][h][bit line][alignment] [bit line][alignment] [bit line][alignment] [bit line][alignment] ................................. [bit line][alignment] Где-то ведь в мануале видел, что 10+4+4+4.... Не помню где. Добавлено Функцию совершенно переделал, а все равно 11 строк... |
Сообщ.
#116
,
|
|
|
Hi!
kbhit() из conio.h работает только в консольных Win32 прогах афаик. Так что в либе Der Meister'a нельзя пока написать чё-нить вроде: while(!kbhit()) //с getch так нифига не выйдет, она возвращает символ, и пока чё-нить на клавиатуре не нажмёшь, цикл не начнёт выполняться { SleepEx(100,FALSE); //для задержки на 100 мс в windows.h. cleardevice(); setcolor(rand()%15); outtextxy(rand()%640,rand()%480,"\052"); //рисуем на случайн.месте звёздочку } Это типа скринсейвер такой:) kbhit() есть в ещё одной реализации BGI на винде - WinBGI. Я просто посмотрел её исходник - вроде там всё просто. Исходник WinBGI - см. http://www.garret.ru/~knizhnik/winbgi.zip Ридми к WinBGI - см. http://www.garret.ru/~knizhnik/readme.txt P.S. Я вообще только начинаю кодить, так что если чё глупое сказал, извиняюсь. |
Сообщ.
#117
,
|
|
|
kbhit реализуемо через GetKeyboardState
|
Сообщ.
#118
,
|
|
|
Цитата trainer @ kbhit реализуемо через GetKeyboardState Само собой. Просто ДМ почему-то уверен, что kbhit работает в GUI-приложениях. Или имеет более приоритетные фичи для реализации. |
Сообщ.
#119
,
|
|
|
На мой вопрос так никто и не ответил....
Похоже файл придется назвать DGML.h, а в исходнике писать так: #ifdef _WINDOWS_ #include <dgml.h> #else #include <graphics.h> #include <dos.h> //etc. #endif |
Сообщ.
#120
,
|
|
|
Цитата Der_Meister @ А для неконсольных есть getch, которая уже реализована, или опять переопределять... Нет, знамо дело... В смысле, нету ее. Цитата Der_Meister @ На мой вопрос так никто и не ответил.... Народу, видать, по-барабану... Ты писАтель тут главный - тебе и решать... |
Сообщ.
#121
,
|
|
|
Инициализация самой библиотеки осуществляется, если она подключена, независимо от того, вызывались ее функции...
*kbhit реализована getch работает только в инициализированном графическом режиме из-за цикла обработки сообщений. Можно это обойти, создавая при инициализации окно 1х1 пиксел... Включение заголовков теперь выглядит так: #ifndef _BORLANDC_ #include "../dgml/dgml_init.h" #else #include <graphics.h> #include <conio.h> #include <dos.h> #endif Добавлено Цитата barazuk @ Народу, видать, по-барабану... Ты писАтель тут главный - тебе и решать... Решил. Стереть 3 строки никто не обломается, написать тоже... И вообще, лабу можно сдавать вместе с DGML-дефайнами. Кому какое дело до них? А на вопрос, зачем они нужно, отвечать "для отладки в нормальной среде разработки"... Кстати, я тут с удивлением обнаружил, что в bc3.1 не определен тип bool. Добавлено Цитата angrylion @ Так что в либе Der Meister'a нельзя пока написать чё-нить вроде: while(!kbhit()) //с getch так нифига не выйдет, она возвращает символ, и пока чё-нить на клавиатуре не нажмёшь, цикл не начнёт выполняться { SleepEx(100,FALSE); //для задержки на 100 мс в windows.h. cleardevice(); setcolor(rand()%15); outtextxy(rand()%640,rand()%480,"\052"); //рисуем на случайн.месте звёздочку } Теперь модно. И еще в DGML есть delay() - ожидание в мс и sleep() - в секундах. Сейчас залью последнюю версию... Добавлено Еще хорошая новость: уродский макрос #define getch DGML::_getch удален и больше никогда такого не будет. |
Сообщ.
#122
,
|
|
|
http://heavysoft.org/dwn/dgml/DGML_sources330.rar
В архиве только исходнике и список реализованных функций. Версия промежуточная, нестабильная. Дистрибутива к ней не будет... |
Сообщ.
#123
,
|
|
|
+ getarccoords
Добавлено + getfillsettings * textheight Добавлено + textheight + textwidth |
Сообщ.
#124
,
|
|
|
В очередной раз переписана getch.
На 100% стал работать пример closegraph. Исправлен баг в getpixel. Прикрепляю довольно интересный примерчик к getpixel. Прикреплённый файлgetpixel.rar (47.67 Кбайт, скачиваний: 209) |
Сообщ.
#125
,
|
|
|
Оказывается в bc структуры ВСЕГДА передаются по указателю .
+moveto *outtext +setfillstyle Добавлено Выложен дистрибутив версии 0.3.80 Вики обновлена (http://www.sources.ru/wiki/doku.php?id=projects:dgml) Полный дистрибутив (107 Кб) Сборник примеров использования DGML (1,69 Мб) P.S. А модеров тут нынче нет? А то я хотел пост к шапке прилепить... Добавлено Сборник примеров - исходник + бинарник BC3.1 + бинарник DGML. Примерами снабжены следующие функции: arc.cpp bar.cpp bar3d.cpp circle.cpp cleardevice.cpp closegraph.cpp drawpoly.cpp ellipse.cpp fillellipse.cpp fillpoly.cpp floodfill.cpp getarccoords.cpp getbkcolor.cpp getcolor.cpp getfillpattern.cpp getfillsettings.cpp getmaxcolors.cpp getmaxx.cpp getmaxy.cpp getpixel.cpp getx.cpp gety.cpp initgraph.cpp line.cpp linerel.cpp lineto.cpp moverel.cpp moveto.cpp putpixel.cpp rectangle.cpp setbkcolor.cpp setcolor.cpp setfillpattern.cpp setfillstyle.cpp settextjustify.cpp sleep.cpp textheight.cpp textwidth.cpp |
Сообщ.
#126
,
|
|
|
+sound
+nosound DGML обзавелась звуком. Благодаря barazuk'у. Именно его перу принадлежит основная функциональность файлов dgml_speaker.cpp и dgml_speaker.h Прикрепляю демонстрационный пример. Прикреплённый файлdelay.rar (24.65 Кбайт, скачиваний: 198) |
Сообщ.
#127
,
|
|
|
исходники версии 4.03
Добавлено Цитата ║/* Emits a 7-Hz tone for 10 seconds. ■ ║ ▒ ║ True story: 7 Hz is the resonant ▒ ║ frequency of a chicken's skull cavity. ▒ ║ This was determined empirically in ▒ ║ Australia, where a new factory ▒ ║ generating 7-Hz tones was located too ▒ ║ close to a chicken ranch: When the ▒ ║ factory started up, all the chickens ▒ ║ died. ▒ ║ ▒ ║ Your PC may not be able to emit a 7-Hz tone. */ Борландоский пример генерации частоты 7 герц, который, по заявлению разработчиков, убивает цыплят, мой спикер воспроизвести не смог. Прикреплённый файлDGML403.rar (19.23 Кбайт, скачиваний: 202) |
Сообщ.
#128
,
|
|
|
Простите за ламерство, а это все дело можно как-нибуть использовать в С#(например в виде подключенной dll-ки), и если да то как?
|
Сообщ.
#129
,
|
|
|
Цитата GazOn @ из C# нельзя. Из MC++ можно. Из C# можно использовать либо dll на чистом C (DllImport), либо регистрировать dll на C++ как COM библиотеку. |
Сообщ.
#130
,
|
|
|
подскажите начинающему, почему у меня не работает DGML??? я скопировал graphics.h и DGML.lib в соответственные папки, а после того, как начинаю компилировать пример из архива "examples_380" выдается ошибка "[Linker Error] Unresolved external '_main' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\C0X32.OBJ" что мне надо сделать??? подскажите пожалуйста бедному студенту!
|
Сообщ.
#131
,
|
|
|
susanin
Попробуй скачать дистрибутив http://heavysoft.org/dwn/dgml/distr_262.rar Там в папке example\BCB6 лежит файл проекта для Borland Builder'a с примером, уже настроенный для работы с DGML. Скорее всего, в проекте не подключена DGML.lib (у меня билдера нет, точную инструкцию дать не могу...) |
Сообщ.
#132
,
|
|
|
Цитата De_________ @ Попробуй скачать дистрибутив http://heavysoft.org/dwn/dgml/distr_262.rar Там в папке example\BCB6 лежит файл проекта для Borland Builder'a с примером, уже настроенный для работы с DGML. Скорее всего, в проекте не подключена DGML.lib (у меня билдера нет, точную инструкцию дать не могу...) я скачал, но при открытии этого файла выдается такая ошибка "the project's target could not be found in file Test.cpp. The project's target is commonly WinMain or DllEntryPoint." помогите мне пожалуйста настроить DGML!!! я уже не знаю как мне быть!! |
Сообщ.
#133
,
|
|
|
susanin
Попытались мы с Nich'ем скомпилировать под билдером. Выяснилась куча нехороших вещей о БЦБ. Например, в нем объявляются функции random и randomize, которых в стандарте нет. Так что версия для борланда откладывается. Я бы посоветовал вообще перейти на нормальный компилятор , но все-таки через пару дней, надеюсь, версия для BCB будет собрана. |
Сообщ.
#134
,
|
|
|
Поставил билдер. Библиотека собирается. Пример тоже компилируется, собирается. Только не работает. Черный экран и все.
А вот со старой пикселы выводятся, но delay, getch и keyhit там не определены Прикреплённый файлDGML_403_BCB.rar (192.61 Кбайт, скачиваний: 208) |
Сообщ.
#135
,
|
|
|
Цитата De_________ @ Ну наконец-то вы узнаете, что в C/C++ есть понятие "условная компиляция" Выяснилась куча нехороших вещей о БЦБ. Например, в нем объявляются функции random и randomize, которых в стандарте нет. |
Сообщ.
#136
,
|
|
|
trainer
Об этом мы давно знаем. Вот только уж сильно пошло получается... |
Сообщ.
#137
,
|
|
|
Рекомендую:
1) выкинуть отовсюду #pragma comment(lib, "DGML.lib") либо, по-крайней мере, сделать условно-компилируемой 2) перейти на makefile'ы. Это под именем makefile.bcb засунуть в папку src # Makefile for DGML # Borland C++ for Win32 # # Usage: # make # or # make additional_parameters # where additional_parameters are pairs param=value delimited by spaces # additional parameters: # DEBUG - build debug version # ARFLAGS - archiver(TLIB) flags # CFLAGS - C++-compiler flags # YFLAGS - YACC flags(not used, reserved) # LFLAGS - LEX flags(not used, reserved) # RCFLAG - resource script compiler flags # BINDIR - path to bin directory(where will be placed obj's, lib and exe) # BCB - path to Borland C++ Builder root directory # ------------ Borland C++ ------------ # variables # tools CC = bcc32.exe AS = bcc32.exe RC = brcc32.exe LD = ilink32.exe AR = tlib.exe YACC = bison.exe LEX = flex.exe LN = copy RM = -del ASFLAGS = !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif !if !$d(DEBUG) # missed DEBUG variable means no debug DEBUG = 0 !endif !if !$d(CFLAGS) !if $(DEBUG) CFLAGS = -a -d -k- -ff -fp -WM -D_DEBUG -Od -v !else CFLAGS = -a -d -k- -ff -fp -O2 -WM -w-csu !endif !endif !if !$d(ARFLAGS) ARFLAGS = /P128 /C /u /a !endif !if !$d(LDFLAGS) !if $(DEBUG) LDFLAGS = /Tpe /ap /Gn /v /x c0d32.obj sysinit.obj !else LDFLAGS = /Tpe /ap /Gn /x c0w32.obj sysinit.obj !endif !endif !if !$d(YFLAGS) YFLAGS = -vdyl !endif !if !$d(LFLAGS) LFLAGS = -ist !endif !if !$d(RCFLAGS) RCFLAGS = -w32 !endif !if !$d(BINDIR) BINDIR = ..\lib\bcb !endif O = obj DEFS = LIBS = cw32mt.lib import32.lib rtl.lib SRCDIR = src INCDIR = ..\include TESTSRCDIR = ..\example LIBDGML = $(BINDIR)\libdgml.lib TESTEXE = $(BINDIR)\dgmltest.exe BCB_LIBPATH = $(BCB)\lib;$(BCB)\lib\PSdk BCB_OBJPATH = $(BCB)\lib;$(BCB)\lib\obj LIB_OBJS = $(BINDIR)\dgml.$(O) $(BINDIR)\dgml_error.$(O) $(BINDIR)\dgmlcore.$(O) \ $(BINDIR)\graphics.$(O) $(BINDIR)\input.$(O) LIB_OBJPS = +$(BINDIR)\dgml.$(O) +$(BINDIR)\dgml_error.$(O) +$(BINDIR)\dgmlcore.$(O) \ +$(BINDIR)\graphics.$(O) +$(BINDIR)\input.$(O) # targets all : $(LIBDGML) bindir_exist : if not exist $(BINDIR)\NUL mkdir $(BINDIR) {$(SRCDIR)}.cpp{$(BINDIR)}.$(O) : $(CC) -c -I"$(INCDIR)" -I"$(SRCDIR)" $(DEFS) -o$@ $(CFLAGS) $< $(LIBDGML) : bindir_exist $(LIB_OBJS) $(RM) $(LIBDGML) $(AR) $(LIBDGML) $(ARFLAGS) $(LIB_OBJPS) $(TESTEXE) : $(TESTSRCDIR)\dgmltest.cpp $(LIBDGML) $(CC) -I"$(INCDIR)" -I"$(SRCDIR)" -e$< $(TESTSRCDIR)\dgmltest.cpp $(LIBS) $(LIBDGML) clean : $(RM) $(BINDIR)\*.obj $(RM) $(BINDIR)\*.lib $(RM) $(BINDIR)\*.tds $(RM) $(BINDIR)\*.exe test : bindir_exist $(TESTEXE) rebuild : clean all @echo off rem set variable BCB to path to Borland C++ Builder root directory on your PC set BCB=c:\programmer\CBuilder6 make -f makefile.bcb rebuild >dgml_bcb.lst make -f makefile.bcb test >dgml_bcb_test.lst Добавлено Кстати, откомпилировал я пример в BCB6(через этот makefile) - работает Добавлено Да, #include <graphics.h> пришлось перенести в конец списка. |
Сообщ.
#138
,
|
|
|
Цитата trainer @ Кстати, откомпилировал я пример в BCB6(через этот makefile) Хм. А а я че-то туплю... Цитата trainer @ set BCB=c:\programmer\CBuilder6 Это зачем? Я так понимаю, в бате надо прописать "set PATH=C:\Program Files\Borland\CBuilder6\Bin\", чтобы make находился? Тогда появляются баги... Если прописать напрямую: Цитата C:\"Program Files"\Borland\CBuilder6\Bin\make -f makefile.bcb rebuild >dgml_bcb.lst не может найти makefile Цитата MAKE Version 5.2 Copyright © 1987, 2000 Borland Fatal: Unable to open makefile Добавлено доперло зачем BCB в environment Добавлено Цитата MAKE Version 5.2 Copyright © 1987, 2000 Borland Fatal: Unable to open makefile |
Сообщ.
#139
,
|
|
|
Запускаешь откуда и как?
Добавлено Этот set BCB=... в принципе не нужен. Так, на всякий случай. |
Сообщ.
#140
,
|
|
|
Из cmd. Текущая директория - та, в которой все исходники и мейкфайл.
|
Сообщ.
#141
,
|
|
|
У makefile'а какое имя?
|
Сообщ.
#142
,
|
|
|
Цитата trainer @ У makefile'а какое имя? makefile.bcb |
Сообщ.
#143
,
|
|
|
"- По колесу стучал?
- Да. - Под капот заглядывал? - Да. - Ну тогда не знаю." Добавлено Может где в имени латинскую букву на кириллическую заменил? Добавлено Да, на всякий случай - этот makefile.bcb надо положить туда же, где лежит твой libdgml.bpr Но к данной проблеме это отношения не имеет. У тебя make почему-то не находит этот makefile.bcb(если ты правильно указал его имя в командной строке/bat-файле) |
Сообщ.
#144
,
|
|
|
Цитата trainer @ где лежит твой libdgml.bpr А проект что ли нужен?? Я-то думал, раз makefile - то проект вообще не нужен... |
Сообщ.
#145
,
|
|
|
Нет, .bpr не нужен. makefile доолжен лежать в определенном месте.
Вечером сгруппирую и выложу откорректированные твои исходники и makefile'ы для BCB и MSVC |
Сообщ.
#146
,
|
|
|
Цитата trainer @ Вечером сгруппирую и выложу откорректированные твои исходники и makefile'ы для BCB и MSVC thanx! |
Сообщ.
#147
,
|
|
|
Забыл я на работе makefile для MSVC. Так что пока только для BCB. Для MSVC - в следующий раз. А там, может, и для MinGW сделаю.
Прикреплённый файлlibdgml_0.2_src.zip (38.62 Кбайт, скачиваний: 194) |
Сообщ.
#148
,
|
|
|
trainer
Ну теперь ясно, почему у тебя пример работает. Версию дистрибутива древнюю взял. Вот последняя версия с измененным makefil'ом. Осталось выяснить, почему пикселы в примере под BCB не рисуются... Добавлено Прикрепить не могу, так что скачиваем здесь: http://heavysoft.org/dwn/dgml/dgml413.rar Прикреплённый файлav_21324.gif (8.08 Кбайт, скачиваний: 543) |
Сообщ.
#149
,
|
|
|
люди! почему у меня нифига не работает??? как запускать этот DGML????? напишите подробно если можно, какое приложение создавать надо, чтоб работала графика, потому что у меня даже примеры из скаченного архива не работаеют!!!
|
Сообщ.
#150
,
|
|
|
susanin
Скачивай рабочий проект для BCB trainer В BCB не работает инициализация библиотеки. В dgml.h есть строки: #ifndef __DGML_H__ class DGML_Stuff { public: DGML_Stuff(void); ~DGML_Stuff(void); }; DGML_Stuff initializer; #endif То есть создается один объект, который нигде не используется. Констурктор выглядит так: //инициализируем систему DGML при старте DGML_Stuff::DGML_Stuff(void) { DGML_Stuff::end_point.x=DGML_WIDTH-1; DGML_Stuff::end_point.y=DGML_HEIGHT-1; DGML_Stuff::init_colors(); DGML_Stuff::init_patterns(); } То есть в MSVS это прекрасно работает, объект создается, библиотека инициализируется. В BCB - нет. Так что временно инициализация опять засунута в ф-цию initgraph. Еще в BCB проблемы со звуком. библиотеку он собирает даже не спрашивая winmm.lib, хотя должен. Зато при вызове ф-ции sound просто вылетает. линковка winmm.lib ничего не меняет. |
Сообщ.
#151
,
|
|
|
Цитата Der_Meister @ Ну уж какая была, ту и взял.Версию дистрибутива древнюю взял. Да, ты скажи, как у тебя вообще dgmltest.cpp компилируется? Добавлено И еще, я не понял, в чем сермяжная правда такой конструкции? #ifndef __DGML_H__ #define __DGML_H__ ... #ifndef __DGML_H__ class DGML_Stuff { public: DGML_Stuff(void); ~DGML_Stuff(void); }; DGML_Stuff initializer; #endif ... #endif |
Сообщ.
#152
,
|
|
|
Кстати, у меня и под BCB6 и под MSVC7.1 dgmltest просто черное окно. Ничего не пишет.
Добавлено Решение таково: в конец файла dgml_stuff.cpp добавить строку DGML_Stuff initializer; Добавлено P.S. Обязательно оставляй в конце файла пустую строку - не всем компиляторам нравится завершение файла непустой строкой. |
Сообщ.
#153
,
|
|
|
sound, кстати, тоже работает.
|
Сообщ.
#154
,
|
|
|
Цитата trainer @ И еще, я не понял, в чем сермяжная правда такой конструкции? Блин, опять баг из старого хидера.. Должно быть: #ifndef __DGML_H__ #define __DGML_H__ ... #ifndef __DGML_STUFF_H__ class DGML_Stuff { public: DGML_Stuff(void); ~DGML_Stuff(void); }; DGML_Stuff initializer; #endif ... #endif Цитата trainer @ Кстати, у меня и под BCB6 и под MSVC7.1 dgmltest просто черное окно. Ничего не пишет. А после добавления Цитата trainer @ в конец файла dgml_stuff.cpp добавить строку заработало? |
Сообщ.
#155
,
|
|
|
Цитата Der_Meister @ да. А куда же оно денется? заработало? |
Сообщ.
#156
,
|
|
|
Цитата trainer @ sound, кстати, тоже работает. Без бубна? Вот собранный мной exe, который вылетает. Может только на моей машине? Прикреплённый файлdgmltest.exe.jpg (72.5 Кбайт, скачиваний: 420) |
Сообщ.
#157
,
|
|
|
Цитата Der_Meister @ и без бубна и без плясок. Без бубна? Кстати, и в MinGW собирается и работает. Только makefile для MinGW мне не нравится. Что-то я не могу его заставить искать его же библиотеки libgdi32.a и libwinmm.a. Пришлось явно указать их местоположение. Цитата Der_Meister @ МожетВот собранный мной exe, который вылетает. Может только на моей машине? Цитата Der_Meister @ ? Блин, опять баг из старого хидера.. |
Сообщ.
#158
,
|
|
|
Компилировать:
Для Borland C++ Builder: mk bcb Для Microsoft Visual C++.NEt 2003: mk vc71 Под MSVC6 с оригинальным Platform SDK не компилируется. Прикреплённый файлlibdgml_src.zip (45.17 Кбайт, скачиваний: 668) |
Сообщ.
#159
,
|
|
|
В общем дело вот в чем... скачал с сайта архивы с полным дистрибутивом... файла graphics.h там нету... я хочу на borland 6 рисовать Dos Graphics Migration Library... подскажите
|
Сообщ.
#160
,
|
|
|
Dgedit
http://forum.sources.ru/index.php?act=Atta...post&id=1307788 Вот это качаешь. Там есть файл проекта - должен работать. Если нет - mk.bat 100% работоспособен. |
Сообщ.
#161
,
|
|
|
скачал... расспаковал... открываю прокт Борланд пишет The project's target could not be found in file DGML.cpp. The project's target is commonly WinMain or DllEntryPoint.... a mk.bat ругается, что любая функция какую он бы ни выполнял не является внутренней или внешней...
|
Сообщ.
#162
,
|
|
|
Dgedit
Тогда вот этот: http://heavysoft.org/dwn/dgml/421BCB.rar |
Сообщ.
#163
,
|
|
|
Проект запустился... в графический режим перешел, но сразу же вышел, ничего кроме мерцания экрана не было. в программе показывает на строку if (color == getpixel(x, y)) и ругается на Comparing signed and unsigned values...
|
Сообщ.
#164
,
|
|
|
Цитата Чтобы использовать DGML с другим компилятором, вы должны перекомпилировать библиотеку и собрать ее в static library, которую затем будете подключать. А как её перекомпилировать и собрать для Dev C++? |
Сообщ.
#165
,
|
|
|
Цитата DFooz @ Смотри эмуляция BGI графики (сообщение #1149201), только там старая версия dgml. А как её перекомпилировать и собрать для Dev C++? |
Сообщ.
#166
,
|
|
|
спасибо. Если чисто код DGMLTEST.CPP пробую запустить, то ничего не работает. А если запустить через проект dgmltest.dev, то всё работает. Получается, обязательно надо проект создавать?
А если для новой, как её скомпилировать? Создать новый проект и все исходники туда кинуть? У меня 10 ошибок выдал. |
Сообщ.
#167
,
|
|
|
Цитата DFooz @ А если для новой, как её скомпилировать? Создать новый проект и все исходники туда кинуть? У меня 10 ошибок выдал. Надо библиотеки подключать. Цитата Цитата Romtek @ Для компиляции libdgml в Dev-Cpp нужно указать линкеру ключ -lgdi32 Для компиляции dgmltest нужно указать линкеру ключи -lgdi32 -ldgml То есть все из папки src - это библиотека. А gdmltest.cpp - это уже пример, к нему надо подключать DGML (-lgml) |
Сообщ.
#168
,
|
|
|
Без скомпилированной библиотеки программа-тест работать не будет. Поэтому я всё собрал в проект .dev
|
Сообщ.
#169
,
|
|
|
Der_Meister
В новой версии у меня не компилируется пример из-за конфликта с getch() из conio.h. Придумай решение проблемы. Проверял в Dev-C++. Добавлено Оказывается нужно было закомментировать строчку #include <conio.h.h> А ещё нужно то же самое сделать и с graphics.h. Отсюда следующий вопрос: об этом догадается программист или его таки предупредить лучше о возможных косяках при компиляции? Нужны также imagesize, moveto, getche. А что нужно подключать для sound, delay, random ? |
Сообщ.
#170
,
|
|
|
Цитата Romtek @ Отсюда следующий вопрос: об этом догадается программист или его таки предупредить лучше о возможных косяках при компиляции? Пока не могу проверить... А эти строки вообще нужны? То есть в MSVS с ними идет? Цитата Romtek @ А что нужно подключать для sound, delay, random ? Для sound нужна winmm.lib, стандартная мультимедиа подсистема винды. А чтобы использовать их в преокте нужен один dgml.h |
Сообщ.
#171
,
|
|
|
settextjustify, setbkcolor тоже не определены.
В общем, что ни программа, то ошибки из-за неподдерживаемых функций. Добавлено Цитата Der_Meister @ У меня не уставнолена студия, есть только Dev-C++. То есть в MSVS с ними идет? |
Сообщ.
#172
,
|
|
|
не могли бы вы пожалуйста подробнее написать, куда, ггде, что вставлять и писать
Создаю новый проект в ДЕВс++, добавляю все файлы из папки src. В папку DEVCpp\include копирую файлы "dgml_error.h" "dgml.h" "dgml_stuff.h" В Tool\Compiler options\compiler ставлю обе галки у компилера и линкера, записал в них, что в кавычках "-lgdi32 -ldgml" ЧТо ещё надо сделать? |
Сообщ.
#173
,
|
|
|
Цитата DFooz @ не могли бы вы пожалуйста подробнее написать, куда, ггде, что вставлять и писать Вариант №1: использовать статическую библиотеку (libdgml.a, 1-й проект) и потом подключать её в проект тестируемой программы (2-й проект). Для статической библиотеки нужно при создании проекта включить в него все cpp, затем в опциях проекта указать в параметрах Include файлов ключ "-lgdi32" (без кавычек), скомпилировать. Должен создаться файл libdgml.a в папке исходников (если не указать другого пути). Для проекта добавить всего один файл-код BGI cpp-программы, указать в окошко Include строку "-lgdi32 -ldgml" (без кавычек), скомпилировать. Вариант №2: всё в одном проекте (код DGML+код BGI). Указывать только "-lgdi32" (без кавычек), скомпилировать. Заодно выбрать генерацию GUI программы. Надеюсь, ничего не упустил. |
Сообщ.
#174
,
|
|
|
Цитата Для статической библиотеки нужно при создании проекта включить в него все cpp, затем в опциях проекта указать в параметрах Include файлов ключ "-lgdi32" (без кавычек) Создал проект Win32 Static Lib в опциях проекта в закладке parameters\linker\ написал "-lgdi32". Т.е. всё правильно сделал, да? Но при компиляции он ошибку выдаёт в файле DGML_Error.cpp: [Warning] no new line at the end of file In constructor 'DGML_Error::DGML_Error()' Дистрибутив 0.380 |
Сообщ.
#175
,
|
|
|
Warnings это некритичные для компиляции сообщения. Хотя trainer уже говорил об этом, изменений пока не видно.
Надо всего лишь добавить пустую строку в конце файла. Файл создаётся? Скопируй сюда сообщения компилятора. |
Сообщ.
#176
,
|
|
|
спасибо, пустые строки вставил.
Теперь осталось решит это dgml_error.cpp In constructor `DGML_Error::DGML_Error()': dgml_error.cpp `destroy_window' is not a member of `DGML_Stuff' dgml_error.cpp In constructor `DGML_Error::DGML_Error(const char*)': dgml_error.cpp `destroy_window' is not a member of `DGML_Stuff' dgml_error.cpp In constructor `DGML_Error::DGML_Error(const std::string&)': dgml_error.cpp In constructor `DGML_Error::DGML_Error(const std::string&)': dgml_error.cpp `destroy_window' is not a member of `DGML_Stuff' Makefile.win [Build Error] [dgml_error.o] Error 1 Нет, файл не создаётся, только dgml_core.o и Makefile.win |
Сообщ.
#177
,
|
|
|
Цитата DFooz @ Что за дистрибутив такой? Скачай последнюю версию DGML с сайта. Дистрибутив 0.380 |
Сообщ.
#178
,
|
|
|
это и есть последняя 0.03.80
|
Сообщ.
#179
,
|
|
|
DFooz, покажи свою BGI программу, на которой тестируешь (прикрепи архив к сообщению).
Вот мои настройки проекта: Прикреплённый файлdev_screenshots.zip (33.72 Кбайт, скачиваний: 189) |
Сообщ.
#180
,
|
|
|
у меня сами библиотеки не создаются
Прикреплённый файлsrc.zip (18.85 Кбайт, скачиваний: 191) |
Сообщ.
#181
,
|
|
|
Люди, я вообще реализацию bgi пишу с начала года (для использования для обучения на первом курсе. собственно, со следующего полугодия библиотека будет использоваться в моём ВУЗе). Там уже реализованы все graphics.h функции + несколько прикольных фич
1) опционально RGB - mode - не 16 цетов а полная цветовая паллитра 2) опционально полноэкранный режим 3) опционально показывает второе окно, в котором всегда отображается "невидимая страница". удобна при отладке программы с двойной буферизацией. 4) режимы 800x600, 1024x767 основная фича библиотеки - что во время отладки окошко с графикой всё равно перерисовывается правильно, не затирается. (без лишней скромности скажу, это решалось нетривиально . реализованы по-моему, все функции из graphics.h + дополнения для работы с мышкой/клавой. сайт : http://sourceforge.net/projects/openbgi. собственно странички нет, только стандартный интерфейс sourceforge (там лежат исходники + несколько примеров). Если кто хочет - прошу присоединяться к проекту, по-хорошему нужно всё переписывать, по причине страшнного кода. Пожелания и сообщения о багах приветствуются Работает под MSVC6-2005, mingw |
Сообщ.
#182
,
|
|
|
theos, сложно у тебя, да и зависит от платформы Windows.
Я бы использовал какую-то другую open-source библиотеку, независимую от платформы. Как правило, такие даже реализованы проще. А страничка http://openbgi.sourceforge.net/ чего пустует? Чёркни хоть пару строк что и как. Вообще, документация нужна хоть минимальная. |
Сообщ.
#183
,
|
|
|
1) зависит от платформы - так естественно, нужно писать принципиально разнае реализации под WinAPI(GDI) и под XWindow.
а вообще я писал, что код лчше переписать. можно было бы сделать его чуточку переноимее.(SDL, между прочем, сама посебе не переносима, просто реализация есть под разные платформы.) 2) сложно - а вы попробуйте реализовать проще! что бы обязательно на процессах, т.к. VS не умеет один поток отлаживать, в то время как другой будет работать. 3) с документацие и страничкой - действительно беда, времени на них пока не хватает. Это библиотека не для серьёзных проектов - медленновата(по определению из-за двухпроцессности), да и архаизм этот grphics.h. просто для людей(учащихся) что бы ни счем не заморачиваться (opengl, winapi) и что б отладка нормальная была - это imho неплохой вариант. |
Сообщ.
#184
,
|
|
|
Привет всем заинтересованным в этой теме! Поздравляю вас с событием - DGML не дожил до первого релиза, но вместо этого идет работа над новой версией DGML...
Библиотека написана на SDL. На выходе получается DGML.dll (под Windows) или DGML.so (под UNIX). Текущая версия 2.0.3.64. Тестировалась на Visual C++ 2005, Delphi 6 и подключалась даже к MASM32. Под *BSD/Linux пока не тестировалась. Реализованы следующие функции: Цитата + готово * частично реализовано - только заглушка CONIO.H * clrscr * getch * kbhit DOS.H + delay + sleep - sound - nosound GRAPHICS.H + arc + bar + bar3d + circle + cleardevice + clearviewport + closegraph + detectgraph + drawpoly + ellipse + fillellipse * fillpoly + floodfill + getarccoords + getaspectratio + getbkcolor + getcolor + getdefaultpalette + getdrivername + getfillpattern + getfillsettings + getgraphmode + getimage + getlinesettings + getmaxcolor + getmaxmode + getmaxx + getmaxy + getmodename + getmoderange + getpixel + getpalette + getpalettesize + gettextsettings + getviewsettings + getx + gety + graphdefaults - grapherrormsg - graphresult + imagesize + initgraph + installuserdriver + installuserfont + line + linerel + lineto + moverel + moveto * outtext * outtextxy + pieslice + putimage + putpixel + rectangle + registerbgidriver + registerfarbgidriver + restorecrtmode + sector + setactivepage + setallpalette + setaspectratio + setbkcolor + setcolor + setfillpattern + setfillstyle + setgraphbufsize + setgraphmode + setlinestyle + setpalette + setrgbpalette + settextjustify + settextstyle + setusercharsize + setviewport + setvisualpage + setwritemode + textheight + textwidth STDLIB.H + random + randomize То есть работает вся графическая подсистема с некоторыми исключениями: - floodfill некорректно обрабатывает некоторые многоугольники - outtext выводит только однострочный тект и только по горизонтали - поддерживается только растровый шрифт по умолчанию, векторные не поддерживаются Все функции реализованы программно и очень медленно. Однако тестировалось на машинке с Pentium III M 600Mhz и отрисовывается терпимо по времени. Под Borland Delphi 6 все жутко тормозит. Ниже есть ссылка на скомпилированные примеры. Для их запуска надо в папку поместить файлы DGML.dll и SDL. SDL я использовал старенькую, 1.2.9, ссылка на длл тоже есть. Ссылки для скачивания: DGML 2.0.3.64 - исходники, заголовочные файлы и бинарник под Win32 Скомпилированные примеры для DGML на Си и Паскале SDL.dll Жду ваших комментариев... |
Сообщ.
#185
,
|
|
|
Поправь первый пост, чтоб понятно было что такое "DGML", вдруг мне тоже нужно а все читать ломает
|
Сообщ.
#186
,
|
|
|
MeG
У меня нет прав редактировать первый пост... DGML - Dos Graphics Migration Library. Она позволяет компилировать программы, с использованием графического интерфейса BGI современными компиляторами. Забыл сказать, что на поддержка Delphi весьма условна и многие примеры не работают... |
Сообщ.
#187
,
|
|
|
Der_Meister, а чего поддержку BGI-фонтов не сделал? Без них как то ни туда, ни сюда
|
Сообщ.
#188
,
|
|
|
AndNot
Сейчас скачал описаниние форматов CHR-шрифтов. Возможно, скоро появится их поддержка... |
Сообщ.
#189
,
|
|
|
Да я тебе и так могу рассказать их формат Могу даже примерчик кинуть, на Паскале и на Асме Сам писал сто лет назад, ничего сложного там нет, формат примитивнейший.
|
Сообщ.
#190
,
|
|
|
AndNot
Спасибо, я уже реализовал загрузку и вывод штриховых шрифтов... Осталось только корректный вывод многострочного и вертикального текста сделать... |
Сообщ.
#191
,
|
|
|
закинул lib и dll в LIB, h в INCLUDE, компилил в билдере, в vc 2005 express, в devc(ключ указывал), а вот такая гадость все равно(VC):
... main.obj : error LNK2028: unresolved token (0A00032B) "extern "C" int __stdcall random(int)" (?random@@$$J14YGHH@Z) referenced in function "void __cdecl changecolors(void)" (?changecolors@@$$FYAXXZ) main.obj : error LNK2028: unresolved token (0A00032C) "extern "C" void __stdcall initgraph(int *,int *,char const *)" (?initgraph@@$$J212YGXPAH0PBD@Z) referenced in function "void __cdecl initgraphicmode(void)" (?initgraphicmode@@$$FYAXXZ) main.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall getch(void)" (?getch@@$$J10YGHXZ) referenced in function "void __cdecl initgraphicmode(void)" (?initgraphicmode@@$$FYAXXZ) main.obj : error LNK2019: unresolved external symbol "extern "C" char * __stdcall grapherrormsg(int)" (?grapherrormsg@@$$J14YGPADH@Z) referenced in function "void __cdecl initgraphicmode(void)" (?initgraphicmode@@$$FYAXXZ) ... и так далее что я делаю не так? |
Сообщ.
#192
,
|
|
|
oldsoldier
А просто проект из папки projects пробовал запускать? Похоже библиотека не подключена. В VC2005 в параметрах проекта (правой на проекте в solution explorer -> properties) в разделе linker -> input в поле additional dependencies надо написать 'dgml.lib'. Либо в начале файла main.cpp написать '#pragma comment(lib, "dgml.lib")'. |
Сообщ.
#193
,
|
|
|
Выкладываю новую версию - 2.0.5.31. В ней полностью реализована поддержка строковых шрифтов, а так же исправлены некоторые недочеты.
http://schtudent.ru/file.php?fid=661 oldsoldier На всякий случай выкладываю описание создания проекта в vc2005 со скриншотами. http://schtudent.ru/file.php?fid=662 |
Сообщ.
#194
,
|
|
|
Под Open Watcom нет варианта?
|
Сообщ.
#195
,
|
|
|
Оззя
Нет. Но я думаю сложностей в компиляции под него быть не должно, достаточно иметь библиотеки импорта SDL... Попробую достать ватком и проверить сам... |
Сообщ.
#196
,
|
|
|
Цитата Der_Meister @ Оззя Нет. Но я думаю сложностей в компиляции под него быть не должно, достаточно иметь библиотеки импорта SDL... Попробую достать ватком и проверить сам... Был бы очень признателен. |
Сообщ.
#197
,
|
|
|
я все сделал по туториалу. скомпилилось, но дальше никакой реакции не было. и почему-то не компилилось "в режиме окна" . (//#define DGML_IN_WINDOW )
могу прислать проект |
Сообщ.
#198
,
|
|
|
Цитата oldsoldier @ "в режиме окна" . (//#define DGML_IN_WINDOW ) Этой строки в новой DGML вообще-то нет! Она была только в старой версии. В новой для того, чтобы инициализировать графику в окне нужно написать: initgraph(&driver, &mode, "-w"); Надеюсь версия DGML у тебя не ниже, чем 2.0.3.64? В 184 посте (http://forum.sources.ru/index.php?showtopic=127641&st=180#) ссылка на нее... |
Сообщ.
#199
,
|
|
|
да, последняя версия. после запуска проекта выходит только меню, очень медленно прорисовываясь, и все. на клавиши реакций нет
Добавлено ))) проект запустился. но все очень медленно. вариант отпадает(. придется показывать на turbo c ) Добавлено DGML Release 2.0.5.31: //заставим выводить в окно //раскомментируйте эту строчку, чтобы не менять графический режим #ifdef _DEBUG //#define DGML_IN_WINDOW #endif вот эти строки |
Сообщ.
#200
,
|
|
|
oldsoldier
Ясно. А пример можно использования? (сам исходный код) У меня тестова машина: Pentium III 600 MHz, 192 Mb RAM, 4Mb Video. |
Сообщ.
#201
,
|
|
|
Оззя
Наконец-то руки дошли... Скомпилировал и саму библиотеку, и пример к ней на Open Watcom 1.7 DGML 2.0.5.44 В дистрибутиве есть проект для ваткома. oldsoldier Не знаю, как справиться с этими тормозами... |
Сообщ.
#202
,
|
|
|
Der_Meister
Спасибо, сегодня попробую откомпилировать старый проект |
Сообщ.
#203
,
|
|
|
Народ, поделитесь плиз DGML'кой. А то все ссылки мёртвые Тока вот эта http://sourceforge.net/projects/openbgi пашет, но я так понял нужен ещё .lib файл, что б заработало?
|
Сообщ.
#204
,
|
|
|
Цитата Un1oR @ я так понял нужен ещё .lib файл, что б заработало? lib файл сам собери Там вроде все исходники на месте. |
Сообщ.
#205
,
|
|
|
К сожалению, проблемы с "тормозами" так и не решены...
Часть 1/2 Прикреплённый файлDGML_Release_2.0.5.44.7z.001 (107.42 Кбайт, скачиваний: 259) |
Сообщ.
#206
,
|
|
|
Часть 2/2
Файл называется DGML Release 2.0.5.44.7z.002, просто форум не дает загрузить файл с расширением .002 Прикреплённый файлpart2.zip (107.33 Кбайт, скачиваний: 490) |
Сообщ.
#207
,
|
|
|
А что с етими файлами делать ( DGML_Release_2.0.5.44.7z.001, part2.zip) ?
Der_Meister не могли бы вы описать все действия, которые нужно сделать, для того чтобы в программе использовать все возможности graphics.h в DevC++. |
Сообщ.
#208
,
|
|
|
Цитата NinjaDragon @ Распаковать с помощью 7-zip, переименовав part2.zip в DGML Release 2.0.5.44.7z.002 .А что с етими файлами делать ( DGML_Release_2.0.5.44.7z.001, part2.zip) ? Цитата NinjaDragon @ Насколько я знаю, нет поддержки компилятора MinGW (GCC). не могли бы вы описать все действия, которые нужно сделать, для того чтобы в программе использовать все возможности graphics.h в DevC++. |
Сообщ.
#209
,
|
|
|
Добавил поддержку Dev-C++ (MinGW). Думаю, не так сложно будет изменить для компиляции в GCC в Linux и других ОС.
скачать DGML Release 2.0.5.45.7z - размер ~1.2MB (распаковывать в 7-zip) <<--ВНИМАНИЕ, файл находится на внешнем ресурсе и будет удалён спустя месяц после последнего скачивания. Можно перенести его куда-нибудь на постоянный хостинг. Содержит версию DGML Release 2.0.5.44, опубликованную выше и дополнительные файлы: Инструкция для компиляции проектов BGI-графики Der Meister, лучше открыл бы проект в SourceForge - народ бы дальше развивал. |
Сообщ.
#210
,
|
|
|
Большой Вам respect за проделаную работу
Не могли бы Вы расписать по подробнее пункты: 2) Компиляция libdgml (библиотеки DGML) и 3) Компиляция hell. |
Сообщ.
#211
,
|
|
|
Пишу с мобилы. 2) Новый проект-dll. Добавляешь dgml*.c в проект и указываешь параметры проекта(в пред. сообщ.)
3) новый проект-GUI. Добавляешь hello.c с парам-ми проекта выше. Позже-подробнее. |
Сообщ.
#212
,
|
|
|
Romtek
Большое спасибо за поддержку. Проект DGML теперь доступен по лицензии BSD: http://sourceforge.net/projects/dgml/ Есть идея переписать вывод графики на libcairo. |
Сообщ.
#213
,
|
|
|
Цитата Дер @ Проект DGML теперь доступен по лицензии BSD Ух ты. Молодец. Цитата Дер @ Не стоит так торопиться. Лучше отточить то, что уже есть и хорошо проверить рабочесть и совместимость. Также заняться поддержкой разныхплатформ. Есть идея переписать вывод графики на libcairo. Я занимаюсь переводом на Linux. Добавлено Дер, свяжись со мной для помощи организации наполнения сайта проекта. |
Сообщ.
#214
,
|
|
|
Для билдера не могу настроить:
Проект DGML теперь доступен по лицензии BSD: http://sourceforge.net/projects/dgml/ Хотя для Visual Studio получается. |
Сообщ.
#215
,
|
|
|
С чем именно проблемы? Исходники и примеры проектов есть...
Цитата Дер @ Спустя столько времени я тоже об этом стал подумывать. таким образом, получится отвязка от SDL за счёт Cairo. Ведь последняя для двумерной векторной графики как раз и создана. Есть идея переписать вывод графики на libcairo. |
Сообщ.
#216
,
|
|
|
Цитата Для использования DGML в среде Microsoft Visual Studio или Borland C++ Builder, достаточно скопировать файлы DGML.lib и graphics.h в папки lib и include компилятора соответственно. Файла graphics.h нет даже близко в архиве... Думаю вместо него надо юзать dgml.h. Ложу DGML.lib и dgml.h в папки lib и include компилятора соответственно. Запускаем шестой билдер и создаем консольное приложение: Multi Threaded & Console Application. Вставляем такой код: Цитата #include <stdlib.h> #include <string.h> #include <stdio.h> #include <conio.h> #include "dgml.h" /* the names of the line styles supported */ char *lname[] = { "SOLID_LINE", "DOTTED_LINE", "CENTER_LINE", "DASHED_LINE", "USERBIT_LINE" }; int main(void) { /* request auto detection */ int gdriver = DETECT, gmode, errorcode; int style, midx, midy, userpat; char stylestr[40]; /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ } midx = getmaxx() / 2; midy = getmaxy() / 2; /* a user defined line pattern */ /* binary: "0000000000000001" */ userpat = 1; for (style=SOLID_LINE; style<=USERBIT_LINE; style++) { /* select the line style */ setlinestyle(style, userpat, 1); /* convert style into a string */ strcpy(stylestr, lname[style]); /* draw a line */ line(0, 0, midx-10, midy); /* draw a rectangle */ rectangle(0, 0, getmaxx(), getmaxy()); /* output a message */ outtextxy(midx, midy, stylestr); /* wait for a key */ getch(); cleardevice(); } /* clean up */ closegraph(); return 0; } И в хедере dgml.h ошибочка на строке: using DGML::conio::clrscr; Only one of a set of overloaded functions can be "C" Как быть? Второй день разбираюсь. |
Сообщ.
#217
,
|
|
|
Насколько я понимаю, дело в том, что проект должен быть C++. Иначе - грабли.
|
Сообщ.
#218
,
|
|
|
т.е. Console Application ???
Абсолютно тоже самое |
Сообщ.
#219
,
|
|
|
Цитата cmygeHm @ т.е. Console Application Консольное и обязательно С++! |
Сообщ.
#220
,
|
|
|
все варианты перепробывал
|
Сообщ.
#221
,
|
|
|
Я не настолько разбираюсь в С++, чтобы помочь. В DGML используется трюк и использованием пространств имён, что позволяет игнорировать headers. Причём, я так понимаю, именно BCB не проглатываает исходник, т.к. VC++, GCC, Watcom - без проблем (согласно Der'у).
|
Сообщ.
#222
,
|
|
|
Попробуй этот заголовок:
Добавлено По крайней мере, у меня в Dev-C++ компилируется... В общем, Der_Meister (heavysoft /sf.net) всё писал и он сможет помочь. Прикреплённый файлdgml.h.zip (5.66 Кбайт, скачиваний: 278) |
Сообщ.
#223
,
|
|
|
Спасибо, сейчас попробую и если что ему письмо напишу
Билдер знает о пространствах имен, надо как минимум указать using namespace ... ; и все пучком. А у DGML как называется пространство имен? Может явно указать? |
Сообщ.
#224
,
|
|
|
Цитата cmygeHm @ А у DGML как называется пространство имен? Может явно указать? Смотри в заголовок и пробуй. У меня нет BCB. |
Сообщ.
#225
,
|
|
|
Та ошибка вроде исчезла, новая появилась!
[Linker Error] 'C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\DGML.LIB' contains invalid OMF record, type 0x21 (possibly COFF) Может мне либку обновить? Из каких исходников она делалась? Из того же хедера? |
Сообщ.
#226
,
|
|
|
Цитата cmygeHm @ Linker Error] 'C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\DGML.LIB' contains invalid OMF record, type 0x21 (possibly COFF) А это не имеет отношения к DGML. Обращайся в С++. Там объяснят что делать. |
Сообщ.
#227
,
|
|
|
я понял что lib надо переделать в длл. Сейчас попробую
Добавлено Последняя проблема, что осталась это множество таких сообщений: [Linker Error] Unresolved external 'DGML::initgraph(int *, int *, const char *)' referenced from C:\DOCUMENTS AND SETTINGS\GAFAROV_ÐÀÁÎ×ÈÉ ÑÒÎË\OK\UNIT1.OBJ Начал искать в каких исходниках прописаны тела функций, ни в одной версии исходников их не нашел. Romtek, у тебя есть ??? |
Сообщ.
#228
,
|
|
|
Цитата cmygeHm @ Не знаю что ты скачал и откуда, но у меня из официальной версии 2.0.5.45 всё находится и в заголовках и в теле исходников.Начал искать в каких исходниках прописаны тела функций, ни в одной версии исходников их не нашел. А если компилятор или компоновщик не находят, надо правильно указать пути. |
Сообщ.
#229
,
|
|
|
Цитата cmygeHm @ Я все это дело бросил! Ребята! Потратили год или больше и сделали аборт перед родами! Вся Россия бы гордилась и использовала эту библиотеку! Я потратил четыре дня и все напрасно! Цитата Поднимите мне веки @ Сообщ. #1 от 1.01.06, 18:08 от первого января 2006 года прошло несколько больше дней, чем четыре. |
Сообщ.
#230
,
|
|
|
DGML.lib можно использовать только с MSVS и другими компиляторами, использующими COFF-формат. Для Builder'а нужно конвертировать ее в OMF. Для этого воспользуемся утилитой coff2omf:
.\coff2omf.exe DGML.lib libdgml.lib Теперь libdgml.lib добавляем в проект, dgml.h кладем в папку с проектом. DGML.dll и SDL.dll кладем в выходную директорию. Компилируем и запускаем. Прикладыю OMF-версию библиотеки импорта. Проверил на Borland C++ Builder 6 и Embarcadero RAD Studio 2010. Прикреплённый файлlibdgml.7z (1.71 Кбайт, скачиваний: 292) |
Сообщ.
#231
,
|
|
|
Проект создается так:
Прикреплённый файлshot05.png (6.73 Кбайт, скачиваний: 629) |
Сообщ.
#232
,
|
|
|
Если кому интересно, недавно наткнулся на схожий проект, решающий ту же задачу. Называется libgraph. Можно скачать по адресу https://github.com/Prashant47/libgraph
Демонстрация возможностей в файле sample.c . Насчёт полноты реализации ничего не знаю. Кто попробует - сообщите. |
Сообщ.
#233
,
|
|
|
Цитата Romtek @ Не пахнет никакой полнотой: только 16-цветные режимы, например. Насчёт полноты реализации ничего не знаю. |
Сообщ.
#234
,
|
|
|
>только 16-цветные режимы, например.
А в штатном bgi больше цветов и не было. Или там не хватает более простых режимов? |
Сообщ.
#235
,
|
|
|
Цитата MBo @ Ага.там не хватает более простых режимов? Цитата MBo @ Наткнулся на заваленке у себя на VGA256.BGI, а там написано, чтоА в штатном bgi больше цветов и не было. Цитата VGA256.BGI а в 13H цветов 256... Впрочем, это может быть и подделка (копирайта под Борланд). Не знаю, копать надо. BGI Device Driver (VGA256) 2.00 - Mar 21 1988 Copyright © 1987,1988 Borland International... VGA256... 320x200 VGA/MCGA MODE 13H Добавлено Собственно, вкусность была ещё и в том, что можно было собрать программу, а BGI-файл (чужой) лишь указывался строкой. И при наличие оного, подключалась и более мощная графика (и 256, и 32К, и 64К цветов)! Т.е. это была предыстория будущих DLL-ок. А в этом github.com/Prashant47/libgraph ничем таким не пахнет. |
Сообщ.
#236
,
|
|
|
Борланд сделала довольно много BGI-драйверов
Вот например список входящих в состав 7-го паскаля: CGA.BGI - адаптеры CGA и MCGA - 4 палитры CGA-режима 320х200-4 цвета и 640х200-ЧБ, плюс специфичный для MCGA 640х480-ЧБ HERC.BGI - адаптеры Hercules - эти имели только один режим 720х348-ЧБ ATT.BGI - адаптеры AT&T - 4 палитры CGA-режима 320х200-4 цвета и 640х200-ЧБ, плюс cпецифичный для AT&T 640х400-ЧБ EGAVGA.BGI - адаптеры EGA и VGA - режимов CGA нет, 640x200-16 цв EGA, 640x350-16цв EGA, 640x480-16цв VGA, 640x350-ЧБ EGA IBM8514.BGI - адаптеры IBM-8514/A - 640x480-16цв, 1024x768-16цв (хотя имелись и 256 цветные режимы) PC3270.BGI - PC-3270, этот, насколько я понимаю, похож на Hercules - 720x350 ЧБ VESA16.BGI - для всех VESA VBE совместимых - 800x600-16цв, 1024x768-16цв, 1280x1024-16цв В штатной библиотеке нет даже упоминания о 256-цветных режимах. BGI-драйверы VGA256.BGI, VESA256.BGI и VESA16M.BGI (также использовался в режимах 32K и 64K) и соответствующие библиотеки для популярных компиляторов шли с набором VESA-драйверов. Поскольку структуру BGI-файла, в отличие от файлов шрифтов (я по крайней мере официальных данных, когда искал, не нашёл), Borland опубликовала, они могли быть работы сторонних авторов. Добавлено VGA256.BGI судя по всему всё-же авторства Borland, поскольку вместе с несколькими дополнительными шрифтами входил в состав Quattro Pro той же Borland. |