|
Программирование >> Перегруженные имена функций и идентификаторы
Что-то у меня Dev.Toolkit for OS/2 Warp к Ваткому WC10.0 прикрутить не получается. Говорит definition of macro Far16 not identical previos definition. Что делать? Воткните где-нибудь определение IBMCPP или -D IBMCPP в командной строке или #define перед #include <os2.h>. Для Ваткома 10.5a надо не просто d IBMCPP, а -d IBMCPP =1. Пишу: printf ( * );, а он сразу ничего не печатает. Что делать? В стандарте ansi, чёткого определения как должны буферизовываться потоки stdin/stdout/stderr нет, нормальным является поведение со строчной буферизацией stdout/stdin. Всякие другие дос-компилеры обычно не буферизуют stdout совсем, что тоже нормально. Признаком конца строки в потоке является \n, именно при получении этого символа происходит flush для line buffered потока. Выходов два: отменить буферизацию ии писать \n в нужных местах. Можно fflush(stdout) звать, тоже вариант. Буферизация отменяется setbuf(stdout,NULL) или setvbuf(stdout,NULL, IONBF,0). Можно ли сделать встроенный в ехе-шник DOS4GW, как в D00M? Легально - нет. Предыдущие версии позволяли просто скопировать: copy /b dos4gw.exe + a.exe bound.exe Но сейчас (начиная с версии 10.0а) это не работает и для этой цели нужно приобрести dos4gw/pro у фирмы Tenberry Software. Нелегально - да. Существует утилита dos4g/link для автоматизированного выдирания и вклеивания экстендеров из/в EXE-файлов. Помещалась в WATCOM.C в uuencode и доступна от автора. Нужно взять не тот DOS4GW, что в комплекте (DOS4GW 1.97), а Pro-версию (DOS4GW Professional). Выдрать можно из DOOM, HERETIC, HEXEN, WARCRAFT2 и т.д., где он прибинден. Причем можно найти 2 разновидности Pro 1.97 - одна поддерживает виртуальную память, другая нет и еще что-то по мелочи. Различаются размерами (который с виртуалкой - толще). Прибиндить можно разными тулзами, например PMWBIND из комплекта PMODE/W. Также можно отрезать у dos4gw.exe последние несколько байт с хвоста, содержащие строку WATCOM patch level [...]. Далее обычным бинарным копированием: copy /b dos4gw.exe myexe.exe mynewexe.exe Работоспособно вплоть до версии DOS/4GW 1.95. В версии 1.97 введена проверка на внедренность linexe в хвост экстендера. Еще существует родной биндер для DOS/4GW. Он в какой-то мере может помочь pmwbind.exe от PMODE/W (однако версия 1.16 не понимала каскадный формат DOS/4GW, работоспособна для одномодульного 4GW/PRO); решает проблему тулза dos4g/link, которая доступна у автора или у модератора. Рекомендуется попробовать 4GWPRO (выдрать из игрушек с помощью pmwbind.exe или dos4g/link), усеченный вариант DOS/4GW (в модулях 4grun.exe, wd.exe - для ДОС), а также PMODE/W. В поставке DOS4G есть 4GBIND.EXE (но для этого надо купить или украсть DOS4G). Как определить количество свободной памяти под dos4gw? Попытки использовать memavl и memmax не дают полную картину. Что делать? Количество свободной памяти под экстендером - не имеет смысла, особенно если используется своппинг. Для определения наличия свободного RAM нужно использовать функции DMPI, пример использования есть в хелпе. Как добраться до конкретного физического адреса под экстендером? Вспомните про линейную адресацию в dos4gw. Он в этом плане очень правильно устроен - например, начало сегмента 0xC000 находится по линейному адресу 0x000C0000. Вот примерчик, который печатает сигнатуру VGA биоса. #include <stdio.h> #include <string.h> #include <ctype.h> void main( void ) unsigned i; for( i = 0; i < 256; i++) char c; c = *(char*)( 0x000C0000 + i ); putchar( isprint( c ) ? c: . ); Как отлаживать программы, работающие в Pharlap режиме? wd /tr=pls file.exe, для фарлапа или wd /tr=rsi file.exe для dos4gw. Какая разница между dos4gw и Pharlap? Или это одно и то же? Это разные экстендеры. Самая существенная для вас разница - dos4gw входит в поставку Ваткома, а фарлап - нет. Что такое RUN386.EXE? Вроде с его помощью можно пускать фаpлаповые ехе-шники? Это рантайм фарлапа. Ho он денег стоит. DOS4GW такой огромный (больше 200 к), что можно использовать вместо него, чтобы поменьше диска занимало? Существует шароварный экстендер PMODE, у которого есть версия, рассчитанная на Watcom - PMODE/W, ее можно использовать вместо DOS4GW, она занимает всего 9 к, встраивается внутрь ехе-файа. Он не обрабатывает некоторые исключительные ситуации, поэтому отлаживать программу все-таки лучше с dos4gw, а встраивать pmode/w лишь в окончательный вариант. 100% совместимости c dos4gw никто, конечно, гарантировать не может, но говорят, что под ним удалось запустить даже D00M. Более того, 100% совместимости просто нет - например, графические программы под DOS/4G в Цинке, которые определяют наличие DOS/4GW путем вызова int 21h, ah = 0xFF. При этом DOS/4GW и PMODE/W возвращают различный (хотя и похожий) результат.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |