Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 9.1. Выделение памяти для CT-VOICE.DRV.

Формула 8.2. Расчет масштабирования. | Листинг 8.1. Новая функция масштабирования спрайтов (без отсечения). | Листинг 8.2. Демонстрационная программа новой функции масштабирования (VYREN.C). | Алгоритм 8.1. Масштабирование спрайта. | Формула 8.3. Вычисление вектора скорости. | Формула 8.4. Вычисление угла между наблюдателем и объектом. | Листинг 8.3. Последний Шаттл (FINVYREN.C). | Создание студии | ЗВУКОВЫЕ ЭФФЕКТЫ И МУЗЫКА | Функция 0: Получить версию драйвера |


Читайте также:
  1. I. Выделение (узнавание) звука на фоне слова
  2. I. Этап «Военно-интеллектуальный - 1914». Посвящен памяти русских солдат участников Первой мировой войны 1914-1918 годов.
  3. II. Обращение к памяти программ.
  4. Алгоритмы распределения памяти
  5. ВЕКСЛЕРА ПАМЯТИ ШКАЛА
  6. Виды памяти
  7. Восстановление памяти прошлых жизней

///////////////////////////////////////////////////////////////

void Voc_Load_Driver(void)

// загрузить ct-voice.drv

int driver_handle;

unsigned errno,segment,offset,num_para,bytes_read;

// открыть файл драйвера

_dos_open("CT-VOICE.DRV", _O_RDONLY, &driver_handle);

// выделить память

num_para = 1 + (filelength(driver_handle))/16;

_dos_allocmem(num_para, &segment);

//установить указатель на область данных драйвера

_FE_SEG(driver_ptr) = segment;

_FP_OFF(driver_ptr) = 0;

// загрузить код драйвера

data_ptr = driver_ptr;

do {

_dos_read(driver_handle,data_ptr, 0х4000, &bytes_read);

data_ptr += bytes_read;

} while (bytes_read==0x4000);

// закрыть файл

_dos_close(driver_handle);

} // конец функции

Мы можем разбить функцию из Листинга 9.1 на три части:

§ Вначале мы открываем файл CT-VOICE.DRV в чисто двоичном режиме.Мы не должны делать никаких преобразований символов - это было бы катастрофой! Мы же читаем реальный код, а не ASCII-файл;

§ Затем программа вычисляет длину файла и выделяет под него соответствующее количество памяти. Отметим, что мы резервируем память блоками, причем каждый блок — это параграф из 16 байт;

§ Наконец, драйвер загружается по 32К за один прием. Эта одно из замечательных отличий функции _dos_read () от стандартной функции getch(): мы можем читать большие куски кода за один раз.

Теперь, после загрузки драйвера мы должны сохранить указатель так, чтобы впоследствии можно было найти начало драйвера. Этот указатель мы будем хранить в виде глобальной переменной с именем driver_ptr. (Я думаю, что это имя достаточно содержательно.)

Замечание

Давайте немного отвлечемся. Когда вы пишете компьютерные игры (или любое другое программное обеспечение), пожалуйста, используйте такие имена файлов и функций, которые несут смысловую нагрузку и отражают назначение объекта. Постарайтесь избегать таких имен, как t, j, k и им подобных. Используйте имена типа index_1, sprite_alive и так далее. Поверьте моему опыту: когда вы закончите писать компьютерную игру и вернетесь к ней через неделю, вы подумаете: «Не Фон Нейман ли это написал, да здесь сам черт ногу сломит!» Ведь если вы используете иероглифы вместо имен, кто кроме специалиста по иероглифам сможет в.них разобраться? Правильно? Тогда вернемся к нашим баранам.

Верите вы или нет, но загрузка драйвера была самой трудной частью. Посмотрим на код для загрузки VOC-файла. Он выглядит точно так же, как и функция загрузки драйвера. То есть мы должны:

§ Открыть файл в бинарном режиме;

§ Отвести под него память;

§ Загрузить VOC-файл в отведенный буфер. Это делает функция Листинга 9.2.


Дата добавления: 2015-07-12; просмотров: 136 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Функция 12: Прервать цикл вывода звука| Листинг 9.2. Загрузка VОС-файла.

mybiblioteka.su - 2015-2024 год. (0.005 сек.)