annotate src/msdos.c @ 53879:e3771c262410

New file. Move original fringe related declarations and code from dispextern.h and xdisp.c here. Rework code to support user defined fringe bitmaps, redefining standard bitmaps, ability to overlay user defined bitmap with overlay arrow bitmap, and add faces to bitmaps. (Voverflow_newline_into_fringe): Declare here. (enum fringe_bitmap_align): New enum. (..._bits): All bitmaps are now defined without bitswapping; that is now done in init_fringe_once (if necessary). (standard_bitmaps): New array with specifications for the standard fringe bitmaps. (fringe_faces): New array. (valid_fringe_bitmap_id_p): New function. (draw_fringe_bitmap_1): Rename from draw_fringe_bitmap. (draw_fringe_bitmap): New function which draws fringe bitmap, possibly overlaying bitmap with cursor in right fringe or the overlay arrow in the left fringe. (update_window_fringes): Do not handle overlay arrow here. Compare and copy fringe bitmap faces. (init_fringe_bitmap): New function. (Fdefine_fringe_bitmap, Fdestroy_fringe_bitmap): New DEFUNs to define and destroy user defined fringe bitmaps. (Fset_fringe_bitmap_face): New DEFUN to set face for a fringe bitmap. (Ffringe_bitmaps_at_pos): New DEFUN to read current fringe bitmaps. (syms_of_fringe): New function. Defsubr new DEFUNs. DEFVAR_LISP Voverflow_newline_into_fringe. (init_fringe_once, init_fringe): New functions. (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: New functions.
author Kim F. Storm <storm@cua.dk>
date Sun, 08 Feb 2004 23:18:16 +0000
parents 7ba9466a0ed8
children 4250e7e26247 c33e4ac43939
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 -*-
51571
904f120f283f (dos_rawgetc): Don't pass uninitialized data to kbd_buffer_store_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51201
diff changeset
2 Copyright (C) 1993, 94, 95, 96, 97, 1999, 2000, 01, 2003
36513
f022afc9cdcb Update copyright notice.
Eli Zaretskii <eliz@gnu.org>
parents: 36483
diff changeset
3 Free Software Foundation, Inc.
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
10504
8a1bd0598b49 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 10501
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 any later version.
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14157
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14157
diff changeset
20 Boston, MA 02111-1307, USA. */
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
7666
13a977e6777a (dos_rawgetc): Doc fix. Make C-, S-, and M- modifiers
Richard M. Stallman <rms@gnu.org>
parents: 7523
diff changeset
22 /* Contributed by Morten Welinder */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
23 /* 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
24
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 /* Note: some of the stuff here was taken from end of sysdep.c in demacs. */
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
5980
a203b7c30300 Use <...> for config.h.
Richard M. Stallman <rms@gnu.org>
parents: 5503
diff changeset
27 #include <config.h>
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 #ifdef MSDOS
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 #include "lisp.h"
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 #include <stdio.h>
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 #include <stdlib.h>
23815
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
33 #include <time.h>
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 #include <sys/param.h>
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 #include <sys/time.h>
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 #include <dos.h>
15125
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
37 #include <errno.h>
16915
8d28d96f6031 (run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents: 16872
diff changeset
38 #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
39 #include <sys/stat.h> /* for _fixpath */
16915
8d28d96f6031 (run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents: 16872
diff changeset
40 #include <unistd.h> /* for chdir, dup, dup2, etc. */
42192
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
41 #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
42 #if __DJGPP__ >= 2
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
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 #include "msdos.h"
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 #include "systime.h"
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 #include "termhooks.h"
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
54 #include "termchar.h"
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
55 #include "dispextern.h"
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
56 #include "dosfns.h"
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
57 #include "termopts.h"
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
58 #include "charset.h"
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
59 #include "coding.h"
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
60 #include "disptab.h"
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 #include "frame.h"
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
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
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
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
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 #include <go32.h>
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 #include <pc.h>
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 #include <ctype.h>
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 /* #include <process.h> */
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 /* Damn that local process.h! Instead we can define P_WAIT ourselves. */
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 #define P_WAIT 1
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
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
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
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
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
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
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
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
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
124
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
125 /* ------------------------ Mouse control ---------------------------
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
126 *
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
127 * Coordinates are in screen positions and zero based.
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
128 * Mouse buttons are numbered from left to right and also zero based.
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
129 */
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
135 int have_mouse; /* 0: no, 1: enabled, -1: disabled */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
136 static int mouse_visible;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
138 static int mouse_last_x;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
139 static int mouse_last_y;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
141 static int mouse_button_translate[NUM_MOUSE_BUTTONS];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
142 static int mouse_button_count;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
144 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
145 mouse_on ()
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
146 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
147 union REGS regs;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
149 if (have_mouse > 0 && !mouse_visible)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
150 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
151 if (termscript)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
152 fprintf (termscript, "<M_ON>");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
153 regs.x.ax = 0x0001;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
154 int86 (0x33, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
155 mouse_visible = 1;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
159 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
160 mouse_off ()
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
162 union REGS regs;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
164 if (have_mouse > 0 && mouse_visible)
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
166 if (termscript)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
167 fprintf (termscript, "<M_OFF>");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
168 regs.x.ax = 0x0002;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
169 int86 (0x33, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
170 mouse_visible = 0;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
174 static void
30532
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
175 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
176 {
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
177 if (n_buttons == 3)
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
178 {
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
179 mouse_button_count = 3;
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
180 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
181 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
182 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
183 }
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
184 else /* two, what else? */
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
185 {
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
186 mouse_button_count = 2;
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
187 mouse_button_translate[0] = 0;
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
188 mouse_button_translate[1] = 1;
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 }
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
191
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
192 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
193 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
194 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
195 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
196 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
197 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
198 (nbuttons)
30532
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
199 Lisp_Object nbuttons;
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
200 {
34561
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
201 int n;
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
202
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40082
diff changeset
203 CHECK_NUMBER (nbuttons);
34561
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
204 n = XINT (nbuttons);
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
205 if (n < 2 || n > 3)
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
206 Fsignal (Qargs_out_of_range,
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
207 Fcons (build_string ("only 2 or 3 mouse buttons are supported"),
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
208 Fcons (nbuttons, Qnil)));
62530d6f561d (Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents: 34483
diff changeset
209 mouse_setup_buttons (n);
30532
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
210 return Qnil;
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
211 }
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
212
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
213 static void
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
214 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
215 {
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
216 union REGS regs;
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
217
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
218 regs.x.ax = 0x0003;
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
219 int86 (0x33, &regs, &regs);
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
220 *x = regs.x.cx / 8;
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
221 *y = regs.x.dx / 8;
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
222 }
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
223
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
225 mouse_moveto (x, y)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
226 int x, y;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
228 union REGS regs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
229
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
230 if (termscript)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
231 fprintf (termscript, "<M_XY=%dx%d>", x, y);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
232 regs.x.ax = 0x0004;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
233 mouse_last_x = regs.x.cx = x * 8;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
234 mouse_last_y = regs.x.dx = y * 8;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
235 int86 (0x33, &regs, &regs);
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
238 static int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
239 mouse_pressed (b, xp, yp)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
240 int b, *xp, *yp;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
241 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
242 union REGS regs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
243
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
244 if (b >= mouse_button_count)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
245 return 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
246 regs.x.ax = 0x0005;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
247 regs.x.bx = mouse_button_translate[b];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
248 int86 (0x33, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
249 if (regs.x.bx)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
250 *xp = regs.x.cx / 8, *yp = regs.x.dx / 8;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
251 return (regs.x.bx != 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
252 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
253
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
254 static int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
255 mouse_released (b, xp, yp)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
256 int b, *xp, *yp;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
257 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
258 union REGS regs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
259
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
260 if (b >= mouse_button_count)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
261 return 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
262 regs.x.ax = 0x0006;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
263 regs.x.bx = mouse_button_translate[b];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
264 int86 (0x33, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
265 if (regs.x.bx)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
266 *xp = regs.x.cx / 8, *yp = regs.x.dx / 8;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
267 return (regs.x.bx != 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
268 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
269
23497
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
270 static int
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
271 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
272 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
273 {
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
274 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
275
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
276 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
277 return 0;
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
278 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
279 int86 (0x33, &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 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
281 {
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
282 *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
283 *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
284 return 1;
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
285 }
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
286 return 0;
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
287 }
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
288
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
289 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
290 mouse_get_pos (f, insist, bar_window, part, x, y, time)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
291 FRAME_PTR *f;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
292 int insist;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
293 Lisp_Object *bar_window, *x, *y;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
294 enum scroll_bar_part *part;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
295 unsigned long *time;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
296 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
297 int ix, iy;
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
298 Lisp_Object frame, tail;
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
299
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
300 /* 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
301 FOR_EACH_FRAME (tail, frame)
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
302 XFRAME (frame)->mouse_moved = 0;
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
303
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
304 *f = SELECTED_FRAME();
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
305 *bar_window = Qnil;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
306 mouse_get_xy (&ix, &iy);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
307 *time = event_timestamp ();
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
308 *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
309 *y = make_number (mouse_last_y = iy);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
310 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
311
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
312 static void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
313 mouse_check_moved ()
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
314 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
315 int x, y;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
316
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
317 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
318 SELECTED_FRAME()->mouse_moved |= (x != mouse_last_x || y != mouse_last_y);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
319 mouse_last_x = x;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
320 mouse_last_y = y;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322
30711
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
323 /* Force the mouse driver to ``forget'' about any button clicks until
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
324 now. */
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
325 static void
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
326 mouse_clear_clicks (void)
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
327 {
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
328 int b;
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
329
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
330 for (b = 0; b < mouse_button_count; b++)
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
331 {
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
332 int dummy_x, dummy_y;
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
333
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
334 (void) mouse_pressed (b, &dummy_x, &dummy_y);
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
335 (void) mouse_released (b, &dummy_x, &dummy_y);
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
336 }
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
337 }
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
338
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
339 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
340 mouse_init ()
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
342 union REGS regs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
343
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
344 if (termscript)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
345 fprintf (termscript, "<M_INIT>");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
346
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
347 regs.x.ax = 0x0021;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
348 int86 (0x33, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
349
23497
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
350 /* 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
351 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
352 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
353 window just before Emacs was started from that window. */
30711
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
354 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
355
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
356 regs.x.ax = 0x0007;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
357 regs.x.cx = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
358 regs.x.dx = 8 * (ScreenCols () - 1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
359 int86 (0x33, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
360
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
361 regs.x.ax = 0x0008;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
362 regs.x.cx = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
363 regs.x.dx = 8 * (ScreenRows () - 1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
364 int86 (0x33, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
365
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
366 mouse_moveto (0, 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
367 mouse_visible = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
368 }
13848
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
369
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
370 /* ------------------------- Screen control ----------------------
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
371 *
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
372 */
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
374 static int internal_terminal = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
375
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
376 #ifndef HAVE_X_WINDOWS
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
377 extern unsigned char ScreenAttrib;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
378 static int screen_face;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
379
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
380 static int screen_size_X;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
381 static int screen_size_Y;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
382 static int screen_size;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
383
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
384 static int current_pos_X;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
385 static int current_pos_Y;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
386 static int new_pos_X;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
387 static int new_pos_Y;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
388
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
389 static void *startup_screen_buffer;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
390 static int startup_screen_size_X;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
391 static int startup_screen_size_Y;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
392 static int startup_pos_X;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
393 static int startup_pos_Y;
13717
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
394 static unsigned char startup_screen_attrib;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
395
23815
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
396 static clock_t startup_time;
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
397
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
398 static int term_setup_done;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
399
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
400 static unsigned short outside_cursor;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
401
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
402 /* Similar to the_only_frame. */
13394
c4549fcdd5f3 (the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents: 13305
diff changeset
403 struct x_output the_only_x_display;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
404
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
405 /* 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
406 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
407
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
408 /* 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
409 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
410 /* 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
411 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
412 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
413 /* 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
414 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
415
53187
7ba9466a0ed8 (Qcursor_type, Qbar, Qhbar): Declare extern.
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
416 extern Lisp_Object Qcursor_type;
7ba9466a0ed8 (Qcursor_type, Qbar, Qhbar): Declare extern.
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
417 extern Lisp_Object Qbar, Qhbar;
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
418
49381
d1efc3239673 Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 48026
diff changeset
419 /* 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
420 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
421 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
422
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
423 #if __DJGPP__ > 1
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
424 /* 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
425 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
426 static void
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
427 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
428 {
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
429 __dpmi_regs regs;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
430
28932
f8b0ac62f238 Use the term `invalid' instead of `illegal'.
Gerd Moellmann <gerd@gnu.org>
parents: 28553
diff changeset
431 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
432 return;
a1a2beb0a09c (dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents: 21415
diff changeset
433
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
434 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
435 regs.x.es = screen_virtual_segment;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
436 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
437 regs.x.cx = count;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
438 __dpmi_int (0x10, &regs);
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
439 }
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
440 #endif
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
441
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
442 static void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
443 dos_direct_output (y, x, buf, len)
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
444 int x, y;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
445 char *buf;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
446 int len;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 {
21489
a1a2beb0a09c (dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents: 21415
diff changeset
448 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
449 int t = t0 + (int) ScreenPrimary;
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
450 int l0 = len;
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
451
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
452 #if (__DJGPP__ < 2)
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
453 while (--len >= 0) {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
454 dosmemput (buf++, 1, t);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
455 t += 2;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
456 }
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
457 #else
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
458 /* This is faster. */
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
459 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
460 _farnspokeb (t, *buf);
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
461
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
462 if (screen_virtual_segment)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
463 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
464 #endif
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 }
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
466 #endif
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 /* Flash the screen as a substitute for BEEPs. */
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
470 #if (__DJGPP__ < 2)
7273
24426d7e14eb Finish downcasing mouse_init1, mouse_off,
Richard M. Stallman <rms@gnu.org>
parents: 6505
diff changeset
471 static void
7667
bae9c0fa1c2f (do_visible_bell): Renamed from visible_bell to avoid
Richard M. Stallman <rms@gnu.org>
parents: 7666
diff changeset
472 do_visible_bell (xorattr)
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 unsigned char xorattr;
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 {
7273
24426d7e14eb Finish downcasing mouse_init1, mouse_off,
Richard M. Stallman <rms@gnu.org>
parents: 6505
diff changeset
475 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
476 (" 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
477 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
478 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
479 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
480 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
481 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
482 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
483 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
484 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
485 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
486 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
487 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
488 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
489 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
490 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
491 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
492 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
493 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
494 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
495 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
496 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
497 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
498 jmp visible_bell_0 \n\
8183
d35fd7fd0ef8 (install_ctrl_break_check): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7821
diff changeset
499 visible_bell_3:"
d35fd7fd0ef8 (install_ctrl_break_check): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7821
diff changeset
500 : /* no output */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
501 : "m" (xorattr), "g" (screen_size)
8183
d35fd7fd0ef8 (install_ctrl_break_check): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7821
diff changeset
502 : "%eax", "%ebx", /* "%gs",*/ "%ecx", "%edx");
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
505 static void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
506 ScreenVisualBell (void)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
507 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
508 /* This creates an xor-mask that will swap the default fore- and
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
509 background colors. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
510 do_visible_bell (((the_only_x_display.foreground_pixel
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
511 ^ the_only_x_display.background_pixel)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
512 * 0x11) & 0x7f);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
513 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
514 #endif
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
515
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
516 #ifndef HAVE_X_WINDOWS
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
517
16837
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
518 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
519
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
520 /* Enable bright background colors. */
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
521 static void
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
522 bright_bg (void)
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
523 {
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
524 union REGS regs;
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
525
16837
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
526 /* 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
527 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
528 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
529 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
530
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
531 regs.h.bl = 0;
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
532 regs.x.ax = 0x1003;
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
533 int86 (0x10, &regs, &regs);
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
534 }
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
535
16837
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
536 /* 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
537 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
538 static void
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
539 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
540 {
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
541 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
542 {
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
543 union REGS regs;
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
544
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
545 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
546 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
547 int86 (0x10, &regs, &regs);
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 }
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
550
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
551 /* 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
552 static int
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
553 vga_installed (void)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
554 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
555 union REGS regs;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
556
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
557 regs.x.ax = 0x1a00;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
558 int86 (0x10, &regs, &regs);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
559 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
560 return 1;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
561 return 0;
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
14284
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
564 /* 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
565 ROWS x COLS frame. */
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
566
14284
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
567 void
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
568 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
569 int *rows, *cols;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
570 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
571 char video_name[30];
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
572 union REGS regs;
14284
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
573 Lisp_Object video_mode;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
574 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
575 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
576
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
577 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
578 return;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
579
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
580 mouse_off ();
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
581 have_vga = vga_installed ();
14284
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
582
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
583 /* 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
584 use that mode. */
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
585 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
586 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
587 Qnil))-> value;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
588
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
589 if (INTEGERP (video_mode)
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
590 && (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
591 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
592 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
593 int86 (0x10, &regs, &regs);
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
594
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
595 if (have_mouse)
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
596 {
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
597 /* 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
598 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
599 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
600 regs.x.ax = 0;
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
601 int86 (0x33, &regs, &regs);
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
602 }
14284
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
603 }
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
604
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
605 /* 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
606 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
607
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
608 #if __DJGPP__ > 1
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 else
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
611 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
612 static struct {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
613 int rows, need_vga;
14284
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
614 } std_dimension[] = {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
615 {25, 0},
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
616 {28, 1},
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
617 {35, 0},
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
618 {40, 1},
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
619 {43, 0},
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
620 {50, 1}
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
621 };
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
622 int i = 0;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
623
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
624 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
625 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
626 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
627 && std_dimension[i].rows >= *rows)
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
628 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
629 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
630 || *cols != current_cols)
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
631 _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
632 break;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
633 }
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
634 i++;
14284
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
635 }
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
636 }
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
637
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
638 #else /* not __DJGPP__ > 1 */
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
639
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
640 else if (*rows <= 25)
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 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
643 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
644 regs.x.ax = 3;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
645 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
646 regs.x.ax = 0x1101;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
647 regs.h.bl = 0;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
648 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
649 regs.x.ax = 0x1200;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
650 regs.h.bl = 32;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
651 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
652 regs.x.ax = 3;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
653 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
654 }
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
655 }
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
656 else if (*rows <= 50)
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
657 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
658 || *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
659 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
660 regs.x.ax = 3;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
661 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
662 regs.x.ax = 0x1112;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
663 regs.h.bl = 0;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
664 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
665 regs.x.ax = 0x1200;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
666 regs.h.bl = 32;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
667 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
668 regs.x.ax = 0x0100;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
669 regs.x.cx = 7;
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
670 int86 (0x10, &regs, &regs);
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
671 }
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
672 #endif /* not __DJGPP__ > 1 */
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
673
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
674 if (have_mouse)
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
675 {
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
676 mouse_init ();
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
677 mouse_on ();
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
678 }
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 /* 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
681 *rows = ScreenRows ();
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
682 *cols = ScreenCols ();
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
683
32730
5d98418d7b78 (dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents: 32546
diff changeset
684 /* Update Emacs' notion of screen dimensions. */
5d98418d7b78 (dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents: 32546
diff changeset
685 screen_size_X = *cols;
5d98418d7b78 (dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents: 32546
diff changeset
686 screen_size_Y = *rows;
5d98418d7b78 (dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents: 32546
diff changeset
687 screen_size = *cols * *rows;
5d98418d7b78 (dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents: 32546
diff changeset
688
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
689 #if __DJGPP__ > 1
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
690 /* 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
691 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
692 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
693 struct frame *f = SELECTED_FRAME();
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
694 struct display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
695 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
696
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
697 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
698 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
699 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
700 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
701 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
702 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
703 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
704 #endif
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
705
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
706 /* Enable bright background colors. */
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
707 bright_bg ();
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
708
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
709 /* 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
710 be defensive anyway. */
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
711 if (screen_virtual_segment)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
712 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
713 }
0eaecdc13142 (dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents: 14279
diff changeset
714
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
715 /* 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
716 the mouse cursor may need to be refreshed. */
7744
da18793f532d (output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7667
diff changeset
717
da18793f532d (output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7667
diff changeset
718 static void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
719 mouse_off_maybe ()
7744
da18793f532d (output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7667
diff changeset
720 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
721 int x, y;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
722
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
723 if (!mouse_visible)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
724 return;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
725
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
726 mouse_get_xy (&x, &y);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
727 if (y != new_pos_Y || x < new_pos_X)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
728 return;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
729
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
730 mouse_off ();
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
731 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
732
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
733 #define DEFAULT_CURSOR_START (-1)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
734 #define DEFAULT_CURSOR_WIDTH (-1)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
735 #define BOX_CURSOR_WIDTH (-32)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
736
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
737 /* 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
738 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
739 of the character cell, starting from zero. */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
740 static void
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
741 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
742 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
743 #if __DJGPP__ > 1
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
744 unsigned desired_cursor;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
745 __dpmi_regs regs;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
746 int max_line, top_line, bot_line;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
747
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
748 /* 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
749 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
750 frame. */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
751 if (f && f != SELECTED_FRAME())
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
752 return;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
753
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
754 /* 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
755 BIOS data area. */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
756 max_line = _farpeekw (_dos_ds, 0x485) - 1;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
757 switch (max_line)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
758 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
759 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
760 case 7:
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
761 bot_line = 7;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
762 break;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
763 case 9:
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
764 bot_line = 9;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
765 break;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
766 case 13:
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
767 bot_line = 12;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
768 break;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
769 case 15:
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
770 bot_line = 14;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
771 break;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
772 }
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
773
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
774 if (width < 0)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
775 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
776 if (width == BOX_CURSOR_WIDTH)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
777 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
778 top_line = 0;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
779 bot_line = max_line;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
780 }
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
781 else if (start_line != DEFAULT_CURSOR_START)
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 top_line = start_line;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
784 bot_line = top_line - width - 1;
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 else if (width != DEFAULT_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 = -1 - width;
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
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
792 top_line = bot_line + 1;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
793 }
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
794 else if (width == 0)
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 /* [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
797 top_line = 31;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
798 bot_line = 0;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
799 }
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
800 else /* WIDTH is positive */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
801 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
802 if (start_line != DEFAULT_CURSOR_START)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
803 bot_line = start_line;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
804 top_line = bot_line - (width - 1);
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
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
807 /* 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
808 history here. */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
809 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
810 if (desired_cursor == _farpeekw (_dos_ds, 0x460))
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
811 return;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
812
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
813 regs.h.ah = 1;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
814 regs.x.cx = desired_cursor;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
815 __dpmi_int (0x10, &regs);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
816 #endif /* __DJGPP__ > 1 */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
817 }
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
818
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
819 static void
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
820 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
821 {
44695
7a20e252e50a (Qhbar): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 44528
diff changeset
822 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
823 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
824 /* 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
825 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
826 }
44695
7a20e252e50a (Qhbar): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 44528
diff changeset
827 else if (CONSP (cursor_type)
7a20e252e50a (Qhbar): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 44528
diff changeset
828 && (EQ (XCAR (cursor_type), Qbar)
7a20e252e50a (Qhbar): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 44528
diff changeset
829 || EQ (XCAR (cursor_type), Qhbar)))
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
830 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
831 Lisp_Object bar_parms = XCDR (cursor_type);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
832 int width;
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 if (INTEGERP (bar_parms))
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
835 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
836 /* 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
837 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
838 width = XINT (bar_parms);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
839 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
840 width);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
841 }
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
842 else if (CONSP (bar_parms)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
843 && INTEGERP (XCAR (bar_parms))
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
844 && INTEGERP (XCDR (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 int start_line = XINT (XCDR (bar_parms));
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
847
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
848 width = XINT (XCAR (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, start_line, width);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
850 }
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
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
853 /* Treat anything unknown as "box cursor". This includes nil, so
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
854 that a frame which doesn't specify a cursor type gets a box,
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
855 which is the default in Emacs. */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
856 msdos_set_cursor_shape (f, 0, BOX_CURSOR_WIDTH);
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
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
859 static void
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
860 IT_ring_bell (void)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
861 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
862 if (visible_bell)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
863 {
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
864 mouse_off ();
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
865 ScreenVisualBell ();
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
866 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
867 else
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
868 {
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
869 union REGS inregs, outregs;
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
870 inregs.h.ah = 2;
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
871 inregs.h.dl = 7;
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
872 intdos (&inregs, &outregs);
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
873 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
874 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
875
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
876 /* 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
877 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
878 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
879 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
880 the video RAM. */
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
881 static void
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
882 IT_set_face (int face)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
883 {
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
884 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
885 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
886 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
887 unsigned long fg, bg, dflt_fg, dflt_bg;
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
888
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
889 if (!fp)
25214
acfe5b9d7233 (IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents: 25110
diff changeset
890 {
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
891 fp = dfp;
25214
acfe5b9d7233 (IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents: 25110
diff changeset
892 /* 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
893 cached. */
acfe5b9d7233 (IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents: 25110
diff changeset
894 if (!fp)
acfe5b9d7233 (IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents: 25110
diff changeset
895 abort ();
acfe5b9d7233 (IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents: 25110
diff changeset
896 }
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
897 screen_face = face;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
898 fg = fp->foreground;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
899 bg = fp->background;
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
900 dflt_fg = dfp->foreground;
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
901 dflt_bg = dfp->background;
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
902
40082
0eaf29d6544e (IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents: 38314
diff changeset
903 /* 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
904 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
905 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
906 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
907 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
908 fg = FRAME_FOREGROUND_PIXEL (sf);
26902
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26729
diff changeset
909 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
910 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
911 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
912 bg = FRAME_BACKGROUND_PIXEL (sf);
26902
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26729
diff changeset
913 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
914 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
915
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
916 /* 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
917 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
918 {
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
919 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
920
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
921 fg = bg;
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
922 bg = tem;
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
923 }
34676
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
924 /* If the user requested inverse video, obey. */
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
925 if (inverse_video)
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
926 {
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
927 unsigned long tem2 = fg;
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
928
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
929 fg = bg;
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
930 bg = tem2;
fbd6630ebdaa (IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents: 34657
diff changeset
931 }
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
932 if (termscript)
40082
0eaf29d6544e (IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents: 38314
diff changeset
933 fprintf (termscript, "<FACE %d: %d/%d[FG:%d/BG:%d]>", face,
0eaf29d6544e (IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents: 38314
diff changeset
934 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
935 if (fg >= 0 && fg < 16)
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
936 {
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
937 ScreenAttrib &= 0xf0;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
938 ScreenAttrib |= fg;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
939 }
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
940 if (bg >= 0 && bg < 16)
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
941 {
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
942 ScreenAttrib &= 0x0f;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
943 ScreenAttrib |= ((bg & 0x0f) << 4);
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
944 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
945 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
946
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
947 Lisp_Object Vdos_unsupported_char_glyph;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
948
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
949 static void
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
950 IT_write_glyphs (struct glyph *str, int str_len)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
951 {
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
952 unsigned char *screen_buf, *screen_bp, *screen_buf_end, *bp;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
953 int unsupported_face = FAST_GLYPH_FACE (Vdos_unsupported_char_glyph);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
954 unsigned unsupported_char= FAST_GLYPH_CHAR (Vdos_unsupported_char_glyph);
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
955 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
956 register int sl = str_len;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
957 register int tlen = GLYPH_TABLE_LENGTH;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
958 register Lisp_Object *tbase = GLYPH_TABLE_BASE;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
959
29613
7da06cd67660 (IT_write_glyphs): Don't use CODING_REQUIRE_ENCODING
Eli Zaretskii <eliz@gnu.org>
parents: 29098
diff changeset
960 /* If terminal_coding does any conversion, use it, otherwise use
7da06cd67660 (IT_write_glyphs): Don't use CODING_REQUIRE_ENCODING
Eli Zaretskii <eliz@gnu.org>
parents: 29098
diff changeset
961 safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
7da06cd67660 (IT_write_glyphs): Don't use CODING_REQUIRE_ENCODING
Eli Zaretskii <eliz@gnu.org>
parents: 29098
diff changeset
962 because it always returns 1 if terminal_coding.src_multibyte is 1. */
7da06cd67660 (IT_write_glyphs): Don't use CODING_REQUIRE_ENCODING
Eli Zaretskii <eliz@gnu.org>
parents: 29098
diff changeset
963 struct coding_system *coding =
7da06cd67660 (IT_write_glyphs): Don't use CODING_REQUIRE_ENCODING
Eli Zaretskii <eliz@gnu.org>
parents: 29098
diff changeset
964 (terminal_coding.common_flags & CODING_REQUIRE_ENCODING_MASK
7da06cd67660 (IT_write_glyphs): Don't use CODING_REQUIRE_ENCODING
Eli Zaretskii <eliz@gnu.org>
parents: 29098
diff changeset
965 ? &terminal_coding
7da06cd67660 (IT_write_glyphs): Don't use CODING_REQUIRE_ENCODING
Eli Zaretskii <eliz@gnu.org>
parents: 29098
diff changeset
966 : &safe_terminal_coding);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
967 struct frame *sf;
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
968
24001
fce0e760c4ab (IT_write_glyphs): Move constant expression out of the loop.
Eli Zaretskii <eliz@gnu.org>
parents: 23971
diff changeset
969 /* 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
970 multibyte? */
fce0e760c4ab (IT_write_glyphs): Move constant expression out of the loop.
Eli Zaretskii <eliz@gnu.org>
parents: 23971
diff changeset
971 int convert_unibyte_characters
24678
56fe3cae0f96 (unibyte_display_via_language_environment):
Andrew Innes <andrewi@gnu.org>
parents: 24593
diff changeset
972 = (NILP (current_buffer->enable_multibyte_characters)
56fe3cae0f96 (unibyte_display_via_language_environment):
Andrew Innes <andrewi@gnu.org>
parents: 24593
diff changeset
973 && 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
974
30835
45f168392f57 (IT_write_glyphs): Use a locally declared conversion_buffer.
Kenichi Handa <handa@m17n.org>
parents: 30826
diff changeset
975 unsigned char conversion_buffer[256];
45f168392f57 (IT_write_glyphs): Use a locally declared conversion_buffer.
Kenichi Handa <handa@m17n.org>
parents: 30826
diff changeset
976 int conversion_buffer_size = sizeof conversion_buffer;
45f168392f57 (IT_write_glyphs): Use a locally declared conversion_buffer.
Kenichi Handa <handa@m17n.org>
parents: 30826
diff changeset
977
26946
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
978 if (str_len <= 0) return;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
979
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
980 screen_buf = screen_bp = alloca (str_len * 2);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
981 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
982 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
983
acfe5b9d7233 (IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents: 25110
diff changeset
984 /* 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
985 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
986 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
987 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
988 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
989 IT_set_face (DEFAULT_FACE_ID);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
990
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
991 /* 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
992 the tail. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
993 terminal_coding.mode &= ~CODING_MODE_LAST_BLOCK;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
994 while (sl)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
995 {
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
996 int cf, chlen, enclen;
26946
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
997 unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *buf;
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
998 unsigned ch;
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
999
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1000 /* 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
1001 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
1002 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
1003 if (CHAR_GLYPH_PADDING_P (*str))
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1004 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1005 str++;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1006 sl--;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1007 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1008 else
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1009 {
27038
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1010 register GLYPH g = GLYPH_FROM_CHAR_GLYPH (*str);
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1011 int glyph_not_in_table = 0;
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1012
34657
9ff4148959a8 (IT_write_glyphs): Compute the glyph face from str->face_id.
Eli Zaretskii <eliz@gnu.org>
parents: 34561
diff changeset
1013 /* If g is negative, it means we have a multibyte character
9ff4148959a8 (IT_write_glyphs): Compute the glyph face from str->face_id.
Eli Zaretskii <eliz@gnu.org>
parents: 34561
diff changeset
1014 in *str. That's what GLYPH_FROM_CHAR_GLYPH returns for
9ff4148959a8 (IT_write_glyphs): Compute the glyph face from str->face_id.
Eli Zaretskii <eliz@gnu.org>
parents: 34561
diff changeset
1015 multibyte characters. */
27038
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1016 if (g < 0 || g >= tlen)
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1017 {
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1018 /* This glyph doesn't have an entry in Vglyph_table. */
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1019 ch = str->u.ch;
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1020 glyph_not_in_table = 1;
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1021 }
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1022 else
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1023 {
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1024 /* This glyph has an entry in Vglyph_table, so process
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1025 any aliases before testing for simpleness. */
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1026 GLYPH_FOLLOW_ALIASES (tbase, tlen, g);
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1027 ch = FAST_GLYPH_CHAR (g);
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1028 }
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1029
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1030 /* Convert the character code to multibyte, if they
27038
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1031 requested display via language environment. We only want
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1032 to convert unibyte characters to multibyte in unibyte
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1033 buffers! Otherwise, the 8-bit value in CH came from the
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1034 display table set up to display foreign characters. */
24001
fce0e760c4ab (IT_write_glyphs): Move constant expression out of the loop.
Eli Zaretskii <eliz@gnu.org>
parents: 23971
diff changeset
1035 if (SINGLE_BYTE_CHAR_P (ch) && convert_unibyte_characters
23926
f2d6df96a3c7 (IT_write_glyphs): Don't convert 7-bit ASCII characters via
Eli Zaretskii <eliz@gnu.org>
parents: 23825
diff changeset
1036 && (ch >= 0240
f2d6df96a3c7 (IT_write_glyphs): Don't convert 7-bit ASCII characters via
Eli Zaretskii <eliz@gnu.org>
parents: 23825
diff changeset
1037 || (ch >= 0200 && !NILP (Vnonascii_translation_table))))
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1038 ch = unibyte_char_to_multibyte (ch);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1039
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1040 /* Invalid characters are displayed with a special glyph. */
27038
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1041 if (! CHAR_VALID_P (ch, 0))
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1042 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1043 g = !NILP (Vdos_unsupported_char_glyph)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1044 ? Vdos_unsupported_char_glyph
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1045 : MAKE_GLYPH (sf, '\177', GLYPH_FACE (sf, g));
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1046 ch = FAST_GLYPH_CHAR (g);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1047 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1048
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1049 /* 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
1050 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
1051 cf = str->face_id;
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1052 if (cf != screen_face)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1053 IT_set_face (cf); /* handles invalid faces gracefully */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1054
27038
e168198350dd (IT_write_glyphs): Track last changes to struct glyph.
Eli Zaretskii <eliz@gnu.org>
parents: 27019
diff changeset
1055 if (glyph_not_in_table || GLYPH_SIMPLE_P (tbase, tlen, g))
26946
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
1056 {
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
1057 /* We generate the multi-byte form of CH in WORKBUF. */
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
1058 chlen = CHAR_STRING (ch, workbuf);
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
1059 buf = workbuf;
9e0e23a92539 (IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents: 26902
diff changeset
1060 }
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1061 else
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1062 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1063 /* We have a string in Vglyph_table. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1064 chlen = GLYPH_LENGTH (tbase, g);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1065 buf = GLYPH_STRING (tbase, g);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1066 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1067
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
1068 /* If the character is not multibyte, don't bother converting it. */
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1069 if (chlen == 1)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1070 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1071 *conversion_buffer = (unsigned char)ch;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1072 chlen = 0;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1073 enclen = 1;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1074 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1075 else
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1076 {
29098
c8a95c4dfd18 (IT_write_glyphs): Set coding->src_multibyte to 1.
Kenichi Handa <handa@m17n.org>
parents: 28932
diff changeset
1077 coding->src_multibyte = 1;
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1078 encode_coding (coding, buf, conversion_buffer, chlen,
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1079 conversion_buffer_size);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1080 chlen -= coding->consumed;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1081 enclen = coding->produced;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1082
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1083 /* Replace glyph codes that cannot be converted by
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1084 terminal_coding with Vdos_unsupported_char_glyph. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1085 if (*conversion_buffer == '?')
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1086 {
30840
de949e4ff09a (IT_write_glyphs): Convert cbp to unsigned char *.
Eli Zaretskii <eliz@gnu.org>
parents: 30835
diff changeset
1087 unsigned char *cbp = conversion_buffer;
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1088
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1089 while (cbp < conversion_buffer + enclen && *cbp == '?')
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1090 *cbp++ = unsupported_char;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1091 if (unsupported_face != screen_face)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1092 IT_set_face (unsupported_face);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1093 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1094 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1095
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1096 if (enclen + chlen > screen_buf_end - screen_bp)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1097 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1098 /* The allocated buffer for screen writes is too small.
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1099 Flush it and loop again without incrementing STR, so
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1100 that the next loop will begin with the same glyph. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1101 int nbytes = screen_bp - screen_buf;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1102
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1103 mouse_off_maybe ();
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1104 dosmemput (screen_buf, nbytes, (int)ScreenPrimary + offset);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1105 if (screen_virtual_segment)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1106 dosv_refresh_virtual_screen (offset, nbytes / 2);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1107 new_pos_X += nbytes / 2;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1108 offset += nbytes;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1109
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1110 /* Prepare to reuse the same buffer again. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1111 screen_bp = screen_buf;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1112 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1113 else
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1114 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1115 /* There's enough place in the allocated buffer to add
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1116 the encoding of this glyph. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1117
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1118 /* First, copy the encoded bytes. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1119 for (bp = conversion_buffer; enclen--; bp++)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1120 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1121 *screen_bp++ = (unsigned char)*bp;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1122 *screen_bp++ = ScreenAttrib;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1123 if (termscript)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1124 fputc (*bp, termscript);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1125 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1126
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1127 /* Now copy the bytes not consumed by the encoding. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1128 if (chlen > 0)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1129 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1130 buf += coding->consumed;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1131 while (chlen--)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1132 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1133 if (termscript)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1134 fputc (*buf, termscript);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1135 *screen_bp++ = (unsigned char)*buf++;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1136 *screen_bp++ = ScreenAttrib;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1137 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1138 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1139
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1140 /* Update STR and its remaining length. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1141 str++;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1142 sl--;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1143 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1144 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1145 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1146
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1147 /* Dump whatever is left in the screen buffer. */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1148 mouse_off_maybe ();
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1149 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
1150 if (screen_virtual_segment)
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1151 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
1152 new_pos_X += (screen_bp - screen_buf) / 2;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1153
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1154 /* We may have to output some codes to terminate the writing. */
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1155 if (CODING_REQUIRE_FLUSHING (coding))
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1156 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1157 coding->mode |= CODING_MODE_LAST_BLOCK;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1158 encode_coding (coding, "", conversion_buffer, 0, conversion_buffer_size);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1159 if (coding->produced > 0)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1160 {
27775
5e0dd203f6e1 (IT_write_glyphs): Allocate a larger screen_buf as data
Eli Zaretskii <eliz@gnu.org>
parents: 27640
diff changeset
1161 screen_buf = alloca (coding->produced * 2);
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1162 for (screen_bp = screen_buf, bp = conversion_buffer;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1163 coding->produced--; bp++)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1164 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1165 *screen_bp++ = (unsigned char)*bp;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1166 *screen_bp++ = ScreenAttrib;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1167 if (termscript)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1168 fputc (*bp, termscript);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1169 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1170 offset += screen_bp - screen_buf;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1171 mouse_off_maybe ();
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1172 dosmemput (screen_buf, screen_bp - screen_buf,
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1173 (int)ScreenPrimary + offset);
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1174 if (screen_virtual_segment)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1175 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
1176 new_pos_X += (screen_bp - screen_buf) / 2;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1177 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1178 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1179 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1180
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1181 /************************************************************************
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1182 Mouse Highlight (and friends..)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1183 ************************************************************************/
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1184
44359
ff9f7aee02c8 Rename autoselect_window_p to mouse_autoselect_window.
Pavel Janík <Pavel@Janik.cz>
parents: 44337
diff changeset
1185 /* 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
1186 static Lisp_Object last_mouse_window;
bcefd6f01283 (last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43357
diff changeset
1187
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1188 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
1189
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1190 /* 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
1191 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
1192 static void
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1193 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
1194 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1195 /* 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
1196 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
1197 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
1198 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
1199 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
1200 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
1201 }
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 /* 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
1204 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
1205 static void
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1206 show_mouse_face (struct display_info *dpyinfo, int hl)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1207 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1208 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
1209 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
1210 int i;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1211 struct face *fp;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1212
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1213
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1214 /* 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
1215 doing anything. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1216 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
1217 goto set_cursor_shape;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1218
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1219 /* 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
1220 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
1221 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
1222 goto set_cursor_shape;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1223
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1224 /* 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
1225 if (hl > 0)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1226 {
43371
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
1227 if (dpyinfo->mouse_face_hidden)
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
1228 goto set_cursor_shape;
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
1229
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1230 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
1231 if (!fp)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1232 goto set_cursor_shape;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1233 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1234
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1235 /* 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
1236 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
1237 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
1238 i++)
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 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
1241 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
1242
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1243 /* 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
1244 if (!row->enabled_p)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1245 continue;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1246
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1247 /* 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
1248 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
1249 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
1250 else
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1251 start_hpos = 0;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1252
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1253 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
1254 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
1255 else
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1256 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
1257
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1258 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
1259 continue;
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1260 /* 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
1261 mouse-face. */
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1262 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
1263 if (hl > 0)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1264 {
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1265 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
1266 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
1267 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
1268 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
1269 int start_offset = offset;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1270
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1271 if (termscript)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1272 fprintf (termscript, "\n<MH+ %d-%d:%d>",
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1273 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
1274
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1275 mouse_off ();
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1276 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
1277 /* 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
1278 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
1279 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
1280 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
1281 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
1282 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
1283 _farsetsel (_dos_ds);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1284 while (nglyphs--)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1285 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1286 _farnspokeb (offset, ScreenAttrib);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1287 offset += 2;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1288 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1289 if (screen_virtual_segment)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1290 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
1291 mouse_on ();
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1292 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1293 else
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 /* 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
1296 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
1297 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
1298 behind our back. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1299 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
1300 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
1301
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1302 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
1303 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
1304
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1305 /* 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
1306 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
1307 the highlight region. */
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1308 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
1309 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
1310
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1311 if (termscript)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1312 fprintf (termscript, "<MH- %d-%d:%d>",
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1313 new_pos_X, new_pos_X + nglyphs - 1, new_pos_Y);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1314 IT_write_glyphs (row->glyphs[TEXT_AREA] + start_hpos, nglyphs);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1315 if (termscript)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1316 fputs ("\n", termscript);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1317 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
1318 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
1319 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1320 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1321
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1322 set_cursor_shape:
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1323 /* 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
1324 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
1325 }
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 /* 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
1328 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
1329 static void
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1330 clear_mouse_face (struct display_info *dpyinfo)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1331 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1332 if (! NILP (dpyinfo->mouse_face_window))
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1333 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
1334
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1335 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
1336 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
1337 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
1338 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1339
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1340 /* 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
1341 *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
1342 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
1343 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
1344 static int
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1345 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
1346 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1347 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
1348 int yb = window_text_bottom_y (w);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1349 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
1350
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1351 while (row->y < yb)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1352 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1353 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
1354 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
1355 else
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1356 line_start_position = 0;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1357
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1358 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
1359 break;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1360 /* 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
1361 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
1362 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
1363 && 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
1364 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1365 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
1366 break;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1367 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1368 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
1369 best_row = row;
34483
eccf7d43bead (fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents: 32730
diff changeset
1370
eccf7d43bead (fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents: 32730
diff changeset
1371 /* 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
1372 never-never land... */
eccf7d43bead (fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents: 32730
diff changeset
1373 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
1374 break;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1375
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1376 ++row;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1377 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1378
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1379 /* 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
1380 lastcol = 0;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1381 row = best_row;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1382 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
1383 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1384 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
1385 int charpos;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1386
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1387 charpos = glyph->charpos;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1388 if (charpos == pos)
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 *hpos = i;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1391 *vpos = row->y;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1392 return 1;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1393 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1394 else if (charpos > pos)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1395 break;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1396 else if (charpos > 0)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1397 lastcol = i;
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
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1400 /* 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
1401 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
1402 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
1403 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
1404 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1405 ++row;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1406 lastcol = 0;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1407 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1408
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1409 *vpos = row->y;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1410 *hpos = lastcol + 1;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1411 return 0;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1412 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1413
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1414 /* 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
1415 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
1416 mode line. X is relative to the start of the text display area of
41122
2483cab4d6d8 Fringe cleanup.
Kim F. Storm <storm@cua.dk>
parents: 40656
diff changeset
1417 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
1418 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
1419 static void
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1420 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
1421 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1422 struct frame *f = XFRAME (w->frame);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1423 struct display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1424 struct glyph_row *row;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1425
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1426 if (mode_line_p)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1427 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
1428 else
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1429 row = MATRIX_HEADER_LINE_ROW (w->current_matrix);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1430
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1431 if (row->enabled_p)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1432 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1433 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
1434 struct glyph *glyph, *end;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1435 Lisp_Object help, map;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1436
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1437 /* Find the glyph under X. */
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1438 glyph = (row->glyphs[TEXT_AREA]
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1439 + x
52315
0406b386ca35 Comment-only change.
Eli Zaretskii <eliz@gnu.org>
parents: 52308
diff changeset
1440 /* 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
1441 - 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
1442 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
1443 if (glyph < end
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1444 && 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
1445 && 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
1446 && 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
1447 && 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
1448 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1449 /* 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
1450 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
1451 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
1452 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
1453 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
1454 if (!NILP (help))
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1455 {
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
1456 help_echo_string = help;
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1457 XSETWINDOW (help_echo_window, w);
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1458 help_echo_object = glyph->object;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1459 help_echo_pos = glyph->charpos;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1460 }
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1461 }
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 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1464
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1465 /* 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
1466 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
1467 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
1468 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
1469 static void
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1470 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
1471 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1472 struct 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
1473 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
1474 Lisp_Object window;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1475 struct window *w;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1476
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1477 /* 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
1478 if (mouse_preempted)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1479 return;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1480
43371
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
1481 if (NILP (Vmouse_highlight)
28008
5b87cdbef5a8 (IT_note_mouse_highlight): Return immediately if frame's
Eli Zaretskii <eliz@gnu.org>
parents: 27775
diff changeset
1482 || !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
1483 return;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1484
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1485 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
1486 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
1487 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
1488
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1489 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
1490 return;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1491
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1492 if (gc_in_progress)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1493 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1494 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
1495 return;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1496 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1497
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1498 /* Which window is that in? */
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1499 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
1500
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1501 /* 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
1502 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
1503 clear_mouse_face (dpyinfo);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1504
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1505 /* 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
1506 if (!WINDOWP (window))
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1507 return;
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 /* 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
1510 w = XWINDOW (window);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1511
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
1512 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
1513 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1514 /* 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
1515 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
1516 return;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1517 }
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1518
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1519 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
1520
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1521 /* 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
1522 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
1523 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
1524 && 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
1525 && 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
1526 && (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
1527 == 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
1528 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1529 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
1530 struct glyph_row *row;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1531 struct glyph *glyph;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1532
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1533 /* 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
1534 glyph = NULL;
34483
eccf7d43bead (fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents: 32730
diff changeset
1535 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
1536 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1537 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
1538 /* 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
1539 not enabled. */
eccf7d43bead (fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents: 32730
diff changeset
1540 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
1541 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
1542 break;
eccf7d43bead (fast_find_position): Don't overstep the last window row.
Eli Zaretskii <eliz@gnu.org>
parents: 32730
diff changeset
1543 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
1544 && row->displays_text_p
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1545 && 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
1546 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1547 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
1548 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
1549 glyph = NULL;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1550 else
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1551 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1552 glyph += x;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1553 if (!BUFFERP (glyph->object))
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1554 glyph = NULL;
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 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1557 }
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 /* 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
1560 if (glyph == NULL)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1561 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1562 clear_mouse_face (dpyinfo);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1563 return;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1564 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1565
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1566 if (!BUFFERP (glyph->object))
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1567 abort ();
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1568 pos = glyph->charpos;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1569
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1570 /* 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
1571 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1572 extern Lisp_Object Qmouse_face;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1573 Lisp_Object mouse_face, overlay, position, *overlay_vec;
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1574 int len, noverlays, obegv, ozv;;
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1575 struct buffer *obuf;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1576
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1577 /* 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
1578 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
1579 return;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1580
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1581 /* 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
1582 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
1583 obuf = current_buffer;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1584 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
1585 obegv = BEGV;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1586 ozv = ZV;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1587 BEGV = BEG;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1588 ZV = Z;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1589
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1590 /* 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
1591 XSETINT (position, pos);
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 /* Put all the overlays we want in a vector in overlay_vec.
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1594 Store the length in len. If there are more than 10, make
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1595 enough space for all, and try again. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1596 len = 10;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1597 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
30725
a5e7ece45cf0 (IT_note_mouse_highlight): Update the calls to overlays_at.
Eli Zaretskii <eliz@gnu.org>
parents: 30711
diff changeset
1598 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL, 0);
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1599 if (noverlays > len)
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1600 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1601 len = noverlays;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1602 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
30725
a5e7ece45cf0 (IT_note_mouse_highlight): Update the calls to overlays_at.
Eli Zaretskii <eliz@gnu.org>
parents: 30711
diff changeset
1603 noverlays = overlays_at (pos,
a5e7ece45cf0 (IT_note_mouse_highlight): Update the calls to overlays_at.
Eli Zaretskii <eliz@gnu.org>
parents: 30711
diff changeset
1604 0, &overlay_vec, &len, NULL, NULL, 0);
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1605 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1606
30381
ace34a073127 (IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents: 30341
diff changeset
1607 /* 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
1608 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
1609
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1610 /* Check mouse-face highlighting. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1611 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
1612 && 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
1613 && 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
1614 && (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
1615 || 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
1616 && (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
1617 || 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
1618 || 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
1619 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1620 /* 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
1621 clear_mouse_face (dpyinfo);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1622
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1623 /* 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
1624 overlay = Qnil;
30381
ace34a073127 (IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents: 30341
diff changeset
1625 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
1626 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1627 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
1628 if (!NILP (mouse_face))
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1629 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1630 overlay = overlay_vec[i];
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1631 break;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1632 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1633 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1634
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1635 /* 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
1636 if (NILP (overlay))
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1637 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
1638 w->buffer);
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 /* Handle the overlay case. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1641 if (! NILP (overlay))
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1642 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1643 /* 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
1644 should be active. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1645 Lisp_Object before, after;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1646 int ignore;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1647
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1648 before = Foverlay_start (overlay);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1649 after = Foverlay_end (overlay);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1650 /* 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
1651 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
1652 &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
1653 &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
1654 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
1655 = !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
1656 &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
1657 &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
1658 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
1659 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
1660 = 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
1661 &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
1662 !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
1663
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1664 /* Display it as active. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1665 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
1666 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1667 /* 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
1668 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
1669 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1670 /* 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
1671 should be active. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1672 Lisp_Object before, after, beginning, end;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1673 int ignore;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1674
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1675 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
1676 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
1677 - 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
1678 before
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1679 = 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
1680 Qmouse_face,
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1681 w->buffer, beginning);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1682 after
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1683 = 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
1684 w->buffer, end);
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1685 /* 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
1686 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
1687 &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
1688 &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
1689 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
1690 = !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
1691 &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
1692 &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
1693 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
1694 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
1695 = 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
1696 &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
1697 !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
1698
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1699 /* Display it as active. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1700 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
1701 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1702 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1703
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1704 /* 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
1705 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1706 Lisp_Object help;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1707 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
1708
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1709 /* Check overlays first. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1710 help = Qnil;
30381
ace34a073127 (IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents: 30341
diff changeset
1711 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
1712 {
ace34a073127 (IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents: 30341
diff changeset
1713 overlay = overlay_vec[i];
ace34a073127 (IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents: 30341
diff changeset
1714 help = Foverlay_get (overlay, Qhelp_echo);
ace34a073127 (IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents: 30341
diff changeset
1715 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1716
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1717 if (!NILP (help))
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1718 {
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
1719 help_echo_string = help;
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1720 help_echo_window = window;
30381
ace34a073127 (IT_note_mouse_highlight): Process overlays in the
Eli Zaretskii <eliz@gnu.org>
parents: 30341
diff changeset
1721 help_echo_object = overlay;
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1722 help_echo_pos = pos;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1723 }
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1724 /* Try text properties. */
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1725 else if (NILP (help)
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1726 && ((STRINGP (glyph->object)
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1727 && 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
1728 && 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
1729 || (BUFFERP (glyph->object)
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1730 && glyph->charpos >= BEGV
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1731 && glyph->charpos < ZV)))
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1732 {
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1733 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
1734 Qhelp_echo, glyph->object);
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1735 if (!NILP (help))
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1736 {
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
1737 help_echo_string = help;
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1738 help_echo_window = window;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1739 help_echo_object = glyph->object;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1740 help_echo_pos = glyph->charpos;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1741 }
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
1742 }
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1743 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1744
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1745 BEGV = obegv;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1746 ZV = ozv;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1747 current_buffer = obuf;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1748 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1749 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1750 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1751
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1752 static void
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1753 IT_clear_end_of_line (int first_unused)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1754 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1755 char *spaces, *sp;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1756 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
1757 extern int fatal_error_in_progress;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
1758
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1759 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
1760 return;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1761
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
1762 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
1763 i = (j = first_unused - new_pos_X) * 2;
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
1764 if (termscript)
27462
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
1765 fprintf (termscript, "<CLR:EOL[%d..%d)>", new_pos_X, first_unused);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1766 spaces = sp = alloca (i);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
1767
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1768 while (--j >= 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1769 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1770 *sp++ = ' ';
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1771 *sp++ = ScreenAttrib;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1772 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1773
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1774 mouse_off_maybe ();
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
1775 dosmemput (spaces, i, (int)ScreenPrimary + offset);
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
1776 if (screen_virtual_segment)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
1777 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
1778
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1779 /* 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
1780 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
1781 new_pos_X = first_unused;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1782 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1783
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1784 static void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1785 IT_clear_screen (void)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1786 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1787 if (termscript)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1788 fprintf (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
1789 /* 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
1790 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
1791 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
1792 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
1793 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
1794 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
1795 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
1796 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
1797 else
9ba7c0fd50b7 (IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents: 41122
diff changeset
1798 IT_set_face (0);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1799 mouse_off ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1800 ScreenClear ();
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
1801 if (screen_virtual_segment)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
1802 dosv_refresh_virtual_screen (0, screen_size);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1803 new_pos_X = new_pos_Y = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1804 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1805
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1806 static void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1807 IT_clear_to_end (void)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1808 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1809 if (termscript)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1810 fprintf (termscript, "<CLR:EOS>");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1811
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1812 while (new_pos_Y < screen_size_Y) {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1813 new_pos_X = 0;
27462
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
1814 IT_clear_end_of_line (screen_size_X);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1815 new_pos_Y++;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1816 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1817 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1818
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1819 static void
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1820 IT_cursor_to (int y, int x)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1821 {
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
1822 if (termscript)
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
1823 fprintf (termscript, "\n<XY=%dx%d>", x, y);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1824 new_pos_X = x;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1825 new_pos_Y = y;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1826 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1827
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1828 static int cursor_cleared;
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1829
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
1830 static void
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1831 IT_display_cursor (int on)
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1832 {
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1833 if (on && cursor_cleared)
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1834 {
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1835 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
1836 cursor_cleared = 0;
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1837 }
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1838 else if (!on && !cursor_cleared)
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1839 {
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1840 ScreenSetCursor (-1, -1);
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1841 cursor_cleared = 1;
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1842 }
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1843 }
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1844
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1845 /* 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
1846 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
1847 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
1848 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
1849 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
1850 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
1851 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
1852 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
1853 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
1854 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
1855
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1856 `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
1857 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
1858 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
1859 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
1860
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1861 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
1862 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
1863
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1864 static void
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1865 IT_cmgoto (FRAME_PTR f)
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1866 {
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1867 /* 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
1868 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
1869 int update_cursor_pos = 1; /* MODIFF == unchanged_modified; */
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1870
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1871 /* 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
1872 removed. */
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1873 #if 0
23156
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1874 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
1875
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1876 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
1877
23156
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1878 /* 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
1879 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
1880 C-g in the minibuffer. */
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1881 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
1882 previous_pos_X = -1;
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1883 /* 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
1884 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
1885 if (!update_cursor_pos
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
1886 && 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
1887 {
23156
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1888 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
1889
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1890 if (echo_area_glyphs)
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1891 {
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1892 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
1893 /* 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
1894 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
1895 of previous cursor position. */
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1896 if (previous_pos_X == -1)
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1897 ScreenGetCursor (&dummy, &previous_pos_X);
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1898 }
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1899 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
1900 {
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1901 /* 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
1902 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
1903 tem_X = previous_pos_X;
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1904 previous_pos_X = -1;
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1905 }
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1906
e080ad3cc739 (IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents: 23011
diff changeset
1907 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
1908 {
9b39197e9ecd (IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents: 22481
diff changeset
1909 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
1910 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
1911 }
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1912 }
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
1913 #endif
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1914
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1915 if (update_cursor_pos
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1916 && (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
1917 {
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1918 ScreenSetCursor (current_pos_Y = new_pos_Y, current_pos_X = new_pos_X);
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1919 if (termscript)
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1920 fprintf (termscript, "\n<CURSOR:%dx%d>", current_pos_X, current_pos_Y);
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1921 }
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1922
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1923 /* 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
1924 IT_display_cursor (1);
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1925
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1926 /* 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
1927 keyboard input. */
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1928 if (!mouse_visible)
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1929 mouse_on ();
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1930 }
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
1931
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1932 static void
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1933 IT_update_begin (struct frame *f)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
1934 {
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1935 struct 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
1936 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
1937
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1938 BLOCK_INPUT;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1939
30826
f225a6bd06fc (IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents: 30725
diff changeset
1940 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
1941 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1942 /* 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
1943 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
1944
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1945 /* 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
1946 highlighting. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1947 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
1948 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
1949
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1950 /* 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
1951 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
1952 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
1953 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
1954 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
1955 && 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
1956 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1957 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
1958 int i;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1959
27046
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1960 /* 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
1961 (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
1962 unconditionally. */
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1963 if (NILP (w->buffer))
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1964 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
1965 else
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1966 {
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1967 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
1968 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
1969 && 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
1970 break;
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1971 }
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1972
872992e41f21 (IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents: 27038
diff changeset
1973 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
1974 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
1975 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1976 }
30826
f225a6bd06fc (IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents: 30725
diff changeset
1977 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
1978 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1979 /* 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
1980 highlight info. */
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1981 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
1982 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
1983 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
1984 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
1985 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
1986 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1987
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1988 UNBLOCK_INPUT;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1989 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1990
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
1991 static void
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1992 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
1993 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1994 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
1995 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1996
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1997 static void
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
1998 IT_frame_up_to_date (struct frame *f)
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
1999 {
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2000 struct display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
28553
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2001 Lisp_Object new_cursor, frame_desired_cursor;
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2002 struct window *sw;
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2003
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2004 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
2005 || (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
2006 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2007 BLOCK_INPUT;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2008 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
2009 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
2010 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
2011 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
2012 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
2013 UNBLOCK_INPUT;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2014 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2015
28553
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2016 /* 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
2017 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
2018 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
2019 frame parameters. For the selected window, we use either its
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2020 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
2021 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
2022 sw = XWINDOW (f->selected_window);
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2023 frame_desired_cursor = Fcdr (Fassq (Qcursor_type, f->param_alist));
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2024 if (cursor_in_echo_area
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2025 && FRAME_HAS_MINIBUF_P (f)
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2026 && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window)
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2027 && sw == XWINDOW (echo_area_window))
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2028 new_cursor = frame_desired_cursor;
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2029 else
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2030 {
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2031 struct buffer *b = XBUFFER (sw->buffer);
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2032
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2033 if (EQ (b->cursor_type, Qt))
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2034 new_cursor = frame_desired_cursor;
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2035 else if (NILP (b->cursor_type)) /* nil means no cursor */
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2036 new_cursor = Fcons (Qbar, make_number (0));
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2037 else
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2038 new_cursor = b->cursor_type;
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2039 }
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2040
56d5ca61cfd8 (NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents: 28227
diff changeset
2041 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
2042
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2043 IT_cmgoto (f); /* position cursor when update is done */
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2044 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2045
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2046 /* 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
2047 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
2048 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
2049 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
2050 static void
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2051 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
2052 {
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2053 /* 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
2054 conventional memorty selector. */
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2055 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
2056 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
2057
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2058 if (from == to || len <= 0)
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2059 return;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2060
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2061 _farsetsel (_dos_ds);
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2062
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2063 /* 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
2064 glyphs non-destructively. */
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2065 if (from > to)
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2066 {
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2067 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
2068 _farnspokew (to, _farnspeekw (from));
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2069 }
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2070 else
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2071 {
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2072 from += (len - 1) * 2;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2073 to += (len - 1) * 2;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2074 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
2075 _farnspokew (to, _farnspeekw (from));
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2076 }
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2077 if (screen_virtual_segment)
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2078 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
2079 }
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2080
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2081 /* Insert and delete glyphs. */
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2082 static void
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2083 IT_insert_glyphs (start, len)
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2084 register struct glyph *start;
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2085 register int len;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2086 {
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2087 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
2088
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2089 /* 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
2090 end of this line. */
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2091 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
2092
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2093 /* Now write the glyphs to be inserted. */
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2094 IT_write_glyphs (start, len);
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2095 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2096
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2097 static void
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2098 IT_delete_glyphs (n)
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2099 register int n;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2100 {
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2101 abort ();
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2102 }
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2103
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2104 /* 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
2105 void
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2106 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
2107 struct frame *f;
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2108 Lisp_Object value, oldval;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2109 {
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2110 set_menu_bar_lines (f, value, oldval);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2111 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2112
32271
4ff70fe0d99b (top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents: 30840
diff changeset
2113 /* This was copied from xfaces.c */
4ff70fe0d99b (top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents: 30840
diff changeset
2114
4ff70fe0d99b (top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents: 30840
diff changeset
2115 extern Lisp_Object Qbackground_color;
4ff70fe0d99b (top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents: 30840
diff changeset
2116 extern Lisp_Object Qforeground_color;
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2117 Lisp_Object Qreverse;
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2118 extern Lisp_Object Qtitle;
15387
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2119
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
2120 /* 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
2121 resumed, and whenever the screen is redrawn! */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2122
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
2123 static void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2124 IT_set_terminal_modes (void)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2125 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2126 if (termscript)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2127 fprintf (termscript, "\n<SET_TERM>");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2128
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2129 screen_size_X = ScreenCols ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2130 screen_size_Y = ScreenRows ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2131 screen_size = screen_size_X * screen_size_Y;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2132
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2133 new_pos_X = new_pos_Y = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2134 current_pos_X = current_pos_Y = -1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2135
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2136 if (term_setup_done)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2137 return;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2138 term_setup_done = 1;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2139
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2140 startup_screen_size_X = screen_size_X;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2141 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
2142 startup_screen_attrib = ScreenAttrib;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2143
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2144 #if __DJGPP__ > 1
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2145 /* 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
2146 the screen) installed? */
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2147 {
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2148 unsigned short es_value;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2149 __dpmi_regs regs;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2150
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2151 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
2152 if (ScreenPrimary == 0xb0000UL || ScreenPrimary == 0xb8000UL)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2153 regs.x.es = (ScreenPrimary >> 4) & 0xffff;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2154 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
2155 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
2156 else
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2157 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
2158 regs.x.di = 0;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2159 es_value = regs.x.es;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2160 __dpmi_int (0x10, &regs);
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2161
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2162 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
2163 {
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2164 /* 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
2165 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
2166 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
2167 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
2168 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
2169 screen_old_address = ScreenPrimary;
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2170 screen_virtual_segment = regs.x.es;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2171 screen_virtual_offset = regs.x.di;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2172 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
2173 }
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2174 }
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2175 #endif /* __DJGPP__ > 1 */
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2176
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2177 ScreenGetCursor (&startup_pos_Y, &startup_pos_X);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2178 ScreenRetrieve (startup_screen_buffer = xmalloc (screen_size * 2));
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2180 if (termscript)
13717
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2181 fprintf (termscript, "<SCREEN SAVED (dimensions=%dx%d)>\n",
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2182 screen_size_X, screen_size_Y);
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2183
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2184 bright_bg ();
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2185 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2186
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
2187 /* 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
2188 suspended or killed. */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2189
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
2190 static void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2191 IT_reset_terminal_modes (void)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2192 {
13717
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2193 int display_row_start = (int) ScreenPrimary;
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2194 int saved_row_len = startup_screen_size_X * 2;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2195 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
2196 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
2197 unsigned char *saved_row = startup_screen_buffer;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2198 int cursor_pos_X = ScreenCols () - 1, cursor_pos_Y = ScreenRows () - 1;
13717
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2199
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2200 if (termscript)
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2201 fprintf (termscript, "\n<RESET_TERM>");
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2202
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2203 if (!term_setup_done)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2204 return;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2205
13717
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2206 mouse_off ();
16837
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
2207
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
2208 /* 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
2209 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
2210 maybe_enable_blinking ();
23815
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2211
13717
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2212 /* We have a situation here.
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2213 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
2214 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
2215 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
2216 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
2217 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
2218 `startup_screen_buffer'.
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2219 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
2220 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
2221 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
2222 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
2223
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2224 ScreenAttrib = startup_screen_attrib;
23815
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2225
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2226 /* 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
2227 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
2228 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
2229 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
2230 {
23815
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2231 ScreenClear ();
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2232 if (screen_virtual_segment)
23815
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2233 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
2234
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2235 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
2236 update_row_len = saved_row_len;
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2237 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
2238 current_rows = startup_screen_size_Y;
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2239
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2240 if (termscript)
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2241 fprintf (termscript, "<SCREEN RESTORED (dimensions=%dx%d)>\n",
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2242 update_row_len / 2, current_rows);
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2243
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2244 while (current_rows--)
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2245 {
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2246 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
2247 if (screen_virtual_segment)
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2248 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
2249 update_row_len / 2);
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2250 saved_row += saved_row_len;
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2251 display_row_start += to_next_row;
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
2252 }
13717
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2253 }
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2254 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
2255 cursor_pos_X = startup_pos_X;
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2256 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
2257 cursor_pos_Y = startup_pos_Y;
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2258
d7bb4093a950 (IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents: 13714
diff changeset
2259 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
2260 xfree (startup_screen_buffer);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2261
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2262 term_setup_done = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2263 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2264
21785
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
2265 static void
c7ef8b48a039 (IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents: 21693
diff changeset
2266 IT_set_terminal_window (int foo)
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2267 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2268 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2269
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2270 /* 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
2271 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
2272 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
2273 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
2274 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
2275 (frame)
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2276 Lisp_Object frame;
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2277 {
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2278 struct frame *f;
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2279
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40082
diff changeset
2280 CHECK_FRAME (frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2281 f= XFRAME (frame);
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2282
36483
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2283 /* 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
2284 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
2285 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
2286 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
2287 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
2288 {
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2289 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
2290 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
2291 }
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2292 else
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2293 {
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2294 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
2295 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
2296 }
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2297 }
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2298
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2299 void
15387
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2300 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
2301 struct frame *f;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2302 Lisp_Object alist;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2303 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2304 Lisp_Object tail;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2305 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
2306 Lisp_Object *parms
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2307 = (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
2308 Lisp_Object *values
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2309 = (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
2310 /* 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
2311 int reverse = EQ (Fcdr (Fassq (Qreverse, f->param_alist)), Qt);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2312 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
2313 int redraw = 0, fg_set = 0, bg_set = 0;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2314 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
2315 Lisp_Object frame_bg, frame_fg;
32337
a9dbff7d4142 Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 32335
diff changeset
2316 extern Lisp_Object Qdefault, QCforeground, QCbackground;
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2317
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2318 /* 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
2319 used for the initial frame. */
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2320 if (alist == Vdefault_frame_alist
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2321 && 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
2322 {
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2323 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
2324 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
2325 }
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2326 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
2327 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
2328 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
2329 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
2330 /* 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
2331 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
2332 Fmake_terminal_frame. */
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2333 if (NILP (frame_fg))
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2334 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
2335 if (NILP (frame_bg))
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2336 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
2337
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2338 /* 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
2339 i = 0;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2340 for (tail = alist; CONSP (tail); tail = Fcdr (tail))
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2341 {
19293
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2342 Lisp_Object elt;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2343
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2344 elt = Fcar (tail);
19293
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2345 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
2346 CHECK_SYMBOL (parms[i]);
19293
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2347 values[i] = Fcdr (elt);
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2348 i++;
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2349 }
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2350
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2351 j = i;
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2352
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2353 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
2354 {
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2355 Lisp_Object prop, val;
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2356
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2357 prop = parms[i];
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2358 val = values[i];
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2359
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2360 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
2361 reverse = EQ (val, Qt);
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2362 }
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2363
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2364 need_to_reverse = reverse && !was_reverse;
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2365 if (termscript && need_to_reverse)
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2366 fprintf (termscript, "<INVERSE-VIDEO>\n");
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2367
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2368 /* 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
2369 for (i--; i >= 0; i--)
af78882332ed (IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents: 19287
diff changeset
2370 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2371 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
2372
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2373 prop = parms[i];
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2374 val = values[i];
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2375
19864
44dcf37ec345 (syms_of_msdos): Intern background-color and
Richard M. Stallman <rms@gnu.org>
parents: 19603
diff changeset
2376 if (EQ (prop, Qforeground_color))
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2377 {
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2378 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
2379 ? LFACE_BACKGROUND_INDEX
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2380 : 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
2381 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
2382 && 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
2383 && new_color != FACE_TTY_DEFAULT_BG_COLOR)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2384 {
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2385 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
2386 /* 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
2387 frame is changed as well. */
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2388 XSETFRAME (frame, f);
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2389 if (need_to_reverse)
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2390 {
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2391 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
2392 val, frame);
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2393 prop = Qbackground_color;
36483
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2394 bg_set = 1;
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2395 }
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2396 else
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2397 {
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2398 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
2399 val, frame);
36483
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2400 fg_set = 1;
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2401 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2402 redraw = 1;
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2403 if (termscript)
16915
8d28d96f6031 (run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents: 16872
diff changeset
2404 fprintf (termscript, "<FGCOLOR %lu>\n", new_color);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2405 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2406 }
19864
44dcf37ec345 (syms_of_msdos): Intern background-color and
Richard M. Stallman <rms@gnu.org>
parents: 19603
diff changeset
2407 else if (EQ (prop, Qbackground_color))
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2408 {
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2409 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
2410 ? LFACE_FOREGROUND_INDEX
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2411 : 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
2412 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
2413 && 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
2414 && new_color != FACE_TTY_DEFAULT_BG_COLOR)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2415 {
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2416 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
2417 /* 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
2418 frame is changed as well. */
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2419 XSETFRAME (frame, f);
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2420 if (need_to_reverse)
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2421 {
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2422 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
2423 val, frame);
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2424 prop = Qforeground_color;
36483
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2425 fg_set = 1;
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2426 }
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2427 else
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2428 {
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2429 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
2430 val, frame);
36483
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2431 bg_set = 1;
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2432 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2433 redraw = 1;
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2434 if (termscript)
16915
8d28d96f6031 (run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents: 16872
diff changeset
2435 fprintf (termscript, "<BGCOLOR %lu>\n", new_color);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2436 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2437 }
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2438 else if (EQ (prop, Qtitle))
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2439 {
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2440 x_set_title (f, val);
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2441 if (termscript)
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46272
diff changeset
2442 fprintf (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
2443 }
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2444 else if (EQ (prop, Qcursor_type))
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2445 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2446 IT_set_cursor_type (f, val);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2447 if (termscript)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2448 fprintf (termscript, "<CTYPE: %s>\n",
44695
7a20e252e50a (Qhbar): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 44528
diff changeset
2449 EQ (val, Qbar) || EQ (val, Qhbar)
7a20e252e50a (Qhbar): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 44528
diff changeset
2450 || CONSP (val) && (EQ (XCAR (val), Qbar)
7a20e252e50a (Qhbar): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 44528
diff changeset
2451 || EQ (XCAR (val), Qhbar))
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2452 ? "bar" : "box");
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
2453 }
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2454 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
2455 }
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2456
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2457 /* 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
2458 the current frame colors. */
32546
9672c4db6bed (IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents: 32337
diff changeset
2459 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
2460 {
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2461 Lisp_Object frame;
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2462
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2463 if (!fg_set)
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2464 {
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2465 XSETFRAME (frame, f);
36483
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2466 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
2467 tty_color_name (f, orig_bg),
32337
a9dbff7d4142 Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 32335
diff changeset
2468 frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2469 redraw = 1;
20036
65c394bb8b17 (mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents: 19871
diff changeset
2470 }
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2471 if (!bg_set)
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2472 {
32335
442188fbf8b5 (IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents: 32271
diff changeset
2473 XSETFRAME (frame, f);
36483
c3734c1b1362 (Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents: 34676
diff changeset
2474 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
2475 tty_color_name (f, orig_fg),
32337
a9dbff7d4142 Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 32335
diff changeset
2476 frame);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2477 redraw = 1;
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2478 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2479 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2480
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2481 if (redraw)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2482 {
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2483 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
2484 if (f == SELECTED_FRAME())
15387
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2485 redraw_frame (f);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2486 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2487 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2488
16915
8d28d96f6031 (run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents: 16872
diff changeset
2489 extern void init_frame_faces (FRAME_PTR);
8d28d96f6031 (run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents: 16872
diff changeset
2490
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2491 #endif /* !HAVE_X_WINDOWS */
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2492
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2493
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
2494 /* 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
2495
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2496 void
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2497 internal_terminal_init ()
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2498 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2499 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
2500 struct frame *sf = SELECTED_FRAME();
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2501
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2502 #ifdef HAVE_X_WINDOWS
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2503 if (!inhibit_window_system)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2504 return;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2505 #endif
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2506
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2507 internal_terminal
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2508 = (!noninteractive) && term && !strcmp (term, "internal");
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2509
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2510 if (getenv ("EMACSTEST"))
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2511 termscript = fopen (getenv ("EMACSTEST"), "wt");
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2512
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2513 #ifndef HAVE_X_WINDOWS
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2514 if (!internal_terminal || inhibit_window_system)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2515 {
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2516 sf->output_method = output_termcap;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2517 return;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2518 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2519
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2520 Vwindow_system = intern ("pc");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2521 Vwindow_system_version = make_number (1);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2522 sf->output_method = output_msdos_raw;
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2523
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2524 /* 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
2525 screen_old_address = 0;
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2526
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2527 /* 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
2528 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
2529
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2530 bzero (&the_only_x_display, sizeof the_only_x_display);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2531 the_only_x_display.background_pixel = 7; /* White */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2532 the_only_x_display.foreground_pixel = 0; /* Black */
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2533 bright_bg ();
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2534 colors = getenv ("EMACSCOLORS");
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2535 if (colors && strlen (colors) >= 2)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2536 {
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2537 /* 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
2538 if (isdigit (colors[0]))
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2539 colors[0] -= '0';
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2540 else if (isxdigit (colors[0]))
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2541 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
2542 if (colors[0] >= 0 && colors[0] < 16)
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
2543 the_only_x_display.foreground_pixel = colors[0];
15341
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2544 if (isdigit (colors[1]))
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2545 colors[1] -= '0';
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2546 else if (isxdigit (colors[1]))
8a0f5a5937e5 (bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents: 15222
diff changeset
2547 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
2548 if (colors[1] >= 0 && colors[1] < 16)
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
2549 the_only_x_display.background_pixel = colors[1];
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2550 }
13625
397f07418271 (internal_terminal_init): Initialize the_only_x_display.font.
Richard M. Stallman <rms@gnu.org>
parents: 13624
diff changeset
2551 the_only_x_display.font = (XFontStruct *)1; /* must *not* be zero */
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2552 the_only_x_display.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
2553 the_only_x_display.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
2554 the_only_x_display.display_info.mouse_face_beg_row =
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2555 the_only_x_display.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
2556 the_only_x_display.display_info.mouse_face_end_row =
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2557 the_only_x_display.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
2558 the_only_x_display.display_info.mouse_face_face_id = DEFAULT_FACE_ID;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2559 the_only_x_display.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
2560 the_only_x_display.display_info.mouse_face_mouse_x =
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2561 the_only_x_display.display_info.mouse_face_mouse_y = 0;
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2562 the_only_x_display.display_info.mouse_face_defer = 0;
43371
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
2563 the_only_x_display.display_info.mouse_face_hidden = 0;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
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 init_frame_faces (sf);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2566
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2567 ring_bell_hook = IT_ring_bell;
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2568 insert_glyphs_hook = IT_insert_glyphs;
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
2569 delete_glyphs_hook = IT_delete_glyphs;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2570 write_glyphs_hook = IT_write_glyphs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2571 cursor_to_hook = raw_cursor_to_hook = IT_cursor_to;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2572 clear_to_end_hook = IT_clear_to_end;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2573 clear_end_of_line_hook = IT_clear_end_of_line;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2574 clear_frame_hook = IT_clear_screen;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2575 update_begin_hook = IT_update_begin;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2576 update_end_hook = IT_update_end;
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
2577 frame_up_to_date_hook = IT_frame_up_to_date;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2578
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2579 /* These hooks are called by term.c without being checked. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2580 set_terminal_modes_hook = IT_set_terminal_modes;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2581 reset_terminal_modes_hook = IT_reset_terminal_modes;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2582 set_terminal_window_hook = IT_set_terminal_window;
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
2583 char_ins_del_ok = 0;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
2584 #endif
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2585 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2586
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2587 dos_get_saved_screen (screen, rows, cols)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2588 char **screen;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2589 int *rows;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2590 int *cols;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2591 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2592 #ifndef HAVE_X_WINDOWS
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2593 *screen = startup_screen_buffer;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2594 *cols = startup_screen_size_X;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2595 *rows = startup_screen_size_Y;
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
2596 return *screen != (char *)0;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2597 #else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2598 return 0;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2599 #endif
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2600 }
15387
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2601
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2602 #ifndef HAVE_X_WINDOWS
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2603
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2604 /* 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
2605 void
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2606 check_x (void)
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2607 {
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
2608 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
2609 error ("Not running under a window system");
15387
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2610 }
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2611
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2612 #endif
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
2613
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2614
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2615 /* ----------------------- Keyboard control ----------------------
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2616 *
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2617 * Keymaps reflect the following keyboard layout:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2618 *
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2619 * 0 1 2 3 4 5 6 7 8 9 10 11 12 BS
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2620 * TAB 15 16 17 18 19 20 21 22 23 24 25 26 (41)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2621 * CLOK 30 31 32 33 34 35 36 37 38 39 40 (41) RET
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2622 * SH () 45 46 47 48 49 50 51 52 53 54 SHIFT
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2623 * SPACE
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2624 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2625
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2626 #define Ignore 0x0000
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2627 #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
2628 #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
2629 #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
2630 #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
2631 #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
2632 #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
2633 #define Grey 0x6000 /* Grey keypad key */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2634
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2635 #define Alt 0x0100 /* alt scan-code */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2636 #define Ctrl 0x0200 /* ctrl scan-code */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2637 #define Shift 0x0400 /* shift scan-code */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2638
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2639 static int extended_kbd; /* 101 (102) keyboard present. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2640
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2641 struct kbd_translate {
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2642 unsigned char sc;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2643 unsigned char ch;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2644 unsigned short code;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2645 };
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2646
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2647 struct dos_keyboard_map
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2648 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2649 char *unshifted;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2650 char *shifted;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2651 char *alt_gr;
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2652 struct kbd_translate *translate_table;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2653 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2654
13040
169d50e2ee4c (gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents: 13020
diff changeset
2655
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2656 static struct dos_keyboard_map us_keyboard = {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2657 /* 0 1 2 3 4 5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2658 /* 01234567890123456789012345678901234567890 12345678901234 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2659 "`1234567890-= qwertyuiop[] asdfghjkl;'\\ zxcvbnm,./ ",
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2660 /* 0123456789012345678901234567890123456789 012345678901234 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2661 "~!@#$%^&*()_+ QWERTYUIOP{} ASDFGHJKL:\"| ZXCVBNM<>? ",
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2662 0, /* no Alt-Gr key */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2663 0 /* no translate table */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2664 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2665
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2666 static struct dos_keyboard_map fr_keyboard = {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2667 /* 0 1 2 3 4 5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2668 /* 012 3456789012345678901234567890123456789012345678901234 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2669 "ý&‚\",(-Š_€…)= azertyuiop^$ qsdfghjklm—* wxcvbnm;:! ",
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2670 /* 0123456789012345678901234567890123456789012345678901234 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2671 " 1234567890ø+ AZERTYUIOPùœ QSDFGHJKLM%æ WXCVBN?./õ ",
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2672 /* 01234567 89012345678901234567890123456789012345678901234 */
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2673 " ~#{[|`\\^@]} Ï ",
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2674 0 /* no translate table */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2675 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2676
21583
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2677 /*
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2678 * Italian keyboard support, country code 39.
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2679 * '<' 56:3c*0000
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2680 * '>' 56:3e*0000
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2681 * 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
2682 * 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
2683 */
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2684
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2685 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
2686 { 0x56, 0x3c, Normal | 13 },
5082c3adfa2f (dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents: 24560
diff changeset
2687 { 0x56, 0x3e, Normal | 27 },
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2688 { 0, 0, 0 }
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2689 };
21583
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2690 static struct dos_keyboard_map it_keyboard = {
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2691 /* 0 1 2 3 4 5 */
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2692 /* 0 123456789012345678901234567890123456789012345678901234 */
24566
5082c3adfa2f (dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents: 24560
diff changeset
2693 "\\1234567890'< qwertyuiopŠ+> asdfghjkl•…— zxcvbnm,.- ",
21583
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2694 /* 01 23456789012345678901234567890123456789012345678901234 */
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2695 "|!\"œ$%&/()=?^> QWERTYUIOP‚* ASDFGHJKL‡øõ ZXCVBNM;:_ ",
21583
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2696 /* 0123456789012345678901234567890123456789012345678901234 */
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2697 " {}~` [] @# ",
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2698 it_kbd_translate_table
21583
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2699 };
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2700
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2701 static struct dos_keyboard_map dk_keyboard = {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2702 /* 0 1 2 3 4 5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2703 /* 0123456789012345678901234567890123456789012345678901234 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2704 "«1234567890+| qwertyuiop†~ asdfghjkl‘›' zxcvbnm,.- ",
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2705 /* 01 23456789012345678901234567890123456789012345678901234 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2706 "õ!\"#$%&/()=?` QWERTYUIOP^ ASDFGHJKL’* ZXCVBNM;:_ ",
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2707 /* 0123456789012345678901234567890123456789012345678901234 */
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2708 " @œ$ {[]} | ",
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2709 0 /* no translate table */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2710 };
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2711
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2712 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
2713 { 0x73, 0x5c, Normal | 0 },
bb608cd1af6e (jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24559
diff changeset
2714 { 0x73, 0x5f, Normal | 0 },
24593
ffe7dfc452d7 (jp_kbd_translate_table): Fix the other \ key.
Eli Zaretskii <eliz@gnu.org>
parents: 24566
diff changeset
2715 { 0x73, 0x1c, Map | 0 },
24560
bb608cd1af6e (jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24559
diff changeset
2716 { 0x7d, 0x5c, Normal | 13 },
bb608cd1af6e (jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 24559
diff changeset
2717 { 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
2718 { 0x7d, 0x1c, Map | 13 },
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2719 { 0, 0, 0 }
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2720 };
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2721 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
2722 /* 0 1 2 3 4 5 */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2723 /* 0123456789012 345678901234567890123456789012345678901234 */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2724 "\\1234567890-^\\ qwertyuiop@[ asdfghjkl;:] zxcvbnm,./ ",
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2725 /* 01 23456789012345678901234567890123456789012345678901234 */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2726 "_!\"#$%&'()~=~| QWERTYUIOP`{ ASDFGHJKL+*} ZXCVBNM<>? ",
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2727 0, /* no Alt-Gr key */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2728 jp_kbd_translate_table
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2729 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2730
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2731 static struct keyboard_layout_list
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2732 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2733 int country_code;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2734 struct dos_keyboard_map *keyboard_map;
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2735 } keyboard_layout_list[] =
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2736 {
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2737 1, &us_keyboard,
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2738 33, &fr_keyboard,
21583
ba75380b39f7 (it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents: 21489
diff changeset
2739 39, &it_keyboard,
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2740 45, &dk_keyboard,
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2741 81, &jp_keyboard
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2742 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2743
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2744 static struct dos_keyboard_map *keyboard;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2745 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
2746 static int international_keyboard;
7523
8994727ff976 (gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents: 7507
diff changeset
2747
8994727ff976 (gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents: 7507
diff changeset
2748 int
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2749 dos_set_keyboard (code, always)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2750 int code;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2751 int always;
7523
8994727ff976 (gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents: 7507
diff changeset
2752 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2753 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
2754 _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
2755
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
2756 /* 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
2757 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
2758 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
2759 regs.x.ax = 0xad80;
23011
fe3128dafc96 (dos_set_keyboard): Set up stack and flags before
Eli Zaretskii <eliz@gnu.org>
parents: 22992
diff changeset
2760 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
2761 _go32_dpmi_simulate_int (0x2f, &regs);
16763
e4f0f7fe8304 (dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents: 16613
diff changeset
2762 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
2763 international_keyboard = 1;
13624
47484dd9a970 (dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents: 13520
diff changeset
2764
47484dd9a970 (dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents: 13520
diff changeset
2765 /* 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
2766 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
2767 keyboard_map_all = always;
47484dd9a970 (dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents: 13520
diff changeset
2768 dos_keyboard_layout = 1;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2769
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2770 for (i = 0; i < (sizeof (keyboard_layout_list)/sizeof (struct keyboard_layout_list)); i++)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2771 if (code == keyboard_layout_list[i].country_code)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2772 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2773 keyboard = keyboard_layout_list[i].keyboard_map;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2774 keyboard_map_all = always;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2775 dos_keyboard_layout = code;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2776 return 1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2777 }
7523
8994727ff976 (gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents: 7507
diff changeset
2778 return 0;
8994727ff976 (gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents: 7507
diff changeset
2779 }
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
2780
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2781 static struct
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2782 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2783 unsigned char char_code; /* normal code */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2784 unsigned char meta_code; /* M- code */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2785 unsigned char keypad_code; /* keypad code */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2786 unsigned char editkey_code; /* edit key */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2787 } keypad_translate_map[] = {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2788 '0', '0', 0xb0, /* kp-0 */ 0x63, /* insert */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2789 '1', '1', 0xb1, /* kp-1 */ 0x57, /* end */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2790 '2', '2', 0xb2, /* kp-2 */ 0x54, /* down */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2791 '3', '3', 0xb3, /* kp-3 */ 0x56, /* next */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2792 '4', '4', 0xb4, /* kp-4 */ 0x51, /* left */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2793 '5', '5', 0xb5, /* kp-5 */ 0xb5, /* kp-5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2794 '6', '6', 0xb6, /* kp-6 */ 0x53, /* right */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2795 '7', '7', 0xb7, /* kp-7 */ 0x50, /* home */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2796 '8', '8', 0xb8, /* kp-8 */ 0x52, /* up */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2797 '9', '9', 0xb9, /* kp-9 */ 0x55, /* prior */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2798 '.', '-', 0xae, /* kp-decimal */ 0xff /* delete */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2799 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2800
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2801 static struct
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2802 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2803 unsigned char char_code; /* normal code */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2804 unsigned char keypad_code; /* keypad code */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2805 } grey_key_translate_map[] = {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2806 '/', 0xaf, /* kp-decimal */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2807 '*', 0xaa, /* kp-multiply */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2808 '-', 0xad, /* kp-subtract */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2809 '+', 0xab, /* kp-add */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2810 '\r', 0x8d /* kp-enter */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2811 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2812
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2813 static unsigned short
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2814 ibmpc_translate_map[] =
13040
169d50e2ee4c (gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents: 13020
diff changeset
2815 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2816 /* --------------- 00 to 0f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2817 Normal | 0xff, /* Ctrl Break + Alt-NNN */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2818 Alt | ModFct | 0x1b, /* Escape */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2819 Normal | 1, /* '1' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2820 Normal | 2, /* '2' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2821 Normal | 3, /* '3' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2822 Normal | 4, /* '4' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2823 Normal | 5, /* '5' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2824 Normal | 6, /* '6' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2825 Normal | 7, /* '7' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2826 Normal | 8, /* '8' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2827 Normal | 9, /* '9' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2828 Normal | 10, /* '0' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2829 Normal | 11, /* '-' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2830 Normal | 12, /* '=' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2831 Special | 0x08, /* Backspace */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2832 ModFct | 0x74, /* Tab/Backtab */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2833
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2834 /* --------------- 10 to 1f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2835 Map | 15, /* 'q' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2836 Map | 16, /* 'w' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2837 Map | 17, /* 'e' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2838 Map | 18, /* 'r' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2839 Map | 19, /* 't' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2840 Map | 20, /* 'y' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2841 Map | 21, /* 'u' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2842 Map | 22, /* 'i' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2843 Map | 23, /* 'o' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2844 Map | 24, /* 'p' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2845 Map | 25, /* '[' */
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
2846 Map | 26, /* ']' */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2847 ModFct | 0x0d, /* Return */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2848 Ignore, /* Ctrl */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2849 Map | 30, /* 'a' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2850 Map | 31, /* 's' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2851
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2852 /* --------------- 20 to 2f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2853 Map | 32, /* 'd' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2854 Map | 33, /* 'f' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2855 Map | 34, /* 'g' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2856 Map | 35, /* 'h' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2857 Map | 36, /* 'j' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2858 Map | 37, /* 'k' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2859 Map | 38, /* 'l' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2860 Map | 39, /* ';' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2861 Map | 40, /* '\'' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2862 Map | 0, /* '`' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2863 Ignore, /* Left shift */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2864 Map | 41, /* '\\' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2865 Map | 45, /* 'z' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2866 Map | 46, /* 'x' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2867 Map | 47, /* 'c' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2868 Map | 48, /* 'v' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2869
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2870 /* --------------- 30 to 3f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2871 Map | 49, /* 'b' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2872 Map | 50, /* 'n' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2873 Map | 51, /* 'm' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2874 Map | 52, /* ',' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2875 Map | 53, /* '.' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2876 Map | 54, /* '/' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2877 Ignore, /* Right shift */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2878 Grey | 1, /* Grey * */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2879 Ignore, /* Alt */
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
2880 Normal | 55, /* ' ' */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2881 Ignore, /* Caps Lock */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2882 FctKey | 0xbe, /* F1 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2883 FctKey | 0xbf, /* F2 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2884 FctKey | 0xc0, /* F3 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2885 FctKey | 0xc1, /* F4 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2886 FctKey | 0xc2, /* F5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2887
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2888 /* --------------- 40 to 4f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2889 FctKey | 0xc3, /* F6 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2890 FctKey | 0xc4, /* F7 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2891 FctKey | 0xc5, /* F8 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2892 FctKey | 0xc6, /* F9 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2893 FctKey | 0xc7, /* F10 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2894 Ignore, /* Num Lock */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2895 Ignore, /* Scroll Lock */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2896 KeyPad | 7, /* Home */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2897 KeyPad | 8, /* Up */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2898 KeyPad | 9, /* Page Up */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2899 Grey | 2, /* Grey - */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2900 KeyPad | 4, /* Left */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2901 KeyPad | 5, /* Keypad 5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2902 KeyPad | 6, /* Right */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2903 Grey | 3, /* Grey + */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2904 KeyPad | 1, /* End */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2905
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2906 /* --------------- 50 to 5f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2907 KeyPad | 2, /* Down */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2908 KeyPad | 3, /* Page Down */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2909 KeyPad | 0, /* Insert */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2910 KeyPad | 10, /* Delete */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2911 Shift | FctKey | 0xbe, /* (Shift) F1 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2912 Shift | FctKey | 0xbf, /* (Shift) F2 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2913 Shift | FctKey | 0xc0, /* (Shift) F3 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2914 Shift | FctKey | 0xc1, /* (Shift) F4 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2915 Shift | FctKey | 0xc2, /* (Shift) F5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2916 Shift | FctKey | 0xc3, /* (Shift) F6 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2917 Shift | FctKey | 0xc4, /* (Shift) F7 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2918 Shift | FctKey | 0xc5, /* (Shift) F8 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2919 Shift | FctKey | 0xc6, /* (Shift) F9 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2920 Shift | FctKey | 0xc7, /* (Shift) F10 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2921 Ctrl | FctKey | 0xbe, /* (Ctrl) F1 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2922 Ctrl | FctKey | 0xbf, /* (Ctrl) F2 */
13040
169d50e2ee4c (gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents: 13020
diff changeset
2923
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2924 /* --------------- 60 to 6f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2925 Ctrl | FctKey | 0xc0, /* (Ctrl) F3 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2926 Ctrl | FctKey | 0xc1, /* (Ctrl) F4 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2927 Ctrl | FctKey | 0xc2, /* (Ctrl) F5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2928 Ctrl | FctKey | 0xc3, /* (Ctrl) F6 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2929 Ctrl | FctKey | 0xc4, /* (Ctrl) F7 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2930 Ctrl | FctKey | 0xc5, /* (Ctrl) F8 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2931 Ctrl | FctKey | 0xc6, /* (Ctrl) F9 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2932 Ctrl | FctKey | 0xc7, /* (Ctrl) F10 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2933 Alt | FctKey | 0xbe, /* (Alt) F1 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2934 Alt | FctKey | 0xbf, /* (Alt) F2 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2935 Alt | FctKey | 0xc0, /* (Alt) F3 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2936 Alt | FctKey | 0xc1, /* (Alt) F4 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2937 Alt | FctKey | 0xc2, /* (Alt) F5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2938 Alt | FctKey | 0xc3, /* (Alt) F6 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2939 Alt | FctKey | 0xc4, /* (Alt) F7 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2940 Alt | FctKey | 0xc5, /* (Alt) F8 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2941
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2942 /* --------------- 70 to 7f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2943 Alt | FctKey | 0xc6, /* (Alt) F9 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2944 Alt | FctKey | 0xc7, /* (Alt) F10 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2945 Ctrl | FctKey | 0x6d, /* (Ctrl) Sys Rq */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2946 Ctrl | KeyPad | 4, /* (Ctrl) Left */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2947 Ctrl | KeyPad | 6, /* (Ctrl) Right */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2948 Ctrl | KeyPad | 1, /* (Ctrl) End */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2949 Ctrl | KeyPad | 3, /* (Ctrl) Page Down */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2950 Ctrl | KeyPad | 7, /* (Ctrl) Home */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2951 Alt | Map | 1, /* '1' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2952 Alt | Map | 2, /* '2' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2953 Alt | Map | 3, /* '3' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2954 Alt | Map | 4, /* '4' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2955 Alt | Map | 5, /* '5' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2956 Alt | Map | 6, /* '6' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2957 Alt | Map | 7, /* '7' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2958 Alt | Map | 8, /* '8' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2959
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2960 /* --------------- 80 to 8f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2961 Alt | Map | 9, /* '9' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2962 Alt | Map | 10, /* '0' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2963 Alt | Map | 11, /* '-' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2964 Alt | Map | 12, /* '=' */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2965 Ctrl | KeyPad | 9, /* (Ctrl) Page Up */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2966 FctKey | 0xc8, /* F11 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2967 FctKey | 0xc9, /* F12 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2968 Shift | FctKey | 0xc8, /* (Shift) F11 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2969 Shift | FctKey | 0xc9, /* (Shift) F12 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2970 Ctrl | FctKey | 0xc8, /* (Ctrl) F11 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2971 Ctrl | FctKey | 0xc9, /* (Ctrl) F12 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2972 Alt | FctKey | 0xc8, /* (Alt) F11 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2973 Alt | FctKey | 0xc9, /* (Alt) F12 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2974 Ctrl | KeyPad | 8, /* (Ctrl) Up */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2975 Ctrl | Grey | 2, /* (Ctrl) Grey - */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2976 Ctrl | KeyPad | 5, /* (Ctrl) Keypad 5 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2977
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2978 /* --------------- 90 to 9f --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2979 Ctrl | Grey | 3, /* (Ctrl) Grey + */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2980 Ctrl | KeyPad | 2, /* (Ctrl) Down */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2981 Ctrl | KeyPad | 0, /* (Ctrl) Insert */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2982 Ctrl | KeyPad | 10, /* (Ctrl) Delete */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2983 Ctrl | FctKey | 0x09, /* (Ctrl) Tab */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2984 Ctrl | Grey | 0, /* (Ctrl) Grey / */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2985 Ctrl | Grey | 1, /* (Ctrl) Grey * */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2986 Alt | FctKey | 0x50, /* (Alt) Home */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2987 Alt | FctKey | 0x52, /* (Alt) Up */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2988 Alt | FctKey | 0x55, /* (Alt) Page Up */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2989 Ignore, /* NO KEY */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2990 Alt | FctKey | 0x51, /* (Alt) Left */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2991 Ignore, /* NO KEY */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2992 Alt | FctKey | 0x53, /* (Alt) Right */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2993 Ignore, /* NO KEY */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2994 Alt | FctKey | 0x57, /* (Alt) End */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2995
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2996 /* --------------- a0 to af --------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2997 Alt | KeyPad | 2, /* (Alt) Down */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2998 Alt | KeyPad | 3, /* (Alt) Page Down */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
2999 Alt | KeyPad | 0, /* (Alt) Insert */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3000 Alt | KeyPad | 10, /* (Alt) Delete */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3001 Alt | Grey | 0, /* (Alt) Grey / */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3002 Alt | FctKey | 0x09, /* (Alt) Tab */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3003 Alt | Grey | 4 /* (Alt) Keypad Enter */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3004 };
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3005
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3006 /* These bit-positions corresponds to values returned by BIOS */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3007 #define SHIFT_P 0x0003 /* two bits! */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3008 #define CTRL_P 0x0004
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3009 #define ALT_P 0x0008
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3010 #define SCRLOCK_P 0x0010
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3011 #define NUMLOCK_P 0x0020
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3012 #define CAPSLOCK_P 0x0040
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3013 #define ALT_GR_P 0x0800
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3014 #define SUPER_P 0x4000 /* pseudo */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3015 #define HYPER_P 0x8000 /* pseudo */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3016
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3017 static int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3018 dos_get_modifiers (keymask)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3019 int *keymask;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3020 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3021 union REGS regs;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3022 int mask, modifiers = 0;
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3023
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3024 /* Calculate modifier bits */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3025 regs.h.ah = extended_kbd ? 0x12 : 0x02;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3026 int86 (0x16, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3027
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3028 if (!extended_kbd)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3029 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3030 mask = regs.h.al & (SHIFT_P | CTRL_P | ALT_P |
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3031 SCRLOCK_P | NUMLOCK_P | CAPSLOCK_P);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3032 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3033 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3034 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3035 mask = regs.h.al & (SHIFT_P |
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3036 SCRLOCK_P | NUMLOCK_P | CAPSLOCK_P);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3037
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3038 /* Do not break international keyboard support. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3039 /* When Keyb.Com is loaded, the right Alt key is */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3040 /* used for accessing characters like { and } */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3041 if (regs.h.ah & 2) /* Left ALT pressed ? */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3042 mask |= ALT_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3043
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3044 if ((regs.h.ah & 8) != 0) /* Right ALT pressed ? */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3045 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3046 mask |= ALT_GR_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3047 if (dos_hyper_key == 1)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3048 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3049 mask |= HYPER_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3050 modifiers |= hyper_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3051 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3052 else if (dos_super_key == 1)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3053 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3054 mask |= SUPER_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3055 modifiers |= super_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3056 }
16763
e4f0f7fe8304 (dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents: 16613
diff changeset
3057 else if (!international_keyboard)
e4f0f7fe8304 (dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents: 16613
diff changeset
3058 {
e4f0f7fe8304 (dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents: 16613
diff changeset
3059 /* 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
3060 like the Left Alt. */
e4f0f7fe8304 (dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents: 16613
diff changeset
3061 mask &= ~ALT_GR_P;
e4f0f7fe8304 (dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents: 16613
diff changeset
3062 mask |= ALT_P;
e4f0f7fe8304 (dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents: 16613
diff changeset
3063 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3064 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3065
15125
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
3066 if (regs.h.ah & 1) /* Left CTRL pressed ? */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3067 mask |= CTRL_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3068
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3069 if (regs.h.ah & 4) /* Right CTRL pressed ? */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3070 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3071 if (dos_hyper_key == 2)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3072 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3073 mask |= HYPER_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3074 modifiers |= hyper_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3075 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3076 else if (dos_super_key == 2)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3077 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3078 mask |= SUPER_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3079 modifiers |= super_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3080 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3081 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3082 mask |= CTRL_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3083 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3084 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3085
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3086 if (mask & SHIFT_P)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3087 modifiers |= shift_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3088 if (mask & CTRL_P)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3089 modifiers |= ctrl_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3090 if (mask & ALT_P)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3091 modifiers |= meta_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3092
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3093 if (keymask)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3094 *keymask = mask;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3095 return modifiers;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3096 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3097
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3098 #define NUM_RECENT_DOSKEYS (100)
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3099 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
3100 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
3101 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
3102
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3103 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
3104 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
3105 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
3106 and then the scan code. */)
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3107 ()
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3108 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3109 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
3110
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3111 if (total_doskeys < NUM_RECENT_DOSKEYS)
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3112 return Fvector (total_doskeys, keys);
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3113 else
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3114 {
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3115 val = Fvector (NUM_RECENT_DOSKEYS, keys);
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3116 bcopy (keys + recent_doskeys_index,
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3117 XVECTOR (val)->contents,
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3118 (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
3119 bcopy (keys,
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3120 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
3121 recent_doskeys_index * sizeof (Lisp_Object));
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3122 return val;
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3123 }
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3124 }
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3125
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3126 /* Get a char from keyboard. Function keys are put into the event queue. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3127 static int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3128 dos_rawgetc ()
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3129 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3130 struct input_event event;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3131 union REGS regs;
43371
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3132 struct 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
3133 EVENT_INIT (event);
904f120f283f (dos_rawgetc): Don't pass uninitialized data to kbd_buffer_store_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51201
diff changeset
3134
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3135 #ifndef HAVE_X_WINDOWS
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
3136 /* 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
3137 IT_cmgoto (SELECTED_FRAME());
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3138 #endif
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
3139
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3140 /* The following condition is equivalent to `kbhit ()', except that
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3141 it uses the bios to do its job. This pleases DESQview/X. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3142 while ((regs.h.ah = extended_kbd ? 0x11 : 0x01),
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3143 int86 (0x16, &regs, &regs),
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3144 (regs.x.flags & 0x40) == 0)
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3145 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3146 union REGS regs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3147 register unsigned char c;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3148 int modifiers, sc, code = -1, mask, kp_mode;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3149
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3150 regs.h.ah = extended_kbd ? 0x10 : 0x00;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3151 int86 (0x16, &regs, &regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3152 c = regs.h.al;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3153 sc = regs.h.ah;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3154
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3155 total_doskeys += 2;
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3156 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
3157 = make_number (c);
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3158 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
3159 recent_doskeys_index = 0;
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3160 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
3161 = make_number (sc);
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3162 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
3163 recent_doskeys_index = 0;
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3164
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3165 modifiers = dos_get_modifiers (&mask);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3166
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3167 #ifndef HAVE_X_WINDOWS
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3168 if (!NILP (Vdos_display_scancodes))
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3169 {
14157
38606398dfa6 (dos_rawgetc): Make buf longer.
Richard M. Stallman <rms@gnu.org>
parents: 14036
diff changeset
3170 char buf[11];
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3171 sprintf (buf, "%02x:%02x*%04x",
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3172 (unsigned) (sc&0xff), (unsigned) c, mask);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3173 dos_direct_output (screen_size_Y - 2, screen_size_X - 12, buf, 10);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3174 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3175 #endif
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3176
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3177 if (sc == 0xe0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3178 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3179 switch (c)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3180 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3181 case 10: /* Ctrl Grey Enter */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3182 code = Ctrl | Grey | 4;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3183 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3184 case 13: /* Grey Enter */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3185 code = Grey | 4;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3186 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3187 case '/': /* Grey / */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3188 code = Grey | 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3189 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3190 default:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3191 continue;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3192 };
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3193 c = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3194 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3195 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3196 {
24559
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3197 /* 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
3198 if (keyboard->translate_table)
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3199 {
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3200 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
3201
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3202 while (p->sc)
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3203 {
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3204 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
3205 {
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3206 code = p->code;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3207 break;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3208 }
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3209 p++;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3210 }
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3211 }
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3212 /* 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
3213 one. */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3214 if (code == -1)
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3215 {
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3216 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
3217 continue;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3218 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
3219 continue;
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
3220 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3221 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3222
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3223 if (c == 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3224 {
16967
4ca0a5e25605 dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents: 16915
diff changeset
3225 /* 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
3226 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
3227 `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
3228 `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
3229 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
3230 However, for keys with the `Map' property set, the ASCII
4ca0a5e25605 dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents: 16915
diff changeset
3231 code returns zero iff Alt is pressed. So, when we DON'T
4ca0a5e25605 dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents: 16915
diff changeset
3232 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
3233 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
3234 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
3235 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
3236 if ( (code & Alt)
4ca0a5e25605 dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents: 16915
diff changeset
3237 || ( (code & 0xf000) == Map && !international_keyboard))
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3238 modifiers |= meta_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3239 if (code & Ctrl)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3240 modifiers |= ctrl_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3241 if (code & Shift)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3242 modifiers |= shift_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3243 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3244
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3245 switch (code & 0xf000)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3246 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3247 case ModFct:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3248 if (c && !(mask & (SHIFT_P | ALT_P | CTRL_P | HYPER_P | SUPER_P)))
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3249 return c;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3250 c = 0; /* Special */
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3251
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3252 case FctKey:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3253 if (c != 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3254 return c;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3255
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3256 case Special:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3257 code |= 0xff00;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3258 break;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3259
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3260 case Normal:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3261 if (sc == 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3262 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3263 if (c == 0) /* ctrl-break */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3264 continue;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3265 return c; /* ALT-nnn */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3266 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3267 if (!keyboard_map_all)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3268 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3269 if (c != ' ')
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3270 return c;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3271 code = c;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3272 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3273 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3274
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3275 case Map:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3276 if (c && !(mask & ALT_P) && !((mask & SHIFT_P) && (mask & CTRL_P)))
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3277 if (!keyboard_map_all)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3278 return c;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3279
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3280 code &= 0xff;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3281 if (mask & ALT_P && code <= 10 && code > 0 && dos_keypad_mode & 0x200)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3282 mask |= SHIFT_P; /* ALT-1 => M-! etc. */
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3283
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3284 if (mask & SHIFT_P)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3285 {
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3286 code = keyboard->shifted[code];
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3287 mask -= SHIFT_P;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3288 modifiers &= ~shift_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3289 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3290 else
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3291 if ((mask & ALT_GR_P) && keyboard->alt_gr && keyboard->alt_gr[code] != ' ')
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3292 code = keyboard->alt_gr[code];
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3293 else
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3294 code = keyboard->unshifted[code];
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3295 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3296
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3297 case KeyPad:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3298 code &= 0xff;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3299 if (c == 0xe0) /* edit key */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3300 kp_mode = 3;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3301 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3302 if ((mask & (NUMLOCK_P|CTRL_P|SHIFT_P|ALT_P)) == NUMLOCK_P) /* numlock on */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3303 kp_mode = dos_keypad_mode & 0x03;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3304 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3305 kp_mode = (dos_keypad_mode >> 4) & 0x03;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3306
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3307 switch (kp_mode)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3308 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3309 case 0:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3310 if (code == 10 && dos_decimal_point)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3311 return dos_decimal_point;
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3312 return keypad_translate_map[code].char_code;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3313
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3314 case 1:
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3315 code = 0xff00 | keypad_translate_map[code].keypad_code;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3316 break;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3317
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3318 case 2:
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3319 code = keypad_translate_map[code].meta_code;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3320 modifiers = meta_modifier;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3321 break;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3322
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3323 case 3:
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3324 code = 0xff00 | keypad_translate_map[code].editkey_code;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3325 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3326 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3327 break;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3328
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3329 case Grey:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3330 code &= 0xff;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3331 kp_mode = ((mask & (NUMLOCK_P|CTRL_P|SHIFT_P|ALT_P)) == NUMLOCK_P) ? 0x04 : 0x40;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3332 if (dos_keypad_mode & kp_mode)
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3333 code = 0xff00 | grey_key_translate_map[code].keypad_code;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3334 else
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
3335 code = grey_key_translate_map[code].char_code;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3336 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3337 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3338
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3339 make_event:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3340 if (code == 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3341 continue;
43371
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3342
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3343 if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight))
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3344 {
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3345 dpyinfo->mouse_face_hidden = 1;
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3346 clear_mouse_face (dpyinfo);
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3347 }
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3348
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3349 if (code >= 0x100)
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45332
diff changeset
3350 event.kind = NON_ASCII_KEYSTROKE_EVENT;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3351 else
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45332
diff changeset
3352 event.kind = ASCII_KEYSTROKE_EVENT;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3353 event.code = code;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3354 event.modifiers = modifiers;
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3355 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
3356 event.arg = Qnil;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3357 event.timestamp = event_timestamp ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3358 kbd_buffer_store_event (&event);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3359 }
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3360
23497
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3361 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
3362 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3363 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
3364 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
3365 Lisp_Object mouse_window = Qnil;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3366
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3367 /* Check for mouse movement *before* buttons. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3368 mouse_check_moved ();
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3369
27019
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
3370 /* 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
3371 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
3372 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
3373 {
43371
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3374 if (dpyinfo->mouse_face_hidden)
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3375 {
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3376 dpyinfo->mouse_face_hidden = 0;
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3377 clear_mouse_face (dpyinfo);
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3378 }
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3379
44337
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3380 /* Generate SELECT_WINDOW_EVENTs when needed. */
44359
ff9f7aee02c8 Rename autoselect_window_p to mouse_autoselect_window.
Pavel Janík <Pavel@Janik.cz>
parents: 44337
diff changeset
3381 if (mouse_autoselect_window)
43357
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3382 {
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3383 mouse_window = window_from_coordinates (SELECTED_FRAME(),
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3384 mouse_last_x,
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3385 mouse_last_y,
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
3386 0, 0, 0, 0);
43357
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3387 /* 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
3388 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
3389 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
3390 it is active. */
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3391 if (WINDOWP (mouse_window)
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3392 && !EQ (mouse_window, last_mouse_window)
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3393 && !EQ (mouse_window, selected_window))
43357
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3394 {
44337
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3395 event.kind = SELECT_WINDOW_EVENT;
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3396 event.frame_or_window = mouse_window;
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3397 event.arg = Qnil;
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3398 event.timestamp = event_timestamp ();
228b881931ef (dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents: 44303
diff changeset
3399 kbd_buffer_store_event (&event);
43357
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3400 }
43363
bcefd6f01283 (last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43357
diff changeset
3401 last_mouse_window = mouse_window;
43357
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
3402 }
43363
bcefd6f01283 (last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43357
diff changeset
3403 else
bcefd6f01283 (last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43357
diff changeset
3404 last_mouse_window = Qnil;
43371
263456abbeb0 (disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents: 43363
diff changeset
3405
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
3406 previous_help_echo_string = help_echo_string;
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
3407 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
3408 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
3409 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
3410 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
3411 /* 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
3412 changed, generate a HELP_EVENT. */
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
3413 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
3414 {
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
3415 event.kind = HELP_EVENT;
30180
c36d4c8b21b6 (dos_rawgetc): Adapt to change of HELP_EVENTs.
Gerd Moellmann <gerd@gnu.org>
parents: 30132
diff changeset
3416 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
3417 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
3418 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
3419 ? help_echo_window : selected_frame;
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
3420 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
3421 event.timestamp = event_timestamp ();
44528
d5befc8ddce0 (dos_rawgetc): int/Lisp_Object confusion.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 44525
diff changeset
3422 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
3423 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
3424 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
3425 }
3956e87adf2d Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents: 26946
diff changeset
3426
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3427 for (but = 0; but < NUM_MOUSE_BUTTONS; but++)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3428 for (press = 0; press < 2; press++)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3429 {
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3430 int button_num = but;
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3431
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3432 if (press)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3433 ok = mouse_pressed (but, &x, &y);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3434 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3435 ok = mouse_released (but, &x, &y);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3436 if (ok)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3437 {
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3438 /* 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
3439 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
3440 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
3441 {
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3442 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
3443
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3444 /* 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
3445 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
3446 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
3447 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
3448 || !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
3449 button_num = 2;
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3450 else
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3451 {
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3452 delay (100);
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3453 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
3454 || !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
3455 button_num = 2;
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3456 }
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3457 }
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3458
45803
9484de301252 Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents: 45332
diff changeset
3459 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
3460 event.code = button_num;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3461 event.modifiers = dos_get_modifiers (0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3462 | (press ? down_modifier : up_modifier);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3463 event.x = x;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3464 event.y = y;
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3465 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
3466 event.arg = Qnil;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3467 event.timestamp = event_timestamp ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3468 kbd_buffer_store_event (&event);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3469 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3470 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3471 }
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3472
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3473 return -1;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3474 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3475
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3476 static int prev_get_char = -1;
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3477
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3478 /* 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
3479
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3480 dos_keysns ()
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3481 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3482 if (prev_get_char != -1)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3483 return 1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3484 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3485 return ((prev_get_char = dos_rawgetc ()) != -1);
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3486 }
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3487
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3488 /* 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
3489
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3490 dos_keyread ()
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3491 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3492 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
3493 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3494 int c = prev_get_char;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3495 prev_get_char = -1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3496 return c;
8246
d48c2b01fba5 (mouse_init1): Use alternate mouse detection for old mouse drivers.
Richard M. Stallman <rms@gnu.org>
parents: 8194
diff changeset
3497 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3498 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3499 return dos_rawgetc ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3500 }
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
3501
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3502 #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
3503
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3504 /* Simulation of X's menus. Nothing too fancy here -- just make it work
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3505 for now.
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3506
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3507 Actually, I don't know the meaning of all the parameters of the functions
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3508 here -- I only know how they are called by xmenu.c. I could of course
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3509 grab the nearest Xlib manual (down the hall, second-to-last door on the
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3510 left), but I don't think it's worth the effort. */
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3511
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3512 /* 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
3513 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
3514 /* 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
3515 last menu help message. */
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3516 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
3517
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3518 static XMenu *
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3519 IT_menu_create ()
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3520 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3521 XMenu *menu;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3522
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3523 menu = (XMenu *) xmalloc (sizeof (XMenu));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3524 menu->allocated = menu->count = menu->panecount = menu->width = 0;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3525 return menu;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3526 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3527
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3528 /* Allocate some (more) memory for MENU ensuring that there is room for one
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3529 for item. */
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3530
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3531 static void
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3532 IT_menu_make_room (XMenu *menu)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3533 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3534 if (menu->allocated == 0)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3535 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3536 int count = menu->allocated = 10;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3537 menu->text = (char **) xmalloc (count * sizeof (char *));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3538 menu->submenu = (XMenu **) xmalloc (count * sizeof (XMenu *));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3539 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
3540 menu->help_text = (char **) xmalloc (count * sizeof (char *));
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3541 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3542 else if (menu->allocated == menu->count)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3543 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3544 int count = menu->allocated = menu->allocated + 10;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3545 menu->text
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3546 = (char **) xrealloc (menu->text, count * sizeof (char *));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3547 menu->submenu
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3548 = (XMenu **) xrealloc (menu->submenu, count * sizeof (XMenu *));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3549 menu->panenumber
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3550 = (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
3551 menu->help_text
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
3552 = (char **) xrealloc (menu->help_text, count * sizeof (char *));
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3553 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3554 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3555
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3556 /* 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
3557
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3558 static XMenu *
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3559 IT_menu_search_pane (XMenu *menu, int pane)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3560 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3561 int i;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3562 XMenu *try;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3563
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3564 for (i = 0; i < menu->count; i++)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3565 if (menu->submenu[i])
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3566 {
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3567 if (pane == menu->panenumber[i])
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3568 return menu->submenu[i];
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3569 if ((try = IT_menu_search_pane (menu->submenu[i], pane)))
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3570 return try;
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3571 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3572 return (XMenu *) 0;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3573 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3574
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3575 /* 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
3576
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3577 static void
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3578 IT_menu_calc_size (XMenu *menu, int *width, int *height)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3579 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3580 int i, h2, w2, maxsubwidth, maxheight;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3581
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3582 maxsubwidth = 0;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3583 maxheight = menu->count;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3584 for (i = 0; i < menu->count; i++)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3585 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3586 if (menu->submenu[i])
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3587 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3588 IT_menu_calc_size (menu->submenu[i], &w2, &h2);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3589 if (w2 > maxsubwidth) maxsubwidth = w2;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3590 if (i + h2 > maxheight) maxheight = i + h2;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3591 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3592 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3593 *width = menu->width + maxsubwidth;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3594 *height = maxheight;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3595 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3596
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
3597 /* 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
3598
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3599 static void
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3600 IT_menu_display (XMenu *menu, int y, int x, int pn, int *faces, int disp_help)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3601 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3602 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
3603 struct glyph *text, *p;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3604 char *q;
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3605 struct frame *sf = SELECTED_FRAME();
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3606
27462
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
3607 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
3608
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3609 width = menu->width;
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3610 text = (struct glyph *) xmalloc ((width + 2) * sizeof (struct glyph));
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3611 ScreenGetCursor (&row, &col);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3612 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
3613 IT_update_begin (sf);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3614 for (i = 0; i < menu->count; i++)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3615 {
27409
4df4f3866b55 (IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents: 27046
diff changeset
3616 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
3617
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3618 IT_cursor_to (y + i, x);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3619 enabled
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3620 = (!menu->submenu[i] && menu->panenumber[i]) || (menu->submenu[i]);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3621 mousehere = (y + i == my && x <= mx && mx < x + width + 2);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3622 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
3623 /* 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
3624 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
3625 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
3626 {
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3627 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
3628 menu_help_paneno = pn - 1;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3629 menu_help_itemno = i;
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3630 }
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3631 p = text;
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3632 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
3633 p++;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3634 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
3635 {
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3636 if (*q > 26)
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3637 {
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3638 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
3639 p++;
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3640 }
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3641 else /* make '^x' */
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3642 {
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3643 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
3644 p++;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3645 j++;
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3646 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
3647 p++;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3648 }
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3649 }
27409
4df4f3866b55 (IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents: 27046
diff changeset
3650 /* 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
3651 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
3652 {
4df4f3866b55 (IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents: 27046
diff changeset
3653 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
3654 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
3655 }
4df4f3866b55 (IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents: 27046
diff changeset
3656 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
3657 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
3658
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3659 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
3660 p++;
27409
4df4f3866b55 (IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents: 27046
diff changeset
3661 IT_write_glyphs (text, max_width);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3662 }
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3663 IT_update_end (sf);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3664 IT_cursor_to (row, col);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3665 xfree (text);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3666 }
13848
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
3667
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
3668 /* --------------------------- X Menu emulation ---------------------- */
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3669
13848
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
3670 /* Report availability of menus. */
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
3671
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
3672 int
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3673 have_menus_p () { return 1; }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3674
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3675 /* 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
3676
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3677 XMenu *
10501
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3678 XMenuCreate (Display *foo1, Window foo2, char *foo3)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3679 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3680 return IT_menu_create ();
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3681 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3682
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3683 /* Create a new pane and place it on the outer-most level. It is not
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3684 clear that it should be placed out there, but I don't know what else
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3685 to do. */
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3686
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3687 int
10501
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3688 XMenuAddPane (Display *foo, XMenu *menu, char *txt, int enable)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3689 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3690 int len;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3691 char *p;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3692
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3693 if (!enable)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3694 abort ();
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3695
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3696 IT_menu_make_room (menu);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3697 menu->submenu[menu->count] = IT_menu_create ();
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3698 menu->text[menu->count] = txt;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3699 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
3700 menu->help_text[menu->count] = NULL;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3701 menu->count++;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3702
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3703 /* 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
3704 be written as ^x). */
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3705 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
3706 if (*p < 27)
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3707 len++;
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3708
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3709 if (len > menu->width)
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3710 menu->width = len;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3711
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3712 return menu->panecount;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3713 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3714
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3715 /* 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
3716
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3717 int
10501
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3718 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
3719 int foo, char *txt, int enable, char *help_text)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3720 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3721 int len;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3722 char *p;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3723
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3724 if (pane)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3725 if (!(menu = IT_menu_search_pane (menu, pane)))
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3726 return XM_FAILURE;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3727 IT_menu_make_room (menu);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3728 menu->submenu[menu->count] = (XMenu *) 0;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3729 menu->text[menu->count] = txt;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3730 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
3731 menu->help_text[menu->count] = help_text;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3732 menu->count++;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3733
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3734 /* 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
3735 be written as ^x). */
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3736 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
3737 if (*p < 27)
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3738 len++;
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3739
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3740 if (len > menu->width)
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3741 menu->width = len;
15627
c5c4d478c78d (IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents: 15618
diff changeset
3742
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3743 return XM_SUCCESS;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3744 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3745
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3746 /* 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
3747
10501
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3748 void
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3749 XMenuLocate (Display *foo0, XMenu *menu, int foo1, int foo2, int x, int y,
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3750 int *ulx, int *uly, int *width, int *height)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3751 {
13714
45e71ea63d71 (XMenuActivate): Display the menu pane title.
Karl Heuer <kwzh@gnu.org>
parents: 13657
diff changeset
3752 IT_menu_calc_size (menu, width, height);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3753 *ulx = x + 1;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3754 *uly = y;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3755 *width += 2;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3756 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3757
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3758 struct IT_menu_state
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3759 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3760 void *screen_behind;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3761 XMenu *menu;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3762 int pane;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3763 int x, y;
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3764 };
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3765
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3766
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3767 /* 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
3768
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3769 int
10501
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3770 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
3771 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
3772 void (*help_callback)(char *, int, int))
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3773 {
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3774 struct IT_menu_state *state;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3775 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
3776 int title_faces[4]; /* face to display the menu title */
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3777 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
3778 struct frame *sf = SELECTED_FRAME();
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3779 Lisp_Object saved_echo_area_message, selectface;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3780
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3781 /* 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
3782 if (have_mouse <= 0)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3783 return XM_IA_SELECT;
16871
45a12f628d3f * (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents: 16837
diff changeset
3784 /* 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
3785 around the display. */
45a12f628d3f * (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents: 16837
diff changeset
3786 if (x0 <= 0)
45a12f628d3f * (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents: 16837
diff changeset
3787 x0 = 1;
45a12f628d3f * (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents: 16837
diff changeset
3788 if (y0 <= 0)
45a12f628d3f * (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents: 16837
diff changeset
3789 y0 = 1;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3790
23497
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3791 /* 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
3792 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
3793 mouse_preempted++;
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3794
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3795 state = alloca (menu->panecount * sizeof (struct IT_menu_state));
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3796 screensize = screen_size * 2;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3797 faces[0]
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3798 = lookup_derived_face (sf, intern ("msdos-menu-passive-face"),
28227
4bba3027ae58 (XMenuActivate): Args to lookup_derived_face changed.
Kenichi Handa <handa@m17n.org>
parents: 28092
diff changeset
3799 0, DEFAULT_FACE_ID);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3800 faces[1]
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3801 = lookup_derived_face (sf, intern ("msdos-menu-active-face"),
28227
4bba3027ae58 (XMenuActivate): Args to lookup_derived_face changed.
Kenichi Handa <handa@m17n.org>
parents: 28092
diff changeset
3802 0, DEFAULT_FACE_ID);
25110
4833aea1f1e7 (IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents: 25100
diff changeset
3803 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
3804 faces[2] = lookup_derived_face (sf, selectface,
28227
4bba3027ae58 (XMenuActivate): Args to lookup_derived_face changed.
Kenichi Handa <handa@m17n.org>
parents: 28092
diff changeset
3805 0, faces[0]);
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3806 faces[3] = lookup_derived_face (sf, selectface,
28227
4bba3027ae58 (XMenuActivate): Args to lookup_derived_face changed.
Kenichi Handa <handa@m17n.org>
parents: 28092
diff changeset
3807 0, faces[1]);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3808
13860
659a54e026bb (XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents: 13848
diff changeset
3809 /* 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
3810 `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
3811 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
3812 title_faces[i] = faces[3];
659a54e026bb (XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents: 13848
diff changeset
3813
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3814 statecount = 1;
15387
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
3815
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
3816 /* 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
3817 digit (which is ugly).
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3818
15387
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
3819 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
3820 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
3821 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
3822 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
3823 {
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
3824 menu->text[0][7] = '\0';
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
3825 buffers_num_deleted = 1;
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
3826 }
30132
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3827
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3828 /* 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
3829 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
3830 before the call to message_with_string. */
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3831 saved_echo_area_message = Fcurrent_message ();
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3832 state[0].menu = menu;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3833 mouse_off ();
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3834 ScreenRetrieve (state[0].screen_behind = xmalloc (screensize));
13714
45e71ea63d71 (XMenuActivate): Display the menu pane title.
Karl Heuer <kwzh@gnu.org>
parents: 13657
diff changeset
3835
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
3836 /* 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
3837 panes, which is ugly. */
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
3838 IT_display_cursor (0);
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
3839
27462
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
3840 /* Display the menu title. */
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3841 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
3842 if (buffers_num_deleted)
9ac116f47f33 (check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents: 15341
diff changeset
3843 menu->text[0][7] = ' ';
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3844 if ((onepane = menu->count == 1 && menu->submenu[0]))
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3845 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3846 menu->width = menu->submenu[0]->width;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3847 state[0].menu = menu->submenu[0];
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3848 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3849 else
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3850 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3851 state[0].menu = menu;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3852 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3853 state[0].x = x0 - 1;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3854 state[0].y = y0;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3855 state[0].pane = onepane;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3856
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3857 mouse_last_x = -1; /* A hack that forces display. */
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3858 leave = 0;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3859 while (!leave)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3860 {
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
3861 if (!mouse_visible) mouse_on ();
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3862 mouse_check_moved ();
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3863 if (sf->mouse_moved)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3864 {
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
3865 sf->mouse_moved = 0;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3866 result = XM_IA_SELECT;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3867 mouse_get_xy (&x, &y);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3868 for (i = 0; i < statecount; i++)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3869 if (state[i].x <= x && x < state[i].x + state[i].menu->width + 2)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3870 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3871 int dy = y - state[i].y;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3872 if (0 <= dy && dy < state[i].menu->count)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3873 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3874 if (!state[i].menu->submenu[dy])
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3875 if (state[i].menu->panenumber[dy])
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3876 result = XM_SUCCESS;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3877 else
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3878 result = XM_IA_SELECT;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3879 *pane = state[i].pane - 1;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3880 *selidx = dy;
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13860
diff changeset
3881 /* We hit some part of a menu, so drop extra menus that
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3882 have been opened. That does not include an open and
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3883 active submenu. */
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3884 if (i != statecount - 2
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3885 || state[i].menu->submenu[dy] != state[i+1].menu)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3886 while (i != statecount - 1)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3887 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3888 statecount--;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3889 mouse_off ();
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3890 ScreenUpdate (state[statecount].screen_behind);
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
3891 if (screen_virtual_segment)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
3892 dosv_refresh_virtual_screen (0, screen_size);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3893 xfree (state[statecount].screen_behind);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3894 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3895 if (i == statecount - 1 && state[i].menu->submenu[dy])
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3896 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3897 IT_menu_display (state[i].menu,
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3898 state[i].y,
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3899 state[i].x,
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3900 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
3901 faces, 1);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3902 state[statecount].menu = state[i].menu->submenu[dy];
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3903 state[statecount].pane = state[i].menu->panenumber[dy];
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3904 mouse_off ();
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3905 ScreenRetrieve (state[statecount].screen_behind
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3906 = xmalloc (screensize));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3907 state[statecount].x
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3908 = state[i].x + state[i].menu->width + 2;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3909 state[statecount].y = y;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
3910 statecount++;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3911 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3912 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3913 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3914 IT_menu_display (state[statecount - 1].menu,
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3915 state[statecount - 1].y,
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3916 state[statecount - 1].x,
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3917 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
3918 faces, 1);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3919 }
23497
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3920 else
27462
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
3921 {
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
3922 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
3923 && 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
3924 {
30341
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3925 help_callback (menu_help_message,
2ad638704621 (IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents: 30198
diff changeset
3926 menu_help_paneno, menu_help_itemno);
27640
4ce3be69ca1f (XMenuActivate): Turn off the cursor after displaying
Eli Zaretskii <eliz@gnu.org>
parents: 27462
diff changeset
3927 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
3928 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
3929 }
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
3930 /* 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
3931 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
3932 __dpmi_yield ();
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
3933 }
23497
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3934 for (b = 0; b < mouse_button_count && !leave; b++)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3935 {
23497
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3936 /* 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
3937 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
3938 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
3939 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
3940 {
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3941 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
3942 __dpmi_yield ();
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3943 leave = 1;
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3944 }
eee76d0af99c (mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents: 23156
diff changeset
3945 (void) mouse_released (b, &x, &y);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3946 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3947 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3948
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3949 mouse_off ();
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3950 ScreenUpdate (state[0].screen_behind);
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
3951 if (screen_virtual_segment)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
3952 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
3953
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3954 /* 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
3955 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
3956 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
3957 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
3958 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
3959 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
3960 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
3961 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
3962 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
3963 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
3964 know about it.
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3965
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3966 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
3967 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
3968 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
3969 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
3970 erasing it works correctly... */
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3971 if (! NILP (saved_echo_area_message))
5d20e989c3d4 (XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents: 30050
diff changeset
3972 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
3973 message (0);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3974 while (statecount--)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3975 xfree (state[statecount].screen_behind);
16598
4b0b6719bbd2 [__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents: 16524
diff changeset
3976 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
3977 /* 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
3978 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
3979 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
3980 (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
3981 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
3982 discard_mouse_events ();
30711
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
3983 mouse_clear_clicks ();
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
3984 if (!kbd_buffer_events_waiting (1))
1b27b74c2510 Include keyboard.h.
Eli Zaretskii <eliz@gnu.org>
parents: 30627
diff changeset
3985 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
3986 /* 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
3987 mouse_preempted--;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3988 return result;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3989 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3990
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3991 /* Dispose of a menu. */
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
3992
10501
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3993 void
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
3994 XMenuDestroy (Display *foo, XMenu *menu)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3995 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3996 int i;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3997 if (menu->allocated)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3998 {
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
3999 for (i = 0; i < menu->count; i++)
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4000 if (menu->submenu[i])
10501
19c4a9ef23e5 (XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
4001 XMenuDestroy (foo, menu->submenu[i]);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4002 xfree (menu->text);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4003 xfree (menu->submenu);
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4004 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
4005 xfree (menu->help_text);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4006 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4007 xfree (menu);
27462
a4cddf1245d7 (IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents: 27409
diff changeset
4008 menu_help_message = prev_menu_help_message = NULL;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4009 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4010
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
4011 int
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
4012 x_pixel_width (struct frame *f)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4013 {
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
4014 return FRAME_COLS (f);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4015 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4016
12995
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
4017 int
a3620c5ffad7 (putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents: 12614
diff changeset
4018 x_pixel_height (struct frame *f)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4019 {
51201
df6e2df16eb0 Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50247
diff changeset
4020 return FRAME_LINES (f);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4021 }
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9118
diff changeset
4022 #endif /* !HAVE_X_WINDOWS */
13848
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
4023
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4024 /* ----------------------- DOS / UNIX conversion --------------------- */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4025
15618
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4026 void msdos_downcase_filename (unsigned char *);
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4027
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4028 /* Destructively turn backslashes into slashes. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4029
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4030 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4031 dostounix_filename (p)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4032 register char *p;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4033 {
15618
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4034 msdos_downcase_filename (p);
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4035
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4036 while (*p)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4037 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4038 if (*p == '\\')
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4039 *p = '/';
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4040 p++;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4041 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4042 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4043
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4044 /* Destructively turn slashes into backslashes. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4045
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4046 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4047 unixtodos_filename (p)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4048 register char *p;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4049 {
15618
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4050 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
4051 {
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4052 *p += 'a' - 'A';
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4053 p += 2;
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4054 }
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4055
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4056 while (*p)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4057 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4058 if (*p == '/')
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4059 *p = '\\';
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4060 p++;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4061 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4062 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4063
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4064 /* Get the default directory for a given drive. 0=def, 1=A, 2=B, ... */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4065
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4066 int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4067 getdefdir (drive, dst)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4068 int drive;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4069 char *dst;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4070 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4071 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
4072
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4073 /* 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
4074 if (drive != 0)
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4075 {
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4076 *p++ = drive + 'A' - 1;
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4077 *p++ = ':';
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4078 }
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4079
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4080 *p++ = '.';
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4081 *p = '\0';
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4082 errno = 0;
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4083 _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
4084 /* _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
4085 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
4086 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
4087 return 0;
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4088
15219
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4089 msdos_downcase_filename (dst);
15125
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4090
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4091 errno = e;
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4092 return 1;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4093 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4094
42192
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4095 char *
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4096 emacs_root_dir (void)
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4097 {
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4098 static char root_dir[4];
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4099
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4100 sprintf (root_dir, "%c:/", 'A' + getdisk ());
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4101 root_dir[0] = tolower (root_dir[0]);
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4102 return root_dir;
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4103 }
bd23b0c564d9 (emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 41940
diff changeset
4104
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4105 /* Remove all CR's that are followed by a LF. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4106
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4107 int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4108 crlf_to_lf (n, buf)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4109 register int n;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4110 register unsigned char *buf;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4111 {
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4112 unsigned char *np = buf, *startp = buf, *endp = buf + n;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4113
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4114 if (n == 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4115 return n;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4116 while (buf < endp - 1)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4117 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4118 if (*buf == 0x0d)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4119 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4120 if (*(++buf) != 0x0a)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4121 *np++ = 0x0d;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4122 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4123 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4124 *np++ = *buf++;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4125 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4126 if (buf < endp)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4127 *np++ = *buf++;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4128 return np - startp;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4129 }
14999
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4130
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4131 #if defined(__DJGPP__) && __DJGPP__ == 2 && __DJGPP_MINOR__ == 0
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4132
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4133 /* In DJGPP v2.0, library `write' can call `malloc', which might
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4134 cause relocation of the buffer whose address we get in ADDR.
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4135 Here is a version of `write' that avoids calling `malloc',
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4136 to serve us until such time as the library is fixed.
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4137 Actually, what we define here is called `__write', because
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4138 `write' is a stub that just jmp's to `__write' (to be
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4139 POSIXLY-correct with respect to the global name-space). */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4140
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4141 #include <io.h> /* for _write */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4142 #include <libc/dosio.h> /* for __file_handle_modes[] */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4143
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4144 static char xbuf[64 * 1024]; /* DOS cannot write more in one chunk */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4145
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4146 #define XBUF_END (xbuf + sizeof (xbuf) - 1)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4147
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4148 int
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4149 __write (int handle, const void *buffer, size_t count)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4150 {
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4151 if (count == 0)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4152 return 0;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4153
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4154 if(__file_handle_modes[handle] & O_BINARY)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4155 return _write (handle, buffer, count);
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4156 else
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4157 {
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4158 char *xbp = xbuf;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4159 const char *bp = buffer;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4160 int total_written = 0;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4161 int nmoved = 0, ncr = 0;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4162
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4163 while (count)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4164 {
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4165 /* The next test makes sure there's space for at least 2 more
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4166 characters in xbuf[], so both CR and LF can be put there. */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4167 if (xbp < XBUF_END)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4168 {
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4169 if (*bp == '\n')
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4170 {
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4171 ncr++;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4172 *xbp++ = '\r';
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4173 }
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4174 *xbp++ = *bp++;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4175 nmoved++;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4176 count--;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4177 }
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4178 if (xbp >= XBUF_END || !count)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4179 {
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4180 size_t to_write = nmoved + ncr;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4181 int written = _write (handle, xbuf, to_write);
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4182
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4183 if (written == -1)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4184 return -1;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4185 else
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4186 total_written += nmoved; /* CRs aren't counted in ret value */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4187
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4188 /* If some, but not all were written (disk full?), return
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4189 an estimate of the total written bytes not counting CRs. */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4190 if (written < to_write)
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4191 return total_written - (to_write - written) * nmoved/to_write;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4192
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4193 nmoved = 0;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4194 ncr = 0;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4195 xbp = xbuf;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4196 }
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4197 }
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4198 return total_written;
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4199 }
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4200 }
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4201
16524
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4202 /* 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
4203 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
4204 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
4205
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4206 #include <io.h>
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4207
16524
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4208 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
4209 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4210 __dpmi_regs r;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4211 int olen = strlen(old) + 1;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4212 int i;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4213 int use_lfn = _USE_LFN;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4214 char tempfile[FILENAME_MAX];
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4215 const char *orig = old;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4216 int lfn_fd = -1;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4217
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4218 r.x.dx = __tb_offset;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4219 r.x.di = __tb_offset + olen;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4220 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
4221
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4222 if (use_lfn)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4223 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4224 /* 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
4225 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
4226 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
4227 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
4228 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
4229
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4230 char *pbase = 0, *p;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4231 static char try_char[] = "abcdefghijklmnopqrstuvwxyz012345789";
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4232 int idx = sizeof(try_char) - 1;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4233
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4234 /* 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
4235 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
4236 strcpy(tempfile, old);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4237 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
4238 if (*p == '/' || *p == '\\' || *p == ':')
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4239 pbase = p;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4240 if (pbase)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4241 pbase++;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4242 else
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4243 pbase = tempfile;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4244 strcpy(pbase, "X$$djren$$.$$temp$$");
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 do
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 if (idx <= 0)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4249 return -1;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4250 *pbase = try_char[--idx];
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4251 } while (_chmod(tempfile, 0) != -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 r.x.ax = 0x7156;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4254 _put_path2(tempfile, olen);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4255 _put_path(old);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4256 __dpmi_int(0x21, &r);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4257 if (r.x.flags & 1)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4258 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4259 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
4260 return -1;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4261 }
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 /* 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
4264 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
4265 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
4266 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
4267 lfn_fd = _creat(old, 0);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4268
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4269 olen = strlen(tempfile) + 1;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4270 old = tempfile;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4271 r.x.di = __tb_offset + olen;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4272 }
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 for (i=0; i<2; i++)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4275 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4276 if(use_lfn)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4277 r.x.ax = 0x7156;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4278 else
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4279 r.h.ah = 0x56;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4280 _put_path2(new, olen);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4281 _put_path(old);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4282 __dpmi_int(0x21, &r);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4283 if(r.x.flags & 1)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4284 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4285 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
4286 remove(new); /* and try again */
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4287 else
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4288 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4289 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
4290
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4291 /* 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
4292 if (use_lfn)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4293 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4294 if (lfn_fd != -1)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4295 {
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4296 _close (lfn_fd);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4297 remove (orig);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4298 }
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4299 _put_path2(orig, olen);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4300 _put_path(tempfile);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4301 r.x.ax = 0x7156;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4302 __dpmi_int(0x21, &r);
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4303 }
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4304 return -1;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4305 }
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4306 }
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4307 else
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4308 break;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4309 }
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4310
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4311 /* 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
4312 around the Windows 95 bug. */
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4313 if (lfn_fd != -1)
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4314 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
4315 return 0;
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4316 }
84440bd95727 [__DJGPP_MINOR__ == 0] (_rename): New function, a
Richard M. Stallman <rms@gnu.org>
parents: 16310
diff changeset
4317
14999
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4318 #endif /* __DJGPP__ == 2 && __DJGPP_MINOR__ == 0 */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
4319
15174
08937f70419e (Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15125
diff changeset
4320 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
4321 0, 0, 0,
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 41406
diff changeset
4322 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
4323 ()
15174
08937f70419e (Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15125
diff changeset
4324 {
08937f70419e (Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15125
diff changeset
4325 return (_USE_LFN ? Qt : Qnil);
08937f70419e (Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents: 15125
diff changeset
4326 }
15219
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4327
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4328 /* 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
4329
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4330 void
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4331 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
4332 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
4333 {
15588
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4334 /* Always lower-case drive letters a-z, even if the filesystem
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4335 preserves case in filenames.
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4336 This is so MSDOS filenames could be compared by string comparison
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4337 functions that are case-sensitive. Even case-preserving filesystems
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4338 do not distinguish case in drive letters. */
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4339 if (p[1] == ':' && *p >= 'A' && *p <= 'Z')
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4340 {
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4341 *p += 'a' - 'A';
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4342 p += 2;
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4343 }
e49a2eb71713 (msdos_downcase_filename):
Miles Bader <miles@gnu.org>
parents: 15387
diff changeset
4344
15219
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4345 /* 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
4346 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
4347 for ( ; *p; p++)
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4348 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
4349 *p += 'a' - 'A';
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4350 }
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4351
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4352 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
4353 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
4354 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
4355 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
4356 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
4357 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
4358 (filename)
15219
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4359 Lisp_Object filename;
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4360 {
15222
cc264dd966cd (Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents: 15219
diff changeset
4361 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
4362
cc264dd966cd (Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents: 15219
diff changeset
4363 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
4364 return Qnil;
cc264dd966cd (Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents: 15219
diff changeset
4365
cc264dd966cd (Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents: 15219
diff changeset
4366 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
4367 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
4368 return tem;
15219
a800d1a0f07e (msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents: 15186
diff changeset
4369 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4370
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4371 /* The Emacs root directory as determined by init_environment. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4372
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4373 static char emacsroot[MAXPATHLEN];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4374
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4375 char *
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4376 rootrelativepath (rel)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4377 char *rel;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4378 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4379 static char result[MAXPATHLEN + 10];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4380
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4381 strcpy (result, emacsroot);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4382 strcat (result, "/");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4383 strcat (result, rel);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4384 return result;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4385 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4386
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4387 /* Define a lot of environment variables if not already defined. Don't
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4388 remove anything unless you know what you're doing -- lots of code will
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4389 break if one or more of these are missing. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4390
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4391 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4392 init_environment (argc, argv, skip_args)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4393 int argc;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4394 char **argv;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4395 int skip_args;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4396 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4397 char *s, *t, *root;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4398 int len, i;
22054
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4399 static const char * const tempdirs[] = {
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4400 "$TMPDIR", "$TEMP", "$TMP", "c:/"
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4401 };
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4402 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
4403
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4404 /* 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
4405 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
4406 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
4407 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
4408 for (i = 0; i < imax ; i++)
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4409 {
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4410 const char *tmp = tempdirs[i];
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4411
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4412 if (*tmp == '$')
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4413 tmp = getenv (tmp + 1);
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4414 /* 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
4415 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
4416 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
4417 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
4418 if (tmp && access (tmp, D_OK) == 0)
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4419 {
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4420 setenv ("TMPDIR", tmp, 1);
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4421 break;
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4422 }
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4423 }
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4424 if (i >= imax)
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4425 cmd_error_internal
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4426 (Fcons (Qerror,
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4427 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
4428 Qnil)),
d313bff62b93 (init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents: 21785
diff changeset
4429 "While setting TMPDIR: ");
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4430
23815
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
4431 /* 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
4432 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
4433 (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
4434 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
4435 startup_time = clock ();
fe9557bb7056 (init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents: 23497
diff changeset
4436
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4437 /* Find our root from argv[0]. Assuming argv[0] is, say,
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4438 "c:/emacs/bin/emacs.exe" our root will be "c:/emacs". */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4439 root = alloca (MAXPATHLEN + 20);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4440 _fixpath (argv[0], root);
15618
5da6a61ce827 (dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents: 15588
diff changeset
4441 msdos_downcase_filename (root);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4442 len = strlen (root);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4443 while (len > 0 && root[len] != '/' && root[len] != ':')
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4444 len--;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4445 root[len] = '\0';
19295
812986c77ae2 (init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents: 19293
diff changeset
4446 if (len > 4
812986c77ae2 (init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents: 19293
diff changeset
4447 && (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
4448 || strcmp (root + len - 4, "/src") == 0)) /* under a debugger */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4449 root[len - 4] = '\0';
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4450 else
19295
812986c77ae2 (init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents: 19293
diff changeset
4451 strcpy (root, "c:/emacs"); /* let's be defensive */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4452 len = strlen (root);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4453 strcpy (emacsroot, root);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4454
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4455 /* We default HOME to our root. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4456 setenv ("HOME", root, 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4457
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4458 /* We default EMACSPATH to root + "/bin". */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4459 strcpy (root + len, "/bin");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4460 setenv ("EMACSPATH", root, 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4461
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4462 /* I don't expect anybody to ever use other terminals so the internal
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4463 terminal is the default. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4464 setenv ("TERM", "internal", 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4465
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4466 #ifdef HAVE_X_WINDOWS
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4467 /* Emacs expects DISPLAY to be set. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4468 setenv ("DISPLAY", "unix:0.0", 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4469 #endif
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4470
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4471 /* SHELL is a bit tricky -- COMSPEC is the closest we come, but we must
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4472 downcase it and mirror the backslashes. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4473 s = getenv ("COMSPEC");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4474 if (!s) s = "c:/command.com";
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4475 t = alloca (strlen (s) + 1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4476 strcpy (t, s);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4477 dostounix_filename (t);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4478 setenv ("SHELL", t, 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4479
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4480 /* PATH is also downcased and backslashes mirrored. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4481 s = getenv ("PATH");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4482 if (!s) s = "";
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4483 t = alloca (strlen (s) + 3);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4484 /* Current directory is always considered part of MsDos's path but it is
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4485 not normally mentioned. Now it is. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4486 strcat (strcpy (t, ".;"), s);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4487 dostounix_filename (t); /* Not a single file name, but this should work. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4488 setenv ("PATH", t, 1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4489
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4490 /* In some sense all dos users have root privileges, so... */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4491 setenv ("USER", "root", 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4492 setenv ("NAME", getenv ("USER"), 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4493
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4494 /* Time zone determined from country code. To make this possible, the
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4495 country code may not span more than one time zone. In other words,
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4496 in the USA, you lose. */
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
4497 if (!getenv ("TZ"))
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4498 switch (dos_country_code)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4499 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4500 case 31: /* Belgium */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4501 case 32: /* The Netherlands */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4502 case 33: /* France */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4503 case 34: /* Spain */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4504 case 36: /* Hungary */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4505 case 38: /* Yugoslavia (or what's left of it?) */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4506 case 39: /* Italy */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4507 case 41: /* Switzerland */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4508 case 42: /* Tjekia */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4509 case 45: /* Denmark */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4510 case 46: /* Sweden */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4511 case 47: /* Norway */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4512 case 48: /* Poland */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4513 case 49: /* Germany */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4514 /* Daylight saving from last Sunday in March to last Sunday in
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4515 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
4516 setenv ("TZ", "MET-01METDST-02,M3.5.0/02:00,M9.5.0/02:00", 0);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4517 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4518 case 44: /* United Kingdom */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4519 case 351: /* Portugal */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4520 case 354: /* Iceland */
13394
c4549fcdd5f3 (the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents: 13305
diff changeset
4521 setenv ("TZ", "GMT+00", 0);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4522 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4523 case 81: /* Japan */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4524 case 82: /* Korea */
13394
c4549fcdd5f3 (the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents: 13305
diff changeset
4525 setenv ("TZ", "JST-09", 0);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4526 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4527 case 90: /* Turkey */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4528 case 358: /* Finland */
13394
c4549fcdd5f3 (the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents: 13305
diff changeset
4529 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
4530 break;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4531 case 972: /* Israel */
13394
c4549fcdd5f3 (the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents: 13305
diff changeset
4532 /* 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
4533 `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
4534 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
4535 setenv ("TZ", "IST-02IDT-03,M4.1.6/00:00,M9.5.6/01:00", 0);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4536 break;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4537 }
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4538 tzset ();
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4539 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4540
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4541
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4542
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4543 static int break_stat; /* BREAK check mode status. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4544 static int stdin_stat; /* stdin IOCTL status. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4545
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4546 #if __DJGPP__ < 2
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4547
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4548 /* These must be global. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4549 static _go32_dpmi_seginfo ctrl_break_vector;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4550 static _go32_dpmi_registers ctrl_break_regs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4551 static int ctrlbreakinstalled = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4552
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4553 /* Interrupt level detection of Ctrl-Break. Don't do anything fancy here! */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4554
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4555 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4556 ctrl_break_func (regs)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4557 _go32_dpmi_registers *regs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4558 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4559 Vquit_flag = Qt;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4560 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4561
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4562 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4563 install_ctrl_break_check ()
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4564 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4565 if (!ctrlbreakinstalled)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4566 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4567 /* Don't press Ctrl-Break if you don't have either DPMI or Emacs
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4568 was compiler with Djgpp 1.11 maintenance level 5 or later! */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4569 ctrlbreakinstalled = 1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4570 ctrl_break_vector.pm_offset = (int) ctrl_break_func;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4571 _go32_dpmi_allocate_real_mode_callback_iret (&ctrl_break_vector,
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4572 &ctrl_break_regs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4573 _go32_dpmi_set_real_mode_interrupt_vector (0x1b, &ctrl_break_vector);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4574 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4575 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4576
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4577 #endif /* __DJGPP__ < 2 */
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4578
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
4579 /* 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
4580 control chars by DOS. Determine the keyboard type. */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4581
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4582 int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4583 dos_ttraw ()
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4584 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4585 union REGS inregs, outregs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4586 static int first_time = 1;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4587
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4588 break_stat = getcbrk ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4589 setcbrk (0);
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4590 #if __DJGPP__ < 2
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4591 install_ctrl_break_check ();
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4592 #endif
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4593
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4594 if (first_time)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4595 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4596 inregs.h.ah = 0xc0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4597 int86 (0x15, &inregs, &outregs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4598 extended_kbd = (!outregs.x.cflag) && (outregs.h.ah == 0);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4599
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4600 have_mouse = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4601
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4602 if (internal_terminal
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4603 #ifdef HAVE_X_WINDOWS
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4604 && inhibit_window_system
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4605 #endif
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4606 )
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4607 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4608 inregs.x.ax = 0x0021;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4609 int86 (0x33, &inregs, &outregs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4610 have_mouse = (outregs.x.ax & 0xffff) == 0xffff;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4611 if (!have_mouse)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4612 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4613 /* Reportedly, the above doesn't work for some mouse drivers. There
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4614 is an additional detection method that should work, but might be
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4615 a little slower. Use that as an alternative. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4616 inregs.x.ax = 0x0000;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4617 int86 (0x33, &inregs, &outregs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4618 have_mouse = (outregs.x.ax & 0xffff) == 0xffff;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4619 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4620
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4621 if (have_mouse)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4622 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4623 have_mouse = 1; /* enable mouse */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4624 mouse_visible = 0;
30532
328993ad6017 (Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents: 30529
diff changeset
4625 mouse_setup_buttons (outregs.x.bx);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4626 mouse_position_hook = &mouse_get_pos;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4627 mouse_init ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4628 }
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4629
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4630 #ifndef HAVE_X_WINDOWS
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4631 #if __DJGPP__ >= 2
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4632 /* Save the cursor shape used outside Emacs. */
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4633 outside_cursor = _farpeekw (_dos_ds, 0x460);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4634 #endif
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4635 #endif
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4636 }
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4637
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4638 first_time = 0;
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 #if __DJGPP__ >= 2
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4641
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4642 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
4643 return (stdin_stat != -1);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4644 }
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4645 else
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4646 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
4647
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4648 #else /* __DJGPP__ < 2 */
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4649
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4650 }
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4651
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4652 /* 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
4653 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
4654 want to change the way it used to work in v1.x.--EZ */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4655
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4656 inregs.x.ax = 0x4400; /* Get IOCTL status. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4657 inregs.x.bx = 0x00; /* 0 = stdin. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4658 intdos (&inregs, &outregs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4659 stdin_stat = outregs.h.dl;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4660
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4661 inregs.x.dx = stdin_stat | 0x0020; /* raw mode */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4662 inregs.x.ax = 0x4401; /* Set IOCTL status */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4663 intdos (&inregs, &outregs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4664 return !outregs.x.cflag;
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4665
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4666 #endif /* __DJGPP__ < 2 */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4667 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4668
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4669 /* 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
4670
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4671 int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4672 dos_ttcooked ()
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4673 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4674 union REGS inregs, outregs;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4675
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4676 setcbrk (break_stat);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4677 mouse_off ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4678
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4679 #if __DJGPP__ >= 2
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4680
28092
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4681 #ifndef HAVE_X_WINDOWS
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4682 /* 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
4683 if (outside_cursor)
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4684 {
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4685 inregs.h.ah = 1;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4686 inregs.x.cx = outside_cursor;
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4687 int86 (0x10, &inregs, &outregs);
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4688 }
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4689 #endif
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
4690
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4691 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
4692
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4693 #else /* not __DJGPP__ >= 2 */
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4694
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4695 inregs.x.ax = 0x4401; /* Set IOCTL status. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4696 inregs.x.bx = 0x00; /* 0 = stdin. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4697 inregs.x.dx = stdin_stat;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4698 intdos (&inregs, &outregs);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4699 return !outregs.x.cflag;
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4700
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4701 #endif /* not __DJGPP__ >= 2 */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4702 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4703
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4704
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4705 /* 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
4706 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
4707 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
4708
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4709 int
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4710 run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv)
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4711 unsigned char **argv;
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4712 const char *working_dir;
13718
e1b33f87545f (run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents: 13717
diff changeset
4713 int tempin, tempout, temperr;
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4714 char **envv;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4715 {
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4716 char *saveargv1, *saveargv2, *lowcase_argv0, *pa, *pl;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4717 char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4718 int msshell, result = -1, inbak, outbak, errbak, x, y;
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4719 Lisp_Object cmd;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4720
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4721 /* Get current directory as MSDOS cwd is not per-process. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4722 getwd (oldwd);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4723
16310
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4724 /* 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
4725 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
4726 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
4727 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
4728 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
4729 {
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4730 *pl = *pa++;
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4731 if (*pl >= 'A' && *pl <= 'Z')
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4732 *pl += 'a' - 'A';
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4733 }
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4734 *pl = '\0';
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4735
c987c025d448 (run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents: 16210
diff changeset
4736 cmd = Ffile_name_nondirectory (build_string (lowcase_argv0));
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4737 msshell = !NILP (Fmember (cmd, Fsymbol_value (intern ("msdos-shells"))))
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4738 && !strcmp ("-c", argv[1]);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4739 if (msshell)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4740 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4741 saveargv1 = argv[1];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4742 saveargv2 = argv[2];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4743 argv[1] = "/c";
30529
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4744 /* 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
4745 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
4746 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
4747 if (argv[2] && argv[3])
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4748 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4749 char *p = alloca (strlen (argv[2]) + 1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4750
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4751 strcpy (argv[2] = p, saveargv2);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4752 while (*p && isspace (*p))
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4753 p++;
30529
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4754 while (*p)
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4755 {
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4756 if (*p == '/')
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4757 *p++ = '\\';
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4758 else
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4759 p++;
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4760 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4761 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4762 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4763
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4764 chdir (working_dir);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4765 inbak = dup (0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4766 outbak = dup (1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4767 errbak = dup (2);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4768 if (inbak < 0 || outbak < 0 || errbak < 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4769 goto done; /* Allocation might fail due to lack of descriptors. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4770
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4771 if (have_mouse > 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4772 mouse_get_xy (&x, &y);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4773
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4774 dos_ttcooked (); /* do it here while 0 = stdin */
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4775
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4776 dup2 (tempin, 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4777 dup2 (tempout, 1);
13718
e1b33f87545f (run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents: 13717
diff changeset
4778 dup2 (temperr, 2);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4779
15125
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4780 #if __DJGPP__ > 1
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4781
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4782 if (msshell && !argv[3])
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4783 {
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4784 /* 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
4785 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
4786 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
4787
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4788 const char *cmnd;
15125
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4789
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4790 /* 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
4791 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
4792
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4793 /* 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
4794 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
4795 which will hang Emacs. */
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4796 for (cmnd = saveargv2; *cmnd && isspace (*cmnd); cmnd++)
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4797 ;
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4798 if (*cmnd)
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4799 {
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4800 extern char **environ;
30529
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4801 char **save_env = environ;
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4802 int save_system_flags = __system_flags;
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4803
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4804 /* 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
4805 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
4806 __system_flags = (__system_redirect
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4807 | __system_use_shell
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4808 | __system_allow_multiple_cmds
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4809 | __system_allow_long_cmds
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4810 | __system_handle_null_commands
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4811 | __system_emulate_chdir);
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4812
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4813 environ = envv;
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4814 result = system (cmnd);
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4815 __system_flags = save_system_flags;
30529
788ce16426e3 (run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents: 30381
diff changeset
4816 environ = save_env;
21693
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4817 }
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4818 else
fc0153e88b71 (run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents: 21583
diff changeset
4819 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
4820 }
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4821 else
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4822
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4823 #endif /* __DJGPP__ > 1 */
4dc406e38d68 (dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents: 15096
diff changeset
4824
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4825 result = spawnve (P_WAIT, argv[0], argv, envv);
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4826
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4827 dup2 (inbak, 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4828 dup2 (outbak, 1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4829 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
4830 emacs_close (inbak);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25214
diff changeset
4831 emacs_close (outbak);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25214
diff changeset
4832 emacs_close (errbak);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4833
13274
712386e1abe0 Whitespace changes.
Richard M. Stallman <rms@gnu.org>
parents: 13179
diff changeset
4834 dos_ttraw ();
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4835 if (have_mouse > 0)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4836 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4837 mouse_init ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4838 mouse_moveto (x, y);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4839 }
16837
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
4840
7370bcad5cb1 (bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents: 16763
diff changeset
4841 /* 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
4842 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
4843 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
4844 bright_bg ();
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4845
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4846 done:
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4847 chdir (oldwd);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4848 if (msshell)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4849 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4850 argv[1] = saveargv1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4851 argv[2] = saveargv2;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4852 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4853 return result;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4854 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4855
46954
6c7dc88b9a5d (croak): Add `void' to definition.
Eli Zaretskii <eliz@gnu.org>
parents: 46370
diff changeset
4856 void
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4857 croak (badfunc)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4858 char *badfunc;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4859 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4860 fprintf (stderr, "%s not yet implemented\r\n", badfunc);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4861 reset_sys_modes ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4862 exit (1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4863 }
13848
5f38596d591e (have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 13744
diff changeset
4864
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4865 #if __DJGPP__ < 2
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4866
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4867 /* ------------------------- Compatibility functions -------------------
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4868 * gethostname
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4869 * gettimeofday
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4870 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4871
14413
77ed54321a41 (dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents: 14284
diff changeset
4872 /* 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
4873 but they are used in change log so we emulate the best we can. */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4874
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4875 gethostname (p, size)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4876 char *p;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4877 int size;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4878 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4879 char *q = egetenv ("HOSTNAME");
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4880
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4881 if (!q) q = "pc";
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4882 strcpy (p, q);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4883 return 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4884 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4885
13394
c4549fcdd5f3 (the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents: 13305
diff changeset
4886 /* When time zones are set from Ms-Dos too many C-libraries are playing
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4887 tricks with time values. We solve this by defining our own version
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4888 of `gettimeofday' bypassing GO32. Our version needs to be initialized
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49381
diff changeset
4889 once and after each call to `tzset' with TZ changed. That is
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4890 accomplished by aliasing tzset to init_gettimeofday. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4891
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4892 static struct tm time_rec;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4893
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4894 int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4895 gettimeofday (struct timeval *tp, struct timezone *tzp)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4896 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4897 if (tp)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4898 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4899 struct time t;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4900 struct tm tm;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4901
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4902 gettime (&t);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4903 if (t.ti_hour < time_rec.tm_hour) /* midnight wrap */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4904 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4905 struct date d;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4906 getdate (&d);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4907 time_rec.tm_year = d.da_year - 1900;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4908 time_rec.tm_mon = d.da_mon - 1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4909 time_rec.tm_mday = d.da_day;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4910 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4911
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4912 time_rec.tm_hour = t.ti_hour;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4913 time_rec.tm_min = t.ti_min;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4914 time_rec.tm_sec = t.ti_sec;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4915
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4916 tm = time_rec;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4917 tm.tm_gmtoff = dos_timezone_offset;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4918
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4919 tp->tv_sec = mktime (&tm); /* may modify tm */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4920 tp->tv_usec = t.ti_hund * (1000000 / 100);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4921 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4922 /* Ignore tzp; it's obsolescent. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4923 return 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4924 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4925
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4926 #endif /* __DJGPP__ < 2 */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4927
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4928 /*
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4929 * A list of unimplemented functions that we silently ignore.
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4930 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4931
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4932 #if __DJGPP__ < 2
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4933 unsigned alarm (s) unsigned s; {}
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4934 fork () { return 0; }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4935 int kill (x, y) int x, y; { return -1; }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4936 nice (p) int p; {}
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4937 void volatile pause () {}
14974
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4938 sigsetmask (x) int x; { return 0; }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4939 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
4940 #endif
b99490300747 [MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents: 14783
diff changeset
4941
21415
e6d49d55ea7e (request_sigio, unrequest_sigio): Make consistent with
Karl Heuer <kwzh@gnu.org>
parents: 20240
diff changeset
4942 void request_sigio (void) {}
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4943 setpgrp () {return 0; }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
4944 setpriority (x,y,z) int x,y,z; { return 0; }
21415
e6d49d55ea7e (request_sigio, unrequest_sigio): Make consistent with
Karl Heuer <kwzh@gnu.org>
parents: 20240
diff changeset
4945 void unrequest_sigio (void) {}
16872
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4946
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4947 #if __DJGPP__ > 1
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
4948 #if __DJGPP_MINOR__ < 2
16872
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 #ifdef POSIX_SIGNALS
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4951
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4952 /* 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
4953 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
4954
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4955 #include <libc/bss.h>
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 /* 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
4958 static int sigprocmask_count = -1;
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 /* Which signals are currently blocked (initially none). */
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4961 static sigset_t current_mask;
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 /* Which signals are pending (initially none). */
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4964 static sigset_t pending_signals;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4965
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4966 /* 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
4967 typedef void (*sighandler_t)(int);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4968 static sighandler_t prev_handlers[320];
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4969
46272
2406cf2da1d4 Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 45803
diff changeset
4970 /* 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
4971 (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
4972 static void
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4973 sig_suspender (signo)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4974 int signo;
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 sigaddset (&pending_signals, signo);
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
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4979 int
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4980 sigprocmask (how, new_set, old_set)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4981 int how;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4982 const sigset_t *new_set;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4983 sigset_t *old_set;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4984 {
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4985 int signo;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4986 sigset_t new_mask;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4987
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4988 /* If called for the first time, initialize. */
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4989 if (sigprocmask_count != __bss_count)
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 sigprocmask_count = __bss_count;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4992 sigemptyset (&pending_signals);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4993 sigemptyset (&current_mask);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4994 for (signo = 0; signo < 320; signo++)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4995 prev_handlers[signo] = SIG_ERR;
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
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4998 if (old_set)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
4999 *old_set = current_mask;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5000
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5001 if (new_set == 0)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5002 return 0;
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 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
5005 {
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5006 errno = EINVAL;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5007 return -1;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5008 }
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 sigemptyset (&new_mask);
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 /* DJGPP supports upto 320 signals. */
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5013 for (signo = 0; signo < 320; 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 if (sigismember (&current_mask, signo))
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5016 sigaddset (&new_mask, signo);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5017 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
5018 {
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5019 sigaddset (&new_mask, signo);
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 /* SIGKILL is silently ignored, as on other platforms. */
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5022 if (signo != SIGKILL && prev_handlers[signo] == SIG_ERR)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5023 prev_handlers[signo] = signal (signo, sig_suspender);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5024 }
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5025 if (( how == SIG_UNBLOCK
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5026 && sigismember (&new_mask, signo)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5027 && sigismember (new_set, signo))
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5028 || (how == SIG_SETMASK
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5029 && sigismember (&new_mask, signo)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5030 && !sigismember (new_set, signo)))
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5031 {
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5032 sigdelset (&new_mask, signo);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5033 if (prev_handlers[signo] != SIG_ERR)
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5034 {
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5035 signal (signo, prev_handlers[signo]);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5036 prev_handlers[signo] = SIG_ERR;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5037 }
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5038 if (sigismember (&pending_signals, signo))
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5039 {
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5040 sigdelset (&pending_signals, signo);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5041 raise (signo);
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5042 }
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5043 }
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5044 }
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5045 current_mask = new_mask;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5046 return 0;
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5047 }
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5048
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5049 #else /* not POSIX_SIGNALS */
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5050
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5051 sigsetmask (x) int x; { return 0; }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49381
diff changeset
5052 sigblock (mask) int mask; { return 0; }
16872
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5053
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5054 #endif /* not POSIX_SIGNALS */
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
5055 #endif /* not __DJGPP_MINOR__ < 2 */
16872
1efa81ac7e5a * (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents: 16871
diff changeset
5056 #endif /* __DJGPP__ > 1 */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5057
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5058 #ifndef HAVE_SELECT
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5059 #include "sysselect.h"
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5060
14279
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5061 #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
5062 #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
5063 ((long)(time).tv_sec < 0 \
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5064 || ((time).tv_sec == 0 \
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5065 && (long)(time).tv_usec <= 0))
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5066 #endif
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5067
22481
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5068 /* 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
5069 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
5070 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
5071
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5072 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
5073 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
5074 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
5075
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5076 void
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5077 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
5078 {
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5079 _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
5080
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5081 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
5082 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
5083 _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
5084 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
5085 errno = ENOSYS;
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5086 }
14279
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5087
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5088 /* Only event queue is checked. */
14999
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
5089 /* We don't have to call timer_check here
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
5090 because wait_reading_process_input takes care of that. */
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5091 int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5092 sys_select (nfds, rfds, wfds, efds, timeout)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5093 int nfds;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5094 SELECT_TYPE *rfds, *wfds, *efds;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5095 EMACS_TIME *timeout;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5096 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5097 int check_input;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5098 struct time t;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5099
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5100 check_input = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5101 if (rfds)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5102 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5103 check_input = FD_ISSET (0, rfds);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5104 FD_ZERO (rfds);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5105 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5106 if (wfds)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5107 FD_ZERO (wfds);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5108 if (efds)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5109 FD_ZERO (efds);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5110
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5111 if (nfds != 1)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5112 abort ();
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
5113
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5114 /* If we are looking only for the terminal, with no timeout,
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5115 just read it and wait -- that's more efficient. */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5116 if (!timeout)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5117 {
15033
9e174c2b4ba6 (check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents: 14999
diff changeset
5118 while (!detect_input_pending ())
9e174c2b4ba6 (check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents: 14999
diff changeset
5119 {
22481
c19803db4a93 (dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents: 22054
diff changeset
5120 dos_yield_time_slice ();
15033
9e174c2b4ba6 (check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents: 14999
diff changeset
5121 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5122 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5123 else
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5124 {
14279
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5125 EMACS_TIME clnow, cllast, cldiff;
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5126
15033
9e174c2b4ba6 (check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents: 14999
diff changeset
5127 gettime (&t);
14279
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5128 EMACS_SET_SECS_USECS (cllast, t.ti_sec, t.ti_hund * 10000L);
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5129
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5130 while (!check_input || !detect_input_pending ())
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5131 {
15033
9e174c2b4ba6 (check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents: 14999
diff changeset
5132 gettime (&t);
14279
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5133 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
5134 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
5135
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5136 /* 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
5137 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
5138 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
5139 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
5140 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
5141
085bc709c11d (sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents: 14262
diff changeset
5142 /* 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
5143 if (EMACS_TIME_ZERO_OR_NEG_P (*timeout))
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5144 return 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5145 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
5146 dos_yield_time_slice ();
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5147 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5148 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
5149
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5150 FD_SET (0, rfds);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5151 return 1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5152 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5153 #endif
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5154
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5155 /*
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13860
diff changeset
5156 * Define overlaid functions:
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5157 *
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5158 * chdir -> sys_chdir
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5159 * tzset -> init_gettimeofday
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5160 * abort -> dos_abort
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5161 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5162
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5163 #ifdef chdir
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5164 #undef chdir
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5165 extern int chdir ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5166
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5167 int
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5168 sys_chdir (path)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5169 const char* path;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5170 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5171 int len = strlen (path);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5172 char *tmp = (char *)path;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5173
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5174 if (*tmp && tmp[1] == ':')
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5175 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5176 if (getdisk () != tolower (tmp[0]) - 'a')
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5177 setdisk (tolower (tmp[0]) - 'a');
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5178 tmp += 2; /* strip drive: KFS 1995-07-06 */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5179 len -= 2;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5180 }
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
5181
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5182 if (len > 1 && (tmp[len - 1] == '/'))
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5183 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5184 char *tmp1 = (char *) alloca (len + 1);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5185 strcpy (tmp1, tmp);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5186 tmp1[len - 1] = 0;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5187 tmp = tmp1;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5188 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5189 return chdir (tmp);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5190 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5191 #endif
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5192
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5193 #ifdef tzset
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5194 #undef tzset
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5195 extern void tzset (void);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5196
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5197 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5198 init_gettimeofday ()
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5199 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5200 time_t ltm, gtm;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5201 struct tm *lstm;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5202
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5203 tzset ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5204 ltm = gtm = time (NULL);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5205 ltm = mktime (lstm = localtime (&ltm));
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5206 gtm = mktime (gmtime (&gtm));
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5207 time_rec.tm_hour = 99; /* force gettimeofday to get date */
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5208 time_rec.tm_isdst = lstm->tm_isdst;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5209 dos_timezone_offset = time_rec.tm_gmtoff = (int)(gtm - ltm) / 60;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5210 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5211 #endif
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5212
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5213 #ifdef abort
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5214 #undef abort
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5215 void
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5216 dos_abort (file, line)
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5217 char *file;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5218 int line;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5219 {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5220 char buffer1[200], buffer2[400];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5221 int i, j;
45332
a5bfb38230e3 Fix whitespace.
Eli Zaretskii <eliz@gnu.org>
parents: 44695
diff changeset
5222
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5223 sprintf (buffer1, "<EMACS FATAL ERROR IN %s LINE %d>", file, line);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5224 for (i = j = 0; buffer1[i]; i++) {
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5225 buffer2[j++] = buffer1[i];
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5226 buffer2[j++] = 0x70;
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5227 }
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5228 dosmemput (buffer2, j, (int)ScreenPrimary);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5229 ScreenSetCursor (2, 0);
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5230 abort ();
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5231 }
13744
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5232 #else
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5233 void
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5234 abort ()
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5235 {
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5236 dos_ttcooked ();
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5237 ScreenSetCursor (10, 0);
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5238 cputs ("\r\n\nEmacs aborted!\r\n");
14999
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
5239 #if __DJGPP__ > 1
20240
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
5240 #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 2
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
5241 if (screen_virtual_segment)
963e9cda8f04 Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents: 20036
diff changeset
5242 dosv_refresh_virtual_screen (2 * 10 * screen_size_X, 4 * screen_size_X);
14999
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
5243 /* Generate traceback, so we could tell whodunit. */
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
5244 signal (SIGINT, SIG_DFL);
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
5245 __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
5246 #else /* __DJGPP_MINOR__ >= 2 */
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
5247 raise (SIGABRT);
7e59f6e590da (struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents: 24001
diff changeset
5248 #endif /* __DJGPP_MINOR__ >= 2 */
14999
3bafb8029b86 Include signal.h.
Richard M. Stallman <rms@gnu.org>
parents: 14974
diff changeset
5249 #endif
13744
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5250 exit (2);
120c884de8a2 (check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents: 13718
diff changeset
5251 }
13179
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5252 #endif
b0de215331ba [!HAVE_X_WINDOWS]:
Kim F. Storm <storm@cua.dk>
parents: 13040
diff changeset
5253
26729
f5dded41adcc Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents: 26088
diff changeset
5254 /* 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
5255 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
5256 #ifndef subprocesses
c7cec07cb0e0 (syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents: 19295
diff changeset
5257 /* 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
5258 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
5259 #endif
c7cec07cb0e0 (syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents: 19295
diff changeset
5260
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
5261 syms_of_msdos ()
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 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
5264 staticpro (&recent_doskeys);
50225
39746533995d Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents: 49600
diff changeset
5265
19334
c7cec07cb0e0 (syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents: 19295
diff changeset
5266 #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
5267
32271
4ff70fe0d99b (top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents: 30840
diff changeset
5268 /* 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
5269 Qreverse = intern ("reverse");
ce3bf4da00a9 (vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents: 28008
diff changeset
5270 staticpro (&Qreverse);
23825
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
5271
085b163b6115 (Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 23815
diff changeset
5272 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
5273 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
5274 This variable is used only by MSDOS terminals. */);
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 41406
diff changeset
5275 Vdos_unsupported_char_glyph = '\177';
43357
c89a11a2baf6 (x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 43236
diff changeset
5276
19334
c7cec07cb0e0 (syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents: 19295
diff changeset
5277 #endif
c7cec07cb0e0 (syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents: 19295
diff changeset
5278 #ifndef subprocesses
c7cec07cb0e0 (syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents: 19295
diff changeset
5279 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
5280 doc: /* *Non-nil means delete processes immediately when they exit.
63819c5d6049 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 41406
diff changeset
5281 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
5282 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
5283 #endif
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
5284
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
5285 defsubr (&Srecent_doskeys);
15186
242bddc25e5a (syms_of_msdos): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 15174
diff changeset
5286 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
5287 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
5288 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
5289 defsubr (&Smsdos_set_mouse_buttons);
13305
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
5290 }
63a43c4b29b2 (IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents: 13274
diff changeset
5291
5503
003e84b91d21 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5292 #endif /* MSDOS */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52315
diff changeset
5293
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52315
diff changeset
5294 /* arch-tag: db404e92-52a5-475f-9eb2-1cb78dd05f30
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52315
diff changeset
5295 (do not change this comment) */