Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Листинг 9.2. Загрузка VОС-файлаchar far *Voc_Load_Sound(char *filename, unsigned char *header_length) { // загрузка звукового файла с диска в память // и установка указателя на его начало char far *temp_ptr; char far *data_ptr; unsigned int sum; int sound_handle,t; unsigned errno, segment, offset, num_para, bytes_read; // открыть звуковой файл _dos_open(filename, _O_RDONLY, &sound_handle); // выделить память num_para =1 + (filelength(sound_handle))/16; _dos allocmem(num_para, &segment); // установить указатель на выделенную память _FP_SEG(data_ptr) = segment; _FP_OFF(data_ptr) = 0; // загрузить звуковые данные temp_ptr = data_ptr; do { dos_read(sound_handle,temp_ptr, 0х4000, &bytes__read); temp_ptr += bytes_read; sum+=bytes_read; } while(bytes_read==0x4000); // Проверить на всякий случай, звуковые ли это данные. // Для этого проверяется присутствие слова "Creative". if ((data_ptr[0]!= 'С') || (data_ptr[1]!= 'r')) { printf("\n%s is riot a voc file!",filename); _dos_freemem(_FP_SEG(data_ptr)); return(0); } // конец звукового файла header_length = (unsigned char)data_ptr[20]; // закрыть файл _dosclose(sound_handle); return(data_ptr); } // конец функции Наиболее замечательное в этой функции то, что она возвращает адрес области памяти (точнее, указатель на него), куда был загружен VOC-файл. Мы используем этот указатель позже при проигрывании звука. Все остальные функции, которые нам потребуются, тривиальны. Мы используем ассемблерные вставки для настройки регистров и команду процессора CALL для вызова драйвера с помощью указателя driver_ptr. Рассмотрим несколько таких функций, чтобы понять особенности их написания. Драйвер должен быть инициализирован прежде, чем мы сможем его использовать. Это очевидное требование. Делать это мы должны с помощью функции 3, «Инициализировать драйвер». Листинг 9.3 содержит текст программы этой функции.
|