1 diff -Nur dosemu-1.4.0.orig/src/env/video/text.c dosemu-1.4.0.chng/src/env/video/text.c
2 --- dosemu-1.4.0.orig/src/env/video/text.c 2007-05-04 07:59:48.000000000 +0200
3 +++ dosemu-1.4.0.chng/src/env/video/text.c 2008-04-21 22:36:23.000000000 +0200
8 +struct text_system* registered_text_system(void)
15 * The attribute is the VGA color/mono text attribute.
16 diff -Nur dosemu-1.4.0.orig/src/plugin/X/X.c dosemu-1.4.0.chng/src/plugin/X/X.c
17 --- dosemu-1.4.0.orig/src/plugin/X/X.c 2007-05-04 07:59:48.000000000 +0200
18 +++ dosemu-1.4.0.chng/src/plugin/X/X.c 2008-04-21 23:03:06.000000000 +0200
20 static Atom comm_atom = None;
21 static Boolean kdos_client = FALSE; /* started by kdos */
23 +static Boolean about_to_quit = FALSE;
24 +static struct text_system* Text_Tmp;
25 +extern struct text_system* registered_text_system(void);
26 +void (*Draw_cursor_backup)(int x, int y, Bit8u attr, int first, int last, Boolean focus);
27 +void (*Draw_string_backup)(int x, int y , unsigned char *s, int len, Bit8u attr);
30 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
34 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
36 +void Draw_cursor_fake(int x, int y, Bit8u attr, int first, int last, Boolean focus)
41 +void Draw_string_fake(int x, int y , unsigned char *s, int len, Bit8u attr)
46 /* utility function for opening a connection and making certain
47 * I am either using or not using the X keyboard Extension.
49 @@ -1458,9 +1474,40 @@
50 * atom, it means the window manager wants us to die.
52 if(e.xclient.message_type == proto_atom && *e.xclient.data.l == delete_atom) {
55 X_printf("X: got window delete message\n");
56 - /* XXX - Is it ok to call this from a SIGALRM handler? */
62 + about_to_quit = TRUE;
63 + Text_Tmp = registered_text_system();
65 + Draw_cursor_backup = Text_Tmp->Draw_cursor;
66 + Text_Tmp->Draw_cursor = Draw_cursor_fake;
68 + for (i = 0; i < 12; i++)
69 + Text_Tmp->Draw_string(14, i+6, " " , 52, 0xf0);
71 + Text_Tmp->Draw_string(15, 7, " " , 50, 0x4f);
72 + Text_Tmp->Draw_string(15, 8, " You are about to abort DosEmu session. " , 50, 0x4f);
73 + Text_Tmp->Draw_string(15, 9, " This is not recomended way for closing DosEmu. " , 50, 0x4f);
74 + Text_Tmp->Draw_string(15, 10, " Close all your programs and use exitemu command. " , 50, 0x4f);
75 + Text_Tmp->Draw_string(15, 11, " " , 50, 0x4f);
76 + Text_Tmp->Draw_string(15, 12, " Do you still want to continue? " , 50, 0x4f);
77 + Text_Tmp->Draw_string(15, 13, " " , 50, 0x4f);
78 + Text_Tmp->Draw_string(15, 14, " Y - abort DosEmu session " , 50, 0x4f);
79 + Text_Tmp->Draw_string(15, 15, " N - continue DosEmu session " , 50, 0x4f);
80 + Text_Tmp->Draw_string(15, 16, " " , 50, 0x4f);
82 + Text_Tmp->Draw_string(48, 10, "exitemu" , 7, 0x4a);
83 + Text_Tmp->Draw_string(18, 14, "Y" , 1, 0x4e);
84 + Text_Tmp->Draw_string(18, 15, "N" , 1, 0x4e);
86 + Draw_string_backup = Text_Tmp->Draw_string;
87 + Text_Tmp->Draw_string = Draw_string_fake;
92 @@ -1490,6 +1537,24 @@
96 + if (about_to_quit) {
97 + KeySym keysym = XKeycodeToKeysym(display, e.xkey.keycode, 0);
98 + if (keysym == XK_Y || keysym == XK_y) {
100 + } else if (keysym == XK_N || keysym == XK_n) {
101 + about_to_quit = FALSE;
102 + Text_Tmp->Draw_cursor = Draw_cursor_backup;
103 + Text_Tmp->Draw_string = Draw_string_backup;
104 + if(vga.mode_class == TEXT) {
105 + X_redraw_text_screen();
107 + dirty_all_video_pages();
114 if((e.xkey.state & ControlMask) && (e.xkey.state & Mod1Mask)) {
115 KeySym keysym = XKeycodeToKeysym(display, e.xkey.keycode, 0);
116 if (keysym == grab_keysym) {
117 @@ -1504,6 +1569,7 @@
123 Clears the visible selection if the cursor is inside the selection