PCem

view src/allegro-gui.c @ 154:d0d530adce12

Initial port to Linux (using Allegro). 64-bit fixes. Some changes to aid portability. A few other tweaks.
author TomW
date Thu Sep 04 21:07:24 2014 +0100
parents
children
line source
1 #include "ibm.h"
2 #include "allegro-main.h"
3 #include "allegro-gui.h"
4 #include "device.h"
5 #include "ide.h"
7 static int file_return(void)
8 {
9 return D_CLOSE;
10 }
12 static int file_exit(void)
13 {
14 quited = 1;
15 return D_CLOSE;
16 }
18 static int file_reset(void)
19 {
20 resetpchard();
21 return D_CLOSE;
22 }
24 static MENU file_menu[]=
25 {
26 {"&Return", file_return, NULL, 0, NULL},
27 {"&Hard Reset", file_reset, NULL, 0, NULL},
28 {"E&xit", file_exit, NULL, 0, NULL},
29 {NULL,NULL,NULL,0,NULL}
30 };
32 static int disc_load_a()
33 {
34 char fn[260];
35 int ret;
36 int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
37 strcpy(fn, discfns[0]);
38 ret = file_select_ex("Please choose a disc image", fn, "IMG;IMA", 260, xsize, ysize);
39 if (ret)
40 {
41 savedisc(0);
42 loaddisc(0, fn);
43 saveconfig();
44 }
45 return D_O_K;
46 }
48 static int disc_load_b()
49 {
50 char fn[260];
51 int ret;
52 int xsize = SCREEN_W - 32, ysize = SCREEN_H - 64;
53 strcpy(fn, discfns[1]);
54 ret = file_select_ex("Please choose a disc image", fn, "IMG;IMA", 260, xsize, ysize);
55 if (ret)
56 {
57 savedisc(1);
58 loaddisc(1, fn);
59 saveconfig();
60 }
61 return D_O_K;
62 }
64 static int disc_eject_a()
65 {
66 savedisc(0);
67 ejectdisc(0);
68 saveconfig();
70 return D_O_K;
71 }
73 static int disc_eject_b()
74 {
75 savedisc(1);
76 ejectdisc(1);
77 saveconfig();
79 return D_O_K;
80 }
82 static MENU disc_menu[]=
83 {
84 {"Load drive &A:...", disc_load_a, NULL, 0, NULL},
85 {"Load drive &B:...", disc_load_b, NULL, 0, NULL},
86 {"&Eject drive &A:", disc_eject_a, NULL, 0, NULL},
87 {"Eject drive &B:", disc_eject_b, NULL, 0, NULL},
88 {"&Configure hard discs...", disc_hdconf, NULL, 0, NULL},
89 {NULL,NULL,NULL,0,NULL}
90 };
92 static MENU cdrom_menu[];
94 static void cdrom_update()
95 {
96 int c;
98 for (c = 0; cdrom_menu[c].text; c++)
99 cdrom_menu[c].flags = 0;
101 if (!cdrom_enabled)
102 cdrom_menu[0].flags = D_SELECTED;
103 else
104 cdrom_menu[1].flags = D_SELECTED;
106 return D_O_K;
107 }
109 static int cdrom_disabled()
110 {
111 if (!cdrom_enabled)
112 return D_O_K;
114 if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
115 {
116 atapi->exit();
117 cdrom_enabled = 0;
118 saveconfig();
119 resetpchard();
120 cdrom_update();
121 }
123 return D_O_K;
124 }
126 static int cdrom_empty()
127 {
128 if (cdrom_enabled)
129 {
130 atapi->exit();
131 cdrom_drive = -1;
132 cdrom_null_open(cdrom_drive);
133 return D_O_K;
134 }
136 if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
137 {
138 cdrom_drive = -1;
139 cdrom_enabled = 1;
140 cdrom_null_open(cdrom_drive);
141 saveconfig();
142 resetpchard();
143 cdrom_update();
144 }
145 }
147 static int cdrom_dev()
148 {
149 if (cdrom_enabled)
150 {
151 atapi->exit();
152 cdrom_drive = 0;
153 ioctl_open(cdrom_drive);
154 return D_O_K;
155 }
157 if (alert("This will reset PCem!", "Okay to continue?", NULL, "OK", "Cancel", 0, 0) == 1)
158 {
159 cdrom_drive = 0;
160 cdrom_enabled = 1;
161 ioctl_open(cdrom_drive);
162 saveconfig();
163 resetpchard();
164 cdrom_update();
165 }
166 }
168 static MENU cdrom_menu[] =
169 {
170 {"&Disabled", cdrom_disabled, NULL, 0, NULL},
171 {"&Empty", cdrom_empty, NULL, 0, NULL},
172 {"/dev/cdrom", cdrom_dev, NULL, 0, NULL},
173 {NULL,NULL,NULL,0,NULL}
174 };
176 static MENU settings_menu[]=
177 {
178 {"&Configure...", settings_configure, NULL, 0, NULL},
179 {"CD-ROM", NULL, cdrom_menu, 0, NULL},
180 {NULL,NULL,NULL,0,NULL}
181 };
183 static MENU main_menu[]=
184 {
185 {"&File", NULL, file_menu, 0, NULL},
186 {"&Disc", NULL, disc_menu, 0, NULL},
187 {"&Settings", NULL, settings_menu, 0, NULL},
188 {NULL,NULL,NULL,0,NULL}
189 };
191 static DIALOG pcem_gui[]=
192 {
193 {d_menu_proc, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, main_menu, NULL, NULL},
194 {d_yield_proc, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, NULL, NULL, NULL},
195 {0,0,0,0,0,0,0,0,0,0,0,NULL,NULL,NULL}
196 };
198 void gui_enter()
199 {
200 DIALOG_PLAYER *dp;
201 int x = 1;
202 infocus = 0;
204 dp = init_dialog(pcem_gui, 0);
205 show_mouse(screen);
206 while (x && !(mouse_b & 2) && !key[KEY_ESC])
207 {
208 x = update_dialog(dp);
209 }
210 show_mouse(NULL);
211 shutdown_dialog(dp);
213 clear(screen);
214 clear_keybuf();
216 infocus = 1;
218 device_force_redraw();
219 }