DOOM64-RE

DOOM 64 Reverse Engineering
Log | Files | Refs | README | LICENSE

funqueue.c (3642B)


      1 /* WESS API INCLUDES */
      2 #include "wessapi.h"	// audio stuff...
      3 #include "seqload.h"
      4 #include "soundhw.h"
      5 #include "wessarc.h"
      6 #include "wessseq.h"
      7 
      8 #include "funqueue.h"
      9 
     10 #include "graph.h"
     11 
     12 #ifndef NOUSEWESSCODE
     13 
     14 extern void run_queue_wess_seq_stopall(void);
     15 extern void run_queue_wess_seq_stop(void);
     16 
     17 extern void run_queue_wess_master_sfx_vol_set(void);
     18 extern void run_queue_wess_master_mus_vol_set(void);
     19 extern void run_queue_wess_handle_parm_mod(void);
     20 extern void run_queue_wess_handle_noteon(void);
     21 
     22 extern void run_queue_wess_seq_pause(void);
     23 extern void run_queue_wess_seq_restart(void);
     24 extern void run_queue_wess_seq_pauseall(void);
     25 extern void run_queue_wess_seq_restartall(void);
     26 
     27 extern void run_queue_wess_seq_stoptype(void);
     28 extern void run_queue_wess_seq_update_type_special(void);
     29 extern void run_queue_wess_seq_stopall_and_voiceramp(void);
     30 extern void run_queue_wess_seq_stop_and_voiceramp(void);
     31 extern void run_queue_wess_seq_stoptype_and_voiceramp(void);
     32 
     33 static void(*FuncQueueArr[15])(void) =	//8005D9A0
     34 {
     35 	run_queue_wess_seq_stopall,					//QUEUE_SEQ_STOPALL
     36 	run_queue_wess_seq_stop,					//QUEUE_SEQ_STOP
     37 	run_queue_wess_master_sfx_vol_set,			//QUEUE_MASTER_SFX_VOL_SET
     38 	run_queue_wess_master_mus_vol_set,			//QUEUE_MASTER_MUS_VOL_SET
     39 	run_queue_wess_handle_parm_mod,				//QUEUE_HANDLE_PARM_MOD
     40 	run_queue_wess_handle_noteon,				//QUEUE_HANDLE_NOTEON
     41 	run_queue_wess_seq_pause,					//QUEUE_SEQ_PAUSE
     42 	run_queue_wess_seq_restart,					//QUEUE_SEQ_RESTART
     43 	run_queue_wess_seq_pauseall,				//QUEUE_SEQ_PAUSEALL
     44 	run_queue_wess_seq_restartall,				//QUEUE_SEQ_RESTARTALL
     45 	run_queue_wess_seq_stoptype,				//QUEUE_SEQ_STOPTYPE
     46 	run_queue_wess_seq_update_type_special,		//QUEUE_SEQ_UPDATE_TYPE_SPECIAL
     47 	run_queue_wess_seq_stopall_and_voiceramp,	//QUEUE_SEQ_STOPALL_AND_VOICERAMP
     48 	run_queue_wess_seq_stop_and_voiceramp,		//QUEUE_SEQ_STOP_AND_VOICERAMP
     49 	run_queue_wess_seq_stoptype_and_voiceramp	//QUEUE_SEQ_STOPTYPE_AND_VOICERAMP
     50 };
     51 
     52 static int func_num = 0;							//8005D9DC
     53 static int func_num_arr = 0;						//8005D9E0
     54 static QUEUE_DATA_MEMORY queue_data_mem;			//800B4420
     55 static char *queue_write_ptr = queue_data_mem.data; //8005D9E4
     56 static char *queue_read_ptr;						//800B6620
     57 
     58 void queue_memcpy(void *dest, void *src, int size) // 80035CC0
     59 {
     60 	char *d, *s;
     61 
     62 	d = (char *)dest;
     63 	s = (char *)src;
     64 	while (size--)
     65 	{
     66 		*d++ = *s++;
     67 	}
     68 }
     69 
     70 void queue_the_function(char mode) // 80035CF0
     71 {
     72 	if (func_num_arr == 0)
     73 	{
     74 		if (func_num < MAX_QUEUE_FUNCTION_SIZE)
     75 		{
     76 			queue_data_mem.function[func_num] = mode;
     77 			func_num += 1;
     78 			return;
     79 		}
     80 		func_num_arr = 1;
     81 	}
     82 	return;
     83 }
     84 
     85 void queue_the_data(void *src, int size) // 80035D48
     86 {
     87 	int memsize;
     88 
     89 	if (func_num_arr == 0)
     90 	{
     91 		memsize = queue_data_mem.data - queue_write_ptr + MAX_QUEUE_DATA_SIZE;
     92 
     93 		if (memsize < size)
     94 		{
     95 			if (func_num > 0)
     96 				func_num -= 1;
     97 
     98 			func_num_arr = 1;
     99 		}
    100 		else
    101 		{
    102 			queue_memcpy(queue_write_ptr, src, size);
    103 			queue_write_ptr += size;
    104 		}
    105 	}
    106 	return;
    107 }
    108 
    109 void unqueue_the_data(void *dest, int size) // 80035DF4
    110 {
    111 	queue_memcpy(dest, queue_read_ptr, size);
    112 	queue_read_ptr += size;
    113 }
    114 
    115 void process_function_queue(void) // 80035E38
    116 {
    117 	char *func;
    118 	int i;
    119 
    120 	//PRINTF_D2(WHITE,0,10,"process_function_queue");
    121 	//PRINTF_D2(WHITE,0,11,"func_num %d",func_num);
    122 
    123 	func_num_arr = 0;
    124 
    125 	//init queue_read_ptr
    126 	queue_read_ptr = (char *)&queue_data_mem.data;
    127 
    128 	func = queue_data_mem.function;
    129 	for (i = 0; i < func_num; i++)
    130 	{
    131 	    //PRINTF_D(WHITE,"*func %d",*func);
    132 		FuncQueueArr[*func]();
    133 		func++;
    134 	}
    135 
    136 	//restore queue_write_ptr
    137 	wess_disable();
    138 	func_num = 0;
    139 	queue_write_ptr = (char *)&queue_data_mem.data;
    140 	wess_enable();
    141 	return;
    142 }
    143 
    144 #endif