1 /* 2 TiMidity++ -- MIDI to WAVE converter and player 3 Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp> 4 Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi> 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 */ 20 21 #ifndef ___W32G_H_ 22 #define ___W32G_H_ 23 24 #include <process.h> 25 #ifdef RC_NONE 26 #undef RC_NONE 27 #endif 28 #include <windows.h> 29 #ifdef RC_NONE 30 #undef RC_NONE 31 #endif 32 #define RC_NONE 0 33 34 #define LANGUAGE_JAPANESE 0x0001 35 #define LANGUAGE_ENGLISH 0x0002 36 extern int PlayerLanguage; 37 extern int PlayerMode; 38 39 40 #ifndef MAXPATH 41 #define MAXPATH 256 42 #endif /* MAXPATH */ 43 44 45 typedef struct argc_argv_t_ { 46 int argc; 47 char **argv; 48 } argc_argv_t; 49 50 #if defined(_MSC_VER) || defined(__WATCOMC__) 51 //typedef void (__cdecl *MSVC_BEGINTHREAD_START_ADDRESS)(void *); 52 typedef LPTHREAD_START_ROUTINE MSVC_BEGINTHREAD_START_ADDRESS; 53 #elif defined(_BORLANDC_) 54 // typedef _USERENTRY (*BCC_BEGINTHREAD_START_ADDRESS)(void *); 55 typedef LPTHREAD_START_ROUTINE BCC_BEGINTHREAD_START_ADDRESS; 56 #endif 57 58 // beginthread for C RUNTIME LIBRARY 59 60 // HANDLE crt_beginthread(LPTHREAD_START_ROUTINE start_address, DWORD stack_size, LPVOID arglist); 61 #if defined(_MSC_VER) || defined(__WATCOMC__) 62 #define crt_beginthread(start_address,stack_size,arglist) \ 63 (HANDLE)_beginthread((MSVC_BEGINTHREAD_START_ADDRESS)start_address,(unsigned)stack_size,(void *)arglist) 64 #elif defined(_BORLANDC_) 65 #define crt_beginthread(start_address,stack_size,arglist) \ 66 (HANDLE)_beginthread((BCC_BEGINTHREAD_START_ADDRESS)start_address,(unsigned)stack_size,(void *)arglist) 67 #else 68 #define crt_beginthread(start_address,stack_size,arglist) \ 69 (HANDLE)CreateThread(NULL,(DWORD)stack_size,(LPTHREAD_START_ROUTINE)start_address,(LPVOID)arglist,0,&dwTmp) 70 #endif 71 72 // (HANDLE)crt_beginthreadex(LPSECURITY_ATTRIBUTES security, DWORD stack_size, LPTHREAD_START_ROUTINE start_address, LPVOID arglist, DWORD initflag, LPDWORD thrdaddr ); 73 #if defined(_MSC_VER) || defined(__WATCOMC__) 74 #define crt_beginthreadex(security,stack_size,start_address,arglist,initflag,thrdaddr ) \ 75 (HANDLE)_beginthreadex((void *)security,(unsigned)stack_size,(MSVC_BEGINTHREAD_START_ADDRESS)start_address,(void *)arglist,(unsigned)initflag,(unsigned *)thrdaddr) 76 #elif defined(_BORLANDC_) 77 #define crt_beginthreadex(security,stack_size,start_address,arglist,initflag,thrdaddr ) \ 78 (HANDLE)_beginthreadNT((BCC_BEGINTHREAD_START_ADDRESS)start_address,(unsigned)stack_size,(void *)arglist,(void *)security_attrib,(unsigned long)create_flags,(unsigned long *)thread_id) 79 #else 80 #define crt_beginthreadex(security,stack_size,start_address,arglist,initflag,thrdaddr ) \ 81 (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES)security,(DWORD)stack_size,(LPTHREAD_START_ROUTINE)start_address,(LPVOID)arglist,(DWORD)initflag,(LPDWORD)thrdaddr) 82 #endif 83 84 #if defined(_MSC_VER) || defined(__WATCOMC__) 85 #define crt_endthread() _endthread() 86 #elif defined(_BORLANDC_) 87 #define crt_endthread() _endthread() 88 #else 89 #define crt_endthread() ExitThread(0); 90 #endif 91 92 #define RANGE(x,min,max) (((x)<(min))?((x)=(min)):(((x)>(max))?((x)=(max)):(x))) 93 94 #define RC_EXT_BASE 1000 95 enum { 96 RC_EXT_DROP = RC_EXT_BASE, 97 RC_EXT_LOAD_FILE, 98 RC_EXT_LOAD_PLAYLIST, 99 RC_EXT_SAVE_PLAYLIST, 100 RC_EXT_MODE_CHANGE, 101 RC_EXT_APPLY_SETTING, 102 RC_EXT_DELETE_PLAYLIST, 103 RC_EXT_UPDATE_PLAYLIST, 104 RC_EXT_UNIQ_PLAYLIST, 105 RC_EXT_REFINE_PLAYLIST, 106 RC_EXT_JUMP_FILE, 107 RC_EXT_ROTATE_PLAYLIST, 108 RC_EXT_CLEAR_PLAYLIST, 109 RC_EXT_OPEN_DOC, 110 RC_EXT_RESTART_GUI, 111 RC_EXT_LOAD_FILES_AND_PLAY 112 }; 113 114 #define MAX_W32G_MIDI_CHANNELS 32 115 116 117 // Toolbar Macros 118 #define IDM_STOP 2501 119 #define IDM_PAUSE 2502 120 #define IDM_PREV 2503 121 #define IDM_FOREWARD 2504 122 #define IDM_PLAY 2505 123 #define IDM_BACKWARD 2506 124 #define IDM_NEXT 2507 125 126 #define IDM_CONSOLE 2511 127 #define IDM_LIST 2512 128 #define IDM_TRACER 2513 129 #define IDM_DOC 2514 130 #define IDM_WRD 2515 131 #define IDM_SOUNDSPEC 2516 132 133 134 #define FLAG_NOTE_OFF 1 135 #define FLAG_NOTE_ON 2 136 137 #define FLAG_BANK 0x0001 138 #define FLAG_PROG 0x0002 139 #define FLAG_PAN 0x0004 140 #define FLAG_SUST 0x0008 141 142 #define FLAG_NOTE_OFF 1 143 #define FLAG_NOTE_ON 2 144 145 #define FLAG_BANK 0x0001 146 #define FLAG_PROG 0x0002 147 #define FLAG_PAN 0x0004 148 #define FLAG_SUST 0x0008 149 150 typedef struct { 151 int reset_panel; 152 int wait_reset; 153 int multi_part; 154 155 char v_flags[MAX_W32G_MIDI_CHANNELS]; 156 int16 cnote[MAX_W32G_MIDI_CHANNELS]; 157 int16 cvel[MAX_W32G_MIDI_CHANNELS]; 158 int16 ctotal[MAX_W32G_MIDI_CHANNELS]; 159 char c_flags[MAX_W32G_MIDI_CHANNELS]; 160 Channel channel[MAX_W32G_MIDI_CHANNELS]; 161 162 int32 total_time; 163 int total_time_h; 164 int total_time_m; 165 int total_time_s; 166 int total_time_ss; 167 int32 cur_time; 168 int cur_time_h; 169 int cur_time_m; 170 int cur_time_s; 171 int cur_time_ss; 172 int cur_voices; 173 int voices; 174 int upper_voices; 175 char filename[MAXPATH + 64]; 176 char titlename[MAXPATH + 64]; 177 int filename_setflag; 178 int titlename_setflag; 179 int32 master_volume; 180 int32 master_volume_max; 181 int meas; 182 int beat; 183 char keysig[7]; 184 int key_offset; 185 int tempo; 186 int tempo_ratio; 187 int invalid_flag; 188 189 int32 xnote[MAX_W32G_MIDI_CHANNELS][4]; 190 int aq_ratio; 191 192 int changed; 193 char dummy[1024]; 194 195 int8 GSLCD[20][16]; 196 double gslcd_last_display_time; 197 int8 gslcd_displayed_flag; 198 } PanelInfo; 199 extern PanelInfo *Panel; 200 201 #define PANELRESET_TIME 0x0001 202 #define PANELRESET_CHANNEL 0x0002 203 #define PANELRESET_MIDIINFO 0x0004 204 #define PANELRESET_MISC 0x0008 205 #define PANELRESET_EFFECT 0x0010 206 207 208 #define CANVAS_MODE_GSLCD 0x0001 209 #define CANVAS_MODE_MAP16 0x0002 210 #define CANVAS_MODE_MAP32 0x0003 211 #define CANVAS_MODE_KBD_A 0x0004 212 #define CANVAS_MODE_KBD_B 0x0005 213 #define CANVAS_MODE_SLEEP 0x0006 214 215 #if 0 216 #define TMCCC_BLACK RGB(0x00,0x00,0x00) 217 #define TMCCC_WHITE RGB(0xff,0xff,0xff) 218 #define TMCCC_RED RGB(0xff,0x00,0x00) 219 220 #define TMCCC_FORE TMCCC_BLACK // Aliased 221 #define TMCCC_BACK RGB(0x00, 0xf0, 0x00) 222 #define TMCCC_LOW RGB(0x80, 0xd0, 0x00) 223 #define TMCCC_MIDDLE RGB(0xb0, 0xb0, 0x00) 224 #define TMCCC_HIGH RGB(0xe0, 0x00, 0x00) 225 226 enum { 227 TMCC_BLACK, // Aliased FORE 228 TMCC_WHITE, 229 TMCC_RED, 230 TMCC_BACK, 231 TMCC_LOW, 232 TMCC_MIDDLE, 233 TMCC_HIGH, 234 TMCC_FORE_HALF, 235 TMCC_LOW_HALF, 236 TMCC_MIDDLE_HALF, 237 TMCC_HIGH_HALF, 238 TMCC_FORE_WEAKHALF, 239 TMCC_SIZE 240 }; 241 #define TMCC_FORE TMCC_BLACK // Aliased 242 243 typedef struct _TmColors { 244 COLORREF color; 245 HPEN pen; 246 HBRUSH brush; 247 } TmColors; 248 #endif 249 250 /* w32g_i.c */ 251 extern int w32g_open(void); 252 extern void w32g_close(void); 253 extern void w32g_send_rc(int rc, ptr_size_t value); 254 extern int w32g_get_rc(ptr_size_t *value, int wait_if_empty); 255 extern void w32g_lock(void); 256 extern void w32g_unlock(void); 257 extern void MainWndScrollbarProgressUpdate(int sec); 258 extern void PutsConsoleWnd(char *str); 259 extern void w32g_ctle_play_start(int sec); 260 extern void SettingWndApply(void); 261 extern int w32g_lock_open_file; 262 extern void w32g_i_init(void); 263 extern void CanvasChange(int mode); 264 extern HINSTANCE hInst; 265 extern void w32g_show_console(void); 266 extern void MPanelStartLoad(char *filename); 267 268 269 /* w32g_utl.c */ 270 271 /* w32g_playlist.c */ 272 extern int w32g_add_playlist(int nfiles, char **files, int expand_flag, 273 int autouniq, int autorefine); 274 extern char *w32g_get_playlist(int idx); 275 extern int w32g_next_playlist(int skip_invalid_file); 276 extern int w32g_prev_playlist(int skip_invalid_file); 277 extern int w32g_random_playlist(int skip_invalid_file); 278 extern int w32g_shuffle_playlist_reset(int preserve); 279 extern int w32g_shuffle_playlist_next(int skip_invalid_file); 280 extern void w32g_first_playlist(int skip_invalid_file); 281 extern int w32g_isempty_playlist(void); 282 extern char *w32g_curr_playlist(void); 283 extern void w32g_update_playlist(void); 284 extern void w32g_get_playlist_index(int *selected, int *nfiles, int *cursel); 285 extern int w32g_goto_playlist(int num, int skip_invalid_file); 286 extern int w32g_delete_playlist(int pos); 287 extern int w32g_nvalid_playlist(void); 288 extern int w32g_ismidi_playlist(int n); 289 extern void w32g_setcur_playlist(void); 290 extern int w32g_refine_playlist(int *is_selected_removed); 291 extern int w32g_uniq_playlist(int *is_selected_removed); 292 extern void w32g_clear_playlist(void); 293 extern void w32g_rotate_playlist(int dest); 294 void w32g_free_playlist(void); 295 296 #if 0 297 /* w32g_panel.c */ 298 extern void w32g_init_panel(HWND hwnd); 299 extern void TmPanelStartToLoad(char *filename); 300 extern void TmPanelStartToPlay(int total_sec); 301 extern void TmPanelSetVoices(int v); 302 //extern void TmPanelInit(HWND hwnd); 303 extern void TmPanelRefresh(void); 304 extern void TmPanelSetTime(int sec); 305 extern void TmPanelSetMasterVol(int v); 306 extern void TmPanelUpdateList(void); 307 308 /* w32g_canvas.c */ 309 extern void w32g_init_canvas(HWND hwnd); 310 extern void TmCanvasRefresh(void); 311 extern void TmCanvasReset(void); 312 extern void TmCanvasNote(int status, int ch, int note, int vel); 313 extern int TmCanvasChange(void); 314 extern void TmCanvasUpdateInterval(); 315 extern int TmCanvasMode; 316 #endif 317 318 /* w32g_c.c */ 319 extern volatile int w32g_play_active; 320 extern int w32g_current_volume[/* MAX_CHANNELS */]; 321 extern int w32g_current_expression[/* MAX_CHANNELS */]; 322 extern volatile int w32g_restart_gui_flag; 323 324 325 void PrefSettingApplyReally(void); 326 327 328 329 // flags 330 extern int InitMinimizeFlag; 331 extern int DebugWndStartFlag; 332 extern int ConsoleWndStartFlag; 333 extern int ListWndStartFlag; 334 extern int TracerWndStartFlag; 335 extern int DocWndStartFlag; 336 extern int WrdWndStartFlag; 337 extern int DebugWndFlag; 338 extern int ConsoleWndFlag; 339 extern int ListWndFlag; 340 extern int TracerWndFlag; 341 extern int DocWndFlag; 342 extern int WrdWndFlag; 343 extern int SoundSpecWndFlag; 344 345 extern int SubWindowMax; 346 347 extern char *IniFile; 348 extern char *ConfigFile; 349 extern char *PlaylistFile; 350 extern char *PlaylistHistoryFile; 351 extern char *MidiFileOpenDir; 352 extern char *ConfigFileOpenDir; 353 extern char *PlaylistFileOpenDir; 354 355 extern int PlayerThreadPriority; 356 extern int GUIThreadPriority; 357 358 extern int WrdGraphicFlag; 359 extern int TraceGraphicFlag; 360 extern int DocMaxSize; 361 extern char *DocFileExt; 362 363 extern int w32g_has_ini_file; 364 extern char *w32g_output_dir; 365 extern int w32g_auto_output_mode; 366 367 // HWND 368 extern HWND hMainWnd; 369 extern HWND hDebugWnd; 370 extern HWND hConsoleWnd; 371 extern HWND hTracerWnd; 372 extern HWND hDocWnd; 373 extern HWND hListWnd; 374 extern HWND hWrdWnd; 375 extern HWND hSoundSpecWnd; 376 extern HWND hDebugEditWnd; 377 extern HWND hDocEditWnd; 378 379 // gdi_lock 380 extern int gdi_lock(void); 381 extern int gdi_unlock(void); 382 #define GDI_SAFETY(command) (gdi_lock(),(command),gdi_unlock); 383 384 #define W32G_RANDOM_IS_SHUFFLE 385 386 #ifndef BELOW_NORMAL_PRIORITY_CLASS /* VC6.0 doesn't support them. */ 387 #define BELOW_NORMAL_PRIORITY_CLASS 0x4000 388 #define ABOVE_NORMAL_PRIORITY_CLASS 0x8000 389 #endif /* BELOW_NORMAL_PRIORITY_CLASS */ 390 391 #endif 392