1 /************************************************************************/
2 /*									*/
3 /*				QUASI88					*/
4 /*									*/
5 /************************************************************************/
6 
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <gtk/gtk.h>
10 
11 #include "quasi88.h"
12 #include "device.h"
13 
14 #include "getconf.h"	/* config_init */
15 #include "suspend.h"	/* stateload_system */
16 #include "menu.h"	/* menu_about_osd_msg */
17 
18 
19 /***********************************************************************
20  * ���ץ����
21  ************************************************************************/
22 static	const	T_CONFIG_TABLE gtksys_options[] =
23 {
24   /* 300��349: �����ƥ��¸���ץ���� */
25 
26   /*  -- GRAPHIC -- */
27   { 300, "gdkimage",     X_FIX,  &use_gdk_image,   TRUE,                  0,0, 0        },
28   { 300, "nogdkimage",   X_FIX,  &use_gdk_image,   FALSE,                 0,0, 0        },
29 
30 
31   /* ��ü */
32   {   0, NULL,           X_INV,                                       0,0,0,0, 0        },
33 };
34 
help_msg_gtksys(void)35 static	void	help_msg_gtksys(void)
36 {
37   fprintf
38   (
39    stdout,
40    "  ** GRAPHIC (GTK depend) **\n"
41    "    -gdkimage/-nogdkimage   use GdkImage/use GdkRGB [-gdkimage]\n"
42    );
43 }
44 
45 
46 
47 /***********************************************************************
48  * �ᥤ�����
49  ************************************************************************/
50 static	void	gtksys_init(void);
51 static	void	gtksys_exit(void);
52 static	void	finish(void);
53 
main(int argc,char ** argv)54 int	main(int argc, char **argv)
55 {
56     gtk_set_locale();
57 #ifdef __CYGWIN__
58     _Xsetlocale(LC_ALL, "ja_JP.EUC");	/* ??? */
59 #endif	// __CYGWIN__
60 
61     gtk_init(&argc, &argv);
62     /* gtk_rc_parse("./gtkrc"); */
63 
64     if (config_init(argc, argv,		/* �Ķ������ & �������� */
65 		    gtksys_options,
66 		    help_msg_gtksys)) {
67 
68 	quasi88_atexit(finish);		/* quasi88() �¹���˶�����λ�����ݤ�
69 					   ������Хå��ؿ�����Ͽ���� */
70 
71 	gtksys_init();
72 
73 	gtk_main();
74 
75 	config_exit();			/* ������������� */
76     }
77 
78     return 0;
79 }
80 
81 
82 
83 /*
84  * ������λ���Υ�����Хå��ؿ� (quasi88_exit()�ƽл��ˡ����������)
85  */
finish(void)86 static	void	finish(void)
87 {
88     gtksys_exit();
89 
90     config_exit();			/* ������������� */
91 }
92 
93 
94 
95 /*---------------------------------------------------------------------------*/
96 static	gint		idle_id = 0;
97 static	int		start_flg = FALSE;
98 static	gboolean	idle_callback(gpointer dummy);
99 
gtksys_init(void)100 static	void	gtksys_init(void)
101 {
102     idle_id = g_idle_add(idle_callback, NULL);
103 
104     start_flg = TRUE;
105 
106     quasi88_start();
107 }
108 
gtksys_exit(void)109 static	void	gtksys_exit(void)
110 {
111     quasi88_stop(TRUE);
112 
113     if (idle_id) {
114 	g_source_remove(idle_id);
115 	idle_id = 0;
116     }
117     if (start_flg) {
118 	gtk_main_quit();
119 	start_flg = FALSE;
120     }
121 }
122 
idle_callback(gpointer dummy)123 static	gboolean idle_callback(gpointer dummy)
124 {
125     switch (quasi88_loop()) {
126     case QUASI88_LOOP_EXIT:		/* ��λ */
127 	gtksys_exit();
128 	/* exit(0); */				/* Motif�ʤ� �Ǹ�� exit() ? */
129 	return FALSE;
130 
131     case QUASI88_LOOP_ONE:		/* 1�ե졼��в� */
132 #if 0
133     	{
134 	    static int i = 0, j=0;
135 	    if (++j > 55) {
136 		printf( "%d\n", i );
137 		i++;
138 		j=0;
139 	    }
140 	}
141 #endif
142 	return TRUE;
143 
144     case QUASI88_LOOP_BUSY:		/* ̵�� */
145     default:
146 	return TRUE;
147     }
148 }
149 
150 
151 
152 /***********************************************************************
153  * ���ơ��ȥ��ɡ����ơ��ȥ�����
154  ************************************************************************/
155 
156 /*	¾�ξ����٤Ƥ����� or �����֤��줿��˸ƤӽФ���롣
157  *	ɬ�פ˱����ơ������ƥ��ͭ�ξ�����ղä��Ƥ⤤�����ȡ�
158  */
159 
stateload_system(void)160 int	stateload_system(void)
161 {
162     return TRUE;
163 }
statesave_system(void)164 int	statesave_system(void)
165 {
166     return TRUE;
167 }
168 
169 
170 
171 /***********************************************************************
172  * ��˥塼���̤�ɽ�����롢�����ƥ��ͭ��å�����
173  ************************************************************************/
174 
menu_about_osd_msg(int req_japanese,int * result_code,const char * message[])175 int	menu_about_osd_msg(int        req_japanese,
176 			   int        *result_code,
177 			   const char *message[])
178 {
179     static const char *about_en =
180     {
181 	"Fullscreen mode not supported.\n"
182 	"Joystick not supported.\n"
183     };
184 
185     static const char *about_jp =
186     {
187 	"�ե륹���꡼��ɽ���ϥ��ݡ��Ȥ���Ƥ��ޤ���\n"
188 	"���祤���ƥ��å��ϥ��ݡ��Ȥ���Ƥ��ޤ���\n"
189 	"�ޥ������������ɽ������ϥ��ݡ��Ȥ���Ƥ��ޤ���\n"
190 	"��������ե�������ɤ߹��ߤϥ��ݡ��Ȥ���Ƥ��ޤ���\n"
191     };
192 
193 
194     *result_code = -1;				/* ʸ�������ɻ���ʤ� */
195 
196     if (req_japanese == FALSE) {
197 	*message = about_en;
198     } else {
199 	*message = about_jp;
200     }
201 
202     return TRUE;
203 }
204