Программирование игр для Windows. Советы профессионала


Использование функций драйвера для проигрывания VOC-файлов


Давайте подытожим разговор об используемых функциях. Вообще-то они потрясающе просты и вы наверняка сможете самостоятельно написать неболь­шую программу и поэкспериментировать с цифровыми каналами ввода-вывода звуковой карты Sound Blaster... Как бы не так! Неужели я вас брошу одних в этом цифровом чистилище? Ни в коем случае. Давайте-ка вместе загрузим драйвер и проиграем какой-нибудь VOC-файл. То, что у нас получится, вы можете впоследствии использовать в собственных играх.

Первое, что мы должны сделать, это загрузить CT-VOICE.DRV в память. Для этого нужно просто выделить некоторое количество памяти, открыть файл как двоичный и загрузить его байт за байтом. Есть, правда, одна проблема: драйвер должен быть загружен от границы сегмента. Это значит, что сегмент может, быть любым, но смещение начала драйвера должно быть нулевым. Ни одна функция из семейства allocate этого делать не умеет. Здесь необходима функция, которая способна резервировать память на границе параграфа. Такая функция называется _dos_allocmem(). Итак, нам надо сделать следующее:

§

Открыть файл CT-VOICE.DRV;

§          Определить его размер;

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

§          Загрузить его.

Это делает функция, приведенная в Листинге 9.1.

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

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

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);




Начало  Назад  Вперед