|
Программирование >> Арифметические и логические операции
Чтобы обработать случай курсора в первой строке: void main(void) short i; for(i = 0; i < NROWS; i++) puts( ); Ho это совершенно негарантированные способы. Используя прерывания VESA, пытаюсь подключить мышь и вот тут начинается сумасшедший дом... Что делать? Мышиный драйвер не знает какой у вас на данный момент видеорежим и использует параметры предыдущего режима (у вас он наверное текстовый - там мышь скачет дискретно по 8). Поэтому, рисовать мышь вы должны сами. А чтобы координаты мыши отслеживать, у 33h прерывания есть функция, которая возвращает смещение мыши от последней ее позиции. Можно обойтись без рисования своего курсора мыши если найти драйвер, понимающий VESA-режимы. Например, в Logitech MouseWare 6.3 входит некий оверлейчик для генерации курсора для режимов Везы, который соответствует какой-то там совместной спецификации Везы и Логитеча. Как установить патчи на версию Try & Bye ? Для Win32 в реестре меняете ключ: HKEY LOCAL MACHINE\SOFTWARE\IBM\IBM VisualAge for C++ for Windows Demo\demo HKEY LOCAL MACHINE\SOFTWARE\IBM\IBM VisualAge for C++ for Windows\3.5 Для OS/2 редактируете файл \os2\system\epfis.ini при помощи любого редактора INI файлов и заменяете в нем: ♦ имя апликации EPFINST IBM VisualAge C++ for OS/2 TRIAL COPY 0001 или что-то подобное на EPFINST IBM VisualAge C++ for OS/2 5622-679 0001 ♦ содержимое ключа ApplicationName для данной апликации изменяете с IBM VisualAge C++ for OS/2 TRIAL COPY или опять что-то подобное на IBM VisualAge C++ for OS/2 ♦ файл cppexit.dll копируете в exit.dll. После таких манипуляций можно спокойно ставить патчи. Как сортировать записи в IVBContainerControl? IVBContainerControl отвечает только за отображение. Капать надо в области IVSequence, на который есть ссылка в объекте IVBContai-nerControl. Он ведь только то отображает, что в IVSequence * IVBContainer-Control::items содержится. Так что берете этот items и сортируете. Для создания невизуальных part лучше использовать VB или .VBE? Настоятельно рекомендуется .VBE Где находятся описания типов (не классов) для VB? .VBE, использовать редактор Part для описания типов нельзя. Правильнее всего посмотреть .\Samples\VisBuild\vbSample\*.VBE Там хорошо показано, как делать описание блоков функций, типов и перечислений. Что можно использовать для выбора цвета? Для выбора цвета лучше всего использовать ..\Sample\VisBuild\ Doodle\ClrDlg.VBB. Можно ли использовать VAC++ без WPS и WF? Можно. Надо инсталлировать его из под WPS, а потом заменить его на что-нибудь типа FileBar. Будет работать все, кроме редактора. Это позволяет использовать VB на 16 MB. Есть некое окошко, которое должно делать нечто через каждые N секунд. Как это правильно изобразить в VisualBilder/PartEditor? Ha Ibmком сервере в примерах по VAC++ лежит как раз подобный пример. Файл vbtimer.zip размером ~30 К. Я уже замучился загружать все .vbb модули в Visual Builder. Что делать? Создайте файлик VbLoad.Dat со списком этих файлов с указанием пути и положите его либо в каталог, где живут файлы приложения, в случае если Visual Builder запускается оттуда, либо (что подходит только для одного проекта) в каталог в VbBase.Vbb, VbDax.Vbb e.t.c (он называется IVB для Win и DDe4Vb для Os/2). Пути указывать не обязательно, если каталог, где они лежат входит в переменную окружения VBPATH. Где взять документацию на Ватком? В поставке. Все что есть в виде книжек включено в дистрибутив, кроме книги Страуструпа. Как поставить Ватком версии 10 под пополамом, при установке в самом конце происходят странные вещи? Лучше всего провести установку (копирование файлов и создание каталогов) в досовской сессии, а потом пополамным инсталлером просто откорректировать конфиги и создать все необходимые установки. В русифицированной WIN9х кpиво, устанавливается WATCOM. He создает папки со своими иконками. Что делать? Нужно сделать каталоги \Windows\Start Menu\Programs и переустановить Ватком. Потом перекинуть .lnk куда вам нужно. При отсутствии нужных англоязычных папок ссылки улетают в никуда. Он занял очень много места на диске, от чего можно избавиться? Если вы не предполагаете писать программы под какие-либо платформы, то не стоит устанавливать и библиотеки для них, если вы собираетесь работать под пополамом, можно смело прибить досовские и виндовозные хелпы, и программку для их просмотра. Кроме того, надо решить какой средой вы будете пользоваться, компилировать в дос-боксе или нет. Пополамный компилятор ресурсов под досом очень слаб и сваливается по нехватке памяти даже на простых файлах. Более того есть мнение, что при компиляции в осевой сессии, по крайней мере линкер работает примерно в 3 раза быстрее. Вот я его поставил, ничего не понятно, с чего начать? Прежде всего - почитать документацию, версия 10 поставляется с огромными файлами хелпа, если вы работаете под пополамом - используйте VIEW или иконки помощи в фолдере, если под Windows - соответственно программку WHELP для просмотра *.HLP, ну и под досом - аналогично, правда там вы не получите красивых окошек и приятной гипертекстовой среды. Где у него IDE, я привык, чтобы нажал кнопку, а оно откомпилировалось? IDE существует, но работает только под Windows или OS/2. Для работы в Досе используйте командную строку. Если вы так привыкли к IDE - поддержка Ваткома есть в Multi-Edit, и комплект удобных макросов тоже. С чего начать, чтобы сразу заработало? Начните с простейшего: #include <stdio.h> main() puts( Hello, world ); Для компиляции нужно использовать: wcl hello.c - для DOS/16 wcl386 /l=dos4gw hello.c - для DOS4GW Я написал простейшую программку, а она внезапно повисает, или генерирует сообщение о переполнении стека, что делать? В то же время когда я компилирую эту программку другим компилятором - все работает нормально? Желательно сразу после установки поправить файлики WLSYS-TEM.LNK, поставив требуемый размер стека, по умолчанию там стоит 1 или 2 Кб, чего явно недостаточно для программ, создающих пусть даже небольшие объекты на стеке. Для большинства применений достаточно размера стека в 16 или 32 килобайта. Если вы работаете под экстендером, можно поставить туда хоть мегабайт. Я столкнулся с тем, что Ватком ставит знак подчеркивания не в начало имени, а в конец, к чему бы это? Положение знака подчеркивания говорит о способе передачи параметров в данную функцию, если его нет совсем, параметры передаются через регистры, если сзади - через стек. Я написал подпрограмму на ассемблере, со знаком подчеркивания спереди, а Ватком ищет то же имя, но со знаком сзади, как это поправить? Можно написать: #pragma aux ASMFUNC * ; и описывать все свои функции как: #pragma aux (ASMFUNC) foo; #pragma aux (ASMFUNC) bar; Причем, есть специальное значение - символ , который сигнализирует, что имя надо преобразовать в верхний регистр, например: #pragma aux myfunc ; приведет к появлению в объектном файле ссылки на MYFUNC . Есть библиотека, исходники которой отсутствуют, как заставить Ватком правильно понимать имена функций и ставить знак спереди а не сзади? Нужно в файле заголовка описать данные функции как cdecl, при этом параметры будут передаваться через стек и имя функции будет сформировано правильно. Как сделать так, чтобы в некоторых случаях Watcom передавал параметры не через регистры, а через стек? Использовать cdecl. Например: extern void cdecl dummy( int ); Как делать ассемблерные вставки в программу? Примерно так: unsigned short swap bytes ( unsigned short word ); #pragma aux swap bytes = xchg ah, al \ parm [ ax ] \ value [ ax ]; Слово parm определяет в каком регистре вы передаете значение, слово value - в каком возвращаете. Можно использовать метки. Есть слово modify - можно указать что ваша вставка (или функция) не использует память, а трогает только те или иные регистры. От этого оптимизатору лучше жить. Прототип не обязателен, но если есть, то компилер проверяет типы. Надо слепить задачу под графику, но нужны окошки и мышь. Тащить ли ZINC 3.5, или в графике описать что-нибудь свое. Может, под Ватком что-то есть более мощное и готовое? Ничего лучше Зинки пока нет. Тащите лучше Зинку 4.0, она вроде под Ватком лучше заточена. При написании некоторых функций по видео-режимах вдруг захотелось мне сотворить динамические библиотеки. Есть мысля генерить exe-файл а затем грузить его. Что делать? Использовать DOS4GW/PRO. Он вроде поддерживает DLL. Или пользоваться PharLap TNT, он тоже поддерживает. Грузить экзешник тоже можно, но муторно. Через DPMI аллоци-руете сегмент (сегменты) делаете из них код и данные, читаете экзешник и засовываете код и данные из него в эти сегменты. Лучше использовать TNT. Графическая библиотека Ваткома отказывается переключать режимы/банки или делает это криво. Что делать? В результате ковыряния в библиотеке выяснилось, что криворукие ваткомовцы совершенно не задумываются ни о какой переносимости и универсальности их библиотек. В результате, если видео-карта имеет в биосе прошитое имя производителя или другую информацию о нем, то для нее будет вызываться вместо функции переключения банков через VESA, другая функция, работающая с картой напрямую (иногда даже через порты). Единственная проблема, что у каждого производителя рано или поздно выходят новые и продвинутые карты, раскладка портов в которых может отличаться от той, которая использовалась в старых моделях. В результате, все это свинство начинает глючить и иногда даже виснуть. После того, как вы руками заткнете ему возможность использовать родные фишки для конкретной карты и пропишите пользоваться только VESA - все будет работать как из пушки. Как затыкать - а просто, есть переменная: SVGAType, которая описывается следующим образом: extern C int SVGAType; , и потом перед (важно!) вызовом setvideomode нужно сказать: SVGAType = 1; Как руками слинковать exe-файл? Командой WLINK, указав параметры. system debug all option name
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |