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