|
Программирование >> Арифметические и логические операции
option option file file libpath ... library ... Например: wlink name myprog system dos4gw debug all file myprog Что такое ms2vlink и зачем она нужна? Это для тех кто переходит с мелкософтовского Си. Преобразователь команд LINK в WLINK. Что такое wd ? Это отладчик, бывший WVIDEO, но с более удобным интерфей- сом. Поставляется начиная с версии 10. Нужно состряпать маленький NLMчик. Что делать? Вам нужен WATCOM 10.0. В него входит NLM SDK и вроде хелп к нему. Если WC <= 9.5, то нужен сам NLM SDK и документация. Линковать : (файл wclink.lnk например) system netware Debug all opt scr Hello, world OPT VERSION=1.0 OPT COPYR Copyright (C) by me, 1994 #include <conio.h> void main( void ) cprintf( Hello, world!\n\r ); ConsolePrintf( Hello, World - just started!\n\r ); RingTheBell(); Собираю программу под OS/2 16-бит, линкеp не находит библиотеку DOSCALLS.LIB. Кто виноват и что делать? Никто не виноват. В поставке Ваткома есть библиотека os2286.lib. Это она и есть. Ее надо либо переименовать в doscalls.lib, либо явно прилинковывать. Что такое удаленная отладка через pipe? Как ею пользоваться под OS/2? В одной сессии запускается vdmserv.exe, потом запускается отладчик wd /tr=vdm и соединяется с vdmserv по пайпу, ну и рулит им. Как удаленная отладка через компорт работает знаете? Вот тут так же, только через пайп. Собираю 32-битный экзешник под PM с отладочной информацией (/d2), но после того как осевым rc пришпиливаю к нему ресурсы, отладочной информации - как не бывало. Это лечится как-нибудь? Откусываете дебугинфу wstripом в .sym файл и потом присобачиваете ресурсы. Если имя экзешника и имя .sym совпадают, дебаггер сам его подхватит. Отладочную информацию надо сбрасывать в SYM-файл: wcl386 /d2 / op symf /l=os2v2 pm WATCOM на 4 мб компилиpует быстpей чем на 8 мб, а на 8 мб быстpее чем на 16 мб, почему? Чем больше памяти, тем лучше работает оптимизатор. Можно дать ему фиксированный размер памяти - SET WCGMEMORY=4096, и тогда он не будет пользоваться лишней памятью. Учтите, что для компиляции программ для Windows на C++ данного значения может не хватить. Есть такая штука - pipe в gcc и bcc. А вот в Watcome как перехватить выхлоп программы? В смысле забрать себе stdout и stderr? Да как обычно - сдупить их куда-нибудь. Функцию dup() еще никто не отменял. А есть ли способ перехватить ошибку по нехватке памяти? То есть какой-нибудь callback, вызываемый диспетчером памяти при невозможности удовлетворить запрос? В C+ + есть стандартный: set new handler(). Чем отличаются статические DLL от динамических? Разница в том, что вы можете функи из DLL на этапе линковки в EXEшник собрать (static). А можете по ходу работы проги DLL грузить и функи выполнять (dynamic). Решил тут DLL под OS/2 создать - ничего не вышло. Что делать? Вы динамически собираетесь линковать или статически? Если статически, тогда вам просто declare func сделать и включить dll в test.lnk. Если динамически, то вы должны прогрузить dll, получить адрес функи и только после этого юзать. Можно делать это через API OS/2: DosLoadModule DosQueryProcAddr DosFreeModule. Например: exe.c: #define INCL DOSMODULEMGR #include <os2.h> #define DLLNAME DLL PFN Dllfunc; char FuncName[]= RegardFromDll ; char LoadError[100]; void main() HMODULE MHandle; DosLoadModule( LoadError, sizeof( LoadError ), DLLNAME, &MHandle ); DosQueryProcAddr( MHandle, 0, FuncName, &Dllfunc ); (*Dllfunc)(); DosFreeModule( MHandle ); dll.c #include <stdio.h> void RegardFromDll( void ) printf( This printed by function, loaded vs DLL\n ); Когда компиляете свою DLL, то добавьте свич -bd, который создаст в .obj такое дело, как DLLstart. После этого все заработает: wpp386 -bd -4s -ox dll.cpp Как подавить варнинги о неиспользованных аргументах? Если используете плюсовый компилер - просто опускайте имена параметров, например: void foo( int bar, char* ) #pragma off(unreferenced) Можно использовать макрос: #ifndef NU #ifdef cplusplus #ifdef BORLANDC #define NU( ARG ) ARG #else #define NU( ARG ) (void)ARG #endif #else #define NU( ARG ) ARG=ARG #endif #endif Для многих, особенно юниксового происхождения, компайлеров работает /*ARGSUSED*/ перед определением функции. Подскажите, как в watcome увеличить число открытых файлов? Смотрите TFM. grow handles(int newcount). Как заставить 16-ти битные OS/2 задачи видеть длинные имена файлов? Опция newfiles для линкера. Что-то у меня 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; 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 лишь в окончательный вариант.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |