2 Skelton for retropc emulator
4 Author : K.Ohta <whatisthis.sowhat _at_ gmail.com>
10 #ifndef _QT_OSD_BASE_H_
11 #define _QT_OSD_BASE_H_
18 #include <QStringList>
30 #define SOCKET_BUFFER_MAX 0x100000
31 #include "../config.h"
32 #include "osd_types.h"
34 #include "osdcall_types.h"
36 #define N_MAX_BUTTONS 128
38 #define WM_RESIZE (WM_USER + 1)
39 #define WM_SOCKET0 (WM_USER + 2)
40 #define WM_SOCKET1 (WM_USER + 3)
41 #define WM_SOCKET2 (WM_USER + 4)
42 #define WM_SOCKET3 (WM_USER + 5)
46 #define OSD_CONSOLE_BLUE 1 // text color contains blue
47 #define OSD_CONSOLE_GREEN 2 // text color contains green
48 #define OSD_CONSOLE_RED 4 // text color contains red
49 #define OSD_CONSOLE_INTENSITY 8 // text color is intensified
51 //#ifdef USE_VIDEO_CAPTURE
52 #define MAX_CAPTURE_DEVS 8
55 //#include "qt_main.h"
58 SAMPLE_TYPE_SINT8 = 0,
60 SAMPLE_TYPE_SINT16_BE,
61 SAMPLE_TYPE_SINT16_LE,
62 SAMPLE_TYPE_UINT16_BE,
63 SAMPLE_TYPE_UINT16_LE,
64 SAMPLE_TYPE_SINT32_BE,
65 SAMPLE_TYPE_SINT32_LE,
66 SAMPLE_TYPE_UINT32_BE,
67 SAMPLE_TYPE_UINT32_LE,
74 class DrawThreadClass;
85 namespace SOUND_MODULE {
93 #define MAX_SOUND_CAPTURE_DEVICES 8
94 #define MAX_CAPTURE_SOUNDS 16
111 SDL_AudioFormat format;
117 uint8_t* read_buffer_ptr;
118 } osd_snddata_capture_t;
121 SDL_AudioFormat format;
127 SDL_AudioCallback callback;
128 osd_snddata_capture_t userdata;
129 } osd_snd_capture_dev_desc_t;
133 SDL_AudioFormat read_format;
139 SDL_AudioCallback read_callback;
142 int sample_type; // ToDo : ENUM
152 uint8_t *read_buffer_ptr;
154 } osd_snd_capture_desc_t;
158 class SOUND_BUFFER_QT;
160 class DLL_PREFIX OSD_BASE : public QObject
164 #if 1 /* Note: Below are new sound driver. */
165 std::shared_ptr<SOUND_MODULE::OUTPUT::M_BASE> m_sound_driver;
167 qint64 sound_us_before_rendered;
168 qint64 elapsed_us_before_rendered;
169 SOUND_BUFFER_QT *m_audioOutput;
170 SOUND_BUFFER_QT *m_audioInput;
172 QAudioFormat m_audioOutputFormat;
173 QAudioFormat m_audioInputFormat;
176 uint8_t m_sound_period;
178 EmuThreadClass *parent_thread;
179 sdl_snddata_t snddata;
180 std::shared_ptr<USING_FLAGS> using_flags;
182 std::shared_ptr<CSP_Logger> p_logger;
184 QOpenGLContext *glContext;
185 bool is_glcontext_shared;
187 QList<supportedlist_t> SupportedFeatures;
191 _TCHAR app_path[_MAX_PATH];
192 QElapsedTimer osd_timer;
195 virtual void initialize_console();
196 virtual void release_console();
198 FILE *hStdIn, *hStdOut;
199 QString console_cmd_str;
202 std::atomic<bool> telnet_closed;
203 std::atomic<int> console_count;
205 void initialize_input();
206 void release_input();
207 void key_down_sub(int code, bool repeat);
208 void key_up_sub(int code);
209 CSP_KeyTables *key_table;
212 // bool dinput_joy_ok;
214 uint8_t keycode_conv[256];
215 uint8_t key_status[256]; // windows key code mapping
216 uint8_t key_dik_prev[256];
217 uint8_t key_converted[256];
218 bool joy_to_key_status[256];
220 bool numpad_5_pressed;
221 bool key_shift_pressed, key_shift_released;
224 uint32_t modkey_status;
228 * joystick #1, - #4 (b0 = up, b1 = down, b2 = left, b3 = right, b4- = buttons)
230 * ANALOG #1 - #4 AXIS LEFT X,Y : VALUE 65536 - 0 (RAW VALUE PLUS 32768)
232 * ANALOG #1 - #4 AXIS RIGHT X,Y : VALUE = 65536 - 0 (RAW VALUE PLUS 32768)
234 * ANALOG #1 - #4 DIGITAL DIR (b0 = UP, b1 = DOWN, b2 = LEFT, b3 = RIGHT)
236 uint32_t joy_status[32];
238 int32_t mouse_status[3]; // x, y, button (b0 = left, b1 = right)
242 int32_t mouse_button;
245 //Qt::CursorShape mouse_shape;
247 QImage background_image;
248 QImage button_images[N_MAX_BUTTONS];
249 QImage rec_image_buffer;
254 void initialize_screen();
255 void release_screen();
257 virtual void initialize_screen_buffer(bitmap_t *buffer, int width, int height, int mode);
258 void release_screen_buffer(bitmap_t *buffer);
259 void rotate_screen_buffer(bitmap_t *source, bitmap_t *dest);
260 virtual scrntype_t *get_buffer(bitmap_t *p, int y);
262 void stretch_screen_buffer(bitmap_t *source, bitmap_t *dest);
263 virtual int add_video_frames();
265 bitmap_t vm_screen_buffer;
266 bitmap_t video_screen_buffer;
267 bitmap_t* draw_screen_buffer;
268 int vm_window_width, vm_window_height;
269 int vm_window_width_aspect, vm_window_height_aspect;
271 int host_window_width, host_window_height;
272 bool host_window_mode;
273 int base_window_width, base_window_height;
274 int vm_screen_width, vm_screen_height;
275 int draw_screen_width, draw_screen_height;
276 int rec_video_nsec, rec_video_fps_nsec;
278 _TCHAR video_file_name[_MAX_PATH];
281 uint64_t dwAVIFileSize;
284 rec_video_thread_param_t rec_video_thread_param;
286 bool first_draw_screen;
287 bool first_invalidate;
288 bool self_invalidate;
291 #if defined(USE_SDL2)
292 SDL_AudioDeviceID audio_dev_id;
296 SDL_AudioSpec snd_spec_req, snd_spec_presented;
297 void release_sound();
299 static void audio_capture_callback(void *udata, Uint8 *stream, int len);
300 static void audio_callback(void *udata, Uint8 *stream, int len);
301 void convert_sound_format(uint8_t* dst1, uint8_t* dst2, int16_t* src1, int16_t* src2, int samples1, int samples2);
303 virtual void init_sound_device_list();
305 int sound_rate, sound_samples;
306 bool sound_ok, sound_started, now_mute;
307 bool sound_first_half;
308 QStringList sound_device_list;
310 _TCHAR sound_file_name[_MAX_PATH];
311 FILEIO* rec_sound_fio;
313 int rec_sound_buffer_ptr;
315 int sound_buffer_size;
321 bool sound_initialized;
322 uint8_t *sound_buf_ptr;
323 Uint8 snd_total_volume;
326 QStringList sound_capture_device_list;
327 bool sound_capturing_emu[MAX_CAPTURE_SOUNDS];
328 osd_snd_capture_desc_t sound_capture_desc[MAX_CAPTURE_SOUNDS]; // To EMU:: and VM::
329 bool capturing_sound[MAX_SOUND_CAPTURE_DEVICES];
330 osd_snd_capture_dev_desc_t sound_capture_dev_desc[MAX_SOUND_CAPTURE_DEVICES]; // From physical devices
331 uint8_t sound_capture_buffer[MAX_SOUND_CAPTURE_DEVICES][32768];
333 virtual void initialize_video();
334 virtual void release_video();
336 bitmap_t dshow_screen_buffer;
337 int direct_show_width, direct_show_height;
338 bool direct_show_mute[2];
340 double movie_frame_rate;
341 int movie_sound_rate;
343 void enum_capture_devs();
344 bool connect_capture_dev(int index, bool pin);
345 int cur_capture_dev_index;
346 int num_capture_devs;
347 _TCHAR capture_dev_name[MAX_CAPTURE_DEVS][256];
349 _TCHAR prn_file_name[_MAX_PATH];
351 int prn_data, prn_wait_frames;
355 virtual void initialize_socket();
356 virtual void release_socket();
358 bool is_tcp[SOCKET_MAX];
359 bool host_mode[SOCKET_MAX];
360 int socket_delay[SOCKET_MAX];
362 // MIDI : Will implement
363 virtual void initialize_midi();
364 virtual void release_midi();
368 QList<device_node_t> device_node_list;
369 void vm_draw_screen(void);
370 Sint16* create_sound(int *extra_frames);
372 virtual bool get_use_socket(void);
373 virtual bool get_use_auto_key(void);
374 virtual bool get_dont_keeep_key_pressed(void);
375 virtual bool get_one_board_micro_computer(void);
376 virtual bool get_use_screen_rotate(void);
377 virtual bool get_use_movie_player(void);
378 virtual bool get_use_video_capture(void);
379 void vm_key_down(int code, bool flag);
380 void vm_key_up(int code);
383 virtual int get_screen_width(void);
384 virtual int get_screen_height(void);
385 virtual int get_vm_buttons_code(int num);
386 virtual void update_input_mouse();
389 virtual void __FASTCALL osdcall_message_str(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, QString message);
390 virtual void __FASTCALL osdcall_message_int(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, int64_t data);
391 virtual void __FASTCALL osdcall_mount(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, QString path);
392 virtual void __FASTCALL osdcall_unmount(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type);
393 virtual void __FASTCALL osdcall_misc(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, QString message_str, int64_t data);
396 OSD_BASE(std::shared_ptr<USING_FLAGS> p, std::shared_ptr<CSP_Logger> logger);
402 class Ui_MainWindow *main_window_handle;
404 std::recursive_timed_mutex screen_mutex;
405 std::recursive_timed_mutex vm_mutex;
406 std::recursive_timed_mutex debug_mutex;
407 std::recursive_timed_mutex joystick_mutex;
408 std::recursive_timed_mutex mouse_mutex;
409 std::recursive_timed_mutex log_mutex;
413 virtual void initialize(int rate, int samples, int* presented_rate, int* presented_samples);
415 virtual void initialize_sound(int rate, int samples, int* presented_rate, int* presented_samples);
417 virtual void release();
419 void notify_power_off(); // For USE_NOTIFY_POWER_OFF .
424 _TCHAR* application_path();
425 _TCHAR* bios_path(const _TCHAR* file_name);
426 void get_host_time(cur_time_t* time);
427 void sleep(uint32_t ms);
428 void create_date_file_name(_TCHAR *name, int length, const _TCHAR *extension);
429 _TCHAR *get_app_path(void);
431 virtual void open_console(int width, int height, const _TCHAR* title);
432 virtual void close_console();
433 virtual unsigned int get_console_code_page();
434 virtual bool is_console_closed();
436 void set_console_text_attribute(unsigned short attr);
437 void write_console(const _TCHAR* buffer, unsigned int length);
438 int read_console_input(_TCHAR* buffer, int length);
439 bool is_console_key_pressed(uint32_t ch);
440 void update_keyname_table(void);
442 virtual void open_telnet(const _TCHAR* title);
443 virtual void close_telnet();
444 virtual void send_telnet(const char* string);
448 void key_down(int code, bool extended, bool repeat);
449 void key_up(int code, bool extended);
450 void key_down_native(int code, bool repeat);
451 void key_up_native(int code);
452 void key_lost_focus();
453 void press_button(int num);
455 # if !defined(Q_OS_WIN) && !defined(Q_OS_CYGWIN)
456 uint16_t GetAsyncKeyState(uint32_t vk); // Win32 GetAsyncKeyState() wrappeer.
458 void key_modifiers(uint32_t mod);
459 bool is_mouse_enabled();
460 //QImage *getPseudoVramClass(void) { return pPseudoVram;}
461 void set_mouse_pointer(double x, double y);
462 void set_mouse_button(int button);
463 void modify_key_buffer(int code, uint8_t val);
464 uint8_t* get_key_buffer();
465 uint32_t* get_joy_buffer();
466 void release_joy_buffer(uint32_t* ptr);
467 int32_t get_mouse_button();
468 int32_t* get_mouse_buffer();
469 void release_mouse_buffer(int32_t* ptr);
471 void reset_printer();
472 void update_printer();
473 void printer_out(uint8_t value);
474 void printer_strobe(bool value);
476 void initialize_printer();
477 void release_printer();
478 void open_printer_file();
479 void close_printer_file();
482 int get_window_mode_width(int mode);
483 int get_window_mode_height(int mode);
484 double get_window_mode_power(int mode);
485 void set_host_window_size(int window_width, int window_height, bool window_mode);
486 void set_vm_screen_size(int width, int height, int width_aspect, int height_aspect, int window_width, int window_height);
487 void set_vm_screen_lines(int lines); // 20170118
488 int get_vm_screen_width();
489 int get_vm_screen_height();
491 int get_vm_window_width();
492 int get_vm_window_height();
493 int get_vm_window_width_aspect();
494 int get_vm_window_height_aspect();
495 scrntype_t* get_vm_screen_buffer(int y);
496 void reset_screen_buffer()
498 // It's ugly hack for screen.
499 emit sig_resize_vm_screen((QImage*)NULL, -1, -1);
502 //int no_draw_screen();
503 void reload_bitmap();
504 void capture_screen();
505 bool start_record_video(int fps);
506 void stop_record_video();
507 void restart_record_video();
508 void add_extra_frames(int extra_frames);
509 bool now_record_video;
510 bool screen_skip_line;
512 void update_sound(int* extra_frames);
516 void start_record_sound();
517 void stop_record_sound();
518 void restart_record_sound();
520 const _TCHAR *get_vm_device_name();
521 const _TCHAR *get_sound_device_name(int num);
522 QStringList get_sound_device_list()
524 return sound_device_list;
527 int get_sound_device_num();
529 bool now_record_sound;
530 int get_sound_rate();
533 void *get_capture_sound_buffer(int ch);
534 bool is_capture_sound_buffer(int ch);
535 void *open_capture_sound_emu(int ch, int rate, int channels, int sample_type, int samples, int physical_device_num);
536 void close_capture_sound_emu(int ch);
538 // From physical device?
539 bool open_sound_capture_device(int num, int req_rate, int req_channels);
540 bool close_sound_capture_device(int num, bool force);
542 // common video device
543 virtual void get_video_buffer();
544 void mute_video_dev(bool l, bool r);
545 virtual bool open_movie_file(const _TCHAR* file_path);
546 virtual void close_movie_file();
550 double get_movie_frame_rate();
551 virtual int get_movie_sound_rate();
552 void set_cur_movie_frame(int frame, bool relative);
553 uint32_t get_cur_movie_frame();
554 bool now_movie_play, now_movie_pause;
555 int get_cur_capture_dev_index();
556 int get_num_capture_devs();
557 _TCHAR* get_capture_dev_name(int index);
558 void open_capture_dev(int index, bool pin);
559 void close_capture_dev();
560 void show_capture_dev_filter();
561 void show_capture_dev_pin();
562 void show_capture_dev_source();
563 void set_capture_dev_channel(int ch);
566 void create_bitmap(bitmap_t *bitmap, int width, int height);
567 void release_bitmap(bitmap_t *bitmap);
568 void create_font(font_t *font, const _TCHAR *family, int width, int height, int rotate, bool bold, bool italic);
569 void release_font(font_t *font);
570 void create_pen(pen_t *pen, int width, uint8_t r, uint8_t g, uint8_t b);
571 void release_pen(pen_t *pen);
573 void clear_bitmap(bitmap_t *bitmap, uint8_t r, uint8_t g, uint8_t b);
574 int get_text_width(bitmap_t *bitmap, font_t *font, const char *text);
576 void draw_text_to_bitmap(bitmap_t *bitmap, font_t *font, int x, int y, const _TCHAR *text, uint8_t r, uint8_t g, uint8_t b);
577 void draw_line_to_bitmap(bitmap_t *bitmap, pen_t *pen, int sx, int sy, int ex, int ey);
578 void draw_rectangle_to_bitmap(bitmap_t *bitmap, int x, int y, int width, int height, uint8_t r, uint8_t g, uint8_t b);
579 void draw_point_to_bitmap(bitmap_t *bitmap, int x, int y, uint8_t r, uint8_t g, uint8_t b);
581 void stretch_bitmap(bitmap_t *dest, int dest_x, int dest_y, int dest_width, int dest_height, bitmap_t *source, int source_x, int source_y, int source_width, int source_height);
582 void write_bitmap_to_file(bitmap_t *bitmap, const _TCHAR *file_path);
583 double vm_frame_rate(void);
586 virtual SOCKET get_socket(int ch);
587 virtual void notify_socket_connected(int ch);
588 virtual void notify_socket_disconnected(int ch);
589 virtual void update_socket();
590 virtual bool initialize_socket_tcp(int ch);
591 virtual bool initialize_socket_udp(int ch);
592 virtual bool connect_socket(int ch, uint32_t ipaddr, int port);
593 virtual void disconnect_socket(int ch);
594 virtual bool listen_socket(int ch);
595 virtual void send_socket_data_tcp(int ch);
596 virtual void send_socket_data_udp(int ch, uint32_t ipaddr, int port);
597 virtual void send_socket_data(int ch);
598 virtual void recv_socket_data(int ch);
601 virtual void __FASTCALL send_to_midi(uint8_t data, int ch, double timestamp_usec);
602 virtual bool __FASTCALL recv_from_midi(uint8_t* data, int ch, double timestamp_usec);
603 virtual bool __FASTCALL send_to_midi_timeout(uint8_t data, int ch, uint64_t timeout_ms, double timestamp_usec);
604 virtual bool __FASTCALL recv_from_midi_timeout(uint8_t* data, int ch, uint64_t timeout_ms, double timestamp_usec);
605 // Note: Belows maybe make Qt SLOTs.
606 virtual void __FASTCALL notify_timeout_sending_to_midi(int ch);
607 virtual void __FASTCALL notify_timeout_receiving_from_midi(int ch);
609 virtual void reset_to_midi(int ch, double timestamp_usec);
610 virtual void initialize_midi_device(bool handshake_from_midi, bool handshake_to_midi, int ch);
611 virtual void __FASTCALL ready_receive_from_midi(int ch, double timestamp_usec);
612 virtual void __FASTCALL ready_send_to_midi(int ch, double timestamp_usec);
614 virtual void __FASTCALL request_stop_to_receive_from_midi(int ch, double timestamp_usec);
615 virtual void __FASTCALL request_stop_to_send_to_midi(int ch, double timestamp_usec);
618 void update_screen();
619 void set_parent_thread(EmuThreadClass *parent);
620 EmuThreadClass *get_parent_handler();
622 _TCHAR *console_input_string(void);
623 void clear_console_input_string(void);
626 void unlock_vm(void);
627 void force_unlock_vm(void);
628 bool is_vm_locked(void);
629 virtual const _TCHAR *get_lib_common_vm_version();
630 const _TCHAR *get_lib_common_vm_git_version();
631 const _TCHAR *get_lib_osd_version();
634 virtual void set_draw_thread(DrawThreadClass *handler);
635 virtual QString get_vm_config_name(void);
636 virtual void reset_vm_node(void);
638 void set_device_name(int id, char *name);
640 void set_vm_node(int id, const _TCHAR *name);
641 const _TCHAR *get_vm_node_name(int id);
642 int get_vm_node_size(void);
644 int get_key_name_table_size(void);
645 uint32_t get_scancode_by_vk(uint32_t vk);
646 uint32_t get_vk_by_scancode(uint32_t scancode);
647 const _TCHAR *get_key_name_by_scancode(uint32_t scancode);
648 const _TCHAR *get_key_name_by_vk(uint32_t vk);
650 // Get #define S to value.You may use inside of VM/ .
651 virtual void set_features(void) {}
652 void add_feature(const _TCHAR *key, double value);
653 void add_feature(const _TCHAR *key, float value);
654 void add_feature(const _TCHAR *key, int value = 1);
655 void add_feature(const _TCHAR *key, int64_t value);
656 void add_feature(const _TCHAR *key, int16_t value);
657 void add_feature(const _TCHAR *key, int8_t value);
658 void add_feature(const _TCHAR *key, uint64_t value);
659 void add_feature(const _TCHAR *key, uint32_t value);
660 void add_feature(const _TCHAR *key, uint16_t value);
661 void add_feature(const _TCHAR *key, uint8_t value);
662 bool check_feature(const _TCHAR *key);
663 double get_feature_double_value(const _TCHAR *key);
664 int get_feature_int_value(const _TCHAR *key);
665 int64_t get_feature_int64_value(const _TCHAR *key);
666 int32_t get_feature_int32_value(const _TCHAR *key);
667 int16_t get_feature_int16_value(const _TCHAR *key);
668 int8_t get_feature_int8_value(const _TCHAR *key);
670 uint64_t get_feature_uint64_value(const _TCHAR *key);
671 uint32_t get_feature_uint32_value(const _TCHAR *key);
672 uint16_t get_feature_uint16_value(const _TCHAR *key);
673 uint8_t get_feature_uint8_value(const _TCHAR *key);
675 void debug_log(int level, const char *fmt, ...);
676 void debug_log(int level, int domain_num, const char *fmt, ...);
677 void debug_log(int level, int domain_num, char *strbuf);
678 virtual double get_vm_current_usec() { return 0.0; }
679 virtual uint64_t get_vm_current_clock_uint64() { return 0;}
681 std::shared_ptr<USING_FLAGS> get_config_flags(void) { return using_flags; }
683 std::shared_ptr<CSP_Logger> get_logger(void) { return p_logger; }
684 virtual bool set_glview(GLDrawClass *glv) { /* Dummy */ return false;}
685 QOpenGLContext *get_gl_context();
686 virtual GLDrawClass *get_gl_view() { return NULL; }
689 void start_waiting_in_debugger();
690 void finish_waiting_in_debugger();
691 void process_waiting_in_debugger();
693 // Messaging wrapper from EMU:: to OSD::
694 void __FASTCALL string_message_from_emu(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, _TCHAR* message);
695 void __FASTCALL int_message_from_emu(EMU_MEDIA_TYPE::type_t media_type, int drive, EMU_MESSAGE_TYPE::type_t message_type, int64_t data);
699 void disable_mouse();
702 void upload_bitmap(QImage *p);
705 int no_draw_screen();
707 void do_write_inputdata(QString s);
708 void do_set_input_string(QString s);
710 void close_debugger_console();
711 void do_close_debugger_thread();
713 void do_assign_js_setting(int jsnum, int axis_idx, int assigned_value);
714 void do_start_record_video();
715 virtual void do_decode_movie(int frames);
716 void do_video_movie_end(bool flag);
717 void do_video_decoding_error(int num);
718 virtual void do_run_movie_audio_callback(uint8_t *data, long len);
719 virtual int draw_screen();
721 void do_draw(bool flag);
723 void set_dbg_completion_list(std::list<std::string> *p);
724 void clear_dbg_completion_list(void);
725 void set_hdd_image_name(int drv, _TCHAR *filename);
727 void do_set_host_sound_output_device(QString device_name);
728 void do_update_master_volume(int level);
731 int sig_update_screen(void *, bool);
732 int sig_save_screen(const char *);
733 int sig_draw_frames(int);
734 int sig_close_window(void);
735 int sig_resize_vm_screen(QImage *, int, int);
736 int sig_resize_vm_lines(int);
737 int sig_put_string_debugger(QString);
738 int sig_console_input_string(QString);
739 int sig_enqueue_video(int, int, int, QImage *);
740 int sig_enqueue_audio(int16_t *data, int size);
741 int sig_movie_set_width(int);
742 int sig_movie_set_height(int);
743 int sig_debugger_finished();
744 int sig_req_encueue_video(int, int, int);
745 int sig_save_as_movie(QString, int, int);
746 int sig_stop_saving_movie();
748 int sig_movie_play();
749 int sig_movie_stop();
750 int sig_movie_pause(bool);
751 int sig_movie_seek_frame(bool, int);
753 int sig_set_sound_device(QString);
754 int sig_set_sound_volume(double);
755 int sig_set_sound_volume(int);
757 int sig_update_sound_output_list();
758 int sig_clear_sound_output_list();
759 int sig_append_sound_output_list(QString);
761 int sig_update_device_node_name(int id, const _TCHAR *name);
762 int sig_enable_mouse(void);
763 int sig_disable_mouse(void);
764 int sig_close_console(void);
765 int sig_set_attribute_debugger(QString, bool);
766 int sig_move_mouse_to_center(void);
767 int sig_clear_dbg_completion_list(void);
768 int sig_add_dbg_completion_list(_TCHAR *);
769 int sig_apply_dbg_completion_list(void);
771 int sig_clear_keyname_table(void);
772 int sig_add_keyname_table(uint32_t, QString);
774 int sig_change_virtual_media(int, int, QString);
776 int sig_notify_power_off(void); // To GUI 20230120 K.O
778 // To GUI 20230125 K.O
779 int sig_ui_floppy_insert_history(int, QString, quint64);
780 int sig_ui_floppy_close(int);
781 int sig_ui_floppy_write_protect(int, quint64);
783 int sig_ui_quick_disk_insert_history(int, QString);
784 int sig_ui_quick_disk_close(int);
785 int sig_ui_quick_disk_write_protect(int, quint64);
787 int sig_ui_hard_disk_insert_history(int, QString);
788 int sig_ui_hard_disk_close(int);
790 int sig_ui_cartridge_insert_history(int, QString);
791 int sig_ui_cartridge_eject(int);
793 int sig_ui_tape_play_insert_history(int, QString);
794 int sig_ui_tape_record_insert_history(int, QString);
795 int sig_ui_tape_eject(int);
796 int sig_ui_tape_position(int, int);
797 int sig_ui_tape_message(int, QString);
799 int sig_ui_tape_push_play(int);
800 int sig_ui_tape_push_stop(int);
801 int sig_ui_tape_push_fast_forward(int);
802 int sig_ui_tape_push_fast_rewind(int);
803 int sig_ui_tape_push_apss_forward(int);
804 int sig_ui_tape_push_apss_rewind(int);
805 int sig_ui_tape_push_pause(int, bool);
807 int sig_ui_compact_disc_insert_history(int, QString);
808 int sig_ui_compact_disc_eject(int);
809 int sig_ui_compact_disc_pause(int);
811 int sig_ui_laser_disc_insert_history(int, QString);
812 int sig_ui_laser_disc_eject(int);
813 int sig_ui_laser_disc_pause(int);
815 int sig_ui_binary_loading_insert_history(int, QString);
816 int sig_ui_binary_saving_insert_history(int, QString);
817 int sig_ui_binary_closed(int);
819 int sig_ui_bubble_insert_history(int, QString, quint64);
820 int sig_ui_bubble_close(int);
821 int sig_ui_bubble_write_protect(int, quint64);