Mercurial > emacs
annotate src/msdos.c @ 97694:83ddd0b1382b
(main): Do not use static space for the tagfile string.
author | Francesco Potortì <pot@gnu.org> |
---|---|
date | Mon, 25 Aug 2008 07:48:27 +0000 |
parents | b7440911e609 |
children | 926ec8434a52 |
rev | line source |
---|---|
19871
847fbc8725a9
Switch to raw-text as coding system.
Richard M. Stallman <rms@gnu.org>
parents:
19864
diff
changeset
|
1 /* MS-DOS specific C utilities. -*- coding: raw-text -*- |
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
2 Copyright (C) 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, |
79759 | 3 2003, 2004, 2005, 2006, 2007, 2008 |
4 Free Software Foundation, Inc. | |
5503 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
5503 | 9 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
11 (at your option) any later version. |
5503 | 12 |
13 GNU Emacs is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
5503 | 20 |
7666
13a977e6777a
(dos_rawgetc): Doc fix. Make C-, S-, and M- modifiers
Richard M. Stallman <rms@gnu.org>
parents:
7523
diff
changeset
|
21 /* Contributed by Morten Welinder */ |
13179 | 22 /* New display, keyboard, and mouse control by Kim F. Storm */ |
7666
13a977e6777a
(dos_rawgetc): Doc fix. Make C-, S-, and M- modifiers
Richard M. Stallman <rms@gnu.org>
parents:
7523
diff
changeset
|
23 |
5503 | 24 /* Note: some of the stuff here was taken from end of sysdep.c in demacs. */ |
25 | |
5980 | 26 #include <config.h> |
5503 | 27 |
28 #ifdef MSDOS | |
29 #include "lisp.h" | |
30 #include <stdio.h> | |
31 #include <stdlib.h> | |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
32 #include <time.h> |
5503 | 33 #include <sys/param.h> |
34 #include <sys/time.h> | |
35 #include <dos.h> | |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
36 #include <errno.h> |
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
37 #include <string.h> /* for bzero and string functions */ |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
38 #include <sys/stat.h> /* for _fixpath */ |
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
39 #include <unistd.h> /* for chdir, dup, dup2, etc. */ |
42192
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
40 #include <dir.h> /* for getdisk */ |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
41 #if __DJGPP__ >= 2 |
55292
d9dc976b92ba
(top-level): Add "#pragma pack(0)" after <dir.h>, to
Eli Zaretskii <eliz@gnu.org>
parents:
55198
diff
changeset
|
42 #pragma pack(0) /* dir.h does a pack(4), which isn't GCC's default */ |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
43 #include <fcntl.h> |
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
44 #include <io.h> /* for setmode */ |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
45 #include <dpmi.h> /* for __dpmi_xxx stuff */ |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
46 #include <sys/farptr.h> /* for _farsetsel, _farnspokeb */ |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
47 #include <libc/dosio.h> /* for _USE_LFN */ |
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
48 #include <conio.h> /* for cputs */ |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
49 #endif |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
50 |
5503 | 51 #include "msdos.h" |
52 #include "systime.h" | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
53 #include "frame.h" |
5503 | 54 #include "termhooks.h" |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
55 #include "termchar.h" |
9572 | 56 #include "dispextern.h" |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
57 #include "dosfns.h" |
9572 | 58 #include "termopts.h" |
88351
aac41b50c875
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
43371
diff
changeset
|
59 #include "character.h" |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
60 #include "coding.h" |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
61 #include "disptab.h" |
9572 | 62 #include "window.h" |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
63 #include "buffer.h" |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
64 #include "commands.h" |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
65 #include "blockinput.h" |
30711 | 66 #include "keyboard.h" |
52308
00e2bb6c6d5b
Include intervals.h, since STRING_INTERVALS requires that.
Eli Zaretskii <eliz@gnu.org>
parents:
51571
diff
changeset
|
67 #include "intervals.h" |
5503 | 68 #include <go32.h> |
69 #include <pc.h> | |
70 #include <ctype.h> | |
71 /* #include <process.h> */ | |
72 /* Damn that local process.h! Instead we can define P_WAIT ourselves. */ | |
73 #define P_WAIT 1 | |
74 | |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
75 #ifndef _USE_LFN |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
76 #define _USE_LFN 0 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
77 #endif |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
78 |
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
79 #ifndef _dos_ds |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
80 #define _dos_ds _go32_info_block.selector_for_linear_memory |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
81 #endif |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
82 |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
83 #if __DJGPP__ > 1 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
84 |
14999 | 85 #include <signal.h> |
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
86 #include "syssignal.h" |
14999 | 87 |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
88 #ifndef SYSTEM_MALLOC |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
89 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
90 #ifdef GNU_MALLOC |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
91 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
92 /* If other `malloc' than ours is used, force our `sbrk' behave like |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
93 Unix programs expect (resize memory blocks to keep them contiguous). |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
94 If `sbrk' from `ralloc.c' is NOT used, also zero-out sbrk'ed memory, |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
95 because that's what `gmalloc' expects to get. */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
96 #include <crt0.h> |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
97 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
98 #ifdef REL_ALLOC |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
99 int _crt0_startup_flags = _CRT0_FLAG_UNIX_SBRK; |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
100 #else /* not REL_ALLOC */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
101 int _crt0_startup_flags = (_CRT0_FLAG_UNIX_SBRK | _CRT0_FLAG_FILL_SBRK_MEMORY); |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
102 #endif /* not REL_ALLOC */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
103 #endif /* GNU_MALLOC */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
104 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
105 #endif /* not SYSTEM_MALLOC */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
106 #endif /* __DJGPP__ > 1 */ |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
107 |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
108 static unsigned long |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
109 event_timestamp () |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
110 { |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
111 struct time t; |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
112 unsigned long s; |
45332 | 113 |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
114 gettime (&t); |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
115 s = t.ti_min; |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
116 s *= 60; |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
117 s += t.ti_sec; |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
118 s *= 1000; |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
119 s += t.ti_hund * 10; |
45332 | 120 |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
121 return s; |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
122 } |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
123 |
13179 | 124 |
125 /* ------------------------ Mouse control --------------------------- | |
126 * | |
127 * Coordinates are in screen positions and zero based. | |
128 * Mouse buttons are numbered from left to right and also zero based. | |
129 */ | |
5503 | 130 |
28553
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
131 /* This used to be in termhooks.h, but mainstream Emacs code no longer |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
132 uses it, and it was removed... */ |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
133 #define NUM_MOUSE_BUTTONS (5) |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
134 |
13179 | 135 int have_mouse; /* 0: no, 1: enabled, -1: disabled */ |
136 static int mouse_visible; | |
5503 | 137 |
13179 | 138 static int mouse_last_x; |
139 static int mouse_last_y; | |
5503 | 140 |
13179 | 141 static int mouse_button_translate[NUM_MOUSE_BUTTONS]; |
142 static int mouse_button_count; | |
5503 | 143 |
13179 | 144 void |
145 mouse_on () | |
146 { | |
147 union REGS regs; | |
5503 | 148 |
13179 | 149 if (have_mouse > 0 && !mouse_visible) |
150 { | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
151 struct tty_display_info *tty = CURTTY (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
152 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
153 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
154 fprintf (tty->termscript, "<M_ON>"); |
13179 | 155 regs.x.ax = 0x0001; |
156 int86 (0x33, ®s, ®s); | |
157 mouse_visible = 1; | |
5503 | 158 } |
159 } | |
160 | |
13179 | 161 void |
162 mouse_off () | |
5503 | 163 { |
13179 | 164 union REGS regs; |
5503 | 165 |
13179 | 166 if (have_mouse > 0 && mouse_visible) |
5503 | 167 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
168 struct tty_display_info *tty = CURTTY (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
169 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
170 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
171 fprintf (tty->termscript, "<M_OFF>"); |
13179 | 172 regs.x.ax = 0x0002; |
173 int86 (0x33, ®s, ®s); | |
174 mouse_visible = 0; | |
5503 | 175 } |
176 } | |
177 | |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
178 static void |
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
179 mouse_setup_buttons (int n_buttons) |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
180 { |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
181 if (n_buttons == 3) |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
182 { |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
183 mouse_button_count = 3; |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
184 mouse_button_translate[0] = 0; /* Left */ |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
185 mouse_button_translate[1] = 2; /* Middle */ |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
186 mouse_button_translate[2] = 1; /* Right */ |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
187 } |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
188 else /* two, what else? */ |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
189 { |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
190 mouse_button_count = 2; |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
191 mouse_button_translate[0] = 0; |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
192 mouse_button_translate[1] = 1; |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
193 } |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
194 } |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
195 |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
196 DEFUN ("msdos-set-mouse-buttons", Fmsdos_set_mouse_buttons, Smsdos_set_mouse_buttons, |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
197 1, 1, "NSet number of mouse buttons to: ", |
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
198 doc: /* Set the number of mouse buttons to use by Emacs. |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
199 This is useful with mice that report the number of buttons inconsistently, |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
200 e.g., if the number of buttons is reported as 3, but Emacs only sees 2 of |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
201 them. This happens with wheeled mice on Windows 9X, for example. */) |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
202 (nbuttons) |
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
203 Lisp_Object nbuttons; |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
204 { |
34561
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
205 int n; |
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
206 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40082
diff
changeset
|
207 CHECK_NUMBER (nbuttons); |
34561
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
208 n = XINT (nbuttons); |
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
209 if (n < 2 || n > 3) |
71986
de36a2bee064
(Fmsdos_set_mouse_buttons): Use xsignal2.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
210 xsignal2 (Qargs_out_of_range, |
de36a2bee064
(Fmsdos_set_mouse_buttons): Use xsignal2.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
211 build_string ("only 2 or 3 mouse buttons are supported"), |
de36a2bee064
(Fmsdos_set_mouse_buttons): Use xsignal2.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
212 nbuttons); |
34561
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
213 mouse_setup_buttons (n); |
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
214 return Qnil; |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
215 } |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
216 |
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
217 static void |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
218 mouse_get_xy (int *x, int *y) |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
219 { |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
220 union REGS regs; |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
221 |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
222 regs.x.ax = 0x0003; |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
223 int86 (0x33, ®s, ®s); |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
224 *x = regs.x.cx / 8; |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
225 *y = regs.x.dx / 8; |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
226 } |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
227 |
5503 | 228 void |
13179 | 229 mouse_moveto (x, y) |
230 int x, y; | |
5503 | 231 { |
13179 | 232 union REGS regs; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
233 struct tty_display_info *tty = CURTTY (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
234 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
235 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
236 fprintf (tty->termscript, "<M_XY=%dx%d>", x, y); |
13179 | 237 regs.x.ax = 0x0004; |
238 mouse_last_x = regs.x.cx = x * 8; | |
239 mouse_last_y = regs.x.dx = y * 8; | |
240 int86 (0x33, ®s, ®s); | |
5503 | 241 } |
242 | |
13179 | 243 static int |
244 mouse_pressed (b, xp, yp) | |
245 int b, *xp, *yp; | |
246 { | |
247 union REGS regs; | |
248 | |
249 if (b >= mouse_button_count) | |
250 return 0; | |
251 regs.x.ax = 0x0005; | |
252 regs.x.bx = mouse_button_translate[b]; | |
253 int86 (0x33, ®s, ®s); | |
254 if (regs.x.bx) | |
255 *xp = regs.x.cx / 8, *yp = regs.x.dx / 8; | |
256 return (regs.x.bx != 0); | |
257 } | |
258 | |
259 static int | |
260 mouse_released (b, xp, yp) | |
261 int b, *xp, *yp; | |
262 { | |
263 union REGS regs; | |
264 | |
265 if (b >= mouse_button_count) | |
266 return 0; | |
267 regs.x.ax = 0x0006; | |
268 regs.x.bx = mouse_button_translate[b]; | |
269 int86 (0x33, ®s, ®s); | |
270 if (regs.x.bx) | |
271 *xp = regs.x.cx / 8, *yp = regs.x.dx / 8; | |
272 return (regs.x.bx != 0); | |
273 } | |
274 | |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
275 static int |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
276 mouse_button_depressed (b, xp, yp) |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
277 int b, *xp, *yp; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
278 { |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
279 union REGS regs; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
280 |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
281 if (b >= mouse_button_count) |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
282 return 0; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
283 regs.x.ax = 0x0003; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
284 int86 (0x33, ®s, ®s); |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
285 if ((regs.x.bx & (1 << mouse_button_translate[b])) != 0) |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
286 { |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
287 *xp = regs.x.cx / 8; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
288 *yp = regs.x.dx / 8; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
289 return 1; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
290 } |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
291 return 0; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
292 } |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
293 |
13179 | 294 void |
295 mouse_get_pos (f, insist, bar_window, part, x, y, time) | |
296 FRAME_PTR *f; | |
297 int insist; | |
298 Lisp_Object *bar_window, *x, *y; | |
299 enum scroll_bar_part *part; | |
300 unsigned long *time; | |
301 { | |
302 int ix, iy; | |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
303 Lisp_Object frame, tail; |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
304 |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
305 /* Clear the mouse-moved flag for every frame on this display. */ |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
306 FOR_EACH_FRAME (tail, frame) |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
307 XFRAME (frame)->mouse_moved = 0; |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
308 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
309 *f = SELECTED_FRAME(); |
13179 | 310 *bar_window = Qnil; |
311 mouse_get_xy (&ix, &iy); | |
312 *time = event_timestamp (); | |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
313 *x = make_number (mouse_last_x = ix); |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
314 *y = make_number (mouse_last_y = iy); |
13179 | 315 } |
316 | |
317 static void | |
318 mouse_check_moved () | |
319 { | |
320 int x, y; | |
321 | |
322 mouse_get_xy (&x, &y); | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
323 SELECTED_FRAME()->mouse_moved |= (x != mouse_last_x || y != mouse_last_y); |
13179 | 324 mouse_last_x = x; |
325 mouse_last_y = y; | |
5503 | 326 } |
327 | |
30711 | 328 /* Force the mouse driver to ``forget'' about any button clicks until |
329 now. */ | |
330 static void | |
331 mouse_clear_clicks (void) | |
332 { | |
333 int b; | |
334 | |
335 for (b = 0; b < mouse_button_count; b++) | |
336 { | |
337 int dummy_x, dummy_y; | |
338 | |
339 (void) mouse_pressed (b, &dummy_x, &dummy_y); | |
340 (void) mouse_released (b, &dummy_x, &dummy_y); | |
341 } | |
342 } | |
343 | |
13179 | 344 void |
345 mouse_init () | |
5503 | 346 { |
13179 | 347 union REGS regs; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
348 struct tty_display_info *tty = CURTTY (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
349 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
350 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
351 fprintf (tty->termscript, "<M_INIT>"); |
13179 | 352 |
353 regs.x.ax = 0x0021; | |
354 int86 (0x33, ®s, ®s); | |
355 | |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
356 /* Reset the mouse last press/release info. It seems that Windows |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
357 doesn't do that automatically when function 21h is called, which |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
358 causes Emacs to ``remember'' the click that switched focus to the |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
359 window just before Emacs was started from that window. */ |
30711 | 360 mouse_clear_clicks (); |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
361 |
13179 | 362 regs.x.ax = 0x0007; |
363 regs.x.cx = 0; | |
364 regs.x.dx = 8 * (ScreenCols () - 1); | |
365 int86 (0x33, ®s, ®s); | |
366 | |
367 regs.x.ax = 0x0008; | |
368 regs.x.cx = 0; | |
369 regs.x.dx = 8 * (ScreenRows () - 1); | |
370 int86 (0x33, ®s, ®s); | |
371 | |
372 mouse_moveto (0, 0); | |
373 mouse_visible = 0; | |
374 } | |
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
375 |
13179 | 376 /* ------------------------- Screen control ---------------------- |
377 * | |
378 */ | |
5503 | 379 |
13179 | 380 static int internal_terminal = 0; |
381 | |
382 #ifndef HAVE_X_WINDOWS | |
383 extern unsigned char ScreenAttrib; | |
384 static int screen_face; | |
385 | |
386 static int screen_size_X; | |
387 static int screen_size_Y; | |
388 static int screen_size; | |
389 | |
390 static int current_pos_X; | |
391 static int current_pos_Y; | |
392 static int new_pos_X; | |
393 static int new_pos_Y; | |
394 | |
395 static void *startup_screen_buffer; | |
396 static int startup_screen_size_X; | |
397 static int startup_screen_size_Y; | |
398 static int startup_pos_X; | |
399 static int startup_pos_Y; | |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
400 static unsigned char startup_screen_attrib; |
13179 | 401 |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
402 static clock_t startup_time; |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
403 |
13179 | 404 static int term_setup_done; |
405 | |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
406 static unsigned short outside_cursor; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
407 |
13179 | 408 /* Similar to the_only_frame. */ |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
409 struct tty_display_info the_only_display_info; |
13179 | 410 |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
411 /* Support for DOS/V (allows Japanese characters to be displayed on |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
412 standard, non-Japanese, ATs). Only supported for DJGPP v2 and later. */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
413 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
414 /* Holds the address of the text-mode screen buffer. */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
415 static unsigned long screen_old_address = 0; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
416 /* Segment and offset of the virtual screen. If 0, DOS/V is NOT loaded. */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
417 static unsigned short screen_virtual_segment = 0; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
418 static unsigned short screen_virtual_offset = 0; |
24680
fc493aad59ad
(unibyte_display_via_language_environment): Add extern.
Andrew Innes <andrewi@gnu.org>
parents:
24678
diff
changeset
|
419 /* A flag to control how to display unibyte 8-bit characters. */ |
fc493aad59ad
(unibyte_display_via_language_environment): Add extern.
Andrew Innes <andrewi@gnu.org>
parents:
24678
diff
changeset
|
420 extern int unibyte_display_via_language_environment; |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
421 |
53187
7ba9466a0ed8
(Qcursor_type, Qbar, Qhbar): Declare extern.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
422 extern Lisp_Object Qcursor_type; |
7ba9466a0ed8
(Qcursor_type, Qbar, Qhbar): Declare extern.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
423 extern Lisp_Object Qbar, Qhbar; |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
424 |
49381 | 425 /* The screen colors of the current frame, which serve as the default |
41406
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
426 colors for newly-created frames. */ |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
427 static int initial_screen_colors[2]; |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
428 |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
429 #if __DJGPP__ > 1 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
430 /* Update the screen from a part of relocated DOS/V screen buffer which |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
431 begins at OFFSET and includes COUNT characters. */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
432 static void |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
433 dosv_refresh_virtual_screen (int offset, int count) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
434 { |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
435 __dpmi_regs regs; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
436 |
28932
f8b0ac62f238
Use the term `invalid' instead of `illegal'.
Gerd Moellmann <gerd@gnu.org>
parents:
28553
diff
changeset
|
437 if (offset < 0 || count < 0) /* paranoia; invalid values crash DOS/V */ |
21489
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
438 return; |
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
439 |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
440 regs.h.ah = 0xff; /* update relocated screen */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
441 regs.x.es = screen_virtual_segment; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
442 regs.x.di = screen_virtual_offset + offset; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
443 regs.x.cx = count; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
444 __dpmi_int (0x10, ®s); |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
445 } |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
446 #endif |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
447 |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
448 static void |
13179 | 449 dos_direct_output (y, x, buf, len) |
45332 | 450 int x, y; |
13179 | 451 char *buf; |
452 int len; | |
5503 | 453 { |
21489
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
454 int t0 = 2 * (x + y * screen_size_X); |
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
455 int t = t0 + (int) ScreenPrimary; |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
456 int l0 = len; |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
457 |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
458 #if (__DJGPP__ < 2) |
13179 | 459 while (--len >= 0) { |
460 dosmemput (buf++, 1, t); | |
461 t += 2; | |
462 } | |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
463 #else |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
464 /* This is faster. */ |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
465 for (_farsetsel (_dos_ds); --len >= 0; t += 2, buf++) |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
466 _farnspokeb (t, *buf); |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
467 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
468 if (screen_virtual_segment) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
469 dosv_refresh_virtual_screen (t0, l0); |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
470 #endif |
5503 | 471 } |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
472 #endif |
5503 | 473 |
474 /* Flash the screen as a substitute for BEEPs. */ | |
475 | |
13179 | 476 #if (__DJGPP__ < 2) |
7273
24426d7e14eb
Finish downcasing mouse_init1, mouse_off,
Richard M. Stallman <rms@gnu.org>
parents:
6505
diff
changeset
|
477 static void |
7667
bae9c0fa1c2f
(do_visible_bell): Renamed from visible_bell to avoid
Richard M. Stallman <rms@gnu.org>
parents:
7666
diff
changeset
|
478 do_visible_bell (xorattr) |
5503 | 479 unsigned char xorattr; |
480 { | |
7273
24426d7e14eb
Finish downcasing mouse_init1, mouse_off,
Richard M. Stallman <rms@gnu.org>
parents:
6505
diff
changeset
|
481 asm volatile |
38314
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
482 (" movb $1,%%dl \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
483 visible_bell_0: \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
484 movl _ScreenPrimary,%%eax \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
485 call dosmemsetup \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
486 movl %%eax,%%ebx \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
487 movl %1,%%ecx \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
488 movb %0,%%al \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
489 incl %%ebx \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
490 visible_bell_1: \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
491 xorb %%al,%%gs:(%%ebx) \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
492 addl $2,%%ebx \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
493 decl %%ecx \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
494 jne visible_bell_1 \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
495 decb %%dl \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
496 jne visible_bell_3 \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
497 visible_bell_2: \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
498 movzwl %%ax,%%eax \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
499 movzwl %%ax,%%eax \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
500 movzwl %%ax,%%eax \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
501 movzwl %%ax,%%eax \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
502 decw %%cx \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
503 jne visible_bell_2 \n\ |
5fa40c87fc5b
(do_visible_bell): Add \n\ at the end of each line of
Eli Zaretskii <eliz@gnu.org>
parents:
36513
diff
changeset
|
504 jmp visible_bell_0 \n\ |
8183
d35fd7fd0ef8
(install_ctrl_break_check): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
7821
diff
changeset
|
505 visible_bell_3:" |
d35fd7fd0ef8
(install_ctrl_break_check): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
7821
diff
changeset
|
506 : /* no output */ |
13179 | 507 : "m" (xorattr), "g" (screen_size) |
8183
d35fd7fd0ef8
(install_ctrl_break_check): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
7821
diff
changeset
|
508 : "%eax", "%ebx", /* "%gs",*/ "%ecx", "%edx"); |
5503 | 509 } |
510 | |
13179 | 511 static void |
512 ScreenVisualBell (void) | |
513 { | |
514 /* This creates an xor-mask that will swap the default fore- and | |
515 background colors. */ | |
83505 | 516 do_visible_bell (((FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ()) |
517 ^ FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ())) | |
13179 | 518 * 0x11) & 0x7f); |
519 } | |
520 #endif | |
521 | |
522 #ifndef HAVE_X_WINDOWS | |
523 | |
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
524 static int blink_bit = -1; /* the state of the blink bit at startup */ |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
525 |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
526 /* Enable bright background colors. */ |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
527 static void |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
528 bright_bg (void) |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
529 { |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
530 union REGS regs; |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
531 |
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
532 /* Remember the original state of the blink/bright-background bit. |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
533 It is stored at 0040:0065h in the BIOS data area. */ |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
534 if (blink_bit == -1) |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
535 blink_bit = (_farpeekb (_dos_ds, 0x465) & 0x20) == 0x20; |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
536 |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
537 regs.h.bl = 0; |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
538 regs.x.ax = 0x1003; |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
539 int86 (0x10, ®s, ®s); |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
540 } |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
541 |
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
542 /* Disable bright background colors (and enable blinking) if we found |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
543 the video system in that state at startup. */ |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
544 static void |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
545 maybe_enable_blinking (void) |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
546 { |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
547 if (blink_bit == 1) |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
548 { |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
549 union REGS regs; |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
550 |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
551 regs.h.bl = 1; |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
552 regs.x.ax = 0x1003; |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
553 int86 (0x10, ®s, ®s); |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
554 } |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
555 } |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
556 |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
557 /* Return non-zero if the system has a VGA adapter. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
558 static int |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
559 vga_installed (void) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
560 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
561 union REGS regs; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
562 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
563 regs.x.ax = 0x1a00; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
564 int86 (0x10, ®s, ®s); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
565 if (regs.h.al == 0x1a && regs.h.bl > 5 && regs.h.bl < 13) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
566 return 1; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
567 return 0; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
568 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
569 |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
570 /* Set the screen dimensions so that it can show no less than |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
571 ROWS x COLS frame. */ |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
572 |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
573 void |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
574 dos_set_window_size (rows, cols) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
575 int *rows, *cols; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
576 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
577 char video_name[30]; |
45332 | 578 union REGS regs; |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
579 Lisp_Object video_mode; |
45332 | 580 int video_mode_value, have_vga = 0; |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
581 int current_rows = ScreenRows (), current_cols = ScreenCols (); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
582 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
583 if (*rows == current_rows && *cols == current_cols) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
584 return; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
585 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
586 mouse_off (); |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
587 have_vga = vga_installed (); |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
588 |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
589 /* If the user specified a special video mode for these dimensions, |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
590 use that mode. */ |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
591 sprintf (video_name, "screen-dimensions-%dx%d", *rows, *cols); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
592 video_mode = XSYMBOL (Fintern_soft (build_string (video_name), |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
593 Qnil))-> value; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
594 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
595 if (INTEGERP (video_mode) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
596 && (video_mode_value = XINT (video_mode)) > 0) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
597 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
598 regs.x.ax = video_mode_value; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
599 int86 (0x10, ®s, ®s); |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
600 |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
601 if (have_mouse) |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
602 { |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
603 /* Must hardware-reset the mouse, or else it won't update |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
604 its notion of screen dimensions for some non-standard |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
605 video modes. This is *painfully* slow... */ |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
606 regs.x.ax = 0; |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
607 int86 (0x33, ®s, ®s); |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
608 } |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
609 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
610 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
611 /* Find one of the dimensions supported by standard EGA/VGA |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
612 which gives us at least the required dimensions. */ |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
613 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
614 #if __DJGPP__ > 1 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
615 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
616 else |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
617 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
618 static struct { |
45332 | 619 int rows, need_vga; |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
620 } std_dimension[] = { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
621 {25, 0}, |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
622 {28, 1}, |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
623 {35, 0}, |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
624 {40, 1}, |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
625 {43, 0}, |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
626 {50, 1} |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
627 }; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
628 int i = 0; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
629 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
630 while (i < sizeof (std_dimension) / sizeof (std_dimension[0])) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
631 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
632 if (std_dimension[i].need_vga <= have_vga |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
633 && std_dimension[i].rows >= *rows) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
634 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
635 if (std_dimension[i].rows != current_rows |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
636 || *cols != current_cols) |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
637 _set_screen_lines (std_dimension[i].rows); |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
638 break; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
639 } |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
640 i++; |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
641 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
642 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
643 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
644 #else /* not __DJGPP__ > 1 */ |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
645 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
646 else if (*rows <= 25) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
647 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
648 if (current_rows != 25 || current_cols != 80) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
649 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
650 regs.x.ax = 3; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
651 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
652 regs.x.ax = 0x1101; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
653 regs.h.bl = 0; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
654 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
655 regs.x.ax = 0x1200; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
656 regs.h.bl = 32; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
657 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
658 regs.x.ax = 3; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
659 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
660 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
661 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
662 else if (*rows <= 50) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
663 if (have_vga && (current_rows != 50 || current_cols != 80) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
664 || *rows <= 43 && (current_rows != 43 || current_cols != 80)) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
665 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
666 regs.x.ax = 3; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
667 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
668 regs.x.ax = 0x1112; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
669 regs.h.bl = 0; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
670 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
671 regs.x.ax = 0x1200; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
672 regs.h.bl = 32; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
673 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
674 regs.x.ax = 0x0100; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
675 regs.x.cx = 7; |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
676 int86 (0x10, ®s, ®s); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
677 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
678 #endif /* not __DJGPP__ > 1 */ |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
679 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
680 if (have_mouse) |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
681 { |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
682 mouse_init (); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
683 mouse_on (); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
684 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
685 |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
686 /* Tell the caller what dimensions have been REALLY set. */ |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
687 *rows = ScreenRows (); |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
688 *cols = ScreenCols (); |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
689 |
32730
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
690 /* Update Emacs' notion of screen dimensions. */ |
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
691 screen_size_X = *cols; |
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
692 screen_size_Y = *rows; |
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
693 screen_size = *cols * *rows; |
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
694 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
695 #if __DJGPP__ > 1 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
696 /* If the dimensions changed, the mouse highlight info is invalid. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
697 if (current_rows != *rows || current_cols != *cols) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
698 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
699 struct frame *f = SELECTED_FRAME(); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
700 struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
701 Lisp_Object window = dpyinfo->mouse_face_window; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
702 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
703 if (! NILP (window) && XFRAME (XWINDOW (window)->frame) == f) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
704 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
705 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
706 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
707 dpyinfo->mouse_face_window = Qnil; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
708 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
709 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
710 #endif |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
711 |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
712 /* Enable bright background colors. */ |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
713 bright_bg (); |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
714 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
715 /* FIXME: I'm not sure the above will run at all on DOS/V. But let's |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
716 be defensive anyway. */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
717 if (screen_virtual_segment) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
718 dosv_refresh_virtual_screen (0, *cols * *rows); |
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
719 } |
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
720 |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
721 /* If we write a character in the position where the mouse is, |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
722 the mouse cursor may need to be refreshed. */ |
7744
da18793f532d
(output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7667
diff
changeset
|
723 |
da18793f532d
(output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7667
diff
changeset
|
724 static void |
13179 | 725 mouse_off_maybe () |
7744
da18793f532d
(output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7667
diff
changeset
|
726 { |
13179 | 727 int x, y; |
45332 | 728 |
13179 | 729 if (!mouse_visible) |
730 return; | |
45332 | 731 |
13179 | 732 mouse_get_xy (&x, &y); |
733 if (y != new_pos_Y || x < new_pos_X) | |
734 return; | |
45332 | 735 |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
736 mouse_off (); |
9572 | 737 } |
738 | |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
739 #define DEFAULT_CURSOR_START (-1) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
740 #define DEFAULT_CURSOR_WIDTH (-1) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
741 #define BOX_CURSOR_WIDTH (-32) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
742 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
743 /* Set cursor to begin at scan line START_LINE in the character cell |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
744 and extend for WIDTH scan lines. Scan lines are counted from top |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
745 of the character cell, starting from zero. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
746 static void |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
747 msdos_set_cursor_shape (struct frame *f, int start_line, int width) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
748 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
749 #if __DJGPP__ > 1 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
750 unsigned desired_cursor; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
751 __dpmi_regs regs; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
752 int max_line, top_line, bot_line; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
753 struct tty_display_info *tty = FRAME_TTY (f); |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
754 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
755 /* Avoid the costly BIOS call if F isn't the currently selected |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
756 frame. Allow for NULL as unconditionally meaning the selected |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
757 frame. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
758 if (f && f != SELECTED_FRAME()) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
759 return; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
760 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
761 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
762 fprintf (tty->termscript, "\nCURSOR SHAPE=(%d,%d)", start_line, width); |
57048
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
763 |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
764 /* The character cell size in scan lines is stored at 40:85 in the |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
765 BIOS data area. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
766 max_line = _farpeekw (_dos_ds, 0x485) - 1; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
767 switch (max_line) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
768 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
769 default: /* this relies on CGA cursor emulation being ON! */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
770 case 7: |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
771 bot_line = 7; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
772 break; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
773 case 9: |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
774 bot_line = 9; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
775 break; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
776 case 13: |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
777 bot_line = 12; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
778 break; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
779 case 15: |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
780 bot_line = 14; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
781 break; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
782 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
783 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
784 if (width < 0) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
785 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
786 if (width == BOX_CURSOR_WIDTH) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
787 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
788 top_line = 0; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
789 bot_line = max_line; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
790 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
791 else if (start_line != DEFAULT_CURSOR_START) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
792 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
793 top_line = start_line; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
794 bot_line = top_line - width - 1; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
795 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
796 else if (width != DEFAULT_CURSOR_WIDTH) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
797 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
798 top_line = 0; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
799 bot_line = -1 - width; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
800 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
801 else |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
802 top_line = bot_line + 1; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
803 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
804 else if (width == 0) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
805 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
806 /* [31, 0] seems to DTRT for all screen sizes. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
807 top_line = 31; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
808 bot_line = 0; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
809 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
810 else /* WIDTH is positive */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
811 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
812 if (start_line != DEFAULT_CURSOR_START) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
813 bot_line = start_line; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
814 top_line = bot_line - (width - 1); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
815 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
816 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
817 /* If the current cursor shape is already what they want, we are |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
818 history here. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
819 desired_cursor = ((top_line & 0x1f) << 8) | (bot_line & 0x1f); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
820 if (desired_cursor == _farpeekw (_dos_ds, 0x460)) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
821 return; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
822 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
823 regs.h.ah = 1; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
824 regs.x.cx = desired_cursor; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
825 __dpmi_int (0x10, ®s); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
826 #endif /* __DJGPP__ > 1 */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
827 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
828 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
829 static void |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
830 IT_set_cursor_type (struct frame *f, Lisp_Object cursor_type) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
831 { |
44695 | 832 if (EQ (cursor_type, Qbar) || EQ (cursor_type, Qhbar)) |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
833 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
834 /* Just BAR means the normal EGA/VGA cursor. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
835 msdos_set_cursor_shape (f, DEFAULT_CURSOR_START, DEFAULT_CURSOR_WIDTH); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
836 } |
44695 | 837 else if (CONSP (cursor_type) |
838 && (EQ (XCAR (cursor_type), Qbar) | |
839 || EQ (XCAR (cursor_type), Qhbar))) | |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
840 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
841 Lisp_Object bar_parms = XCDR (cursor_type); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
842 int width; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
843 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
844 if (INTEGERP (bar_parms)) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
845 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
846 /* Feature: negative WIDTH means cursor at the top |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
847 of the character cell, zero means invisible cursor. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
848 width = XINT (bar_parms); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
849 msdos_set_cursor_shape (f, width >= 0 ? DEFAULT_CURSOR_START : 0, |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
850 width); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
851 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
852 else if (CONSP (bar_parms) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
853 && INTEGERP (XCAR (bar_parms)) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
854 && INTEGERP (XCDR (bar_parms))) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
855 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
856 int start_line = XINT (XCDR (bar_parms)); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
857 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
858 width = XINT (XCAR (bar_parms)); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
859 msdos_set_cursor_shape (f, start_line, width); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
860 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
861 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
862 else |
57048
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
863 { |
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
864 /* Treat anything unknown as "box cursor". This includes nil, so |
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
865 that a frame which doesn't specify a cursor type gets a box, |
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
866 which is the default in Emacs. */ |
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
867 msdos_set_cursor_shape (f, 0, BOX_CURSOR_WIDTH); |
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
868 } |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
869 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
870 |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
871 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
872 IT_ring_bell (struct frame *f) |
9572 | 873 { |
874 if (visible_bell) | |
875 { | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
876 mouse_off (); |
13179 | 877 ScreenVisualBell (); |
9572 | 878 } |
879 else | |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
880 { |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
881 union REGS inregs, outregs; |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
882 inregs.h.ah = 2; |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
883 inregs.h.dl = 7; |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
884 intdos (&inregs, &outregs); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
885 } |
9572 | 886 } |
887 | |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
888 /* Given a face id FACE, extract the face parameters to be used for |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
889 display until the face changes. The face parameters (actually, its |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
890 color) are used to construct the video attribute byte for each |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
891 glyph during the construction of the buffer that is then blitted to |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
892 the video RAM. */ |
9572 | 893 static void |
894 IT_set_face (int face) | |
895 { | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
896 struct frame *sf = SELECTED_FRAME(); |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
897 struct face *fp = FACE_FROM_ID (sf, face); |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
898 struct face *dfp = FACE_FROM_ID (sf, DEFAULT_FACE_ID); |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
899 unsigned long fg, bg, dflt_fg, dflt_bg; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
900 struct tty_display_info *tty = FRAME_TTY (sf); |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
901 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
902 if (!fp) |
25214
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
903 { |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
904 fp = dfp; |
25214
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
905 /* The default face for the frame should always be realized and |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
906 cached. */ |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
907 if (!fp) |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
908 abort (); |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
909 } |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
910 screen_face = face; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
911 fg = fp->foreground; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
912 bg = fp->background; |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
913 dflt_fg = dfp->foreground; |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
914 dflt_bg = dfp->background; |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
915 |
40082
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
916 /* Don't use invalid colors. In particular, FACE_TTY_DEFAULT_* colors |
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
917 mean use the colors of the default face. Note that we assume all |
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
918 16 colors to be available for the background, since Emacs switches |
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
919 on this mode (and loses the blinking attribute) at startup. */ |
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26729
diff
changeset
|
920 if (fg == FACE_TTY_DEFAULT_COLOR || fg == FACE_TTY_DEFAULT_FG_COLOR) |
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
921 fg = FRAME_FOREGROUND_PIXEL (sf); |
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26729
diff
changeset
|
922 else if (fg == FACE_TTY_DEFAULT_BG_COLOR) |
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
923 fg = FRAME_BACKGROUND_PIXEL (sf); |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
924 if (bg == FACE_TTY_DEFAULT_COLOR || bg == FACE_TTY_DEFAULT_BG_COLOR) |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
925 bg = FRAME_BACKGROUND_PIXEL (sf); |
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26729
diff
changeset
|
926 else if (bg == FACE_TTY_DEFAULT_FG_COLOR) |
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
927 bg = FRAME_FOREGROUND_PIXEL (sf); |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
928 |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
929 /* Make sure highlighted lines really stand out, come what may. */ |
40082
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
930 if (fp->tty_reverse_p && (fg == dflt_fg && bg == dflt_bg)) |
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
931 { |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
932 unsigned long tem = fg; |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
933 |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
934 fg = bg; |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
935 bg = tem; |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
936 } |
34676
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
937 /* If the user requested inverse video, obey. */ |
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
938 if (inverse_video) |
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
939 { |
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
940 unsigned long tem2 = fg; |
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
941 |
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
942 fg = bg; |
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
943 bg = tem2; |
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
944 } |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
945 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
946 fprintf (tty->termscript, "<FACE %d: %d/%d[FG:%d/BG:%d]>", face, |
40082
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
947 fp->foreground, fp->background, fg, bg); |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
948 if (fg >= 0 && fg < 16) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
949 { |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
950 ScreenAttrib &= 0xf0; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
951 ScreenAttrib |= fg; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
952 } |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
953 if (bg >= 0 && bg < 16) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
954 { |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
955 ScreenAttrib &= 0x0f; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
956 ScreenAttrib |= ((bg & 0x0f) << 4); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
957 } |
9572 | 958 } |
959 | |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
960 Lisp_Object Vdos_unsupported_char_glyph; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
961 extern unsigned char *encode_terminal_code (struct glyph *, int, |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
962 struct coding_system *); |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
963 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
964 IT_write_glyphs (struct frame *f, struct glyph *str, int str_len) |
9572 | 965 { |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
966 unsigned char *screen_buf, *screen_bp, *screen_buf_end, *bp; |
55662
4cea1f00f7bb
(syms_of_msdos): Initialize dos-unsupported-char-glyph with make_number.
Eli Zaretskii <eliz@gnu.org>
parents:
55650
diff
changeset
|
967 int unsupported_face = 0; |
4cea1f00f7bb
(syms_of_msdos): Initialize dos-unsupported-char-glyph with make_number.
Eli Zaretskii <eliz@gnu.org>
parents:
55650
diff
changeset
|
968 unsigned unsupported_char = '\177'; |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
969 int offset = 2 * (new_pos_X + screen_size_X * new_pos_Y); |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
970 register int sl = str_len; |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
971 register int tlen = GLYPH_TABLE_LENGTH; |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
972 register Lisp_Object *tbase = GLYPH_TABLE_BASE; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
973 struct tty_display_info *tty = FRAME_TTY (f); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
974 struct frame *sf; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
975 unsigned char *conversion_buffer; |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
976 |
24001
fce0e760c4ab
(IT_write_glyphs): Move constant expression out of the loop.
Eli Zaretskii <eliz@gnu.org>
parents:
23971
diff
changeset
|
977 /* Do we need to consider conversion of unibyte characters to |
fce0e760c4ab
(IT_write_glyphs): Move constant expression out of the loop.
Eli Zaretskii <eliz@gnu.org>
parents:
23971
diff
changeset
|
978 multibyte? */ |
fce0e760c4ab
(IT_write_glyphs): Move constant expression out of the loop.
Eli Zaretskii <eliz@gnu.org>
parents:
23971
diff
changeset
|
979 int convert_unibyte_characters |
24678
56fe3cae0f96
(unibyte_display_via_language_environment):
Andrew Innes <andrewi@gnu.org>
parents:
24593
diff
changeset
|
980 = (NILP (current_buffer->enable_multibyte_characters) |
56fe3cae0f96
(unibyte_display_via_language_environment):
Andrew Innes <andrewi@gnu.org>
parents:
24593
diff
changeset
|
981 && unibyte_display_via_language_environment); |
24001
fce0e760c4ab
(IT_write_glyphs): Move constant expression out of the loop.
Eli Zaretskii <eliz@gnu.org>
parents:
23971
diff
changeset
|
982 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
983 /* If terminal_coding does any conversion, use it, otherwise use |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
984 safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
985 because it always returns 1 if terminal_coding.src_multibyte is 1. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
986 struct coding_system *coding = FRAME_TERMINAL_CODING (f); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
987 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
988 if (!(coding->common_flags & CODING_REQUIRE_ENCODING_MASK)) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
989 coding = &safe_terminal_coding; |
30835
45f168392f57
(IT_write_glyphs): Use a locally declared conversion_buffer.
Kenichi Handa <handa@m17n.org>
parents:
30826
diff
changeset
|
990 |
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
991 if (str_len <= 0) return; |
45332 | 992 |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
993 screen_buf = screen_bp = alloca (str_len * 2); |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
994 screen_buf_end = screen_buf + str_len * 2; |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
995 sf = SELECTED_FRAME(); |
25214
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
996 |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
997 /* Since faces get cached and uncached behind our back, we can't |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
998 rely on their indices in the cache being consistent across |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
999 invocations. So always reset the screen face to the default |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
1000 face of the frame, before writing glyphs, and let the glyphs |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
1001 set the right face if it's different from the default. */ |
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
1002 IT_set_face (DEFAULT_FACE_ID); |
45332 | 1003 |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1004 /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1005 the tail. */ |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1006 coding->mode &= ~CODING_MODE_LAST_BLOCK; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1007 while (sl > 0) |
9572 | 1008 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1009 int cf; |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1010 |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1011 /* Glyphs with GLYPH_MASK_PADDING bit set are actually there |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1012 only for the redisplay code to know how many columns does |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1013 this character occupy on the screen. Skip padding glyphs. */ |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1014 if (CHAR_GLYPH_PADDING_P (*str)) |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1015 { |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1016 str++; |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1017 sl--; |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1018 } |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1019 else |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1020 { |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1021 /* If the face of this glyph is different from the current |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1022 screen face, update the screen attribute byte. */ |
34657
9ff4148959a8
(IT_write_glyphs): Compute the glyph face from str->face_id.
Eli Zaretskii <eliz@gnu.org>
parents:
34561
diff
changeset
|
1023 cf = str->face_id; |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1024 if (cf != screen_face) |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1025 IT_set_face (cf); /* handles invalid faces gracefully */ |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1026 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1027 if (sl <= 1) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1028 /* This is the last glyph. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1029 coding->mode |= CODING_MODE_LAST_BLOCK; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1030 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1031 conversion_buffer = encode_terminal_code (str, 1, coding); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1032 if (coding->produced > 0) |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1033 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1034 if (2*coding->produced > screen_buf_end - screen_bp) |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1035 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1036 /* The allocated buffer for screen writes is too small. |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1037 Flush it and loop again without incrementing STR, so |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1038 that the next loop will begin with the same glyph. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1039 int nbytes = screen_bp - screen_buf; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1040 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1041 mouse_off_maybe (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1042 dosmemput (screen_buf, nbytes, (int)ScreenPrimary + offset); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1043 if (screen_virtual_segment) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1044 dosv_refresh_virtual_screen (offset, nbytes / 2); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1045 new_pos_X += nbytes / 2; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1046 offset += nbytes; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1047 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1048 /* Prepare to reuse the same buffer again. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1049 screen_bp = screen_buf; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1050 continue; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1051 } |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1052 else |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1053 { |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1054 /* There's enough place in the allocated buffer to add |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1055 the encoding of this glyph. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1056 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1057 /* Copy the encoded bytes to the allocated buffer. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1058 for (bp = conversion_buffer; coding->produced--; bp++) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1059 { |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1060 *screen_bp++ = (unsigned char)*bp; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1061 *screen_bp++ = ScreenAttrib; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1062 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1063 fputc (*bp, tty->termscript); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1064 } |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1065 } |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1066 } |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1067 /* Update STR and its remaining length. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1068 str++; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1069 sl--; |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1070 } |
9572 | 1071 } |
13179 | 1072 |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1073 /* Dump whatever is left in the screen buffer. */ |
13179 | 1074 mouse_off_maybe (); |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1075 dosmemput (screen_buf, screen_bp - screen_buf, (int)ScreenPrimary + offset); |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1076 if (screen_virtual_segment) |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1077 dosv_refresh_virtual_screen (offset, (screen_bp - screen_buf) / 2); |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1078 new_pos_X += (screen_bp - screen_buf) / 2; |
9572 | 1079 } |
1080 | |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1081 /************************************************************************ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1082 Mouse Highlight (and friends..) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1083 ************************************************************************/ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1084 |
44359
ff9f7aee02c8
Rename autoselect_window_p to mouse_autoselect_window.
Pavel Janík <Pavel@Janik.cz>
parents:
44337
diff
changeset
|
1085 /* Last window where we saw the mouse. Used by mouse-autoselect-window. */ |
43363
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
1086 static Lisp_Object last_mouse_window; |
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
1087 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1088 static int mouse_preempted = 0; /* non-zero when XMenu gobbles mouse events */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1089 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1090 /* Set the mouse pointer shape according to whether it is in the |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1091 area where the mouse highlight is in effect. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1092 static void |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1093 IT_set_mouse_pointer (int mode) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1094 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1095 /* A no-op for now. DOS text-mode mouse pointer doesn't offer too |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1096 many possibilities to change its shape, and the available |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1097 functionality pretty much sucks (e.g., almost every reasonable |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1098 shape will conceal the character it is on). Since the color of |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1099 the pointer changes in the highlighted area, it is not clear to |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1100 me whether anything else is required, anyway. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1101 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1102 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1103 /* Display the active region described by mouse_face_* |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1104 in its mouse-face if HL > 0, in its normal face if HL = 0. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1105 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1106 show_mouse_face (struct tty_display_info *dpyinfo, int hl) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1107 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1108 struct window *w = XWINDOW (dpyinfo->mouse_face_window); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1109 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1110 int i; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1111 struct face *fp; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1112 struct tty_display_info *tty = FRAME_TTY (f); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1113 |
45332 | 1114 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1115 /* If window is in the process of being destroyed, don't bother |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1116 doing anything. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1117 if (w->current_matrix == NULL) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1118 goto set_cursor_shape; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1119 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1120 /* Recognize when we are called to operate on rows that don't exist |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1121 anymore. This can happen when a window is split. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1122 if (dpyinfo->mouse_face_end_row >= w->current_matrix->nrows) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1123 goto set_cursor_shape; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1124 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1125 /* There's no sense to do anything if the mouse face isn't realized. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1126 if (hl > 0) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1127 { |
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
1128 if (dpyinfo->mouse_face_hidden) |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
1129 goto set_cursor_shape; |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
1130 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1131 fp = FACE_FROM_ID (SELECTED_FRAME(), dpyinfo->mouse_face_face_id); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1132 if (!fp) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1133 goto set_cursor_shape; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1134 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1135 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1136 /* Note that mouse_face_beg_row etc. are window relative. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1137 for (i = dpyinfo->mouse_face_beg_row; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1138 i <= dpyinfo->mouse_face_end_row; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1139 i++) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1140 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1141 int start_hpos, end_hpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1142 struct glyph_row *row = MATRIX_ROW (w->current_matrix, i); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1143 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1144 /* Don't do anything if row doesn't have valid contents. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1145 if (!row->enabled_p) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1146 continue; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1147 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1148 /* For all but the first row, the highlight starts at column 0. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1149 if (i == dpyinfo->mouse_face_beg_row) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1150 start_hpos = dpyinfo->mouse_face_beg_col; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1151 else |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1152 start_hpos = 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1153 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1154 if (i == dpyinfo->mouse_face_end_row) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1155 end_hpos = dpyinfo->mouse_face_end_col; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1156 else |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1157 end_hpos = row->used[TEXT_AREA]; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1158 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1159 if (end_hpos <= start_hpos) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1160 continue; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1161 /* Record that some glyphs of this row are displayed in |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1162 mouse-face. */ |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1163 row->mouse_face_p = hl > 0; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1164 if (hl > 0) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1165 { |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1166 int vpos = row->y + WINDOW_TOP_EDGE_Y (w); |
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1167 int kstart = start_hpos + WINDOW_LEFT_EDGE_X (w); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1168 int nglyphs = end_hpos - start_hpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1169 int offset = ScreenPrimary + 2*(vpos*screen_size_X + kstart) + 1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1170 int start_offset = offset; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1171 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1172 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1173 fprintf (tty->termscript, "\n<MH+ %d-%d:%d>", |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1174 kstart, kstart + nglyphs - 1, vpos); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1175 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1176 mouse_off (); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1177 IT_set_face (dpyinfo->mouse_face_face_id); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1178 /* Since we are going to change only the _colors_ of the |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1179 displayed text, there's no need to go through all the |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1180 pain of generating and encoding the text from the glyphs. |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1181 Instead, we simply poke the attribute byte of each |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1182 affected position in video memory with the colors |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1183 computed by IT_set_face! */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1184 _farsetsel (_dos_ds); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1185 while (nglyphs--) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1186 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1187 _farnspokeb (offset, ScreenAttrib); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1188 offset += 2; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1189 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1190 if (screen_virtual_segment) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1191 dosv_refresh_virtual_screen (start_offset, end_hpos - start_hpos); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1192 mouse_on (); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1193 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1194 else |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1195 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1196 /* We are removing a previously-drawn mouse highlight. The |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1197 safest way to do so is to redraw the glyphs anew, since |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1198 all kinds of faces and display tables could have changed |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1199 behind our back. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1200 int nglyphs = end_hpos - start_hpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1201 int save_x = new_pos_X, save_y = new_pos_Y; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1202 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1203 if (end_hpos >= row->used[TEXT_AREA]) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1204 nglyphs = row->used[TEXT_AREA] - start_hpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1205 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1206 /* IT_write_glyphs writes at cursor position, so we need to |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1207 temporarily move cursor coordinates to the beginning of |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1208 the highlight region. */ |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1209 new_pos_X = start_hpos + WINDOW_LEFT_EDGE_X (w); |
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1210 new_pos_Y = row->y + WINDOW_TOP_EDGE_Y (w); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1211 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1212 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1213 fprintf (tty->termscript, "<MH- %d-%d:%d>", |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1214 new_pos_X, new_pos_X + nglyphs - 1, new_pos_Y); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1215 IT_write_glyphs (f, row->glyphs[TEXT_AREA] + start_hpos, nglyphs); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1216 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1217 fputs ("\n", tty->termscript); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1218 new_pos_X = save_x; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1219 new_pos_Y = save_y; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1220 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1221 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1222 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1223 set_cursor_shape: |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1224 /* Change the mouse pointer shape. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1225 IT_set_mouse_pointer (hl); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1226 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1227 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1228 /* Clear out the mouse-highlighted active region. |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1229 Redraw it un-highlighted first. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1230 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1231 clear_mouse_face (struct tty_display_info *dpyinfo) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1232 { |
54730
c33e4ac43939
(clear_mouse_face): Only clear mouse highlight if not hidden.
Kim F. Storm <storm@cua.dk>
parents:
53187
diff
changeset
|
1233 if (!dpyinfo->mouse_face_hidden && ! NILP (dpyinfo->mouse_face_window)) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1234 show_mouse_face (dpyinfo, 0); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1235 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1236 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1237 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1238 dpyinfo->mouse_face_window = Qnil; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1239 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1240 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1241 /* Find the glyph matrix position of buffer position POS in window W. |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1242 *HPOS and *VPOS are set to the positions found. W's current glyphs |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1243 must be up to date. If POS is above window start return (0, 0). |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1244 If POS is after end of W, return end of last line in W. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1245 static int |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1246 fast_find_position (struct window *w, int pos, int *hpos, int *vpos) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1247 { |
45332 | 1248 int i, lastcol, line_start_position, maybe_next_line_p = 0; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1249 int yb = window_text_bottom_y (w); |
45332 | 1250 struct glyph_row *row = MATRIX_ROW (w->current_matrix, 0), *best_row = row; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1251 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1252 while (row->y < yb) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1253 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1254 if (row->used[TEXT_AREA]) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1255 line_start_position = row->glyphs[TEXT_AREA]->charpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1256 else |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1257 line_start_position = 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1258 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1259 if (line_start_position > pos) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1260 break; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1261 /* If the position sought is the end of the buffer, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1262 don't include the blank lines at the bottom of the window. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1263 else if (line_start_position == pos |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1264 && pos == BUF_ZV (XBUFFER (w->buffer))) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1265 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1266 maybe_next_line_p = 1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1267 break; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1268 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1269 else if (line_start_position > 0) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1270 best_row = row; |
34483
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1271 |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1272 /* Don't overstep the last matrix row, lest we get into the |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1273 never-never land... */ |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1274 if (row->y + 1 >= yb) |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1275 break; |
45332 | 1276 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1277 ++row; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1278 } |
45332 | 1279 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1280 /* Find the right column within BEST_ROW. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1281 lastcol = 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1282 row = best_row; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1283 for (i = 0; i < row->used[TEXT_AREA]; i++) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1284 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1285 struct glyph *glyph = row->glyphs[TEXT_AREA] + i; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1286 int charpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1287 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1288 charpos = glyph->charpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1289 if (charpos == pos) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1290 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1291 *hpos = i; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1292 *vpos = row->y; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1293 return 1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1294 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1295 else if (charpos > pos) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1296 break; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1297 else if (charpos > 0) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1298 lastcol = i; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1299 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1300 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1301 /* If we're looking for the end of the buffer, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1302 and we didn't find it in the line we scanned, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1303 use the start of the following line. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1304 if (maybe_next_line_p) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1305 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1306 ++row; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1307 lastcol = 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1308 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1309 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1310 *vpos = row->y; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1311 *hpos = lastcol + 1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1312 return 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1313 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1314 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1315 /* Take proper action when mouse has moved to the mode or top line of |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1316 window W, x-position X. MODE_LINE_P non-zero means mouse is on the |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1317 mode line. X is relative to the start of the text display area of |
41122 | 1318 W, so the width of fringes and scroll bars must be subtracted |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1319 to get a position relative to the start of the mode line. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1320 static void |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1321 IT_note_mode_line_highlight (struct window *w, int x, int mode_line_p) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1322 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1323 struct frame *f = XFRAME (w->frame); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1324 struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1325 struct glyph_row *row; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1326 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1327 if (mode_line_p) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1328 row = MATRIX_MODE_LINE_ROW (w->current_matrix); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1329 else |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1330 row = MATRIX_HEADER_LINE_ROW (w->current_matrix); |
45332 | 1331 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1332 if (row->enabled_p) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1333 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1334 extern Lisp_Object Qhelp_echo; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1335 struct glyph *glyph, *end; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1336 Lisp_Object help, map; |
45332 | 1337 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1338 /* Find the glyph under X. */ |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1339 glyph = (row->glyphs[TEXT_AREA] |
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1340 + x |
52315 | 1341 /* in case someone implements scroll bars some day... */ |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1342 - WINDOW_LEFT_SCROLL_BAR_AREA_WIDTH (w)); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1343 end = glyph + row->used[TEXT_AREA]; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1344 if (glyph < end |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1345 && STRINGP (glyph->object) |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46272
diff
changeset
|
1346 && STRING_INTERVALS (glyph->object) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1347 && glyph->charpos >= 0 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46272
diff
changeset
|
1348 && glyph->charpos < SCHARS (glyph->object)) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1349 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1350 /* If we're on a string with `help-echo' text property, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1351 arrange for the help to be displayed. This is done by |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1352 setting the global variable help_echo to the help string. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1353 help = Fget_text_property (make_number (glyph->charpos), |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1354 Qhelp_echo, glyph->object); |
30050
ed1979c6dfb9
* xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29613
diff
changeset
|
1355 if (!NILP (help)) |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1356 { |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1357 help_echo_string = help; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1358 XSETWINDOW (help_echo_window, w); |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1359 help_echo_object = glyph->object; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1360 help_echo_pos = glyph->charpos; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1361 } |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1362 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1363 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1364 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1365 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1366 /* Take proper action when the mouse has moved to position X, Y on |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1367 frame F as regards highlighting characters that have mouse-face |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1368 properties. Also de-highlighting chars where the mouse was before. |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1369 X and Y can be negative or out of range. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1370 static void |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1371 IT_note_mouse_highlight (struct frame *f, int x, int y) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1372 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1373 struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1374 enum window_part part = ON_NOTHING; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1375 Lisp_Object window; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1376 struct window *w; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1377 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1378 /* When a menu is active, don't highlight because this looks odd. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1379 if (mouse_preempted) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1380 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1381 |
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
1382 if (NILP (Vmouse_highlight) |
28008
5b87cdbef5a8
(IT_note_mouse_highlight): Return immediately if frame's
Eli Zaretskii <eliz@gnu.org>
parents:
27775
diff
changeset
|
1383 || !f->glyphs_initialized_p) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1384 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1385 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1386 dpyinfo->mouse_face_mouse_x = x; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1387 dpyinfo->mouse_face_mouse_y = y; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1388 dpyinfo->mouse_face_mouse_frame = f; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1389 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1390 if (dpyinfo->mouse_face_defer) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1391 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1392 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1393 if (gc_in_progress) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1394 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1395 dpyinfo->mouse_face_deferred_gc = 1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1396 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1397 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1398 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1399 /* Which window is that in? */ |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1400 window = window_from_coordinates (f, x, y, &part, &x, &y, 0); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1401 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1402 /* If we were displaying active text in another window, clear that. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1403 if (! EQ (window, dpyinfo->mouse_face_window)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1404 clear_mouse_face (dpyinfo); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1405 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1406 /* Not on a window -> return. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1407 if (!WINDOWP (window)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1408 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1409 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1410 /* Convert to window-relative coordinates. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1411 w = XWINDOW (window); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1412 |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1413 if (part == ON_MODE_LINE || part == ON_HEADER_LINE) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1414 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1415 /* Mouse is on the mode or top line. */ |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1416 IT_note_mode_line_highlight (w, x, part == ON_MODE_LINE); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1417 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1418 } |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1419 |
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1420 IT_set_mouse_pointer (0); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1421 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1422 /* Are we in a window whose display is up to date? |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1423 And verify the buffer's text has not changed. */ |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1424 if (part == ON_TEXT |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1425 && EQ (w->window_end_valid, w->buffer) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1426 && XFASTINT (w->last_modified) == BUF_MODIFF (XBUFFER (w->buffer)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1427 && (XFASTINT (w->last_overlay_modified) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1428 == BUF_OVERLAY_MODIFF (XBUFFER (w->buffer)))) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1429 { |
45332 | 1430 int pos, i, nrows = w->current_matrix->nrows; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1431 struct glyph_row *row; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1432 struct glyph *glyph; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1433 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1434 /* Find the glyph under X/Y. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1435 glyph = NULL; |
34483
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1436 if (y >= 0 && y < nrows) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1437 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1438 row = MATRIX_ROW (w->current_matrix, y); |
34483
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1439 /* Give up if some row before the one we are looking for is |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1440 not enabled. */ |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1441 for (i = 0; i <= y; i++) |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1442 if (!MATRIX_ROW (w->current_matrix, i)->enabled_p) |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1443 break; |
eccf7d43bead
(fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents:
32730
diff
changeset
|
1444 if (i > y /* all rows upto and including the one at Y are enabled */ |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1445 && row->displays_text_p |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1446 && x < window_box_width (w, TEXT_AREA)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1447 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1448 glyph = row->glyphs[TEXT_AREA]; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1449 if (x >= row->used[TEXT_AREA]) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1450 glyph = NULL; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1451 else |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1452 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1453 glyph += x; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1454 if (!BUFFERP (glyph->object)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1455 glyph = NULL; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1456 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1457 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1458 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1459 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1460 /* Clear mouse face if X/Y not over text. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1461 if (glyph == NULL) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1462 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1463 clear_mouse_face (dpyinfo); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1464 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1465 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1466 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1467 if (!BUFFERP (glyph->object)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1468 abort (); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1469 pos = glyph->charpos; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1470 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1471 /* Check for mouse-face and help-echo. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1472 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1473 extern Lisp_Object Qmouse_face; |
45332 | 1474 Lisp_Object mouse_face, overlay, position, *overlay_vec; |
77906
a33e69b10eed
(getdefdir): Delete stray semicolon.
Chong Yidong <cyd@stupidchicken.com>
parents:
75348
diff
changeset
|
1475 int noverlays, obegv, ozv; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1476 struct buffer *obuf; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1477 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1478 /* If we get an out-of-range value, return now; avoid an error. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1479 if (pos > BUF_Z (XBUFFER (w->buffer))) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1480 return; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1481 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1482 /* Make the window's buffer temporarily current for |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1483 overlays_at and compute_char_face. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1484 obuf = current_buffer; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1485 current_buffer = XBUFFER (w->buffer); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1486 obegv = BEGV; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1487 ozv = ZV; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1488 BEGV = BEG; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1489 ZV = Z; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1490 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1491 /* Is this char mouse-active or does it have help-echo? */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1492 XSETINT (position, pos); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1493 |
55650
c8d69f7304ee
(IT_note_mouse_highlight): Use GET_OVERLAYS_AT.
Kim F. Storm <storm@cua.dk>
parents:
55292
diff
changeset
|
1494 /* Put all the overlays we want in a vector in overlay_vec. */ |
c8d69f7304ee
(IT_note_mouse_highlight): Use GET_OVERLAYS_AT.
Kim F. Storm <storm@cua.dk>
parents:
55292
diff
changeset
|
1495 GET_OVERLAYS_AT (pos, overlay_vec, noverlays, NULL, 0); |
30381
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1496 /* Sort overlays into increasing priority order. */ |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1497 noverlays = sort_overlays (overlay_vec, noverlays, w); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1498 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1499 /* Check mouse-face highlighting. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1500 if (! (EQ (window, dpyinfo->mouse_face_window) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1501 && y >= dpyinfo->mouse_face_beg_row |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1502 && y <= dpyinfo->mouse_face_end_row |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1503 && (y > dpyinfo->mouse_face_beg_row |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1504 || x >= dpyinfo->mouse_face_beg_col) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1505 && (y < dpyinfo->mouse_face_end_row |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1506 || x < dpyinfo->mouse_face_end_col |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1507 || dpyinfo->mouse_face_past_end))) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1508 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1509 /* Clear the display of the old active region, if any. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1510 clear_mouse_face (dpyinfo); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1511 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1512 /* Find highest priority overlay that has a mouse-face prop. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1513 overlay = Qnil; |
30381
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1514 for (i = noverlays - 1; i >= 0; --i) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1515 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1516 mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1517 if (!NILP (mouse_face)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1518 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1519 overlay = overlay_vec[i]; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1520 break; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1521 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1522 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1523 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1524 /* If no overlay applies, get a text property. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1525 if (NILP (overlay)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1526 mouse_face = Fget_text_property (position, Qmouse_face, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1527 w->buffer); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1528 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1529 /* Handle the overlay case. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1530 if (! NILP (overlay)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1531 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1532 /* Find the range of text around this char that |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1533 should be active. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1534 Lisp_Object before, after; |
92237
ce06567a933d
* dispextern.h (face_at_buffer_position, face_for_overlay_string)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
1535 EMACS_INT ignore; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1536 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1537 before = Foverlay_start (overlay); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1538 after = Foverlay_end (overlay); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1539 /* Record this as the current active region. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1540 fast_find_position (w, XFASTINT (before), |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1541 &dpyinfo->mouse_face_beg_col, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1542 &dpyinfo->mouse_face_beg_row); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1543 dpyinfo->mouse_face_past_end |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1544 = !fast_find_position (w, XFASTINT (after), |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1545 &dpyinfo->mouse_face_end_col, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1546 &dpyinfo->mouse_face_end_row); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1547 dpyinfo->mouse_face_window = window; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1548 dpyinfo->mouse_face_face_id |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1549 = face_at_buffer_position (w, pos, 0, 0, |
48026
d876c83f972b
(IT_note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
46954
diff
changeset
|
1550 &ignore, pos + 1, |
d876c83f972b
(IT_note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
46954
diff
changeset
|
1551 !dpyinfo->mouse_face_hidden); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1552 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1553 /* Display it as active. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1554 show_mouse_face (dpyinfo, 1); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1555 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1556 /* Handle the text property case. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1557 else if (! NILP (mouse_face)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1558 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1559 /* Find the range of text around this char that |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1560 should be active. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1561 Lisp_Object before, after, beginning, end; |
92237
ce06567a933d
* dispextern.h (face_at_buffer_position, face_for_overlay_string)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
1562 EMACS_INT ignore; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1563 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1564 beginning = Fmarker_position (w->start); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1565 XSETINT (end, (BUF_Z (XBUFFER (w->buffer)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1566 - XFASTINT (w->window_end_pos))); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1567 before |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1568 = Fprevious_single_property_change (make_number (pos + 1), |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1569 Qmouse_face, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1570 w->buffer, beginning); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1571 after |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1572 = Fnext_single_property_change (position, Qmouse_face, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1573 w->buffer, end); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1574 /* Record this as the current active region. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1575 fast_find_position (w, XFASTINT (before), |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1576 &dpyinfo->mouse_face_beg_col, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1577 &dpyinfo->mouse_face_beg_row); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1578 dpyinfo->mouse_face_past_end |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1579 = !fast_find_position (w, XFASTINT (after), |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1580 &dpyinfo->mouse_face_end_col, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1581 &dpyinfo->mouse_face_end_row); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1582 dpyinfo->mouse_face_window = window; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1583 dpyinfo->mouse_face_face_id |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1584 = face_at_buffer_position (w, pos, 0, 0, |
48026
d876c83f972b
(IT_note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
46954
diff
changeset
|
1585 &ignore, pos + 1, |
d876c83f972b
(IT_note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
46954
diff
changeset
|
1586 !dpyinfo->mouse_face_hidden); |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1587 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1588 /* Display it as active. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1589 show_mouse_face (dpyinfo, 1); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1590 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1591 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1592 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1593 /* Look for a `help-echo' property. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1594 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1595 Lisp_Object help; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1596 extern Lisp_Object Qhelp_echo; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1597 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1598 /* Check overlays first. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1599 help = Qnil; |
30381
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1600 for (i = noverlays - 1; i >= 0 && NILP (help); --i) |
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1601 { |
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1602 overlay = overlay_vec[i]; |
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1603 help = Foverlay_get (overlay, Qhelp_echo); |
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1604 } |
45332 | 1605 |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1606 if (!NILP (help)) |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1607 { |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1608 help_echo_string = help; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1609 help_echo_window = window; |
30381
ace34a073127
(IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents:
30341
diff
changeset
|
1610 help_echo_object = overlay; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1611 help_echo_pos = pos; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1612 } |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1613 /* Try text properties. */ |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1614 else if (NILP (help) |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1615 && ((STRINGP (glyph->object) |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1616 && glyph->charpos >= 0 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46272
diff
changeset
|
1617 && glyph->charpos < SCHARS (glyph->object)) |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1618 || (BUFFERP (glyph->object) |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1619 && glyph->charpos >= BEGV |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1620 && glyph->charpos < ZV))) |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1621 { |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1622 help = Fget_text_property (make_number (glyph->charpos), |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1623 Qhelp_echo, glyph->object); |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1624 if (!NILP (help)) |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1625 { |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1626 help_echo_string = help; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1627 help_echo_window = window; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1628 help_echo_object = glyph->object; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1629 help_echo_pos = glyph->charpos; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1630 } |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1631 } |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1632 } |
45332 | 1633 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1634 BEGV = obegv; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1635 ZV = ozv; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1636 current_buffer = obuf; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1637 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1638 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1639 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1640 |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1641 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1642 IT_clear_end_of_line (struct frame *f, int first_unused) |
9572 | 1643 { |
13179 | 1644 char *spaces, *sp; |
45332 | 1645 int i, j, offset = 2 * (new_pos_X + screen_size_X * new_pos_Y); |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1646 extern int fatal_error_in_progress; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1647 struct tty_display_info *tty = FRAME_TTY (f); |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1648 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1649 if (new_pos_X >= first_unused || fatal_error_in_progress) |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1650 return; |
13179 | 1651 |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
1652 IT_set_face (0); |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
1653 i = (j = first_unused - new_pos_X) * 2; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1654 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1655 fprintf (tty->termscript, "<CLR:EOL[%d..%d)>", new_pos_X, first_unused); |
13179 | 1656 spaces = sp = alloca (i); |
45332 | 1657 |
13179 | 1658 while (--j >= 0) |
1659 { | |
1660 *sp++ = ' '; | |
1661 *sp++ = ScreenAttrib; | |
1662 } | |
1663 | |
1664 mouse_off_maybe (); | |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1665 dosmemput (spaces, i, (int)ScreenPrimary + offset); |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1666 if (screen_virtual_segment) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1667 dosv_refresh_virtual_screen (offset, i / 2); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1668 |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1669 /* clear_end_of_line_raw on term.c leaves the cursor at first_unused. |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1670 Let's follow their lead, in case someone relies on this. */ |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1671 new_pos_X = first_unused; |
13179 | 1672 } |
1673 | |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1674 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1675 IT_clear_screen (struct frame *f) |
13179 | 1676 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1677 struct tty_display_info *tty = FRAME_TTY (f); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1678 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1679 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1680 fprintf (tty->termscript, "<CLR:SCR>"); |
41406
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1681 /* We are sometimes called (from clear_garbaged_frames) when a new |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1682 frame is being created, but its faces are not yet realized. In |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1683 such a case we cannot call IT_set_face, since it will fail to find |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1684 any valid faces and will abort. Instead, use the initial screen |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1685 colors; that should mimic what a Unix tty does, which simply clears |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1686 the screen with whatever default colors are in use. */ |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1687 if (FACE_FROM_ID (SELECTED_FRAME (), DEFAULT_FACE_ID) == NULL) |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1688 ScreenAttrib = (initial_screen_colors[0] << 4) | initial_screen_colors[1]; |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1689 else |
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1690 IT_set_face (0); |
13179 | 1691 mouse_off (); |
1692 ScreenClear (); | |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1693 if (screen_virtual_segment) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1694 dosv_refresh_virtual_screen (0, screen_size); |
13179 | 1695 new_pos_X = new_pos_Y = 0; |
1696 } | |
1697 | |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1698 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1699 IT_clear_to_end (struct frame *f) |
13179 | 1700 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1701 struct tty_display_info *tty = FRAME_TTY (f); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1702 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1703 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1704 fprintf (tty->termscript, "<CLR:EOS>"); |
13179 | 1705 |
1706 while (new_pos_Y < screen_size_Y) { | |
1707 new_pos_X = 0; | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1708 IT_clear_end_of_line (f, screen_size_X); |
13179 | 1709 new_pos_Y++; |
1710 } | |
9572 | 1711 } |
1712 | |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1713 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1714 IT_cursor_to (struct frame *f, int y, int x) |
9572 | 1715 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1716 struct tty_display_info *tty = FRAME_TTY (f); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1717 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1718 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1719 fprintf (tty->termscript, "\n<XY=%dx%d>", x, y); |
13179 | 1720 new_pos_X = x; |
1721 new_pos_Y = y; | |
9572 | 1722 } |
1723 | |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1724 static int cursor_cleared; |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1725 |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1726 static void |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1727 IT_display_cursor (int on) |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1728 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1729 struct tty_display_info *tty = CURTTY (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1730 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1731 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1732 fprintf (tty->termscript, "\nCURSOR %s", on ? "ON" : "OFF"); |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1733 if (on && cursor_cleared) |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1734 { |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1735 ScreenSetCursor (current_pos_Y, current_pos_X); |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1736 cursor_cleared = 0; |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1737 } |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1738 else if (!on && !cursor_cleared) |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1739 { |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1740 ScreenSetCursor (-1, -1); |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1741 cursor_cleared = 1; |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1742 } |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1743 } |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1744 |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1745 /* Emacs calls cursor-movement functions a lot when it updates the |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1746 display (probably a legacy of old terminals where you cannot |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1747 update a screen line without first moving the cursor there). |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1748 However, cursor movement is expensive on MSDOS (it calls a slow |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1749 BIOS function and requires 2 mode switches), while actual screen |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1750 updates access the video memory directly and don't depend on |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1751 cursor position. To avoid slowing down the redisplay, we cheat: |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1752 all functions that move the cursor only set internal variables |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1753 which record the cursor position, whereas the cursor is only |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1754 moved to its final position whenever screen update is complete. |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1755 |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1756 `IT_cmgoto' is called from the keyboard reading loop and when the |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1757 frame update is complete. This means that we are ready for user |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1758 input, so we update the cursor position to show where the point is, |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1759 and also make the mouse pointer visible. |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1760 |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1761 Special treatment is required when the cursor is in the echo area, |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1762 to put the cursor at the end of the text displayed there. */ |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1763 |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1764 static void |
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1765 IT_cmgoto (FRAME_PTR f) |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1766 { |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1767 /* Only set the cursor to where it should be if the display is |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1768 already in sync with the window contents. */ |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1769 int update_cursor_pos = 1; /* MODIFF == unchanged_modified; */ |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1770 struct tty_display_info *tty = FRAME_TTY (f); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1771 |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1772 /* FIXME: This needs to be rewritten for the new redisplay, or |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1773 removed. */ |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1774 #if 0 |
23156
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1775 static int previous_pos_X = -1; |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1776 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1777 update_cursor_pos = 1; /* temporary!!! */ |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1778 |
23156
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1779 /* If the display is in sync, forget any previous knowledge about |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1780 cursor position. This is primarily for unexpected events like |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1781 C-g in the minibuffer. */ |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1782 if (update_cursor_pos && previous_pos_X >= 0) |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1783 previous_pos_X = -1; |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1784 /* If we are in the echo area, put the cursor at the |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1785 end of the echo area message. */ |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1786 if (!update_cursor_pos |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1787 && WINDOW_TOP_EDGE_LINE (XWINDOW (FRAME_MINIBUF_WINDOW (f))) <= new_pos_Y) |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1788 { |
23156
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1789 int tem_X = current_pos_X, dummy; |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1790 |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1791 if (echo_area_glyphs) |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1792 { |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1793 tem_X = echo_area_glyphs_length; |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1794 /* Save current cursor position, to be restored after the |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1795 echo area message is erased. Only remember one level |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1796 of previous cursor position. */ |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1797 if (previous_pos_X == -1) |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1798 ScreenGetCursor (&dummy, &previous_pos_X); |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1799 } |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1800 else if (previous_pos_X >= 0) |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1801 { |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1802 /* We wind up here after the echo area message is erased. |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1803 Restore the cursor position we remembered above. */ |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1804 tem_X = previous_pos_X; |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1805 previous_pos_X = -1; |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1806 } |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1807 |
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1808 if (current_pos_X != tem_X) |
22992
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1809 { |
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1810 new_pos_X = tem_X; |
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1811 update_cursor_pos = 1; |
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1812 } |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1813 } |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1814 #endif |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1815 |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1816 if (update_cursor_pos |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1817 && (current_pos_X != new_pos_X || current_pos_Y != new_pos_Y)) |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1818 { |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1819 ScreenSetCursor (current_pos_Y = new_pos_Y, current_pos_X = new_pos_X); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1820 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1821 fprintf (tty->termscript, "\n<CURSOR:%dx%d>", current_pos_X, current_pos_Y); |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1822 } |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1823 |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1824 /* Maybe cursor is invisible, so make it visible. */ |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1825 IT_display_cursor (1); |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1826 |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1827 /* Mouse pointer should be always visible if we are waiting for |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1828 keyboard input. */ |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1829 if (!mouse_visible) |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1830 mouse_on (); |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1831 } |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1832 |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1833 static void |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1834 IT_update_begin (struct frame *f) |
9572 | 1835 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1836 struct tty_display_info *display_info = FRAME_X_DISPLAY_INFO (f); |
30826
f225a6bd06fc
(IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents:
30725
diff
changeset
|
1837 struct frame *mouse_face_frame = display_info->mouse_face_mouse_frame; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1838 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1839 BLOCK_INPUT; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1840 |
30826
f225a6bd06fc
(IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents:
30725
diff
changeset
|
1841 if (f && f == mouse_face_frame) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1842 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1843 /* Don't do highlighting for mouse motion during the update. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1844 display_info->mouse_face_defer = 1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1845 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1846 /* If F needs to be redrawn, simply forget about any prior mouse |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1847 highlighting. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1848 if (FRAME_GARBAGED_P (f)) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1849 display_info->mouse_face_window = Qnil; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1850 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1851 /* Can we tell that this update does not affect the window |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1852 where the mouse highlight is? If so, no need to turn off. |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1853 Likewise, don't do anything if none of the enabled rows |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1854 contains glyphs highlighted in mouse face. */ |
27046
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1855 if (!NILP (display_info->mouse_face_window) |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1856 && WINDOWP (display_info->mouse_face_window)) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1857 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1858 struct window *w = XWINDOW (display_info->mouse_face_window); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1859 int i; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1860 |
27046
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1861 /* If the mouse highlight is in the window that was deleted |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1862 (e.g., if it was popped by completion), clear highlight |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1863 unconditionally. */ |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1864 if (NILP (w->buffer)) |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1865 display_info->mouse_face_window = Qnil; |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1866 else |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1867 { |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1868 for (i = 0; i < w->desired_matrix->nrows; ++i) |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1869 if (MATRIX_ROW_ENABLED_P (w->desired_matrix, i) |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1870 && MATRIX_ROW (w->current_matrix, i)->mouse_face_p) |
27046
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1871 break; |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1872 } |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1873 |
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1874 if (NILP (w->buffer) || i < w->desired_matrix->nrows) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1875 clear_mouse_face (display_info); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1876 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1877 } |
30826
f225a6bd06fc
(IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents:
30725
diff
changeset
|
1878 else if (mouse_face_frame && !FRAME_LIVE_P (mouse_face_frame)) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1879 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1880 /* If the frame with mouse highlight was deleted, invalidate the |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1881 highlight info. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1882 display_info->mouse_face_beg_row = display_info->mouse_face_beg_col = -1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1883 display_info->mouse_face_end_row = display_info->mouse_face_end_col = -1; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1884 display_info->mouse_face_window = Qnil; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1885 display_info->mouse_face_deferred_gc = 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1886 display_info->mouse_face_mouse_frame = NULL; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1887 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1888 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1889 UNBLOCK_INPUT; |
13179 | 1890 } |
1891 | |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1892 static void |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1893 IT_update_end (struct frame *f) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1894 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1895 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1896 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1897 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1898 static void |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1899 IT_frame_up_to_date (struct frame *f) |
13179 | 1900 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1901 struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
28553
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1902 Lisp_Object new_cursor, frame_desired_cursor; |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1903 struct window *sw; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1904 |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1905 if (dpyinfo->mouse_face_deferred_gc |
30826
f225a6bd06fc
(IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents:
30725
diff
changeset
|
1906 || (f && f == dpyinfo->mouse_face_mouse_frame)) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1907 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1908 BLOCK_INPUT; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1909 if (dpyinfo->mouse_face_mouse_frame) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1910 IT_note_mouse_highlight (dpyinfo->mouse_face_mouse_frame, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1911 dpyinfo->mouse_face_mouse_x, |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1912 dpyinfo->mouse_face_mouse_y); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1913 dpyinfo->mouse_face_deferred_gc = 0; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1914 UNBLOCK_INPUT; |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1915 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1916 |
28553
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1917 /* Set the cursor type to whatever they wanted. In a minibuffer |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1918 window, we want the cursor to appear only if we are reading input |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1919 from this window, and we want the cursor to be taken from the |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1920 frame parameters. For the selected window, we use either its |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1921 buffer-local value or the value from the frame parameters if the |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1922 buffer doesn't define its local value for the cursor type. */ |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1923 sw = XWINDOW (f->selected_window); |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1924 frame_desired_cursor = Fcdr (Fassq (Qcursor_type, f->param_alist)); |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1925 if (cursor_in_echo_area |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1926 && FRAME_HAS_MINIBUF_P (f) |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1927 && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window) |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1928 && sw == XWINDOW (echo_area_window)) |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1929 new_cursor = frame_desired_cursor; |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1930 else |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1931 { |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1932 struct buffer *b = XBUFFER (sw->buffer); |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1933 |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1934 if (EQ (b->cursor_type, Qt)) |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1935 new_cursor = frame_desired_cursor; |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1936 else if (NILP (b->cursor_type)) /* nil means no cursor */ |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1937 new_cursor = Fcons (Qbar, make_number (0)); |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1938 else |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1939 new_cursor = b->cursor_type; |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1940 } |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1941 |
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1942 IT_set_cursor_type (f, new_cursor); |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1943 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1944 IT_cmgoto (f); /* position cursor when update is done */ |
9572 | 1945 } |
1946 | |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1947 /* Copy LEN glyphs displayed on a single line whose vertical position |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1948 is YPOS, beginning at horizontal position XFROM to horizontal |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1949 position XTO, by moving blocks in the video memory. Used by |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1950 functions that insert and delete glyphs. */ |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1951 static void |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1952 IT_copy_glyphs (int xfrom, int xto, size_t len, int ypos) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1953 { |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1954 /* The offsets of source and destination relative to the |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1955 conventional memorty selector. */ |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1956 int from = 2 * (xfrom + screen_size_X * ypos) + ScreenPrimary; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1957 int to = 2 * (xto + screen_size_X * ypos) + ScreenPrimary; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1958 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1959 if (from == to || len <= 0) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1960 return; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1961 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1962 _farsetsel (_dos_ds); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1963 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1964 /* The source and destination might overlap, so we need to move |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1965 glyphs non-destructively. */ |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1966 if (from > to) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1967 { |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1968 for ( ; len; from += 2, to += 2, len--) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1969 _farnspokew (to, _farnspeekw (from)); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1970 } |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1971 else |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1972 { |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1973 from += (len - 1) * 2; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1974 to += (len - 1) * 2; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1975 for ( ; len; from -= 2, to -= 2, len--) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1976 _farnspokew (to, _farnspeekw (from)); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1977 } |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1978 if (screen_virtual_segment) |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1979 dosv_refresh_virtual_screen (ypos * screen_size_X * 2, screen_size_X); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1980 } |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1981 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1982 /* Insert and delete glyphs. */ |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1983 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1984 IT_insert_glyphs (f, start, len) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1985 struct frame *f; |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1986 register struct glyph *start; |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1987 register int len; |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1988 { |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1989 int shift_by_width = screen_size_X - (new_pos_X + len); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1990 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1991 /* Shift right the glyphs from the nominal cursor position to the |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1992 end of this line. */ |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1993 IT_copy_glyphs (new_pos_X, new_pos_X + len, shift_by_width, new_pos_Y); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1994 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1995 /* Now write the glyphs to be inserted. */ |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1996 IT_write_glyphs (f, start, len); |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1997 } |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1998 |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1999 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2000 IT_delete_glyphs (f, n) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2001 struct frame *f; |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
2002 register int n; |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
2003 { |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
2004 abort (); |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
2005 } |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
2006 |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2007 /* set-window-configuration on window.c needs this. */ |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2008 void |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2009 x_set_menu_bar_lines (f, value, oldval) |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2010 struct frame *f; |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2011 Lisp_Object value, oldval; |
9572 | 2012 { |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2013 set_menu_bar_lines (f, value, oldval); |
9572 | 2014 } |
2015 | |
32271
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
2016 /* This was copied from xfaces.c */ |
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
2017 |
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
2018 extern Lisp_Object Qbackground_color; |
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
2019 extern Lisp_Object Qforeground_color; |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2020 Lisp_Object Qreverse; |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2021 extern Lisp_Object Qtitle; |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2022 |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2023 /* IT_set_terminal_modes is called when emacs is started, |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2024 resumed, and whenever the screen is redrawn! */ |
13179 | 2025 |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
2026 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2027 IT_set_terminal_modes (struct terminal *term) |
13179 | 2028 { |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2029 struct tty_display_info *tty; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2030 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2031 /* If called with initial terminal, it's too early to do anything |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2032 useful. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2033 if (term->type == output_initial) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2034 return; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2035 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2036 tty = term->display_info.tty; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2037 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2038 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2039 fprintf (tty->termscript, "\n<SET_TERM>"); |
13179 | 2040 |
2041 screen_size_X = ScreenCols (); | |
2042 screen_size_Y = ScreenRows (); | |
2043 screen_size = screen_size_X * screen_size_Y; | |
45332 | 2044 |
13179 | 2045 new_pos_X = new_pos_Y = 0; |
2046 current_pos_X = current_pos_Y = -1; | |
2047 | |
2048 if (term_setup_done) | |
2049 return; | |
2050 term_setup_done = 1; | |
45332 | 2051 |
13179 | 2052 startup_screen_size_X = screen_size_X; |
2053 startup_screen_size_Y = screen_size_Y; | |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2054 startup_screen_attrib = ScreenAttrib; |
13179 | 2055 |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2056 #if __DJGPP__ > 1 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2057 /* Is DOS/V (or any other RSIS software which relocates |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2058 the screen) installed? */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2059 { |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2060 unsigned short es_value; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2061 __dpmi_regs regs; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2062 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2063 regs.h.ah = 0xfe; /* get relocated screen address */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2064 if (ScreenPrimary == 0xb0000UL || ScreenPrimary == 0xb8000UL) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2065 regs.x.es = (ScreenPrimary >> 4) & 0xffff; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2066 else if (screen_old_address) /* already switched to Japanese mode once */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2067 regs.x.es = (screen_old_address >> 4) & 0xffff; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2068 else |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2069 regs.x.es = ScreenMode () == 7 ? 0xb000 : 0xb800; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2070 regs.x.di = 0; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2071 es_value = regs.x.es; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2072 __dpmi_int (0x10, ®s); |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2073 |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2074 if (regs.x.es != es_value) |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2075 { |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2076 /* screen_old_address is only set if ScreenPrimary does NOT |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2077 already point to the relocated buffer address returned by |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2078 the Int 10h/AX=FEh call above. DJGPP v2.02 and later sets |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2079 ScreenPrimary to that address at startup under DOS/V. */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2080 if (regs.x.es != (ScreenPrimary >> 4) & 0xffff) |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2081 screen_old_address = ScreenPrimary; |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2082 screen_virtual_segment = regs.x.es; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2083 screen_virtual_offset = regs.x.di; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2084 ScreenPrimary = (screen_virtual_segment << 4) + screen_virtual_offset; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2085 } |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2086 } |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2087 #endif /* __DJGPP__ > 1 */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2088 |
13179 | 2089 ScreenGetCursor (&startup_pos_Y, &startup_pos_X); |
2090 ScreenRetrieve (startup_screen_buffer = xmalloc (screen_size * 2)); | |
2091 | |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2092 bright_bg (); |
13179 | 2093 } |
2094 | |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2095 /* IT_reset_terminal_modes is called when emacs is |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2096 suspended or killed. */ |
13179 | 2097 |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
2098 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2099 IT_reset_terminal_modes (struct terminal *term) |
13179 | 2100 { |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2101 int display_row_start = (int) ScreenPrimary; |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2102 int saved_row_len = startup_screen_size_X * 2; |
45332 | 2103 int update_row_len = ScreenCols () * 2, current_rows = ScreenRows (); |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2104 int to_next_row = update_row_len; |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2105 unsigned char *saved_row = startup_screen_buffer; |
45332 | 2106 int cursor_pos_X = ScreenCols () - 1, cursor_pos_Y = ScreenRows () - 1; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2107 struct tty_display_info *tty = term->display_info.tty; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2108 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2109 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2110 fprintf (tty->termscript, "\n<RESET_TERM>"); |
13179 | 2111 |
2112 if (!term_setup_done) | |
2113 return; | |
45332 | 2114 |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2115 mouse_off (); |
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
2116 |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
2117 /* Leave the video system in the same state as we found it, |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
2118 as far as the blink/bright-background bit is concerned. */ |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
2119 maybe_enable_blinking (); |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2120 |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2121 /* We have a situation here. |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2122 We cannot just do ScreenUpdate(startup_screen_buffer) because |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2123 the luser could have changed screen dimensions inside Emacs |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2124 and failed (or didn't want) to restore them before killing |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2125 Emacs. ScreenUpdate() uses the *current* screen dimensions and |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2126 thus will happily use memory outside what was allocated for |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2127 `startup_screen_buffer'. |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2128 Thus we only restore as much as the current screen dimensions |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2129 can hold, and clear the rest (if the saved screen is smaller than |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2130 the current) with the color attribute saved at startup. The cursor |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2131 is also restored within the visible dimensions. */ |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2132 |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2133 ScreenAttrib = startup_screen_attrib; |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2134 |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2135 /* Don't restore the screen if we are exiting less than 2 seconds |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2136 after startup: we might be crashing, and the screen might show |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2137 some vital clues to what's wrong. */ |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2138 if (clock () - startup_time >= 2*CLOCKS_PER_SEC) |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2139 { |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2140 ScreenClear (); |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2141 if (screen_virtual_segment) |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2142 dosv_refresh_virtual_screen (0, screen_size); |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2143 |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2144 if (update_row_len > saved_row_len) |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2145 update_row_len = saved_row_len; |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2146 if (current_rows > startup_screen_size_Y) |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2147 current_rows = startup_screen_size_Y; |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2148 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2149 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2150 fprintf (tty->termscript, "<SCREEN RESTORED (dimensions=%dx%d)>\n", |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2151 update_row_len / 2, current_rows); |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2152 |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2153 while (current_rows--) |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2154 { |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2155 dosmemput (saved_row, update_row_len, display_row_start); |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2156 if (screen_virtual_segment) |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2157 dosv_refresh_virtual_screen (display_row_start - ScreenPrimary, |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2158 update_row_len / 2); |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2159 saved_row += saved_row_len; |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2160 display_row_start += to_next_row; |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
2161 } |
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2162 } |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2163 if (startup_pos_X < cursor_pos_X) |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2164 cursor_pos_X = startup_pos_X; |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2165 if (startup_pos_Y < cursor_pos_Y) |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2166 cursor_pos_Y = startup_pos_Y; |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2167 |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2168 ScreenSetCursor (cursor_pos_Y, cursor_pos_X); |
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
2169 xfree (startup_screen_buffer); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2170 startup_screen_buffer = NULL; |
13179 | 2171 |
2172 term_setup_done = 0; | |
2173 } | |
2174 | |
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
2175 static void |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2176 IT_set_terminal_window (struct frame *f, int foo) |
13179 | 2177 { |
2178 } | |
2179 | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2180 /* Remember the screen colors of the curent frame, to serve as the |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2181 default colors for newly-created frames. */ |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2182 DEFUN ("msdos-remember-default-colors", Fmsdos_remember_default_colors, |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2183 Smsdos_remember_default_colors, 1, 1, 0, |
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
2184 doc: /* Remember the screen colors of the current frame. */) |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2185 (frame) |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2186 Lisp_Object frame; |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2187 { |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2188 struct frame *f; |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2189 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40082
diff
changeset
|
2190 CHECK_FRAME (frame); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2191 f= XFRAME (frame); |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2192 |
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2193 /* This function is called after applying default-frame-alist to the |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2194 initial frame. At that time, if reverse-colors option was |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2195 specified in default-frame-alist, it was already applied, and |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2196 frame colors are reversed. We need to account for that. */ |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2197 if (EQ (Fcdr (Fassq (Qreverse, f->param_alist)), Qt)) |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2198 { |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2199 initial_screen_colors[0] = FRAME_BACKGROUND_PIXEL (f); |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2200 initial_screen_colors[1] = FRAME_FOREGROUND_PIXEL (f); |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2201 } |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2202 else |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2203 { |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2204 initial_screen_colors[0] = FRAME_FOREGROUND_PIXEL (f); |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2205 initial_screen_colors[1] = FRAME_BACKGROUND_PIXEL (f); |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2206 } |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2207 } |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2208 |
9572 | 2209 void |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2210 IT_set_frame_parameters (f, alist) |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2211 struct frame *f; |
9572 | 2212 Lisp_Object alist; |
2213 { | |
2214 Lisp_Object tail; | |
45332 | 2215 int i, j, length = XINT (Flength (alist)); |
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2216 Lisp_Object *parms |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2217 = (Lisp_Object *) alloca (length * sizeof (Lisp_Object)); |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2218 Lisp_Object *values |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2219 = (Lisp_Object *) alloca (length * sizeof (Lisp_Object)); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2220 /* Do we have to reverse the foreground and background colors? */ |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2221 int reverse = EQ (Fcdr (Fassq (Qreverse, f->param_alist)), Qt); |
45332 | 2222 int need_to_reverse, was_reverse = reverse; |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2223 int redraw = 0, fg_set = 0, bg_set = 0; |
45332 | 2224 unsigned long orig_fg, orig_bg; |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2225 Lisp_Object frame_bg, frame_fg; |
32337 | 2226 extern Lisp_Object Qdefault, QCforeground, QCbackground; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2227 struct tty_display_info *tty = FRAME_TTY (f); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2228 |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2229 /* If we are creating a new frame, begin with the original screen colors |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2230 used for the initial frame. */ |
58012
934f6fb6fd8a
* dosfns.c (Fdos_memget, Fdos_memput): Use integer variable offs in
Jan Djärv <jan.h.d@swipnet.se>
parents:
57048
diff
changeset
|
2231 if (EQ (alist, Vdefault_frame_alist) |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2232 && initial_screen_colors[0] != -1 && initial_screen_colors[1] != -1) |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2233 { |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2234 FRAME_FOREGROUND_PIXEL (f) = initial_screen_colors[0]; |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2235 FRAME_BACKGROUND_PIXEL (f) = initial_screen_colors[1]; |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2236 } |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2237 orig_fg = FRAME_FOREGROUND_PIXEL (f); |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2238 orig_bg = FRAME_BACKGROUND_PIXEL (f); |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2239 frame_fg = Fcdr (Fassq (Qforeground_color, f->param_alist)); |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2240 frame_bg = Fcdr (Fassq (Qbackground_color, f->param_alist)); |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2241 /* frame_fg and frame_bg could be nil if, for example, |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2242 f->param_alist is nil, e.g. if we are called from |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2243 Fmake_terminal_frame. */ |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2244 if (NILP (frame_fg)) |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2245 frame_fg = build_string (unspecified_fg); |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2246 if (NILP (frame_bg)) |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2247 frame_bg = build_string (unspecified_bg); |
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2248 |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2249 /* Extract parm names and values into those vectors. */ |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2250 i = 0; |
9572 | 2251 for (tail = alist; CONSP (tail); tail = Fcdr (tail)) |
2252 { | |
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2253 Lisp_Object elt; |
9572 | 2254 |
2255 elt = Fcar (tail); | |
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2256 parms[i] = Fcar (elt); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40082
diff
changeset
|
2257 CHECK_SYMBOL (parms[i]); |
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2258 values[i] = Fcdr (elt); |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2259 i++; |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2260 } |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2261 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2262 j = i; |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2263 |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2264 for (i = 0; i < j; i++) |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2265 { |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2266 Lisp_Object prop, val; |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2267 |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2268 prop = parms[i]; |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2269 val = values[i]; |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2270 |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2271 if (EQ (prop, Qreverse)) |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2272 reverse = EQ (val, Qt); |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2273 } |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2274 |
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2275 need_to_reverse = reverse && !was_reverse; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2276 if (tty->termscript && need_to_reverse) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2277 fprintf (tty->termscript, "<INVERSE-VIDEO>\n"); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2278 |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2279 /* Now process the alist elements in reverse of specified order. */ |
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2280 for (i--; i >= 0; i--) |
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
2281 { |
45332 | 2282 Lisp_Object prop, val, frame; |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2283 |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2284 prop = parms[i]; |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2285 val = values[i]; |
9572 | 2286 |
19864
44dcf37ec345
(syms_of_msdos): Intern background-color and
Richard M. Stallman <rms@gnu.org>
parents:
19603
diff
changeset
|
2287 if (EQ (prop, Qforeground_color)) |
9572 | 2288 { |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2289 unsigned long new_color = load_color (f, NULL, val, need_to_reverse |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2290 ? LFACE_BACKGROUND_INDEX |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2291 : LFACE_FOREGROUND_INDEX); |
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
2292 if (new_color != FACE_TTY_DEFAULT_COLOR |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
2293 && new_color != FACE_TTY_DEFAULT_FG_COLOR |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
2294 && new_color != FACE_TTY_DEFAULT_BG_COLOR) |
9572 | 2295 { |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2296 FRAME_FOREGROUND_PIXEL (f) = new_color; |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2297 /* Make sure the foreground of the default face for this |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2298 frame is changed as well. */ |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2299 XSETFRAME (frame, f); |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2300 if (need_to_reverse) |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2301 { |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2302 Finternal_set_lisp_face_attribute (Qdefault, QCbackground, |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2303 val, frame); |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2304 prop = Qbackground_color; |
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2305 bg_set = 1; |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2306 } |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2307 else |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2308 { |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2309 Finternal_set_lisp_face_attribute (Qdefault, QCforeground, |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2310 val, frame); |
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2311 fg_set = 1; |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2312 } |
9572 | 2313 redraw = 1; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2314 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2315 fprintf (tty->termscript, "<FGCOLOR %lu>\n", new_color); |
9572 | 2316 } |
2317 } | |
19864
44dcf37ec345
(syms_of_msdos): Intern background-color and
Richard M. Stallman <rms@gnu.org>
parents:
19603
diff
changeset
|
2318 else if (EQ (prop, Qbackground_color)) |
9572 | 2319 { |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2320 unsigned long new_color = load_color (f, NULL, val, need_to_reverse |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2321 ? LFACE_FOREGROUND_INDEX |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2322 : LFACE_BACKGROUND_INDEX); |
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
2323 if (new_color != FACE_TTY_DEFAULT_COLOR |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
2324 && new_color != FACE_TTY_DEFAULT_FG_COLOR |
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
2325 && new_color != FACE_TTY_DEFAULT_BG_COLOR) |
9572 | 2326 { |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2327 FRAME_BACKGROUND_PIXEL (f) = new_color; |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2328 /* Make sure the background of the default face for this |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2329 frame is changed as well. */ |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2330 XSETFRAME (frame, f); |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2331 if (need_to_reverse) |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2332 { |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2333 Finternal_set_lisp_face_attribute (Qdefault, QCforeground, |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2334 val, frame); |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2335 prop = Qforeground_color; |
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2336 fg_set = 1; |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2337 } |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2338 else |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2339 { |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2340 Finternal_set_lisp_face_attribute (Qdefault, QCbackground, |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2341 val, frame); |
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2342 bg_set = 1; |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2343 } |
9572 | 2344 redraw = 1; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2345 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2346 fprintf (tty->termscript, "<BGCOLOR %lu>\n", new_color); |
9572 | 2347 } |
2348 } | |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2349 else if (EQ (prop, Qtitle)) |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2350 { |
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2351 x_set_title (f, val); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2352 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2353 fprintf (tty->termscript, "<TITLE: %s>\n", SDATA (val)); |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2354 } |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2355 else if (EQ (prop, Qcursor_type)) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2356 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2357 IT_set_cursor_type (f, val); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2358 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2359 fprintf (tty->termscript, "<CTYPE: %s>\n", |
44695 | 2360 EQ (val, Qbar) || EQ (val, Qhbar) |
2361 || CONSP (val) && (EQ (XCAR (val), Qbar) | |
2362 || EQ (XCAR (val), Qhbar)) | |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2363 ? "bar" : "box"); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
2364 } |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2365 else if (EQ (prop, Qtty_type)) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2366 { |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2367 internal_terminal_init (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2368 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2369 fprintf (tty->termscript, "<TERM_INIT done, TTY_TYPE: %.*s>\n", |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2370 SBYTES (val), SDATA (val)); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2371 } |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2372 store_frame_param (f, prop, val); |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2373 } |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2374 |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2375 /* If they specified "reverse", but not the colors, we need to swap |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2376 the current frame colors. */ |
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
2377 if (need_to_reverse) |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2378 { |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2379 Lisp_Object frame; |
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2380 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2381 if (!fg_set) |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2382 { |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2383 XSETFRAME (frame, f); |
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2384 Finternal_set_lisp_face_attribute (Qdefault, QCforeground, |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2385 tty_color_name (f, orig_bg), |
32337 | 2386 frame); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2387 redraw = 1; |
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
2388 } |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2389 if (!bg_set) |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2390 { |
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
2391 XSETFRAME (frame, f); |
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2392 Finternal_set_lisp_face_attribute (Qdefault, QCbackground, |
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
2393 tty_color_name (f, orig_fg), |
32337 | 2394 frame); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2395 redraw = 1; |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2396 } |
9572 | 2397 } |
2398 | |
2399 if (redraw) | |
2400 { | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2401 face_change_count++; /* forces xdisp.c to recompute basic faces */ |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2402 if (f == SELECTED_FRAME()) |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2403 redraw_frame (f); |
9572 | 2404 } |
2405 } | |
2406 | |
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
2407 extern void init_frame_faces (FRAME_PTR); |
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
2408 |
13179 | 2409 #endif /* !HAVE_X_WINDOWS */ |
9572 | 2410 |
2411 | |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2412 /* Do we need the internal terminal? */ |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2413 |
5503 | 2414 void |
2415 internal_terminal_init () | |
2416 { | |
45332 | 2417 char *term = getenv ("TERM"), *colors; |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2418 struct frame *sf = SELECTED_FRAME(); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2419 struct tty_display_info *tty; |
13179 | 2420 |
9572 | 2421 #ifdef HAVE_X_WINDOWS |
2422 if (!inhibit_window_system) | |
2423 return; | |
2424 #endif | |
2425 | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2426 /* If this is the initial terminal, we are done here. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2427 if (sf->output_method == output_initial) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2428 return; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2429 |
5503 | 2430 internal_terminal |
2431 = (!noninteractive) && term && !strcmp (term, "internal"); | |
9572 | 2432 |
2433 #ifndef HAVE_X_WINDOWS | |
13179 | 2434 if (!internal_terminal || inhibit_window_system) |
9572 | 2435 { |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2436 sf->output_method = output_termcap; |
13179 | 2437 return; |
2438 } | |
9572 | 2439 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2440 tty = FRAME_TTY (sf); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2441 if (!tty->termscript && getenv ("EMACSTEST")) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2442 tty->termscript = fopen (getenv ("EMACSTEST"), "wt"); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2443 if (tty->termscript) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2444 { |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2445 time_t now = time (NULL); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2446 struct tm *tnow = localtime (&now); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2447 char tbuf[100]; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2448 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2449 strftime (tbuf, sizeof (tbuf) - 1, "%a %b %e %Y %H:%M:%S %Z", tnow); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2450 fprintf (tty->termscript, "\nEmacs session started at %s\n", tbuf); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2451 fprintf (tty->termscript, "=====================\n\n"); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2452 } |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2453 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2454 Vinitial_window_system = current_kboard->Vwindow_system = Qpc; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2455 Vwindow_system_version = make_number (23); /* RE Emacs version */ |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2456 sf->output_method = output_msdos_raw; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2457 tty->terminal->type = output_msdos_raw; |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2458 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2459 /* If Emacs was dumped on DOS/V machine, forget the stale VRAM address. */ |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2460 screen_old_address = 0; |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2461 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2462 /* Forget the stale screen colors as well. */ |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2463 initial_screen_colors[0] = initial_screen_colors[1] = -1; |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2464 |
83505 | 2465 FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ()) = 7; /* White */ |
2466 FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ()) = 0; /* Black */ | |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2467 bright_bg (); |
13274 | 2468 colors = getenv ("EMACSCOLORS"); |
13179 | 2469 if (colors && strlen (colors) >= 2) |
2470 { | |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2471 /* The colors use 4 bits each (we enable bright background). */ |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2472 if (isdigit (colors[0])) |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2473 colors[0] -= '0'; |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2474 else if (isxdigit (colors[0])) |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2475 colors[0] -= (isupper (colors[0]) ? 'A' : 'a') - 10; |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
2476 if (colors[0] >= 0 && colors[0] < 16) |
83505 | 2477 FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ()) = colors[0]; |
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2478 if (isdigit (colors[1])) |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2479 colors[1] -= '0'; |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2480 else if (isxdigit (colors[1])) |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2481 colors[1] -= (isupper (colors[1]) ? 'A' : 'a') - 10; |
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
2482 if (colors[1] >= 0 && colors[1] < 16) |
83505 | 2483 FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ()) = colors[1]; |
13179 | 2484 } |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2485 the_only_display_info.mouse_face_mouse_frame = NULL; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2486 the_only_display_info.mouse_face_deferred_gc = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2487 the_only_display_info.mouse_face_beg_row = |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2488 the_only_display_info.mouse_face_beg_col = -1; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2489 the_only_display_info.mouse_face_end_row = |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2490 the_only_display_info.mouse_face_end_col = -1; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2491 the_only_display_info.mouse_face_face_id = DEFAULT_FACE_ID; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2492 the_only_display_info.mouse_face_window = Qnil; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2493 the_only_display_info.mouse_face_mouse_x = |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2494 the_only_display_info.mouse_face_mouse_y = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2495 the_only_display_info.mouse_face_defer = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2496 the_only_display_info.mouse_face_hidden = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2497 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2498 if (have_mouse) /* detected in dos_ttraw, which see */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2499 { |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2500 have_mouse = 1; /* enable mouse */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2501 mouse_visible = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2502 mouse_setup_buttons (mouse_button_count); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2503 tty->terminal->mouse_position_hook = &mouse_get_pos; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2504 mouse_init (); |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2505 } |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2506 |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2507 if (tty->termscript && screen_size) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2508 fprintf (tty->termscript, "<SCREEN SAVED (dimensions=%dx%d)>\n", |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2509 screen_size_X, screen_size_Y); |
9572 | 2510 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2511 init_frame_faces (sf); |
9572 | 2512 #endif |
5503 | 2513 } |
13179 | 2514 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2515 void |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2516 initialize_msdos_display (struct terminal *term) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2517 { |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2518 term->rif = 0; /* we don't support window-based display */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2519 term->cursor_to_hook = term->raw_cursor_to_hook = IT_cursor_to; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2520 term->clear_to_end_hook = IT_clear_to_end; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2521 term->clear_frame_hook = IT_clear_screen; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2522 term->clear_end_of_line_hook = IT_clear_end_of_line; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2523 term->ins_del_lines_hook = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2524 term->insert_glyphs_hook = IT_insert_glyphs; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2525 term->write_glyphs_hook = IT_write_glyphs; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2526 term->delete_glyphs_hook = IT_delete_glyphs; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2527 term->ring_bell_hook = IT_ring_bell; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2528 term->reset_terminal_modes_hook = IT_reset_terminal_modes; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2529 term->set_terminal_modes_hook = IT_set_terminal_modes; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2530 term->set_terminal_window_hook = IT_set_terminal_window; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2531 term->update_begin_hook = IT_update_begin; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2532 term->update_end_hook = IT_update_end; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2533 term->frame_up_to_date_hook = IT_frame_up_to_date; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2534 term->mouse_position_hook = 0; /* set later by dos_ttraw */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2535 term->frame_rehighlight_hook = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2536 term->frame_raise_lower_hook = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2537 term->set_vertical_scroll_bar_hook = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2538 term->condemn_scroll_bars_hook = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2539 term->redeem_scroll_bar_hook = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2540 term->judge_scroll_bars_hook = 0; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2541 term->read_socket_hook = &tty_read_avail_input; /* from keyboard.c */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2542 } |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2543 |
13179 | 2544 dos_get_saved_screen (screen, rows, cols) |
2545 char **screen; | |
2546 int *rows; | |
2547 int *cols; | |
2548 { | |
2549 #ifndef HAVE_X_WINDOWS | |
2550 *screen = startup_screen_buffer; | |
2551 *cols = startup_screen_size_X; | |
2552 *rows = startup_screen_size_Y; | |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
2553 return *screen != (char *)0; |
13179 | 2554 #else |
2555 return 0; | |
45332 | 2556 #endif |
13179 | 2557 } |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2558 |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2559 #ifndef HAVE_X_WINDOWS |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2560 |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2561 /* We are not X, but we can emulate it well enough for our needs... */ |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2562 void |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2563 check_x (void) |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2564 { |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2565 if (! FRAME_MSDOS_P (SELECTED_FRAME())) |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2566 error ("Not running under a window system"); |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2567 } |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2568 |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2569 #endif |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
2570 |
13274 | 2571 |
13179 | 2572 /* ----------------------- Keyboard control ---------------------- |
2573 * | |
2574 * Keymaps reflect the following keyboard layout: | |
2575 * | |
2576 * 0 1 2 3 4 5 6 7 8 9 10 11 12 BS | |
2577 * TAB 15 16 17 18 19 20 21 22 23 24 25 26 (41) | |
2578 * CLOK 30 31 32 33 34 35 36 37 38 39 40 (41) RET | |
2579 * SH () 45 46 47 48 49 50 51 52 53 54 SHIFT | |
2580 * SPACE | |
2581 */ | |
2582 | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2583 #define Ignore 0x0000 |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2584 #define Normal 0x0000 /* normal key - alt changes scan-code */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2585 #define FctKey 0x1000 /* func key if c == 0, else c */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2586 #define Special 0x2000 /* func key even if c != 0 */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2587 #define ModFct 0x3000 /* special if mod-keys, else 'c' */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2588 #define Map 0x4000 /* alt scan-code, map to unshift/shift key */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2589 #define KeyPad 0x5000 /* map to insert/kp-0 depending on c == 0xe0 */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2590 #define Grey 0x6000 /* Grey keypad key */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2591 |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2592 #define Alt 0x0100 /* alt scan-code */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2593 #define Ctrl 0x0200 /* ctrl scan-code */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2594 #define Shift 0x0400 /* shift scan-code */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2595 |
74145 | 2596 static int extended_kbd; /* 101 (102) keyboard present. */ |
13179 | 2597 |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2598 struct kbd_translate { |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2599 unsigned char sc; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2600 unsigned char ch; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2601 unsigned short code; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2602 }; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2603 |
13179 | 2604 struct dos_keyboard_map |
2605 { | |
2606 char *unshifted; | |
2607 char *shifted; | |
2608 char *alt_gr; | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2609 struct kbd_translate *translate_table; |
13179 | 2610 }; |
2611 | |
13040
169d50e2ee4c
(gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents:
13020
diff
changeset
|
2612 |
13179 | 2613 static struct dos_keyboard_map us_keyboard = { |
2614 /* 0 1 2 3 4 5 */ | |
2615 /* 01234567890123456789012345678901234567890 12345678901234 */ | |
2616 "`1234567890-= qwertyuiop[] asdfghjkl;'\\ zxcvbnm,./ ", | |
2617 /* 0123456789012345678901234567890123456789 012345678901234 */ | |
2618 "~!@#$%^&*()_+ QWERTYUIOP{} ASDFGHJKL:\"| ZXCVBNM<>? ", | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2619 0, /* no Alt-Gr key */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2620 0 /* no translate table */ |
13179 | 2621 }; |
2622 | |
2623 static struct dos_keyboard_map fr_keyboard = { | |
2624 /* 0 1 2 3 4 5 */ | |
2625 /* 012 3456789012345678901234567890123456789012345678901234 */ | |
2626 "ý&‚\",(-Š_€…)= azertyuiop^$ qsdfghjklm—* wxcvbnm;:! ", | |
2627 /* 0123456789012345678901234567890123456789012345678901234 */ | |
2628 " 1234567890ø+ AZERTYUIOPùœ QSDFGHJKLM%æ WXCVBN?./õ ", | |
2629 /* 01234567 89012345678901234567890123456789012345678901234 */ | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2630 " ~#{[|`\\^@]} Ï ", |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2631 0 /* no translate table */ |
13179 | 2632 }; |
2633 | |
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2634 /* |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2635 * Italian keyboard support, country code 39. |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2636 * '<' 56:3c*0000 |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2637 * '>' 56:3e*0000 |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2638 * added also {,},` as, respectively, AltGr-8, AltGr-9, AltGr-' |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2639 * Donated by Stefano Brozzi <brozzis@mag00.cedi.unipr.it> |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2640 */ |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2641 |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2642 static struct kbd_translate it_kbd_translate_table[] = { |
24566
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2643 { 0x56, 0x3c, Normal | 13 }, |
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2644 { 0x56, 0x3e, Normal | 27 }, |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2645 { 0, 0, 0 } |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2646 }; |
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2647 static struct dos_keyboard_map it_keyboard = { |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2648 /* 0 1 2 3 4 5 */ |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2649 /* 0 123456789012345678901234567890123456789012345678901234 */ |
24566
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2650 "\\1234567890'< qwertyuiopŠ+> asdfghjkl•…— zxcvbnm,.- ", |
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2651 /* 01 23456789012345678901234567890123456789012345678901234 */ |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2652 "|!\"œ$%&/()=?^> QWERTYUIOP‚* ASDFGHJKL‡øõ ZXCVBNM;:_ ", |
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2653 /* 0123456789012345678901234567890123456789012345678901234 */ |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2654 " {}~` [] @# ", |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2655 it_kbd_translate_table |
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2656 }; |
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2657 |
13179 | 2658 static struct dos_keyboard_map dk_keyboard = { |
2659 /* 0 1 2 3 4 5 */ | |
2660 /* 0123456789012345678901234567890123456789012345678901234 */ | |
2661 "«1234567890+| qwertyuiop†~ asdfghjkl‘›' zxcvbnm,.- ", | |
2662 /* 01 23456789012345678901234567890123456789012345678901234 */ | |
2663 "õ!\"#$%&/()=?` QWERTYUIOP^ ASDFGHJKL’* ZXCVBNM;:_ ", | |
2664 /* 0123456789012345678901234567890123456789012345678901234 */ | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2665 " @œ$ {[]} | ", |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2666 0 /* no translate table */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2667 }; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2668 |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2669 static struct kbd_translate jp_kbd_translate_table[] = { |
24560
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2670 { 0x73, 0x5c, Normal | 0 }, |
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2671 { 0x73, 0x5f, Normal | 0 }, |
24593
ffe7dfc452d7
(jp_kbd_translate_table): Fix the other \ key.
Eli Zaretskii <eliz@gnu.org>
parents:
24566
diff
changeset
|
2672 { 0x73, 0x1c, Map | 0 }, |
24560
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2673 { 0x7d, 0x5c, Normal | 13 }, |
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2674 { 0x7d, 0x7c, Normal | 13 }, |
24566
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2675 { 0x7d, 0x1c, Map | 13 }, |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2676 { 0, 0, 0 } |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2677 }; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2678 static struct dos_keyboard_map jp_keyboard = { |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2679 /* 0 1 2 3 4 5 */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2680 /* 0123456789012 345678901234567890123456789012345678901234 */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2681 "\\1234567890-^\\ qwertyuiop@[ asdfghjkl;:] zxcvbnm,./ ", |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2682 /* 01 23456789012345678901234567890123456789012345678901234 */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2683 "_!\"#$%&'()~=~| QWERTYUIOP`{ ASDFGHJKL+*} ZXCVBNM<>? ", |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2684 0, /* no Alt-Gr key */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2685 jp_kbd_translate_table |
13179 | 2686 }; |
2687 | |
2688 static struct keyboard_layout_list | |
2689 { | |
2690 int country_code; | |
2691 struct dos_keyboard_map *keyboard_map; | |
13274 | 2692 } keyboard_layout_list[] = |
2693 { | |
2694 1, &us_keyboard, | |
2695 33, &fr_keyboard, | |
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2696 39, &it_keyboard, |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2697 45, &dk_keyboard, |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2698 81, &jp_keyboard |
13179 | 2699 }; |
2700 | |
2701 static struct dos_keyboard_map *keyboard; | |
2702 static int keyboard_map_all; | |
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2703 static int international_keyboard; |
7523
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2704 |
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2705 int |
13179 | 2706 dos_set_keyboard (code, always) |
2707 int code; | |
2708 int always; | |
7523
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2709 { |
13179 | 2710 int i; |
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2711 _go32_dpmi_registers regs; |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2712 |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2713 /* See if Keyb.Com is installed (for international keyboard support). |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2714 Note: calling Int 2Fh via int86 wedges the DOS box on some versions |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2715 of Windows 9X! So don't do that! */ |
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2716 regs.x.ax = 0xad80; |
23011
fe3128dafc96
(dos_set_keyboard): Set up stack and flags before
Eli Zaretskii <eliz@gnu.org>
parents:
22992
diff
changeset
|
2717 regs.x.ss = regs.x.sp = regs.x.flags = 0; |
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2718 _go32_dpmi_simulate_int (0x2f, ®s); |
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2719 if (regs.h.al == 0xff) |
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2720 international_keyboard = 1; |
13624
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2721 |
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2722 /* Initialize to US settings, for countries that don't have their own. */ |
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2723 keyboard = keyboard_layout_list[0].keyboard_map; |
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2724 keyboard_map_all = always; |
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2725 dos_keyboard_layout = 1; |
45332 | 2726 |
13179 | 2727 for (i = 0; i < (sizeof (keyboard_layout_list)/sizeof (struct keyboard_layout_list)); i++) |
2728 if (code == keyboard_layout_list[i].country_code) | |
2729 { | |
2730 keyboard = keyboard_layout_list[i].keyboard_map; | |
2731 keyboard_map_all = always; | |
2732 dos_keyboard_layout = code; | |
2733 return 1; | |
2734 } | |
7523
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2735 return 0; |
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2736 } |
13274 | 2737 |
13179 | 2738 static struct |
2739 { | |
2740 unsigned char char_code; /* normal code */ | |
2741 unsigned char meta_code; /* M- code */ | |
2742 unsigned char keypad_code; /* keypad code */ | |
2743 unsigned char editkey_code; /* edit key */ | |
2744 } keypad_translate_map[] = { | |
2745 '0', '0', 0xb0, /* kp-0 */ 0x63, /* insert */ | |
2746 '1', '1', 0xb1, /* kp-1 */ 0x57, /* end */ | |
2747 '2', '2', 0xb2, /* kp-2 */ 0x54, /* down */ | |
2748 '3', '3', 0xb3, /* kp-3 */ 0x56, /* next */ | |
2749 '4', '4', 0xb4, /* kp-4 */ 0x51, /* left */ | |
2750 '5', '5', 0xb5, /* kp-5 */ 0xb5, /* kp-5 */ | |
2751 '6', '6', 0xb6, /* kp-6 */ 0x53, /* right */ | |
2752 '7', '7', 0xb7, /* kp-7 */ 0x50, /* home */ | |
2753 '8', '8', 0xb8, /* kp-8 */ 0x52, /* up */ | |
2754 '9', '9', 0xb9, /* kp-9 */ 0x55, /* prior */ | |
2755 '.', '-', 0xae, /* kp-decimal */ 0xff /* delete */ | |
2756 }; | |
2757 | |
2758 static struct | |
2759 { | |
2760 unsigned char char_code; /* normal code */ | |
2761 unsigned char keypad_code; /* keypad code */ | |
2762 } grey_key_translate_map[] = { | |
2763 '/', 0xaf, /* kp-decimal */ | |
2764 '*', 0xaa, /* kp-multiply */ | |
2765 '-', 0xad, /* kp-subtract */ | |
2766 '+', 0xab, /* kp-add */ | |
2767 '\r', 0x8d /* kp-enter */ | |
2768 }; | |
2769 | |
2770 static unsigned short | |
2771 ibmpc_translate_map[] = | |
13040
169d50e2ee4c
(gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents:
13020
diff
changeset
|
2772 { |
13179 | 2773 /* --------------- 00 to 0f --------------- */ |
2774 Normal | 0xff, /* Ctrl Break + Alt-NNN */ | |
2775 Alt | ModFct | 0x1b, /* Escape */ | |
2776 Normal | 1, /* '1' */ | |
2777 Normal | 2, /* '2' */ | |
2778 Normal | 3, /* '3' */ | |
2779 Normal | 4, /* '4' */ | |
2780 Normal | 5, /* '5' */ | |
2781 Normal | 6, /* '6' */ | |
2782 Normal | 7, /* '7' */ | |
2783 Normal | 8, /* '8' */ | |
2784 Normal | 9, /* '9' */ | |
2785 Normal | 10, /* '0' */ | |
2786 Normal | 11, /* '-' */ | |
2787 Normal | 12, /* '=' */ | |
2788 Special | 0x08, /* Backspace */ | |
2789 ModFct | 0x74, /* Tab/Backtab */ | |
2790 | |
2791 /* --------------- 10 to 1f --------------- */ | |
2792 Map | 15, /* 'q' */ | |
2793 Map | 16, /* 'w' */ | |
2794 Map | 17, /* 'e' */ | |
2795 Map | 18, /* 'r' */ | |
2796 Map | 19, /* 't' */ | |
2797 Map | 20, /* 'y' */ | |
2798 Map | 21, /* 'u' */ | |
2799 Map | 22, /* 'i' */ | |
2800 Map | 23, /* 'o' */ | |
2801 Map | 24, /* 'p' */ | |
2802 Map | 25, /* '[' */ | |
45332 | 2803 Map | 26, /* ']' */ |
13179 | 2804 ModFct | 0x0d, /* Return */ |
2805 Ignore, /* Ctrl */ | |
2806 Map | 30, /* 'a' */ | |
2807 Map | 31, /* 's' */ | |
2808 | |
2809 /* --------------- 20 to 2f --------------- */ | |
2810 Map | 32, /* 'd' */ | |
2811 Map | 33, /* 'f' */ | |
2812 Map | 34, /* 'g' */ | |
2813 Map | 35, /* 'h' */ | |
2814 Map | 36, /* 'j' */ | |
2815 Map | 37, /* 'k' */ | |
2816 Map | 38, /* 'l' */ | |
2817 Map | 39, /* ';' */ | |
2818 Map | 40, /* '\'' */ | |
2819 Map | 0, /* '`' */ | |
2820 Ignore, /* Left shift */ | |
2821 Map | 41, /* '\\' */ | |
2822 Map | 45, /* 'z' */ | |
2823 Map | 46, /* 'x' */ | |
2824 Map | 47, /* 'c' */ | |
2825 Map | 48, /* 'v' */ | |
2826 | |
2827 /* --------------- 30 to 3f --------------- */ | |
2828 Map | 49, /* 'b' */ | |
2829 Map | 50, /* 'n' */ | |
2830 Map | 51, /* 'm' */ | |
2831 Map | 52, /* ',' */ | |
2832 Map | 53, /* '.' */ | |
2833 Map | 54, /* '/' */ | |
2834 Ignore, /* Right shift */ | |
2835 Grey | 1, /* Grey * */ | |
2836 Ignore, /* Alt */ | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2837 Normal | 55, /* ' ' */ |
13179 | 2838 Ignore, /* Caps Lock */ |
2839 FctKey | 0xbe, /* F1 */ | |
2840 FctKey | 0xbf, /* F2 */ | |
2841 FctKey | 0xc0, /* F3 */ | |
2842 FctKey | 0xc1, /* F4 */ | |
2843 FctKey | 0xc2, /* F5 */ | |
2844 | |
2845 /* --------------- 40 to 4f --------------- */ | |
2846 FctKey | 0xc3, /* F6 */ | |
2847 FctKey | 0xc4, /* F7 */ | |
2848 FctKey | 0xc5, /* F8 */ | |
2849 FctKey | 0xc6, /* F9 */ | |
2850 FctKey | 0xc7, /* F10 */ | |
2851 Ignore, /* Num Lock */ | |
2852 Ignore, /* Scroll Lock */ | |
2853 KeyPad | 7, /* Home */ | |
2854 KeyPad | 8, /* Up */ | |
2855 KeyPad | 9, /* Page Up */ | |
2856 Grey | 2, /* Grey - */ | |
2857 KeyPad | 4, /* Left */ | |
2858 KeyPad | 5, /* Keypad 5 */ | |
2859 KeyPad | 6, /* Right */ | |
2860 Grey | 3, /* Grey + */ | |
2861 KeyPad | 1, /* End */ | |
2862 | |
2863 /* --------------- 50 to 5f --------------- */ | |
2864 KeyPad | 2, /* Down */ | |
2865 KeyPad | 3, /* Page Down */ | |
2866 KeyPad | 0, /* Insert */ | |
2867 KeyPad | 10, /* Delete */ | |
2868 Shift | FctKey | 0xbe, /* (Shift) F1 */ | |
2869 Shift | FctKey | 0xbf, /* (Shift) F2 */ | |
2870 Shift | FctKey | 0xc0, /* (Shift) F3 */ | |
2871 Shift | FctKey | 0xc1, /* (Shift) F4 */ | |
2872 Shift | FctKey | 0xc2, /* (Shift) F5 */ | |
2873 Shift | FctKey | 0xc3, /* (Shift) F6 */ | |
2874 Shift | FctKey | 0xc4, /* (Shift) F7 */ | |
2875 Shift | FctKey | 0xc5, /* (Shift) F8 */ | |
2876 Shift | FctKey | 0xc6, /* (Shift) F9 */ | |
2877 Shift | FctKey | 0xc7, /* (Shift) F10 */ | |
2878 Ctrl | FctKey | 0xbe, /* (Ctrl) F1 */ | |
2879 Ctrl | FctKey | 0xbf, /* (Ctrl) F2 */ | |
13040
169d50e2ee4c
(gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents:
13020
diff
changeset
|
2880 |
13179 | 2881 /* --------------- 60 to 6f --------------- */ |
2882 Ctrl | FctKey | 0xc0, /* (Ctrl) F3 */ | |
2883 Ctrl | FctKey | 0xc1, /* (Ctrl) F4 */ | |
2884 Ctrl | FctKey | 0xc2, /* (Ctrl) F5 */ | |
2885 Ctrl | FctKey | 0xc3, /* (Ctrl) F6 */ | |
2886 Ctrl | FctKey | 0xc4, /* (Ctrl) F7 */ | |
2887 Ctrl | FctKey | 0xc5, /* (Ctrl) F8 */ | |
2888 Ctrl | FctKey | 0xc6, /* (Ctrl) F9 */ | |
2889 Ctrl | FctKey | 0xc7, /* (Ctrl) F10 */ | |
2890 Alt | FctKey | 0xbe, /* (Alt) F1 */ | |
2891 Alt | FctKey | 0xbf, /* (Alt) F2 */ | |
2892 Alt | FctKey | 0xc0, /* (Alt) F3 */ | |
2893 Alt | FctKey | 0xc1, /* (Alt) F4 */ | |
2894 Alt | FctKey | 0xc2, /* (Alt) F5 */ | |
2895 Alt | FctKey | 0xc3, /* (Alt) F6 */ | |
2896 Alt | FctKey | 0xc4, /* (Alt) F7 */ | |
2897 Alt | FctKey | 0xc5, /* (Alt) F8 */ | |
2898 | |
2899 /* --------------- 70 to 7f --------------- */ | |
2900 Alt | FctKey | 0xc6, /* (Alt) F9 */ | |
2901 Alt | FctKey | 0xc7, /* (Alt) F10 */ | |
2902 Ctrl | FctKey | 0x6d, /* (Ctrl) Sys Rq */ | |
2903 Ctrl | KeyPad | 4, /* (Ctrl) Left */ | |
2904 Ctrl | KeyPad | 6, /* (Ctrl) Right */ | |
2905 Ctrl | KeyPad | 1, /* (Ctrl) End */ | |
2906 Ctrl | KeyPad | 3, /* (Ctrl) Page Down */ | |
2907 Ctrl | KeyPad | 7, /* (Ctrl) Home */ | |
2908 Alt | Map | 1, /* '1' */ | |
2909 Alt | Map | 2, /* '2' */ | |
2910 Alt | Map | 3, /* '3' */ | |
2911 Alt | Map | 4, /* '4' */ | |
2912 Alt | Map | 5, /* '5' */ | |
2913 Alt | Map | 6, /* '6' */ | |
2914 Alt | Map | 7, /* '7' */ | |
2915 Alt | Map | 8, /* '8' */ | |
2916 | |
2917 /* --------------- 80 to 8f --------------- */ | |
2918 Alt | Map | 9, /* '9' */ | |
2919 Alt | Map | 10, /* '0' */ | |
2920 Alt | Map | 11, /* '-' */ | |
2921 Alt | Map | 12, /* '=' */ | |
2922 Ctrl | KeyPad | 9, /* (Ctrl) Page Up */ | |
2923 FctKey | 0xc8, /* F11 */ | |
2924 FctKey | 0xc9, /* F12 */ | |
2925 Shift | FctKey | 0xc8, /* (Shift) F11 */ | |
2926 Shift | FctKey | 0xc9, /* (Shift) F12 */ | |
2927 Ctrl | FctKey | 0xc8, /* (Ctrl) F11 */ | |
2928 Ctrl | FctKey | 0xc9, /* (Ctrl) F12 */ | |
2929 Alt | FctKey | 0xc8, /* (Alt) F11 */ | |
2930 Alt | FctKey | 0xc9, /* (Alt) F12 */ | |
2931 Ctrl | KeyPad | 8, /* (Ctrl) Up */ | |
2932 Ctrl | Grey | 2, /* (Ctrl) Grey - */ | |
2933 Ctrl | KeyPad | 5, /* (Ctrl) Keypad 5 */ | |
2934 | |
2935 /* --------------- 90 to 9f --------------- */ | |
2936 Ctrl | Grey | 3, /* (Ctrl) Grey + */ | |
2937 Ctrl | KeyPad | 2, /* (Ctrl) Down */ | |
2938 Ctrl | KeyPad | 0, /* (Ctrl) Insert */ | |
2939 Ctrl | KeyPad | 10, /* (Ctrl) Delete */ | |
2940 Ctrl | FctKey | 0x09, /* (Ctrl) Tab */ | |
2941 Ctrl | Grey | 0, /* (Ctrl) Grey / */ | |
2942 Ctrl | Grey | 1, /* (Ctrl) Grey * */ | |
2943 Alt | FctKey | 0x50, /* (Alt) Home */ | |
2944 Alt | FctKey | 0x52, /* (Alt) Up */ | |
2945 Alt | FctKey | 0x55, /* (Alt) Page Up */ | |
2946 Ignore, /* NO KEY */ | |
2947 Alt | FctKey | 0x51, /* (Alt) Left */ | |
2948 Ignore, /* NO KEY */ | |
2949 Alt | FctKey | 0x53, /* (Alt) Right */ | |
2950 Ignore, /* NO KEY */ | |
2951 Alt | FctKey | 0x57, /* (Alt) End */ | |
2952 | |
2953 /* --------------- a0 to af --------------- */ | |
2954 Alt | KeyPad | 2, /* (Alt) Down */ | |
2955 Alt | KeyPad | 3, /* (Alt) Page Down */ | |
2956 Alt | KeyPad | 0, /* (Alt) Insert */ | |
2957 Alt | KeyPad | 10, /* (Alt) Delete */ | |
2958 Alt | Grey | 0, /* (Alt) Grey / */ | |
2959 Alt | FctKey | 0x09, /* (Alt) Tab */ | |
2960 Alt | Grey | 4 /* (Alt) Keypad Enter */ | |
2961 }; | |
13274 | 2962 |
13179 | 2963 /* These bit-positions corresponds to values returned by BIOS */ |
2964 #define SHIFT_P 0x0003 /* two bits! */ | |
2965 #define CTRL_P 0x0004 | |
2966 #define ALT_P 0x0008 | |
2967 #define SCRLOCK_P 0x0010 | |
2968 #define NUMLOCK_P 0x0020 | |
2969 #define CAPSLOCK_P 0x0040 | |
2970 #define ALT_GR_P 0x0800 | |
2971 #define SUPER_P 0x4000 /* pseudo */ | |
2972 #define HYPER_P 0x8000 /* pseudo */ | |
2973 | |
2974 static int | |
2975 dos_get_modifiers (keymask) | |
2976 int *keymask; | |
5503 | 2977 { |
13179 | 2978 union REGS regs; |
45332 | 2979 int mask, modifiers = 0; |
2980 | |
13179 | 2981 /* Calculate modifier bits */ |
2982 regs.h.ah = extended_kbd ? 0x12 : 0x02; | |
2983 int86 (0x16, ®s, ®s); | |
2984 | |
2985 if (!extended_kbd) | |
2986 { | |
45332 | 2987 mask = regs.h.al & (SHIFT_P | CTRL_P | ALT_P | |
13179 | 2988 SCRLOCK_P | NUMLOCK_P | CAPSLOCK_P); |
2989 } | |
2990 else | |
2991 { | |
2992 mask = regs.h.al & (SHIFT_P | | |
2993 SCRLOCK_P | NUMLOCK_P | CAPSLOCK_P); | |
45332 | 2994 |
13179 | 2995 /* Do not break international keyboard support. */ |
2996 /* When Keyb.Com is loaded, the right Alt key is */ | |
2997 /* used for accessing characters like { and } */ | |
2998 if (regs.h.ah & 2) /* Left ALT pressed ? */ | |
2999 mask |= ALT_P; | |
3000 | |
3001 if ((regs.h.ah & 8) != 0) /* Right ALT pressed ? */ | |
3002 { | |
3003 mask |= ALT_GR_P; | |
3004 if (dos_hyper_key == 1) | |
3005 { | |
3006 mask |= HYPER_P; | |
3007 modifiers |= hyper_modifier; | |
3008 } | |
3009 else if (dos_super_key == 1) | |
3010 { | |
3011 mask |= SUPER_P; | |
3012 modifiers |= super_modifier; | |
3013 } | |
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
3014 else if (!international_keyboard) |
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
3015 { |
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
3016 /* If Keyb.Com is NOT installed, let Right Alt behave |
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
3017 like the Left Alt. */ |
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
3018 mask &= ~ALT_GR_P; |
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
3019 mask |= ALT_P; |
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
3020 } |
13179 | 3021 } |
45332 | 3022 |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3023 if (regs.h.ah & 1) /* Left CTRL pressed ? */ |
13179 | 3024 mask |= CTRL_P; |
3025 | |
3026 if (regs.h.ah & 4) /* Right CTRL pressed ? */ | |
3027 { | |
3028 if (dos_hyper_key == 2) | |
3029 { | |
3030 mask |= HYPER_P; | |
3031 modifiers |= hyper_modifier; | |
3032 } | |
3033 else if (dos_super_key == 2) | |
3034 { | |
3035 mask |= SUPER_P; | |
3036 modifiers |= super_modifier; | |
3037 } | |
3038 else | |
3039 mask |= CTRL_P; | |
3040 } | |
3041 } | |
3042 | |
3043 if (mask & SHIFT_P) | |
3044 modifiers |= shift_modifier; | |
3045 if (mask & CTRL_P) | |
3046 modifiers |= ctrl_modifier; | |
3047 if (mask & ALT_P) | |
3048 modifiers |= meta_modifier; | |
3049 | |
3050 if (keymask) | |
3051 *keymask = mask; | |
3052 return modifiers; | |
5503 | 3053 } |
3054 | |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3055 #define NUM_RECENT_DOSKEYS (100) |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3056 int recent_doskeys_index; /* Index for storing next element into recent_doskeys */ |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3057 int total_doskeys; /* Total number of elements stored into recent_doskeys */ |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3058 Lisp_Object recent_doskeys; /* A vector, holding the last 100 keystrokes */ |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3059 |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3060 DEFUN ("recent-doskeys", Frecent_doskeys, Srecent_doskeys, 0, 0, 0, |
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3061 doc: /* Return vector of last 100 keyboard input values seen in dos_rawgetc. |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3062 Each input key receives two values in this vector: first the ASCII code, |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3063 and then the scan code. */) |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3064 () |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3065 { |
45332 | 3066 Lisp_Object val, *keys = XVECTOR (recent_doskeys)->contents; |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3067 |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3068 if (total_doskeys < NUM_RECENT_DOSKEYS) |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3069 return Fvector (total_doskeys, keys); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3070 else |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3071 { |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3072 val = Fvector (NUM_RECENT_DOSKEYS, keys); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3073 bcopy (keys + recent_doskeys_index, |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3074 XVECTOR (val)->contents, |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3075 (NUM_RECENT_DOSKEYS - recent_doskeys_index) * sizeof (Lisp_Object)); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3076 bcopy (keys, |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3077 XVECTOR (val)->contents + NUM_RECENT_DOSKEYS - recent_doskeys_index, |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3078 recent_doskeys_index * sizeof (Lisp_Object)); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3079 return val; |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3080 } |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3081 } |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3082 |
13179 | 3083 /* Get a char from keyboard. Function keys are put into the event queue. */ |
3084 static int | |
3085 dos_rawgetc () | |
5503 | 3086 { |
13179 | 3087 struct input_event event; |
3088 union REGS regs; | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3089 struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (SELECTED_FRAME()); |
51571
904f120f283f
(dos_rawgetc): Don't pass uninitialized data to kbd_buffer_store_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51201
diff
changeset
|
3090 EVENT_INIT (event); |
54730
c33e4ac43939
(clear_mouse_face): Only clear mouse highlight if not hidden.
Kim F. Storm <storm@cua.dk>
parents:
53187
diff
changeset
|
3091 |
13179 | 3092 #ifndef HAVE_X_WINDOWS |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3093 /* Maybe put the cursor where it should be. */ |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3094 IT_cmgoto (SELECTED_FRAME()); |
13179 | 3095 #endif |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3096 |
13179 | 3097 /* The following condition is equivalent to `kbhit ()', except that |
3098 it uses the bios to do its job. This pleases DESQview/X. */ | |
3099 while ((regs.h.ah = extended_kbd ? 0x11 : 0x01), | |
3100 int86 (0x16, ®s, ®s), | |
3101 (regs.x.flags & 0x40) == 0) | |
5503 | 3102 { |
13179 | 3103 union REGS regs; |
3104 register unsigned char c; | |
45332 | 3105 int modifiers, sc, code = -1, mask, kp_mode; |
13179 | 3106 |
3107 regs.h.ah = extended_kbd ? 0x10 : 0x00; | |
3108 int86 (0x16, ®s, ®s); | |
3109 c = regs.h.al; | |
3110 sc = regs.h.ah; | |
5503 | 3111 |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3112 total_doskeys += 2; |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3113 XVECTOR (recent_doskeys)->contents[recent_doskeys_index++] |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3114 = make_number (c); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3115 if (recent_doskeys_index == NUM_RECENT_DOSKEYS) |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3116 recent_doskeys_index = 0; |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3117 XVECTOR (recent_doskeys)->contents[recent_doskeys_index++] |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3118 = make_number (sc); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3119 if (recent_doskeys_index == NUM_RECENT_DOSKEYS) |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3120 recent_doskeys_index = 0; |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3121 |
13274 | 3122 modifiers = dos_get_modifiers (&mask); |
45332 | 3123 |
13179 | 3124 #ifndef HAVE_X_WINDOWS |
13274 | 3125 if (!NILP (Vdos_display_scancodes)) |
13179 | 3126 { |
14157
38606398dfa6
(dos_rawgetc): Make buf longer.
Richard M. Stallman <rms@gnu.org>
parents:
14036
diff
changeset
|
3127 char buf[11]; |
13179 | 3128 sprintf (buf, "%02x:%02x*%04x", |
3129 (unsigned) (sc&0xff), (unsigned) c, mask); | |
3130 dos_direct_output (screen_size_Y - 2, screen_size_X - 12, buf, 10); | |
3131 } | |
3132 #endif | |
5503 | 3133 |
13179 | 3134 if (sc == 0xe0) |
3135 { | |
3136 switch (c) | |
3137 { | |
3138 case 10: /* Ctrl Grey Enter */ | |
3139 code = Ctrl | Grey | 4; | |
3140 break; | |
3141 case 13: /* Grey Enter */ | |
3142 code = Grey | 4; | |
3143 break; | |
3144 case '/': /* Grey / */ | |
3145 code = Grey | 0; | |
3146 break; | |
3147 default: | |
3148 continue; | |
3149 }; | |
3150 c = 0; | |
3151 } | |
3152 else | |
3153 { | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3154 /* Try the keyboard-private translation table first. */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3155 if (keyboard->translate_table) |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3156 { |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3157 struct kbd_translate *p = keyboard->translate_table; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3158 |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3159 while (p->sc) |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3160 { |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3161 if (p->sc == sc && p->ch == c) |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3162 { |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3163 code = p->code; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3164 break; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3165 } |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3166 p++; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3167 } |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3168 } |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3169 /* If the private table didn't translate it, use the general |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3170 one. */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3171 if (code == -1) |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3172 { |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3173 if (sc >= (sizeof (ibmpc_translate_map) / sizeof (short))) |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3174 continue; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3175 if ((code = ibmpc_translate_map[sc]) == Ignore) |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3176 continue; |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
3177 } |
13179 | 3178 } |
45332 | 3179 |
13179 | 3180 if (c == 0) |
3181 { | |
16967
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3182 /* We only look at the keyboard Ctrl/Shift/Alt keys when |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3183 Emacs is ready to read a key. Therefore, if they press |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3184 `Alt-x' when Emacs is busy, by the time we get to |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3185 `dos_get_modifiers', they might have already released the |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3186 Alt key, and Emacs gets just `x', which is BAD. |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3187 However, for keys with the `Map' property set, the ASCII |
78501 | 3188 code returns zero only if Alt is pressed. So, when we DON'T |
16967
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3189 have to support international_keyboard, we don't have to |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3190 distinguish between the left and right Alt keys, and we |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3191 can set the META modifier for any keys with the `Map' |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3192 property if they return zero ASCII code (c = 0). */ |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3193 if ( (code & Alt) |
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
3194 || ( (code & 0xf000) == Map && !international_keyboard)) |
13179 | 3195 modifiers |= meta_modifier; |
3196 if (code & Ctrl) | |
3197 modifiers |= ctrl_modifier; | |
3198 if (code & Shift) | |
3199 modifiers |= shift_modifier; | |
3200 } | |
45332 | 3201 |
13179 | 3202 switch (code & 0xf000) |
3203 { | |
3204 case ModFct: | |
3205 if (c && !(mask & (SHIFT_P | ALT_P | CTRL_P | HYPER_P | SUPER_P))) | |
3206 return c; | |
3207 c = 0; /* Special */ | |
45332 | 3208 |
13179 | 3209 case FctKey: |
3210 if (c != 0) | |
3211 return c; | |
45332 | 3212 |
13179 | 3213 case Special: |
3214 code |= 0xff00; | |
3215 break; | |
45332 | 3216 |
13179 | 3217 case Normal: |
3218 if (sc == 0) | |
3219 { | |
3220 if (c == 0) /* ctrl-break */ | |
3221 continue; | |
3222 return c; /* ALT-nnn */ | |
3223 } | |
3224 if (!keyboard_map_all) | |
3225 { | |
3226 if (c != ' ') | |
3227 return c; | |
3228 code = c; | |
3229 break; | |
3230 } | |
45332 | 3231 |
13179 | 3232 case Map: |
3233 if (c && !(mask & ALT_P) && !((mask & SHIFT_P) && (mask & CTRL_P))) | |
3234 if (!keyboard_map_all) | |
3235 return c; | |
5503 | 3236 |
13179 | 3237 code &= 0xff; |
3238 if (mask & ALT_P && code <= 10 && code > 0 && dos_keypad_mode & 0x200) | |
3239 mask |= SHIFT_P; /* ALT-1 => M-! etc. */ | |
45332 | 3240 |
13179 | 3241 if (mask & SHIFT_P) |
3242 { | |
13274 | 3243 code = keyboard->shifted[code]; |
13179 | 3244 mask -= SHIFT_P; |
3245 modifiers &= ~shift_modifier; | |
3246 } | |
3247 else | |
13274 | 3248 if ((mask & ALT_GR_P) && keyboard->alt_gr && keyboard->alt_gr[code] != ' ') |
3249 code = keyboard->alt_gr[code]; | |
13179 | 3250 else |
13274 | 3251 code = keyboard->unshifted[code]; |
13179 | 3252 break; |
3253 | |
3254 case KeyPad: | |
3255 code &= 0xff; | |
3256 if (c == 0xe0) /* edit key */ | |
3257 kp_mode = 3; | |
3258 else | |
3259 if ((mask & (NUMLOCK_P|CTRL_P|SHIFT_P|ALT_P)) == NUMLOCK_P) /* numlock on */ | |
3260 kp_mode = dos_keypad_mode & 0x03; | |
3261 else | |
3262 kp_mode = (dos_keypad_mode >> 4) & 0x03; | |
45332 | 3263 |
13179 | 3264 switch (kp_mode) |
3265 { | |
3266 case 0: | |
3267 if (code == 10 && dos_decimal_point) | |
3268 return dos_decimal_point; | |
13274 | 3269 return keypad_translate_map[code].char_code; |
5503 | 3270 |
13179 | 3271 case 1: |
13274 | 3272 code = 0xff00 | keypad_translate_map[code].keypad_code; |
13179 | 3273 break; |
5503 | 3274 |
13179 | 3275 case 2: |
13274 | 3276 code = keypad_translate_map[code].meta_code; |
13179 | 3277 modifiers = meta_modifier; |
3278 break; | |
45332 | 3279 |
13179 | 3280 case 3: |
13274 | 3281 code = 0xff00 | keypad_translate_map[code].editkey_code; |
13179 | 3282 break; |
3283 } | |
3284 break; | |
45332 | 3285 |
13179 | 3286 case Grey: |
3287 code &= 0xff; | |
3288 kp_mode = ((mask & (NUMLOCK_P|CTRL_P|SHIFT_P|ALT_P)) == NUMLOCK_P) ? 0x04 : 0x40; | |
3289 if (dos_keypad_mode & kp_mode) | |
13274 | 3290 code = 0xff00 | grey_key_translate_map[code].keypad_code; |
13179 | 3291 else |
13274 | 3292 code = grey_key_translate_map[code].char_code; |
13179 | 3293 break; |
3294 } | |
45332 | 3295 |
13179 | 3296 make_event: |
3297 if (code == 0) | |
3298 continue; | |
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3299 |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3300 if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)) |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3301 { |
54730
c33e4ac43939
(clear_mouse_face): Only clear mouse highlight if not hidden.
Kim F. Storm <storm@cua.dk>
parents:
53187
diff
changeset
|
3302 clear_mouse_face (dpyinfo); |
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3303 dpyinfo->mouse_face_hidden = 1; |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3304 } |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3305 |
13179 | 3306 if (code >= 0x100) |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
45332
diff
changeset
|
3307 event.kind = NON_ASCII_KEYSTROKE_EVENT; |
13179 | 3308 else |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
45332
diff
changeset
|
3309 event.kind = ASCII_KEYSTROKE_EVENT; |
13179 | 3310 event.code = code; |
3311 event.modifiers = modifiers; | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3312 event.frame_or_window = selected_frame; |
30198
f39367e12c14
(dos_rawgetc): Always set `arg' member of input_events.
Gerd Moellmann <gerd@gnu.org>
parents:
30180
diff
changeset
|
3313 event.arg = Qnil; |
13179 | 3314 event.timestamp = event_timestamp (); |
3315 kbd_buffer_store_event (&event); | |
3316 } | |
5503 | 3317 |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3318 if (have_mouse > 0 && !mouse_preempted) |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3319 { |
13179 | 3320 int but, press, x, y, ok; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3321 int mouse_prev_x = mouse_last_x, mouse_prev_y = mouse_last_y; |
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3322 Lisp_Object mouse_window = Qnil; |
5503 | 3323 |
13179 | 3324 /* Check for mouse movement *before* buttons. */ |
3325 mouse_check_moved (); | |
5503 | 3326 |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3327 /* If the mouse moved from the spot of its last sighting, we |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3328 might need to update mouse highlight. */ |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3329 if (mouse_last_x != mouse_prev_x || mouse_last_y != mouse_prev_y) |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3330 { |
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3331 if (dpyinfo->mouse_face_hidden) |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3332 { |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3333 dpyinfo->mouse_face_hidden = 0; |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3334 clear_mouse_face (dpyinfo); |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3335 } |
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3336 |
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3337 /* Generate SELECT_WINDOW_EVENTs when needed. */ |
72736
f6b18b9949d1
* xdisp.c (mouse_autoselect_window): Removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
71986
diff
changeset
|
3338 if (!NILP (Vmouse_autoselect_window)) |
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3339 { |
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3340 mouse_window = window_from_coordinates (SELECTED_FRAME(), |
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3341 mouse_last_x, |
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3342 mouse_last_y, |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
3343 0, 0, 0, 0); |
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3344 /* A window will be selected only when it is not |
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3345 selected now, and the last mouse movement event was |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3346 not in it. A minibuffer window will be selected iff |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3347 it is active. */ |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3348 if (WINDOWP (mouse_window) |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3349 && !EQ (mouse_window, last_mouse_window) |
79060
848bc3eac628
(dos_rawgetc): Undo last change (there's no ``leaving selected frame''
Eli Zaretskii <eliz@gnu.org>
parents:
78987
diff
changeset
|
3350 && !EQ (mouse_window, selected_window)) |
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3351 { |
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3352 event.kind = SELECT_WINDOW_EVENT; |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3353 event.frame_or_window = mouse_window; |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3354 event.arg = Qnil; |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3355 event.timestamp = event_timestamp (); |
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
3356 kbd_buffer_store_event (&event); |
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3357 } |
43363
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
3358 last_mouse_window = mouse_window; |
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
3359 } |
43363
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
3360 else |
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
3361 last_mouse_window = Qnil; |
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
3362 |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
3363 previous_help_echo_string = help_echo_string; |
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
3364 help_echo_string = help_echo_object = help_echo_window = Qnil; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3365 help_echo_pos = -1; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3366 IT_note_mouse_highlight (SELECTED_FRAME(), |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3367 mouse_last_x, mouse_last_y); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3368 /* If the contents of the global variable help_echo has |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3369 changed, generate a HELP_EVENT. */ |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
3370 if (!NILP (help_echo_string) || !NILP (previous_help_echo_string)) |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3371 { |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3372 event.kind = HELP_EVENT; |
30180
c36d4c8b21b6
(dos_rawgetc): Adapt to change of HELP_EVENTs.
Gerd Moellmann <gerd@gnu.org>
parents:
30132
diff
changeset
|
3373 event.frame_or_window = selected_frame; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3374 event.arg = help_echo_object; |
44525
440ce7bfcd77
(dos_rawgetc): Use a single event for HELP_EVENT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
44364
diff
changeset
|
3375 event.x = WINDOWP (help_echo_window) |
440ce7bfcd77
(dos_rawgetc): Use a single event for HELP_EVENT.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
44364
diff
changeset
|
3376 ? help_echo_window : selected_frame; |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
3377 event.y = help_echo_string; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3378 event.timestamp = event_timestamp (); |
44528
d5befc8ddce0
(dos_rawgetc): int/Lisp_Object confusion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
44525
diff
changeset
|
3379 event.code = help_echo_pos; |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3380 kbd_buffer_store_event (&event); |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3381 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3382 } |
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
3383 |
13179 | 3384 for (but = 0; but < NUM_MOUSE_BUTTONS; but++) |
3385 for (press = 0; press < 2; press++) | |
3386 { | |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3387 int button_num = but; |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3388 |
13179 | 3389 if (press) |
3390 ok = mouse_pressed (but, &x, &y); | |
3391 else | |
3392 ok = mouse_released (but, &x, &y); | |
3393 if (ok) | |
3394 { | |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3395 /* Allow a simultaneous press/release of Mouse-1 and |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3396 Mouse-2 to simulate Mouse-3 on two-button mice. */ |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3397 if (mouse_button_count == 2 && but < 2) |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3398 { |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3399 int x2, y2; /* don't clobber original coordinates */ |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3400 |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3401 /* If only one button is pressed, wait 100 msec and |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3402 check again. This way, Speedy Gonzales isn't |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3403 punished, while the slow get their chance. */ |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3404 if (press && mouse_pressed (1-but, &x2, &y2) |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3405 || !press && mouse_released (1-but, &x2, &y2)) |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3406 button_num = 2; |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3407 else |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3408 { |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3409 delay (100); |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3410 if (press && mouse_pressed (1-but, &x2, &y2) |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3411 || !press && mouse_released (1-but, &x2, &y2)) |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3412 button_num = 2; |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3413 } |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3414 } |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3415 |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
45332
diff
changeset
|
3416 event.kind = MOUSE_CLICK_EVENT; |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3417 event.code = button_num; |
13179 | 3418 event.modifiers = dos_get_modifiers (0) |
3419 | (press ? down_modifier : up_modifier); | |
56335
b6377908f1d4
(dos_rawgetc): Use make_number to produce Lisp objects
Eli Zaretskii <eliz@gnu.org>
parents:
55662
diff
changeset
|
3420 event.x = make_number (x); |
b6377908f1d4
(dos_rawgetc): Use make_number to produce Lisp objects
Eli Zaretskii <eliz@gnu.org>
parents:
55662
diff
changeset
|
3421 event.y = make_number (y); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3422 event.frame_or_window = selected_frame; |
30198
f39367e12c14
(dos_rawgetc): Always set `arg' member of input_events.
Gerd Moellmann <gerd@gnu.org>
parents:
30180
diff
changeset
|
3423 event.arg = Qnil; |
13179 | 3424 event.timestamp = event_timestamp (); |
3425 kbd_buffer_store_event (&event); | |
3426 } | |
3427 } | |
3428 } | |
5503 | 3429 |
13179 | 3430 return -1; |
9572 | 3431 } |
3432 | |
13179 | 3433 static int prev_get_char = -1; |
5503 | 3434 |
13179 | 3435 /* Return 1 if a key is ready to be read without suspending execution. */ |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3436 |
13179 | 3437 dos_keysns () |
5503 | 3438 { |
13179 | 3439 if (prev_get_char != -1) |
3440 return 1; | |
3441 else | |
3442 return ((prev_get_char = dos_rawgetc ()) != -1); | |
5503 | 3443 } |
3444 | |
13179 | 3445 /* Read a key. Return -1 if no key is ready. */ |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3446 |
13179 | 3447 dos_keyread () |
5503 | 3448 { |
13179 | 3449 if (prev_get_char != -1) |
8246
d48c2b01fba5
(mouse_init1): Use alternate mouse detection for old mouse drivers.
Richard M. Stallman <rms@gnu.org>
parents:
8194
diff
changeset
|
3450 { |
13179 | 3451 int c = prev_get_char; |
3452 prev_get_char = -1; | |
3453 return c; | |
8246
d48c2b01fba5
(mouse_init1): Use alternate mouse detection for old mouse drivers.
Richard M. Stallman <rms@gnu.org>
parents:
8194
diff
changeset
|
3454 } |
13179 | 3455 else |
3456 return dos_rawgetc (); | |
3457 } | |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
3458 |
9572 | 3459 #ifndef HAVE_X_WINDOWS |
50247
f9447a2e045c
* xdisp.c (pixel_to_glyph_coords, glyph_to_pixel_coords):
Kim F. Storm <storm@cua.dk>
parents:
50225
diff
changeset
|
3460 |
9572 | 3461 /* Simulation of X's menus. Nothing too fancy here -- just make it work |
3462 for now. | |
3463 | |
3464 Actually, I don't know the meaning of all the parameters of the functions | |
3465 here -- I only know how they are called by xmenu.c. I could of course | |
3466 grab the nearest Xlib manual (down the hall, second-to-last door on the | |
3467 left), but I don't think it's worth the effort. */ | |
3468 | |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3469 /* These hold text of the current and the previous menu help messages. */ |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3470 static char *menu_help_message, *prev_menu_help_message; |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3471 /* Pane number and item number of the menu item which generated the |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3472 last menu help message. */ |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3473 static int menu_help_paneno, menu_help_itemno; |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3474 |
9572 | 3475 static XMenu * |
3476 IT_menu_create () | |
3477 { | |
3478 XMenu *menu; | |
3479 | |
3480 menu = (XMenu *) xmalloc (sizeof (XMenu)); | |
3481 menu->allocated = menu->count = menu->panecount = menu->width = 0; | |
3482 return menu; | |
3483 } | |
3484 | |
3485 /* Allocate some (more) memory for MENU ensuring that there is room for one | |
3486 for item. */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3487 |
9572 | 3488 static void |
3489 IT_menu_make_room (XMenu *menu) | |
3490 { | |
3491 if (menu->allocated == 0) | |
3492 { | |
3493 int count = menu->allocated = 10; | |
3494 menu->text = (char **) xmalloc (count * sizeof (char *)); | |
3495 menu->submenu = (XMenu **) xmalloc (count * sizeof (XMenu *)); | |
3496 menu->panenumber = (int *) xmalloc (count * sizeof (int)); | |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3497 menu->help_text = (char **) xmalloc (count * sizeof (char *)); |
9572 | 3498 } |
3499 else if (menu->allocated == menu->count) | |
3500 { | |
3501 int count = menu->allocated = menu->allocated + 10; | |
3502 menu->text | |
3503 = (char **) xrealloc (menu->text, count * sizeof (char *)); | |
3504 menu->submenu | |
3505 = (XMenu **) xrealloc (menu->submenu, count * sizeof (XMenu *)); | |
3506 menu->panenumber | |
3507 = (int *) xrealloc (menu->panenumber, count * sizeof (int)); | |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3508 menu->help_text |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3509 = (char **) xrealloc (menu->help_text, count * sizeof (char *)); |
9572 | 3510 } |
3511 } | |
3512 | |
3513 /* Search the given menu structure for a given pane number. */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3514 |
9572 | 3515 static XMenu * |
3516 IT_menu_search_pane (XMenu *menu, int pane) | |
3517 { | |
3518 int i; | |
3519 XMenu *try; | |
3520 | |
3521 for (i = 0; i < menu->count; i++) | |
3522 if (menu->submenu[i]) | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3523 { |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3524 if (pane == menu->panenumber[i]) |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3525 return menu->submenu[i]; |
13179 | 3526 if ((try = IT_menu_search_pane (menu->submenu[i], pane))) |
9572 | 3527 return try; |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3528 } |
9572 | 3529 return (XMenu *) 0; |
3530 } | |
3531 | |
3532 /* Determine how much screen space a given menu needs. */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3533 |
9572 | 3534 static void |
3535 IT_menu_calc_size (XMenu *menu, int *width, int *height) | |
3536 { | |
3537 int i, h2, w2, maxsubwidth, maxheight; | |
3538 | |
3539 maxsubwidth = 0; | |
3540 maxheight = menu->count; | |
3541 for (i = 0; i < menu->count; i++) | |
3542 { | |
3543 if (menu->submenu[i]) | |
3544 { | |
3545 IT_menu_calc_size (menu->submenu[i], &w2, &h2); | |
3546 if (w2 > maxsubwidth) maxsubwidth = w2; | |
3547 if (i + h2 > maxheight) maxheight = i + h2; | |
3548 } | |
3549 } | |
3550 *width = menu->width + maxsubwidth; | |
3551 *height = maxheight; | |
3552 } | |
3553 | |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3554 /* Display MENU at (X,Y) using FACES. */ |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3555 |
9572 | 3556 static void |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3557 IT_menu_display (XMenu *menu, int y, int x, int pn, int *faces, int disp_help) |
9572 | 3558 { |
45332 | 3559 int i, j, face, width, mx, my, enabled, mousehere, row, col; |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3560 struct glyph *text, *p; |
9572 | 3561 char *q; |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3562 struct frame *sf = SELECTED_FRAME(); |
9572 | 3563 |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3564 menu_help_message = NULL; |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3565 |
9572 | 3566 width = menu->width; |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3567 text = (struct glyph *) xmalloc ((width + 2) * sizeof (struct glyph)); |
9572 | 3568 ScreenGetCursor (&row, &col); |
3569 mouse_get_xy (&mx, &my); | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3570 IT_update_begin (sf); |
9572 | 3571 for (i = 0; i < menu->count; i++) |
3572 { | |
27409
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3573 int max_width = width + 2; |
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3574 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3575 IT_cursor_to (sf, y + i, x); |
9572 | 3576 enabled |
3577 = (!menu->submenu[i] && menu->panenumber[i]) || (menu->submenu[i]); | |
3578 mousehere = (y + i == my && x <= mx && mx < x + width + 2); | |
3579 face = faces[enabled + mousehere * 2]; | |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3580 /* The following if clause means that we display the menu help |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3581 strings even if the menu item is currently disabled. */ |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3582 if (disp_help && enabled + mousehere * 2 >= 2) |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3583 { |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3584 menu_help_message = menu->help_text[i]; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3585 menu_help_paneno = pn - 1; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3586 menu_help_itemno = i; |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3587 } |
9572 | 3588 p = text; |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3589 SET_CHAR_GLYPH (*p, ' ', face, 0); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3590 p++; |
9572 | 3591 for (j = 0, q = menu->text[i]; *q; j++) |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3592 { |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3593 if (*q > 26) |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3594 { |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3595 SET_CHAR_GLYPH (*p, *q++, face, 0); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3596 p++; |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3597 } |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3598 else /* make '^x' */ |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3599 { |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3600 SET_CHAR_GLYPH (*p, '^', face, 0); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3601 p++; |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3602 j++; |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3603 SET_CHAR_GLYPH (*p, *q++ + 64, face, 0); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3604 p++; |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3605 } |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3606 } |
27409
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3607 /* Don't let the menu text overflow into the next screen row. */ |
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3608 if (x + max_width > screen_size_X) |
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3609 { |
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3610 max_width = screen_size_X - x; |
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3611 text[max_width - 1].u.ch = '$'; /* indicate it's truncated */ |
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3612 } |
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
3613 for (; j < max_width - 2; j++, p++) |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3614 SET_CHAR_GLYPH (*p, ' ', face, 0); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3615 |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3616 SET_CHAR_GLYPH (*p, menu->submenu[i] ? 16 : ' ', face, 0); |
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3617 p++; |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3618 IT_write_glyphs (sf, text, max_width); |
9572 | 3619 } |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3620 IT_update_end (sf); |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3621 IT_cursor_to (sf, row, col); |
9572 | 3622 xfree (text); |
3623 } | |
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3624 |
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3625 /* --------------------------- X Menu emulation ---------------------- */ |
9572 | 3626 |
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3627 /* Report availability of menus. */ |
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3628 |
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3629 int |
45332 | 3630 have_menus_p () { return 1; } |
13179 | 3631 |
9572 | 3632 /* Create a brand new menu structure. */ |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3633 |
9572 | 3634 XMenu * |
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3635 XMenuCreate (Display *foo1, Window foo2, char *foo3) |
9572 | 3636 { |
3637 return IT_menu_create (); | |
3638 } | |
3639 | |
3640 /* Create a new pane and place it on the outer-most level. It is not | |
3641 clear that it should be placed out there, but I don't know what else | |
3642 to do. */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3643 |
9572 | 3644 int |
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3645 XMenuAddPane (Display *foo, XMenu *menu, char *txt, int enable) |
9572 | 3646 { |
3647 int len; | |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3648 char *p; |
9572 | 3649 |
3650 if (!enable) | |
3651 abort (); | |
3652 | |
3653 IT_menu_make_room (menu); | |
3654 menu->submenu[menu->count] = IT_menu_create (); | |
3655 menu->text[menu->count] = txt; | |
3656 menu->panenumber[menu->count] = ++menu->panecount; | |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3657 menu->help_text[menu->count] = NULL; |
9572 | 3658 menu->count++; |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3659 |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3660 /* Adjust length for possible control characters (which will |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3661 be written as ^x). */ |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3662 for (len = strlen (txt), p = txt; *p; p++) |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3663 if (*p < 27) |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3664 len++; |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3665 |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3666 if (len > menu->width) |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3667 menu->width = len; |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3668 |
9572 | 3669 return menu->panecount; |
3670 } | |
3671 | |
3672 /* Create a new item in a menu pane. */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3673 |
9572 | 3674 int |
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3675 XMenuAddSelection (Display *bar, XMenu *menu, int pane, |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3676 int foo, char *txt, int enable, char *help_text) |
9572 | 3677 { |
3678 int len; | |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3679 char *p; |
9572 | 3680 |
3681 if (pane) | |
3682 if (!(menu = IT_menu_search_pane (menu, pane))) | |
3683 return XM_FAILURE; | |
3684 IT_menu_make_room (menu); | |
3685 menu->submenu[menu->count] = (XMenu *) 0; | |
3686 menu->text[menu->count] = txt; | |
3687 menu->panenumber[menu->count] = enable; | |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3688 menu->help_text[menu->count] = help_text; |
9572 | 3689 menu->count++; |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3690 |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3691 /* Adjust length for possible control characters (which will |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3692 be written as ^x). */ |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3693 for (len = strlen (txt), p = txt; *p; p++) |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3694 if (*p < 27) |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3695 len++; |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3696 |
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3697 if (len > menu->width) |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3698 menu->width = len; |
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3699 |
9572 | 3700 return XM_SUCCESS; |
3701 } | |
3702 | |
3703 /* Decide where the menu would be placed if requested at (X,Y). */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3704 |
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3705 void |
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3706 XMenuLocate (Display *foo0, XMenu *menu, int foo1, int foo2, int x, int y, |
9572 | 3707 int *ulx, int *uly, int *width, int *height) |
3708 { | |
13714
45e71ea63d71
(XMenuActivate): Display the menu pane title.
Karl Heuer <kwzh@gnu.org>
parents:
13657
diff
changeset
|
3709 IT_menu_calc_size (menu, width, height); |
9572 | 3710 *ulx = x + 1; |
3711 *uly = y; | |
3712 *width += 2; | |
3713 } | |
3714 | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3715 struct IT_menu_state |
9572 | 3716 { |
3717 void *screen_behind; | |
3718 XMenu *menu; | |
3719 int pane; | |
3720 int x, y; | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3721 }; |
9572 | 3722 |
3723 | |
3724 /* Display menu, wait for user's response, and return that response. */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3725 |
9572 | 3726 int |
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3727 XMenuActivate (Display *foo, XMenu *menu, int *pane, int *selidx, |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3728 int x0, int y0, unsigned ButtonMask, char **txt, |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3729 void (*help_callback)(char *, int, int)) |
9572 | 3730 { |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3731 struct IT_menu_state *state; |
45332 | 3732 int statecount, x, y, i, b, screensize, leave, result, onepane; |
13860
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3733 int title_faces[4]; /* face to display the menu title */ |
45332 | 3734 int faces[4], buffers_num_deleted = 0; |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3735 struct frame *sf = SELECTED_FRAME(); |
45332 | 3736 Lisp_Object saved_echo_area_message, selectface; |
9572 | 3737 |
3738 /* Just in case we got here without a mouse present... */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3739 if (have_mouse <= 0) |
9572 | 3740 return XM_IA_SELECT; |
16871
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3741 /* Don't allow non-positive x0 and y0, lest the menu will wrap |
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3742 around the display. */ |
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3743 if (x0 <= 0) |
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3744 x0 = 1; |
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3745 if (y0 <= 0) |
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3746 y0 = 1; |
9572 | 3747 |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3748 /* We will process all the mouse events directly, so we had |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3749 better prevent dos_rawgetc from stealing them from us. */ |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3750 mouse_preempted++; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3751 |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3752 state = alloca (menu->panecount * sizeof (struct IT_menu_state)); |
13179 | 3753 screensize = screen_size * 2; |
9572 | 3754 faces[0] |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3755 = lookup_derived_face (sf, intern ("msdos-menu-passive-face"), |
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3756 DEFAULT_FACE_ID, 1); |
9572 | 3757 faces[1] |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3758 = lookup_derived_face (sf, intern ("msdos-menu-active-face"), |
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3759 DEFAULT_FACE_ID, 1); |
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3760 selectface = intern ("msdos-menu-select-face"); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3761 faces[2] = lookup_derived_face (sf, selectface, |
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3762 faces[0], 1); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3763 faces[3] = lookup_derived_face (sf, selectface, |
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3764 faces[1], 1); |
9572 | 3765 |
13860
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3766 /* Make sure the menu title is always displayed with |
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3767 `msdos-menu-active-face', no matter where the mouse pointer is. */ |
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3768 for (i = 0; i < 4; i++) |
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3769 title_faces[i] = faces[3]; |
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3770 |
9572 | 3771 statecount = 1; |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3772 |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3773 /* Don't let the title for the "Buffers" popup menu include a |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3774 digit (which is ugly). |
45332 | 3775 |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3776 This is a terrible kludge, but I think the "Buffers" case is |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3777 the only one where the title includes a number, so it doesn't |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3778 seem to be necessary to make this more general. */ |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3779 if (strncmp (menu->text[0], "Buffers 1", 9) == 0) |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3780 { |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3781 menu->text[0][7] = '\0'; |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3782 buffers_num_deleted = 1; |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3783 } |
30132
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3784 |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3785 /* We need to save the current echo area message, so that we could |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3786 restore it below, before we exit. See the commentary below, |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3787 before the call to message_with_string. */ |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3788 saved_echo_area_message = Fcurrent_message (); |
9572 | 3789 state[0].menu = menu; |
3790 mouse_off (); | |
3791 ScreenRetrieve (state[0].screen_behind = xmalloc (screensize)); | |
13714
45e71ea63d71
(XMenuActivate): Display the menu pane title.
Karl Heuer <kwzh@gnu.org>
parents:
13657
diff
changeset
|
3792 |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3793 /* Turn off the cursor. Otherwise it shows through the menu |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3794 panes, which is ugly. */ |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3795 IT_display_cursor (0); |
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3796 |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3797 /* Display the menu title. */ |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3798 IT_menu_display (menu, y0 - 1, x0 - 1, 1, title_faces, 0); |
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3799 if (buffers_num_deleted) |
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3800 menu->text[0][7] = ' '; |
9572 | 3801 if ((onepane = menu->count == 1 && menu->submenu[0])) |
3802 { | |
3803 menu->width = menu->submenu[0]->width; | |
3804 state[0].menu = menu->submenu[0]; | |
3805 } | |
3806 else | |
3807 { | |
3808 state[0].menu = menu; | |
3809 } | |
3810 state[0].x = x0 - 1; | |
3811 state[0].y = y0; | |
3812 state[0].pane = onepane; | |
3813 | |
3814 mouse_last_x = -1; /* A hack that forces display. */ | |
3815 leave = 0; | |
3816 while (!leave) | |
3817 { | |
13179 | 3818 if (!mouse_visible) mouse_on (); |
9572 | 3819 mouse_check_moved (); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3820 if (sf->mouse_moved) |
9572 | 3821 { |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3822 sf->mouse_moved = 0; |
9572 | 3823 result = XM_IA_SELECT; |
3824 mouse_get_xy (&x, &y); | |
3825 for (i = 0; i < statecount; i++) | |
3826 if (state[i].x <= x && x < state[i].x + state[i].menu->width + 2) | |
3827 { | |
3828 int dy = y - state[i].y; | |
3829 if (0 <= dy && dy < state[i].menu->count) | |
3830 { | |
3831 if (!state[i].menu->submenu[dy]) | |
3832 if (state[i].menu->panenumber[dy]) | |
3833 result = XM_SUCCESS; | |
3834 else | |
3835 result = XM_IA_SELECT; | |
3836 *pane = state[i].pane - 1; | |
3837 *selidx = dy; | |
14036 | 3838 /* We hit some part of a menu, so drop extra menus that |
9572 | 3839 have been opened. That does not include an open and |
3840 active submenu. */ | |
3841 if (i != statecount - 2 | |
3842 || state[i].menu->submenu[dy] != state[i+1].menu) | |
3843 while (i != statecount - 1) | |
3844 { | |
3845 statecount--; | |
3846 mouse_off (); | |
3847 ScreenUpdate (state[statecount].screen_behind); | |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3848 if (screen_virtual_segment) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3849 dosv_refresh_virtual_screen (0, screen_size); |
9572 | 3850 xfree (state[statecount].screen_behind); |
3851 } | |
3852 if (i == statecount - 1 && state[i].menu->submenu[dy]) | |
3853 { | |
3854 IT_menu_display (state[i].menu, | |
3855 state[i].y, | |
3856 state[i].x, | |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3857 state[i].pane, |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3858 faces, 1); |
9572 | 3859 state[statecount].menu = state[i].menu->submenu[dy]; |
3860 state[statecount].pane = state[i].menu->panenumber[dy]; | |
3861 mouse_off (); | |
3862 ScreenRetrieve (state[statecount].screen_behind | |
3863 = xmalloc (screensize)); | |
3864 state[statecount].x | |
3865 = state[i].x + state[i].menu->width + 2; | |
3866 state[statecount].y = y; | |
45332 | 3867 statecount++; |
9572 | 3868 } |
3869 } | |
3870 } | |
3871 IT_menu_display (state[statecount - 1].menu, | |
3872 state[statecount - 1].y, | |
3873 state[statecount - 1].x, | |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3874 state[statecount - 1].pane, |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3875 faces, 1); |
9572 | 3876 } |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3877 else |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3878 { |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3879 if ((menu_help_message || prev_menu_help_message) |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3880 && menu_help_message != prev_menu_help_message) |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3881 { |
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3882 help_callback (menu_help_message, |
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3883 menu_help_paneno, menu_help_itemno); |
27640
4ce3be69ca1f
(XMenuActivate): Turn off the cursor after displaying
Eli Zaretskii <eliz@gnu.org>
parents:
27462
diff
changeset
|
3884 IT_display_cursor (0); |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3885 prev_menu_help_message = menu_help_message; |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3886 } |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3887 /* We are busy-waiting for the mouse to move, so let's be nice |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3888 to other Windows applications by releasing our time slice. */ |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3889 __dpmi_yield (); |
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3890 } |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3891 for (b = 0; b < mouse_button_count && !leave; b++) |
9572 | 3892 { |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3893 /* Only leave if user both pressed and released the mouse, and in |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3894 that order. This avoids popping down the menu pane unless |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3895 the user is really done with it. */ |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3896 if (mouse_pressed (b, &x, &y)) |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3897 { |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3898 while (mouse_button_depressed (b, &x, &y)) |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3899 __dpmi_yield (); |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3900 leave = 1; |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3901 } |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3902 (void) mouse_released (b, &x, &y); |
9572 | 3903 } |
3904 } | |
3905 | |
3906 mouse_off (); | |
3907 ScreenUpdate (state[0].screen_behind); | |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3908 if (screen_virtual_segment) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3909 dosv_refresh_virtual_screen (0, screen_size); |
30132
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3910 |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3911 /* We have a situation here. ScreenUpdate has just restored the |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3912 screen contents as it was before we started drawing this menu. |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3913 That includes any echo area message that could have been |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3914 displayed back then. (In reality, that echo area message will |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3915 almost always be the ``keystroke echo'' that echoes the sequence |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3916 of menu items chosen by the user.) However, if the menu had some |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3917 help messages, then displaying those messages caused Emacs to |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3918 forget about the original echo area message. So when |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3919 ScreenUpdate restored it, it created a discrepancy between the |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3920 actual screen contents and what Emacs internal data structures |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3921 know about it. |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3922 |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3923 To avoid this conflict, we force Emacs to restore the original |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3924 echo area message as we found it when we entered this function. |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3925 The irony of this is that we then erase the restored message |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3926 right away, so the only purpose of restoring it is so that |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3927 erasing it works correctly... */ |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3928 if (! NILP (saved_echo_area_message)) |
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3929 message_with_string ("%s", saved_echo_area_message, 0); |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3930 message (0); |
9572 | 3931 while (statecount--) |
3932 xfree (state[statecount].screen_behind); | |
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3933 IT_display_cursor (1); /* turn cursor back on */ |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3934 /* Clean up any mouse events that are waiting inside Emacs event queue. |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3935 These events are likely to be generated before the menu was even |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3936 displayed, probably because the user pressed and released the button |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3937 (which invoked the menu) too quickly. If we don't remove these events, |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3938 Emacs will process them after we return and surprise the user. */ |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3939 discard_mouse_events (); |
30711 | 3940 mouse_clear_clicks (); |
3941 if (!kbd_buffer_events_waiting (1)) | |
3942 clear_input_pending (); | |
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3943 /* Allow mouse events generation by dos_rawgetc. */ |
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3944 mouse_preempted--; |
9572 | 3945 return result; |
3946 } | |
3947 | |
3948 /* Dispose of a menu. */ | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3949 |
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3950 void |
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3951 XMenuDestroy (Display *foo, XMenu *menu) |
9572 | 3952 { |
3953 int i; | |
3954 if (menu->allocated) | |
3955 { | |
3956 for (i = 0; i < menu->count; i++) | |
3957 if (menu->submenu[i]) | |
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3958 XMenuDestroy (foo, menu->submenu[i]); |
9572 | 3959 xfree (menu->text); |
3960 xfree (menu->submenu); | |
3961 xfree (menu->panenumber); | |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3962 xfree (menu->help_text); |
9572 | 3963 } |
3964 xfree (menu); | |
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3965 menu_help_message = prev_menu_help_message = NULL; |
9572 | 3966 } |
3967 | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3968 int |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3969 x_pixel_width (struct frame *f) |
9572 | 3970 { |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
3971 return FRAME_COLS (f); |
9572 | 3972 } |
3973 | |
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3974 int |
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3975 x_pixel_height (struct frame *f) |
9572 | 3976 { |
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
3977 return FRAME_LINES (f); |
9572 | 3978 } |
3979 #endif /* !HAVE_X_WINDOWS */ | |
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3980 |
13179 | 3981 /* ----------------------- DOS / UNIX conversion --------------------- */ |
3982 | |
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3983 void msdos_downcase_filename (unsigned char *); |
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3984 |
13179 | 3985 /* Destructively turn backslashes into slashes. */ |
3986 | |
3987 void | |
3988 dostounix_filename (p) | |
3989 register char *p; | |
3990 { | |
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3991 msdos_downcase_filename (p); |
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3992 |
13179 | 3993 while (*p) |
3994 { | |
3995 if (*p == '\\') | |
3996 *p = '/'; | |
3997 p++; | |
3998 } | |
3999 } | |
4000 | |
4001 /* Destructively turn slashes into backslashes. */ | |
4002 | |
4003 void | |
4004 unixtodos_filename (p) | |
4005 register char *p; | |
4006 { | |
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
4007 if (p[1] == ':' && *p >= 'A' && *p <= 'Z') |
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
4008 { |
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
4009 *p += 'a' - 'A'; |
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
4010 p += 2; |
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
4011 } |
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
4012 |
13179 | 4013 while (*p) |
4014 { | |
4015 if (*p == '/') | |
4016 *p = '\\'; | |
4017 p++; | |
4018 } | |
4019 } | |
4020 | |
4021 /* Get the default directory for a given drive. 0=def, 1=A, 2=B, ... */ | |
4022 | |
4023 int | |
4024 getdefdir (drive, dst) | |
4025 int drive; | |
4026 char *dst; | |
4027 { | |
77906
a33e69b10eed
(getdefdir): Delete stray semicolon.
Chong Yidong <cyd@stupidchicken.com>
parents:
75348
diff
changeset
|
4028 char in_path[4], *p = in_path, e = errno; |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4029 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4030 /* Generate "X:." (when drive is X) or "." (when drive is 0). */ |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4031 if (drive != 0) |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4032 { |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4033 *p++ = drive + 'A' - 1; |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4034 *p++ = ':'; |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4035 } |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4036 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4037 *p++ = '.'; |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4038 *p = '\0'; |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4039 errno = 0; |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4040 _fixpath (in_path, dst); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
4041 /* _fixpath can set errno to ENOSYS on non-LFN systems because |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
4042 it queries the LFN support, so ignore that error. */ |
25100
2e3da138463f
(getdefdir): Don't return failure indication when
Eli Zaretskii <eliz@gnu.org>
parents:
24680
diff
changeset
|
4043 if ((errno && errno != ENOSYS) || *dst == '\0') |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4044 return 0; |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4045 |
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4046 msdos_downcase_filename (dst); |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4047 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4048 errno = e; |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4049 return 1; |
13179 | 4050 } |
4051 | |
42192
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4052 char * |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4053 emacs_root_dir (void) |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4054 { |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4055 static char root_dir[4]; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4056 |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4057 sprintf (root_dir, "%c:/", 'A' + getdisk ()); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4058 root_dir[0] = tolower (root_dir[0]); |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4059 return root_dir; |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4060 } |
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
4061 |
13179 | 4062 /* Remove all CR's that are followed by a LF. */ |
4063 | |
4064 int | |
4065 crlf_to_lf (n, buf) | |
4066 register int n; | |
4067 register unsigned char *buf; | |
4068 { | |
45332 | 4069 unsigned char *np = buf, *startp = buf, *endp = buf + n; |
13179 | 4070 |
4071 if (n == 0) | |
4072 return n; | |
4073 while (buf < endp - 1) | |
4074 { | |
4075 if (*buf == 0x0d) | |
4076 { | |
4077 if (*(++buf) != 0x0a) | |
4078 *np++ = 0x0d; | |
4079 } | |
4080 else | |
4081 *np++ = *buf++; | |
4082 } | |
4083 if (buf < endp) | |
4084 *np++ = *buf++; | |
4085 return np - startp; | |
4086 } | |
14999 | 4087 |
4088 #if defined(__DJGPP__) && __DJGPP__ == 2 && __DJGPP_MINOR__ == 0 | |
4089 | |
4090 /* In DJGPP v2.0, library `write' can call `malloc', which might | |
4091 cause relocation of the buffer whose address we get in ADDR. | |
4092 Here is a version of `write' that avoids calling `malloc', | |
4093 to serve us until such time as the library is fixed. | |
4094 Actually, what we define here is called `__write', because | |
4095 `write' is a stub that just jmp's to `__write' (to be | |
4096 POSIXLY-correct with respect to the global name-space). */ | |
4097 | |
4098 #include <io.h> /* for _write */ | |
4099 #include <libc/dosio.h> /* for __file_handle_modes[] */ | |
4100 | |
4101 static char xbuf[64 * 1024]; /* DOS cannot write more in one chunk */ | |
4102 | |
4103 #define XBUF_END (xbuf + sizeof (xbuf) - 1) | |
4104 | |
4105 int | |
4106 __write (int handle, const void *buffer, size_t count) | |
4107 { | |
4108 if (count == 0) | |
4109 return 0; | |
4110 | |
4111 if(__file_handle_modes[handle] & O_BINARY) | |
4112 return _write (handle, buffer, count); | |
4113 else | |
4114 { | |
4115 char *xbp = xbuf; | |
4116 const char *bp = buffer; | |
4117 int total_written = 0; | |
4118 int nmoved = 0, ncr = 0; | |
4119 | |
4120 while (count) | |
4121 { | |
4122 /* The next test makes sure there's space for at least 2 more | |
4123 characters in xbuf[], so both CR and LF can be put there. */ | |
4124 if (xbp < XBUF_END) | |
4125 { | |
4126 if (*bp == '\n') | |
4127 { | |
4128 ncr++; | |
4129 *xbp++ = '\r'; | |
4130 } | |
4131 *xbp++ = *bp++; | |
4132 nmoved++; | |
4133 count--; | |
4134 } | |
4135 if (xbp >= XBUF_END || !count) | |
4136 { | |
4137 size_t to_write = nmoved + ncr; | |
4138 int written = _write (handle, xbuf, to_write); | |
4139 | |
4140 if (written == -1) | |
4141 return -1; | |
4142 else | |
4143 total_written += nmoved; /* CRs aren't counted in ret value */ | |
4144 | |
4145 /* If some, but not all were written (disk full?), return | |
4146 an estimate of the total written bytes not counting CRs. */ | |
4147 if (written < to_write) | |
4148 return total_written - (to_write - written) * nmoved/to_write; | |
4149 | |
4150 nmoved = 0; | |
4151 ncr = 0; | |
4152 xbp = xbuf; | |
4153 } | |
4154 } | |
4155 return total_written; | |
4156 } | |
4157 } | |
4158 | |
16524
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4159 /* A low-level file-renaming function which works around Windows 95 bug. |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4160 This is pulled directly out of DJGPP v2.01 library sources, and only |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4161 used when you compile with DJGPP v2.0. */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4162 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4163 #include <io.h> |
45332 | 4164 |
16524
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4165 int _rename(const char *old, const char *new) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4166 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4167 __dpmi_regs r; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4168 int olen = strlen(old) + 1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4169 int i; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4170 int use_lfn = _USE_LFN; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4171 char tempfile[FILENAME_MAX]; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4172 const char *orig = old; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4173 int lfn_fd = -1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4174 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4175 r.x.dx = __tb_offset; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4176 r.x.di = __tb_offset + olen; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4177 r.x.ds = r.x.es = __tb_segment; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4178 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4179 if (use_lfn) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4180 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4181 /* Windows 95 bug: for some filenames, when you rename |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4182 file -> file~ (as in Emacs, to leave a backup), the |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4183 short 8+3 alias doesn't change, which effectively |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4184 makes OLD and NEW the same file. We must rename |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4185 through a temporary file to work around this. */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4186 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4187 char *pbase = 0, *p; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4188 static char try_char[] = "abcdefghijklmnopqrstuvwxyz012345789"; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4189 int idx = sizeof(try_char) - 1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4190 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4191 /* Generate a temporary name. Can't use `tmpnam', since $TMPDIR |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4192 might point to another drive, which will fail the DOS call. */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4193 strcpy(tempfile, old); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4194 for (p = tempfile; *p; p++) /* ensure temporary is on the same drive */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4195 if (*p == '/' || *p == '\\' || *p == ':') |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4196 pbase = p; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4197 if (pbase) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4198 pbase++; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4199 else |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4200 pbase = tempfile; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4201 strcpy(pbase, "X$$djren$$.$$temp$$"); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4202 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4203 do |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4204 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4205 if (idx <= 0) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4206 return -1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4207 *pbase = try_char[--idx]; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4208 } while (_chmod(tempfile, 0) != -1); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4209 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4210 r.x.ax = 0x7156; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4211 _put_path2(tempfile, olen); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4212 _put_path(old); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4213 __dpmi_int(0x21, &r); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4214 if (r.x.flags & 1) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4215 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4216 errno = __doserr_to_errno(r.x.ax); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4217 return -1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4218 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4219 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4220 /* Now create a file with the original name. This will |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4221 ensure that NEW will always have a 8+3 alias |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4222 different from that of OLD. (Seems to be required |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4223 when NameNumericTail in the Registry is set to 0.) */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4224 lfn_fd = _creat(old, 0); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4225 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4226 olen = strlen(tempfile) + 1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4227 old = tempfile; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4228 r.x.di = __tb_offset + olen; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4229 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4230 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4231 for (i=0; i<2; i++) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4232 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4233 if(use_lfn) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4234 r.x.ax = 0x7156; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4235 else |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4236 r.h.ah = 0x56; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4237 _put_path2(new, olen); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4238 _put_path(old); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4239 __dpmi_int(0x21, &r); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4240 if(r.x.flags & 1) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4241 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4242 if (r.x.ax == 5 && i == 0) /* access denied */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4243 remove(new); /* and try again */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4244 else |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4245 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4246 errno = __doserr_to_errno(r.x.ax); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4247 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4248 /* Restore to original name if we renamed it to temporary. */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4249 if (use_lfn) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4250 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4251 if (lfn_fd != -1) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4252 { |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4253 _close (lfn_fd); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4254 remove (orig); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4255 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4256 _put_path2(orig, olen); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4257 _put_path(tempfile); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4258 r.x.ax = 0x7156; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4259 __dpmi_int(0x21, &r); |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4260 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4261 return -1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4262 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4263 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4264 else |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4265 break; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4266 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4267 |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4268 /* Success. Delete the file possibly created to work |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4269 around the Windows 95 bug. */ |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4270 if (lfn_fd != -1) |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4271 return (_close (lfn_fd) == 0) ? remove (orig) : -1; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4272 return 0; |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4273 } |
84440bd95727
[__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents:
16310
diff
changeset
|
4274 |
14999 | 4275 #endif /* __DJGPP__ == 2 && __DJGPP_MINOR__ == 0 */ |
4276 | |
15174
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
4277 DEFUN ("msdos-long-file-names", Fmsdos_long_file_names, Smsdos_long_file_names, |
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4278 0, 0, 0, |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4279 doc: /* Return non-nil if long file names are supported on MSDOS. */) |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4280 () |
15174
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
4281 { |
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
4282 return (_USE_LFN ? Qt : Qnil); |
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
4283 } |
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4284 |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4285 /* Convert alphabetic characters in a filename to lower-case. */ |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4286 |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4287 void |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4288 msdos_downcase_filename (p) |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4289 register unsigned char *p; |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4290 { |
15588 | 4291 /* Always lower-case drive letters a-z, even if the filesystem |
4292 preserves case in filenames. | |
4293 This is so MSDOS filenames could be compared by string comparison | |
4294 functions that are case-sensitive. Even case-preserving filesystems | |
4295 do not distinguish case in drive letters. */ | |
4296 if (p[1] == ':' && *p >= 'A' && *p <= 'Z') | |
4297 { | |
4298 *p += 'a' - 'A'; | |
4299 p += 2; | |
4300 } | |
4301 | |
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4302 /* Under LFN we expect to get pathnames in their true case. */ |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4303 if (NILP (Fmsdos_long_file_names ())) |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4304 for ( ; *p; p++) |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4305 if (*p >= 'A' && *p <= 'Z') |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4306 *p += 'a' - 'A'; |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4307 } |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4308 |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4309 DEFUN ("msdos-downcase-filename", Fmsdos_downcase_filename, Smsdos_downcase_filename, |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4310 1, 1, 0, |
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4311 doc: /* Convert alphabetic characters in FILENAME to lower case and return that. |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4312 When long filenames are supported, doesn't change FILENAME. |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4313 If FILENAME is not a string, returns nil. |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4314 The argument object is never altered--the value is a copy. */) |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4315 (filename) |
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4316 Lisp_Object filename; |
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4317 { |
15222
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
4318 Lisp_Object tem; |
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
4319 |
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
4320 if (! STRINGP (filename)) |
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
4321 return Qnil; |
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
4322 |
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
4323 tem = Fcopy_sequence (filename); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46272
diff
changeset
|
4324 msdos_downcase_filename (SDATA (tem)); |
15222
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
4325 return tem; |
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4326 } |
13179 | 4327 |
4328 /* The Emacs root directory as determined by init_environment. */ | |
4329 | |
4330 static char emacsroot[MAXPATHLEN]; | |
4331 | |
4332 char * | |
4333 rootrelativepath (rel) | |
4334 char *rel; | |
4335 { | |
4336 static char result[MAXPATHLEN + 10]; | |
4337 | |
4338 strcpy (result, emacsroot); | |
4339 strcat (result, "/"); | |
4340 strcat (result, rel); | |
4341 return result; | |
4342 } | |
4343 | |
4344 /* Define a lot of environment variables if not already defined. Don't | |
4345 remove anything unless you know what you're doing -- lots of code will | |
4346 break if one or more of these are missing. */ | |
4347 | |
4348 void | |
4349 init_environment (argc, argv, skip_args) | |
4350 int argc; | |
4351 char **argv; | |
4352 int skip_args; | |
4353 { | |
4354 char *s, *t, *root; | |
45332 | 4355 int len, i; |
22054
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4356 static const char * const tempdirs[] = { |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4357 "$TMPDIR", "$TEMP", "$TMP", "c:/" |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4358 }; |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4359 const int imax = sizeof (tempdirs) / sizeof (tempdirs[0]); |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4360 |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4361 /* Make sure they have a usable $TMPDIR. Many Emacs functions use |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4362 temporary files and assume "/tmp" if $TMPDIR is unset, which |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4363 will break on DOS/Windows. Refuse to work if we cannot find |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4364 a directory, not even "c:/", usable for that purpose. */ |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4365 for (i = 0; i < imax ; i++) |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4366 { |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4367 const char *tmp = tempdirs[i]; |
55198
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4368 char buf[FILENAME_MAX]; |
22054
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4369 |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4370 if (*tmp == '$') |
55198
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4371 { |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4372 int tmp_len; |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4373 |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4374 tmp = getenv (tmp + 1); |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4375 if (!tmp) |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4376 continue; |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4377 |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4378 /* Some lusers set TMPDIR=e:, probably because some losing |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4379 programs cannot handle multiple slashes if they use e:/. |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4380 e: fails in `access' below, so we interpret e: as e:/. */ |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4381 tmp_len = strlen(tmp); |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4382 if (tmp[tmp_len - 1] != '/' && tmp[tmp_len - 1] != '\\') |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4383 { |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4384 strcpy(buf, tmp); |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4385 buf[tmp_len++] = '/', buf[tmp_len] = 0; |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4386 tmp = buf; |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4387 } |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4388 } |
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
4389 |
22054
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4390 /* Note that `access' can lie to us if the directory resides on a |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4391 read-only filesystem, like CD-ROM or a write-protected floppy. |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4392 The only way to be really sure is to actually create a file and |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4393 see if it succeeds. But I think that's too much to ask. */ |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4394 if (tmp && access (tmp, D_OK) == 0) |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4395 { |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4396 setenv ("TMPDIR", tmp, 1); |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4397 break; |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4398 } |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4399 } |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4400 if (i >= imax) |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4401 cmd_error_internal |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4402 (Fcons (Qerror, |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4403 Fcons (build_string ("no usable temporary directories found!!"), |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4404 Qnil)), |
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
4405 "While setting TMPDIR: "); |
13179 | 4406 |
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
4407 /* Note the startup time, so we know not to clear the screen if we |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
4408 exit immediately; see IT_reset_terminal_modes. |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
4409 (Yes, I know `clock' returns zero the first time it's called, but |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
4410 I do this anyway, in case some wiseguy changes that at some point.) */ |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
4411 startup_time = clock (); |
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
4412 |
13179 | 4413 /* Find our root from argv[0]. Assuming argv[0] is, say, |
4414 "c:/emacs/bin/emacs.exe" our root will be "c:/emacs". */ | |
4415 root = alloca (MAXPATHLEN + 20); | |
4416 _fixpath (argv[0], root); | |
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
4417 msdos_downcase_filename (root); |
13179 | 4418 len = strlen (root); |
4419 while (len > 0 && root[len] != '/' && root[len] != ':') | |
4420 len--; | |
4421 root[len] = '\0'; | |
19295
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
4422 if (len > 4 |
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
4423 && (strcmp (root + len - 4, "/bin") == 0 |
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
4424 || strcmp (root + len - 4, "/src") == 0)) /* under a debugger */ |
13179 | 4425 root[len - 4] = '\0'; |
4426 else | |
19295
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
4427 strcpy (root, "c:/emacs"); /* let's be defensive */ |
13179 | 4428 len = strlen (root); |
4429 strcpy (emacsroot, root); | |
4430 | |
4431 /* We default HOME to our root. */ | |
4432 setenv ("HOME", root, 0); | |
4433 | |
4434 /* We default EMACSPATH to root + "/bin". */ | |
4435 strcpy (root + len, "/bin"); | |
4436 setenv ("EMACSPATH", root, 0); | |
4437 | |
4438 /* I don't expect anybody to ever use other terminals so the internal | |
4439 terminal is the default. */ | |
4440 setenv ("TERM", "internal", 0); | |
4441 | |
4442 #ifdef HAVE_X_WINDOWS | |
4443 /* Emacs expects DISPLAY to be set. */ | |
4444 setenv ("DISPLAY", "unix:0.0", 0); | |
4445 #endif | |
4446 | |
4447 /* SHELL is a bit tricky -- COMSPEC is the closest we come, but we must | |
4448 downcase it and mirror the backslashes. */ | |
4449 s = getenv ("COMSPEC"); | |
4450 if (!s) s = "c:/command.com"; | |
4451 t = alloca (strlen (s) + 1); | |
4452 strcpy (t, s); | |
4453 dostounix_filename (t); | |
4454 setenv ("SHELL", t, 0); | |
4455 | |
4456 /* PATH is also downcased and backslashes mirrored. */ | |
4457 s = getenv ("PATH"); | |
4458 if (!s) s = ""; | |
4459 t = alloca (strlen (s) + 3); | |
4460 /* Current directory is always considered part of MsDos's path but it is | |
4461 not normally mentioned. Now it is. */ | |
4462 strcat (strcpy (t, ".;"), s); | |
4463 dostounix_filename (t); /* Not a single file name, but this should work. */ | |
4464 setenv ("PATH", t, 1); | |
4465 | |
4466 /* In some sense all dos users have root privileges, so... */ | |
4467 setenv ("USER", "root", 0); | |
4468 setenv ("NAME", getenv ("USER"), 0); | |
4469 | |
4470 /* Time zone determined from country code. To make this possible, the | |
4471 country code may not span more than one time zone. In other words, | |
4472 in the USA, you lose. */ | |
13274 | 4473 if (!getenv ("TZ")) |
13179 | 4474 switch (dos_country_code) |
4475 { | |
4476 case 31: /* Belgium */ | |
4477 case 32: /* The Netherlands */ | |
4478 case 33: /* France */ | |
4479 case 34: /* Spain */ | |
4480 case 36: /* Hungary */ | |
4481 case 38: /* Yugoslavia (or what's left of it?) */ | |
4482 case 39: /* Italy */ | |
4483 case 41: /* Switzerland */ | |
4484 case 42: /* Tjekia */ | |
4485 case 45: /* Denmark */ | |
4486 case 46: /* Sweden */ | |
4487 case 47: /* Norway */ | |
4488 case 48: /* Poland */ | |
4489 case 49: /* Germany */ | |
4490 /* Daylight saving from last Sunday in March to last Sunday in | |
4491 September, both at 2AM. */ | |
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4492 setenv ("TZ", "MET-01METDST-02,M3.5.0/02:00,M9.5.0/02:00", 0); |
13179 | 4493 break; |
4494 case 44: /* United Kingdom */ | |
4495 case 351: /* Portugal */ | |
4496 case 354: /* Iceland */ | |
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4497 setenv ("TZ", "GMT+00", 0); |
13179 | 4498 break; |
4499 case 81: /* Japan */ | |
4500 case 82: /* Korea */ | |
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4501 setenv ("TZ", "JST-09", 0); |
13179 | 4502 break; |
4503 case 90: /* Turkey */ | |
4504 case 358: /* Finland */ | |
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4505 setenv ("TZ", "EET-02", 0); |
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4506 break; |
13179 | 4507 case 972: /* Israel */ |
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4508 /* This is an approximation. (For exact rules, use the |
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4509 `zoneinfo/israel' file which comes with DJGPP, but you need |
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4510 to install it in `/usr/share/zoneinfo/' directory first.) */ |
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4511 setenv ("TZ", "IST-02IDT-03,M4.1.6/00:00,M9.5.6/01:00", 0); |
13179 | 4512 break; |
4513 } | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4514 tzset (); |
13179 | 4515 } |
4516 | |
4517 | |
4518 | |
4519 static int break_stat; /* BREAK check mode status. */ | |
4520 static int stdin_stat; /* stdin IOCTL status. */ | |
4521 | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4522 #if __DJGPP__ < 2 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4523 |
13179 | 4524 /* These must be global. */ |
4525 static _go32_dpmi_seginfo ctrl_break_vector; | |
4526 static _go32_dpmi_registers ctrl_break_regs; | |
4527 static int ctrlbreakinstalled = 0; | |
4528 | |
4529 /* Interrupt level detection of Ctrl-Break. Don't do anything fancy here! */ | |
4530 | |
4531 void | |
4532 ctrl_break_func (regs) | |
4533 _go32_dpmi_registers *regs; | |
4534 { | |
4535 Vquit_flag = Qt; | |
4536 } | |
4537 | |
4538 void | |
4539 install_ctrl_break_check () | |
4540 { | |
4541 if (!ctrlbreakinstalled) | |
4542 { | |
4543 /* Don't press Ctrl-Break if you don't have either DPMI or Emacs | |
4544 was compiler with Djgpp 1.11 maintenance level 5 or later! */ | |
4545 ctrlbreakinstalled = 1; | |
4546 ctrl_break_vector.pm_offset = (int) ctrl_break_func; | |
4547 _go32_dpmi_allocate_real_mode_callback_iret (&ctrl_break_vector, | |
4548 &ctrl_break_regs); | |
4549 _go32_dpmi_set_real_mode_interrupt_vector (0x1b, &ctrl_break_vector); | |
4550 } | |
4551 } | |
4552 | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4553 #endif /* __DJGPP__ < 2 */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4554 |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
4555 /* Turn off Dos' Ctrl-C checking and inhibit interpretation of |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
4556 control chars by DOS. Determine the keyboard type. */ |
13179 | 4557 |
4558 int | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4559 dos_ttraw (struct tty_display_info *tty) |
13179 | 4560 { |
4561 union REGS inregs, outregs; | |
4562 static int first_time = 1; | |
45332 | 4563 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4564 /* If we are called for the initial terminal, it's too early to do |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4565 anything, and termscript isn't set up. */ |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4566 if (tty->terminal->type == output_initial) |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4567 return; |
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4568 |
13179 | 4569 break_stat = getcbrk (); |
4570 setcbrk (0); | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4571 #if __DJGPP__ < 2 |
13179 | 4572 install_ctrl_break_check (); |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4573 #endif |
13179 | 4574 |
4575 if (first_time) | |
4576 { | |
4577 inregs.h.ah = 0xc0; | |
4578 int86 (0x15, &inregs, &outregs); | |
4579 extended_kbd = (!outregs.x.cflag) && (outregs.h.ah == 0); | |
45332 | 4580 |
13179 | 4581 have_mouse = 0; |
4582 | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4583 if (1 |
13179 | 4584 #ifdef HAVE_X_WINDOWS |
4585 && inhibit_window_system | |
4586 #endif | |
4587 ) | |
4588 { | |
4589 inregs.x.ax = 0x0021; | |
4590 int86 (0x33, &inregs, &outregs); | |
4591 have_mouse = (outregs.x.ax & 0xffff) == 0xffff; | |
4592 if (!have_mouse) | |
4593 { | |
4594 /* Reportedly, the above doesn't work for some mouse drivers. There | |
4595 is an additional detection method that should work, but might be | |
4596 a little slower. Use that as an alternative. */ | |
4597 inregs.x.ax = 0x0000; | |
4598 int86 (0x33, &inregs, &outregs); | |
4599 have_mouse = (outregs.x.ax & 0xffff) == 0xffff; | |
4600 } | |
4601 if (have_mouse) | |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4602 mouse_button_count = outregs.x.bx; |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4603 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4604 #ifndef HAVE_X_WINDOWS |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4605 #if __DJGPP__ >= 2 |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4606 /* Save the cursor shape used outside Emacs. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4607 outside_cursor = _farpeekw (_dos_ds, 0x460); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4608 #endif |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4609 #endif |
13179 | 4610 } |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4611 |
13179 | 4612 first_time = 0; |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4613 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4614 #if __DJGPP__ >= 2 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4615 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4616 stdin_stat = setmode (fileno (stdin), O_BINARY); |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4617 return (stdin_stat != -1); |
13179 | 4618 } |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4619 else |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4620 return (setmode (fileno (stdin), O_BINARY) != -1); |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4621 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4622 #else /* __DJGPP__ < 2 */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4623 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4624 } |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4625 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4626 /* I think it is wrong to overwrite `stdin_stat' every time |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4627 but the first one this function is called, but I don't |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4628 want to change the way it used to work in v1.x.--EZ */ |
13179 | 4629 |
4630 inregs.x.ax = 0x4400; /* Get IOCTL status. */ | |
4631 inregs.x.bx = 0x00; /* 0 = stdin. */ | |
4632 intdos (&inregs, &outregs); | |
4633 stdin_stat = outregs.h.dl; | |
4634 | |
4635 inregs.x.dx = stdin_stat | 0x0020; /* raw mode */ | |
4636 inregs.x.ax = 0x4401; /* Set IOCTL status */ | |
4637 intdos (&inregs, &outregs); | |
4638 return !outregs.x.cflag; | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4639 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4640 #endif /* __DJGPP__ < 2 */ |
13179 | 4641 } |
4642 | |
4643 /* Restore status of standard input and Ctrl-C checking. */ | |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
4644 |
13179 | 4645 int |
4646 dos_ttcooked () | |
4647 { | |
4648 union REGS inregs, outregs; | |
4649 | |
4650 setcbrk (break_stat); | |
4651 mouse_off (); | |
4652 | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4653 #if __DJGPP__ >= 2 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4654 |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4655 #ifndef HAVE_X_WINDOWS |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4656 /* Restore the cursor shape we found on startup. */ |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4657 if (outside_cursor) |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4658 { |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4659 inregs.h.ah = 1; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4660 inregs.x.cx = outside_cursor; |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4661 int86 (0x10, &inregs, &outregs); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4662 } |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4663 #endif |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4664 |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4665 return (setmode (fileno (stdin), stdin_stat) != -1); |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4666 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4667 #else /* not __DJGPP__ >= 2 */ |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4668 |
13179 | 4669 inregs.x.ax = 0x4401; /* Set IOCTL status. */ |
4670 inregs.x.bx = 0x00; /* 0 = stdin. */ | |
4671 inregs.x.dx = stdin_stat; | |
4672 intdos (&inregs, &outregs); | |
4673 return !outregs.x.cflag; | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4674 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4675 #endif /* not __DJGPP__ >= 2 */ |
13179 | 4676 } |
4677 | |
4678 | |
4679 /* Run command as specified by ARGV in directory DIR. | |
13718
e1b33f87545f
(run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents:
13717
diff
changeset
|
4680 The command is run with input from TEMPIN, output to |
e1b33f87545f
(run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents:
13717
diff
changeset
|
4681 file TEMPOUT and stderr to TEMPERR. */ |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
4682 |
13179 | 4683 int |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4684 run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv) |
13179 | 4685 unsigned char **argv; |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4686 const char *working_dir; |
13718
e1b33f87545f
(run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents:
13717
diff
changeset
|
4687 int tempin, tempout, temperr; |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4688 char **envv; |
13179 | 4689 { |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4690 char *saveargv1, *saveargv2, *lowcase_argv0, *pa, *pl; |
13179 | 4691 char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */ |
45332 | 4692 int msshell, result = -1, inbak, outbak, errbak, x, y; |
13179 | 4693 Lisp_Object cmd; |
4694 | |
4695 /* Get current directory as MSDOS cwd is not per-process. */ | |
4696 getwd (oldwd); | |
4697 | |
16310
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4698 /* If argv[0] is the shell, it might come in any lettercase. |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4699 Since `Fmember' is case-sensitive, we need to downcase |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4700 argv[0], even if we are on case-preserving filesystems. */ |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4701 lowcase_argv0 = alloca (strlen (argv[0]) + 1); |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4702 for (pa = argv[0], pl = lowcase_argv0; *pa; pl++) |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4703 { |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4704 *pl = *pa++; |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4705 if (*pl >= 'A' && *pl <= 'Z') |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4706 *pl += 'a' - 'A'; |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4707 } |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4708 *pl = '\0'; |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4709 |
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
4710 cmd = Ffile_name_nondirectory (build_string (lowcase_argv0)); |
13179 | 4711 msshell = !NILP (Fmember (cmd, Fsymbol_value (intern ("msdos-shells")))) |
4712 && !strcmp ("-c", argv[1]); | |
4713 if (msshell) | |
4714 { | |
4715 saveargv1 = argv[1]; | |
4716 saveargv2 = argv[2]; | |
4717 argv[1] = "/c"; | |
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4718 /* We only need to mirror slashes if a DOS shell will be invoked |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4719 not via `system' (which does the mirroring itself). Yes, that |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4720 means DJGPP v1.x will lose here. */ |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4721 if (argv[2] && argv[3]) |
13179 | 4722 { |
4723 char *p = alloca (strlen (argv[2]) + 1); | |
4724 | |
4725 strcpy (argv[2] = p, saveargv2); | |
4726 while (*p && isspace (*p)) | |
4727 p++; | |
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4728 while (*p) |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4729 { |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4730 if (*p == '/') |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4731 *p++ = '\\'; |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4732 else |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4733 p++; |
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4734 } |
13179 | 4735 } |
4736 } | |
4737 | |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4738 chdir (working_dir); |
13179 | 4739 inbak = dup (0); |
4740 outbak = dup (1); | |
4741 errbak = dup (2); | |
4742 if (inbak < 0 || outbak < 0 || errbak < 0) | |
4743 goto done; /* Allocation might fail due to lack of descriptors. */ | |
4744 | |
4745 if (have_mouse > 0) | |
4746 mouse_get_xy (&x, &y); | |
4747 | |
4748 dos_ttcooked (); /* do it here while 0 = stdin */ | |
45332 | 4749 |
13179 | 4750 dup2 (tempin, 0); |
4751 dup2 (tempout, 1); | |
13718
e1b33f87545f
(run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents:
13717
diff
changeset
|
4752 dup2 (temperr, 2); |
13179 | 4753 |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4754 #if __DJGPP__ > 1 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4755 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4756 if (msshell && !argv[3]) |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4757 { |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4758 /* MS-DOS native shells are too restrictive. For starters, they |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4759 cannot grok commands longer than 126 characters. In DJGPP v2 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4760 and later, `system' is much smarter, so we'll call it instead. */ |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4761 |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4762 const char *cmnd; |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4763 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4764 /* A shell gets a single argument--its full command |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4765 line--whose original was saved in `saveargv2'. */ |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4766 |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4767 /* Don't let them pass empty command lines to `system', since |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4768 with some shells it will try to invoke an interactive shell, |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4769 which will hang Emacs. */ |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4770 for (cmnd = saveargv2; *cmnd && isspace (*cmnd); cmnd++) |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4771 ; |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4772 if (*cmnd) |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4773 { |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4774 extern char **environ; |
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4775 char **save_env = environ; |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4776 int save_system_flags = __system_flags; |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4777 |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4778 /* Request the most powerful version of `system'. We need |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4779 all the help we can get to avoid calling stock DOS shells. */ |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4780 __system_flags = (__system_redirect |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4781 | __system_use_shell |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4782 | __system_allow_multiple_cmds |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4783 | __system_allow_long_cmds |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4784 | __system_handle_null_commands |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4785 | __system_emulate_chdir); |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4786 |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4787 environ = envv; |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4788 result = system (cmnd); |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4789 __system_flags = save_system_flags; |
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
4790 environ = save_env; |
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4791 } |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4792 else |
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
4793 result = 0; /* emulate Unixy shell behavior with empty cmd line */ |
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4794 } |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4795 else |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4796 |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4797 #endif /* __DJGPP__ > 1 */ |
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
4798 |
13179 | 4799 result = spawnve (P_WAIT, argv[0], argv, envv); |
45332 | 4800 |
13179 | 4801 dup2 (inbak, 0); |
4802 dup2 (outbak, 1); | |
4803 dup2 (errbak, 2); | |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25214
diff
changeset
|
4804 emacs_close (inbak); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25214
diff
changeset
|
4805 emacs_close (outbak); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25214
diff
changeset
|
4806 emacs_close (errbak); |
13179 | 4807 |
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
4808 dos_ttraw (CURTTY ()); |
13179 | 4809 if (have_mouse > 0) |
4810 { | |
4811 mouse_init (); | |
4812 mouse_moveto (x, y); | |
4813 } | |
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
4814 |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
4815 /* Some programs might change the meaning of the highest bit of the |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
4816 text attribute byte, so we get blinking characters instead of the |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
4817 bright background colors. Restore that. */ |
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
4818 bright_bg (); |
45332 | 4819 |
13179 | 4820 done: |
4821 chdir (oldwd); | |
4822 if (msshell) | |
4823 { | |
4824 argv[1] = saveargv1; | |
4825 argv[2] = saveargv2; | |
4826 } | |
4827 return result; | |
4828 } | |
4829 | |
46954
6c7dc88b9a5d
(croak): Add `void' to definition.
Eli Zaretskii <eliz@gnu.org>
parents:
46370
diff
changeset
|
4830 void |
13179 | 4831 croak (badfunc) |
4832 char *badfunc; | |
4833 { | |
4834 fprintf (stderr, "%s not yet implemented\r\n", badfunc); | |
53341 | 4835 reset_all_sys_modes (); |
13179 | 4836 exit (1); |
4837 } | |
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
4838 |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4839 #if __DJGPP__ < 2 |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4840 |
13179 | 4841 /* ------------------------- Compatibility functions ------------------- |
4842 * gethostname | |
4843 * gettimeofday | |
4844 */ | |
4845 | |
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
4846 /* Hostnames for a pc are not really funny, |
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
4847 but they are used in change log so we emulate the best we can. */ |
13179 | 4848 |
4849 gethostname (p, size) | |
4850 char *p; | |
4851 int size; | |
4852 { | |
4853 char *q = egetenv ("HOSTNAME"); | |
4854 | |
4855 if (!q) q = "pc"; | |
4856 strcpy (p, q); | |
4857 return 0; | |
4858 } | |
4859 | |
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
4860 /* When time zones are set from Ms-Dos too many C-libraries are playing |
13179 | 4861 tricks with time values. We solve this by defining our own version |
4862 of `gettimeofday' bypassing GO32. Our version needs to be initialized | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49381
diff
changeset
|
4863 once and after each call to `tzset' with TZ changed. That is |
13179 | 4864 accomplished by aliasing tzset to init_gettimeofday. */ |
4865 | |
4866 static struct tm time_rec; | |
4867 | |
4868 int | |
4869 gettimeofday (struct timeval *tp, struct timezone *tzp) | |
4870 { | |
4871 if (tp) | |
4872 { | |
4873 struct time t; | |
4874 struct tm tm; | |
45332 | 4875 |
13179 | 4876 gettime (&t); |
4877 if (t.ti_hour < time_rec.tm_hour) /* midnight wrap */ | |
4878 { | |
4879 struct date d; | |
4880 getdate (&d); | |
4881 time_rec.tm_year = d.da_year - 1900; | |
4882 time_rec.tm_mon = d.da_mon - 1; | |
4883 time_rec.tm_mday = d.da_day; | |
4884 } | |
45332 | 4885 |
13179 | 4886 time_rec.tm_hour = t.ti_hour; |
4887 time_rec.tm_min = t.ti_min; | |
4888 time_rec.tm_sec = t.ti_sec; | |
4889 | |
4890 tm = time_rec; | |
4891 tm.tm_gmtoff = dos_timezone_offset; | |
45332 | 4892 |
13179 | 4893 tp->tv_sec = mktime (&tm); /* may modify tm */ |
4894 tp->tv_usec = t.ti_hund * (1000000 / 100); | |
4895 } | |
4896 /* Ignore tzp; it's obsolescent. */ | |
4897 return 0; | |
4898 } | |
4899 | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4900 #endif /* __DJGPP__ < 2 */ |
13179 | 4901 |
4902 /* | |
4903 * A list of unimplemented functions that we silently ignore. | |
4904 */ | |
4905 | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4906 #if __DJGPP__ < 2 |
13179 | 4907 unsigned alarm (s) unsigned s; {} |
4908 fork () { return 0; } | |
4909 int kill (x, y) int x, y; { return -1; } | |
4910 nice (p) int p; {} | |
4911 void volatile pause () {} | |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4912 sigsetmask (x) int x; { return 0; } |
45332 | 4913 sigblock (mask) int mask; { return 0; } |
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4914 #endif |
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
4915 |
13179 | 4916 setpgrp () {return 0; } |
4917 setpriority (x,y,z) int x,y,z; { return 0; } | |
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4918 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4919 #if __DJGPP__ > 1 |
45332 | 4920 #if __DJGPP_MINOR__ < 2 |
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4921 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4922 #ifdef POSIX_SIGNALS |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4923 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4924 /* Augment DJGPP library POSIX signal functions. This is needed |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4925 as of DJGPP v2.01, but might be in the library in later releases. */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4926 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4927 #include <libc/bss.h> |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4928 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4929 /* A counter to know when to re-initialize the static sets. */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4930 static int sigprocmask_count = -1; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4931 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4932 /* Which signals are currently blocked (initially none). */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4933 static sigset_t current_mask; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4934 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4935 /* Which signals are pending (initially none). */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4936 static sigset_t pending_signals; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4937 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4938 /* Previous handlers to restore when the blocked signals are unblocked. */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4939 typedef void (*sighandler_t)(int); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4940 static sighandler_t prev_handlers[320]; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4941 |
46272 | 4942 /* A signal handler which just records that a signal occurred |
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4943 (it will be raised later, if and when the signal is unblocked). */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4944 static void |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4945 sig_suspender (signo) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4946 int signo; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4947 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4948 sigaddset (&pending_signals, signo); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4949 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4950 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4951 int |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4952 sigprocmask (how, new_set, old_set) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4953 int how; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4954 const sigset_t *new_set; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4955 sigset_t *old_set; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4956 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4957 int signo; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4958 sigset_t new_mask; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4959 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4960 /* If called for the first time, initialize. */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4961 if (sigprocmask_count != __bss_count) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4962 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4963 sigprocmask_count = __bss_count; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4964 sigemptyset (&pending_signals); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4965 sigemptyset (¤t_mask); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4966 for (signo = 0; signo < 320; signo++) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4967 prev_handlers[signo] = SIG_ERR; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4968 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4969 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4970 if (old_set) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4971 *old_set = current_mask; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4972 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4973 if (new_set == 0) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4974 return 0; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4975 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4976 if (how != SIG_BLOCK && how != SIG_UNBLOCK && how != SIG_SETMASK) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4977 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4978 errno = EINVAL; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4979 return -1; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4980 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4981 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4982 sigemptyset (&new_mask); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4983 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4984 /* DJGPP supports upto 320 signals. */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4985 for (signo = 0; signo < 320; signo++) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4986 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4987 if (sigismember (¤t_mask, signo)) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4988 sigaddset (&new_mask, signo); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4989 else if (sigismember (new_set, signo) && how != SIG_UNBLOCK) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4990 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4991 sigaddset (&new_mask, signo); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4992 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4993 /* SIGKILL is silently ignored, as on other platforms. */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4994 if (signo != SIGKILL && prev_handlers[signo] == SIG_ERR) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4995 prev_handlers[signo] = signal (signo, sig_suspender); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4996 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4997 if (( how == SIG_UNBLOCK |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4998 && sigismember (&new_mask, signo) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4999 && sigismember (new_set, signo)) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5000 || (how == SIG_SETMASK |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5001 && sigismember (&new_mask, signo) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5002 && !sigismember (new_set, signo))) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5003 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5004 sigdelset (&new_mask, signo); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5005 if (prev_handlers[signo] != SIG_ERR) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5006 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5007 signal (signo, prev_handlers[signo]); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5008 prev_handlers[signo] = SIG_ERR; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5009 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5010 if (sigismember (&pending_signals, signo)) |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5011 { |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5012 sigdelset (&pending_signals, signo); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5013 raise (signo); |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5014 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5015 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5016 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5017 current_mask = new_mask; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5018 return 0; |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5019 } |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5020 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5021 #else /* not POSIX_SIGNALS */ |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5022 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5023 sigsetmask (x) int x; { return 0; } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49381
diff
changeset
|
5024 sigblock (mask) int mask; { return 0; } |
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5025 |
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5026 #endif /* not POSIX_SIGNALS */ |
45332 | 5027 #endif /* not __DJGPP_MINOR__ < 2 */ |
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
5028 #endif /* __DJGPP__ > 1 */ |
13179 | 5029 |
5030 #ifndef HAVE_SELECT | |
5031 #include "sysselect.h" | |
5032 | |
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5033 #ifndef EMACS_TIME_ZERO_OR_NEG_P |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5034 #define EMACS_TIME_ZERO_OR_NEG_P(time) \ |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5035 ((long)(time).tv_sec < 0 \ |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5036 || ((time).tv_sec == 0 \ |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5037 && (long)(time).tv_usec <= 0)) |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5038 #endif |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5039 |
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5040 /* This yields the rest of the current time slice to the task manager. |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5041 It should be called by any code which knows that it has nothing |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5042 useful to do except idle. |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5043 |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5044 I don't use __dpmi_yield here, since versions of library before 2.02 |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5045 called Int 2Fh/AX=1680h there in a way that would wedge the DOS box |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5046 on some versions of Windows 9X. */ |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5047 |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5048 void |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5049 dos_yield_time_slice (void) |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5050 { |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5051 _go32_dpmi_registers r; |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5052 |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5053 r.x.ax = 0x1680; |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5054 r.x.ss = r.x.sp = r.x.flags = 0; |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5055 _go32_dpmi_simulate_int (0x2f, &r); |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5056 if (r.h.al == 0x80) |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5057 errno = ENOSYS; |
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5058 } |
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5059 |
13179 | 5060 /* Only event queue is checked. */ |
14999 | 5061 /* We don't have to call timer_check here |
56729
e6e0caa7ec87
Rename wait_reading_process_input to wait_reading_process_output.
Kim F. Storm <storm@cua.dk>
parents:
56335
diff
changeset
|
5062 because wait_reading_process_output takes care of that. */ |
13179 | 5063 int |
5064 sys_select (nfds, rfds, wfds, efds, timeout) | |
5065 int nfds; | |
5066 SELECT_TYPE *rfds, *wfds, *efds; | |
5067 EMACS_TIME *timeout; | |
5068 { | |
5069 int check_input; | |
5070 struct time t; | |
5071 | |
5072 check_input = 0; | |
5073 if (rfds) | |
5074 { | |
5075 check_input = FD_ISSET (0, rfds); | |
5076 FD_ZERO (rfds); | |
5077 } | |
5078 if (wfds) | |
5079 FD_ZERO (wfds); | |
5080 if (efds) | |
5081 FD_ZERO (efds); | |
5082 | |
5083 if (nfds != 1) | |
5084 abort (); | |
45332 | 5085 |
13179 | 5086 /* If we are looking only for the terminal, with no timeout, |
5087 just read it and wait -- that's more efficient. */ | |
5088 if (!timeout) | |
5089 { | |
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
5090 while (!detect_input_pending ()) |
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
5091 { |
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5092 dos_yield_time_slice (); |
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
5093 } |
13179 | 5094 } |
5095 else | |
5096 { | |
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5097 EMACS_TIME clnow, cllast, cldiff; |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5098 |
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
5099 gettime (&t); |
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5100 EMACS_SET_SECS_USECS (cllast, t.ti_sec, t.ti_hund * 10000L); |
13179 | 5101 |
5102 while (!check_input || !detect_input_pending ()) | |
5103 { | |
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
5104 gettime (&t); |
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5105 EMACS_SET_SECS_USECS (clnow, t.ti_sec, t.ti_hund * 10000L); |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5106 EMACS_SUB_TIME (cldiff, clnow, cllast); |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5107 |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5108 /* When seconds wrap around, we assume that no more than |
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
5109 1 minute passed since last `gettime'. */ |
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5110 if (EMACS_TIME_NEG_P (cldiff)) |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5111 EMACS_SET_SECS (cldiff, EMACS_SECS (cldiff) + 60); |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5112 EMACS_SUB_TIME (*timeout, *timeout, cldiff); |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5113 |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5114 /* Stop when timeout value crosses zero. */ |
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
5115 if (EMACS_TIME_ZERO_OR_NEG_P (*timeout)) |
13179 | 5116 return 0; |
5117 cllast = clnow; | |
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
5118 dos_yield_time_slice (); |
13179 | 5119 } |
5120 } | |
45332 | 5121 |
13179 | 5122 FD_SET (0, rfds); |
5123 return 1; | |
5124 } | |
5125 #endif | |
5126 | |
5127 /* | |
14036 | 5128 * Define overlaid functions: |
13179 | 5129 * |
5130 * chdir -> sys_chdir | |
5131 * tzset -> init_gettimeofday | |
5132 * abort -> dos_abort | |
5133 */ | |
5134 | |
5135 #ifdef chdir | |
5136 #undef chdir | |
5137 extern int chdir (); | |
5138 | |
5139 int | |
5140 sys_chdir (path) | |
5141 const char* path; | |
5142 { | |
5143 int len = strlen (path); | |
5144 char *tmp = (char *)path; | |
5145 | |
5146 if (*tmp && tmp[1] == ':') | |
5147 { | |
5148 if (getdisk () != tolower (tmp[0]) - 'a') | |
5149 setdisk (tolower (tmp[0]) - 'a'); | |
5150 tmp += 2; /* strip drive: KFS 1995-07-06 */ | |
5151 len -= 2; | |
5152 } | |
45332 | 5153 |
13179 | 5154 if (len > 1 && (tmp[len - 1] == '/')) |
5155 { | |
5156 char *tmp1 = (char *) alloca (len + 1); | |
5157 strcpy (tmp1, tmp); | |
5158 tmp1[len - 1] = 0; | |
5159 tmp = tmp1; | |
5160 } | |
5161 return chdir (tmp); | |
5162 } | |
5163 #endif | |
5164 | |
5165 #ifdef tzset | |
5166 #undef tzset | |
5167 extern void tzset (void); | |
5168 | |
5169 void | |
5170 init_gettimeofday () | |
5171 { | |
5172 time_t ltm, gtm; | |
5173 struct tm *lstm; | |
5174 | |
5175 tzset (); | |
5176 ltm = gtm = time (NULL); | |
5177 ltm = mktime (lstm = localtime (<m)); | |
5178 gtm = mktime (gmtime (>m)); | |
5179 time_rec.tm_hour = 99; /* force gettimeofday to get date */ | |
5180 time_rec.tm_isdst = lstm->tm_isdst; | |
5181 dos_timezone_offset = time_rec.tm_gmtoff = (int)(gtm - ltm) / 60; | |
5182 } | |
5183 #endif | |
5184 | |
5185 #ifdef abort | |
5186 #undef abort | |
5187 void | |
5188 dos_abort (file, line) | |
5189 char *file; | |
5190 int line; | |
5191 { | |
5192 char buffer1[200], buffer2[400]; | |
5193 int i, j; | |
45332 | 5194 |
13179 | 5195 sprintf (buffer1, "<EMACS FATAL ERROR IN %s LINE %d>", file, line); |
5196 for (i = j = 0; buffer1[i]; i++) { | |
5197 buffer2[j++] = buffer1[i]; | |
5198 buffer2[j++] = 0x70; | |
5199 } | |
5200 dosmemput (buffer2, j, (int)ScreenPrimary); | |
5201 ScreenSetCursor (2, 0); | |
5202 abort (); | |
5203 } | |
13744
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5204 #else |
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5205 void |
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5206 abort () |
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5207 { |
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5208 dos_ttcooked (); |
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5209 ScreenSetCursor (10, 0); |
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5210 cputs ("\r\n\nEmacs aborted!\r\n"); |
14999 | 5211 #if __DJGPP__ > 1 |
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
5212 #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 2 |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
5213 if (screen_virtual_segment) |
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
5214 dosv_refresh_virtual_screen (2 * 10 * screen_size_X, 4 * screen_size_X); |
14999 | 5215 /* Generate traceback, so we could tell whodunit. */ |
5216 signal (SIGINT, SIG_DFL); | |
5217 __asm__ __volatile__ ("movb $0x1b,%al;call ___djgpp_hw_exception"); | |
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
5218 #else /* __DJGPP_MINOR__ >= 2 */ |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
5219 raise (SIGABRT); |
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
5220 #endif /* __DJGPP_MINOR__ >= 2 */ |
14999 | 5221 #endif |
13744
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5222 exit (2); |
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
5223 } |
13179 | 5224 #endif |
5225 | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
5226 /* The following variables are required so that cus-start.el won't |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
5227 complain about unbound variables. */ |
19334
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5228 #ifndef subprocesses |
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5229 /* Nonzero means delete a process right away if it exits (process.c). */ |
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5230 static int delete_exited_processes; |
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5231 #endif |
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5232 |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5233 syms_of_msdos () |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5234 { |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5235 recent_doskeys = Fmake_vector (make_number (NUM_RECENT_DOSKEYS), Qnil); |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5236 staticpro (&recent_doskeys); |
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
5237 |
19334
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5238 #ifndef HAVE_X_WINDOWS |
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
5239 |
32271
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
5240 /* The following two are from xfns.c: */ |
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
5241 Qreverse = intern ("reverse"); |
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
5242 staticpro (&Qreverse); |
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
5243 |
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
5244 DEFVAR_LISP ("dos-unsupported-char-glyph", &Vdos_unsupported_char_glyph, |
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
5245 doc: /* *Glyph to display instead of chars not supported by current codepage. |
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
5246 This variable is used only by MSDOS terminals. */); |
55662
4cea1f00f7bb
(syms_of_msdos): Initialize dos-unsupported-char-glyph with make_number.
Eli Zaretskii <eliz@gnu.org>
parents:
55650
diff
changeset
|
5247 Vdos_unsupported_char_glyph = make_number ('\177'); |
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
5248 |
19334
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5249 #endif |
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5250 #ifndef subprocesses |
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5251 DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes, |
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
5252 doc: /* *Non-nil means delete processes immediately when they exit. |
74570
3f35703291af
(syms_of_msdos) <delete-exited-processes>: Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
74145
diff
changeset
|
5253 A value of nil means don't delete them until `list-processes' is run. */); |
19334
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5254 delete_exited_processes = 0; |
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
5255 #endif |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5256 |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5257 defsubr (&Srecent_doskeys); |
15186
242bddc25e5a
(syms_of_msdos): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents:
15174
diff
changeset
|
5258 defsubr (&Smsdos_long_file_names); |
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
5259 defsubr (&Smsdos_downcase_filename); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
5260 defsubr (&Smsdos_remember_default_colors); |
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
5261 defsubr (&Smsdos_set_mouse_buttons); |
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5262 } |
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
5263 |
5503 | 5264 #endif /* MSDOS */ |
52401 | 5265 |
5266 /* arch-tag: db404e92-52a5-475f-9eb2-1cb78dd05f30 | |
5267 (do not change this comment) */ |