diff options
Diffstat (limited to 'src/msdos.c')
-rw-r--r-- | src/msdos.c | 287 |
1 files changed, 130 insertions, 157 deletions
diff --git a/src/msdos.c b/src/msdos.c index ea604d29992..897963bb24a 100644 --- a/src/msdos.c +++ b/src/msdos.c @@ -35,7 +35,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <sys/time.h> #include <dos.h> #include <errno.h> -#include <string.h> /* for bzero and string functions */ +#include <string.h> /* for memset and string functions */ #include <sys/stat.h> /* for _fixpath */ #include <unistd.h> /* for chdir, dup, dup2, etc. */ #include <dir.h> /* for getdisk */ @@ -102,7 +102,7 @@ int _crt0_startup_flags = (_CRT0_FLAG_UNIX_SBRK | _CRT0_FLAG_FILL_SBRK_MEMORY); #endif /* not SYSTEM_MALLOC */ static unsigned long -event_timestamp () +event_timestamp (void) { struct time t; unsigned long s; @@ -138,7 +138,7 @@ static int mouse_button_translate[NUM_MOUSE_BUTTONS]; static int mouse_button_count; void -mouse_on () +mouse_on (void) { union REGS regs; @@ -155,7 +155,7 @@ mouse_on () } void -mouse_off () +mouse_off (void) { union REGS regs; @@ -222,8 +222,7 @@ mouse_get_xy (int *x, int *y) } void -mouse_moveto (x, y) - int x, y; +mouse_moveto (int x, int y) { union REGS regs; struct tty_display_info *tty = CURTTY (); @@ -237,8 +236,7 @@ mouse_moveto (x, y) } static int -mouse_pressed (b, xp, yp) - int b, *xp, *yp; +mouse_pressed (int b, int *xp, int *yp) { union REGS regs; @@ -253,8 +251,7 @@ mouse_pressed (b, xp, yp) } static int -mouse_released (b, xp, yp) - int b, *xp, *yp; +mouse_released (int b, int *xp, int *yp) { union REGS regs; @@ -269,8 +266,7 @@ mouse_released (b, xp, yp) } static int -mouse_button_depressed (b, xp, yp) - int b, *xp, *yp; +mouse_button_depressed (int b, int *xp, int *yp) { union REGS regs; @@ -288,12 +284,9 @@ mouse_button_depressed (b, xp, yp) } void -mouse_get_pos (f, insist, bar_window, part, x, y, time) - FRAME_PTR *f; - int insist; - Lisp_Object *bar_window, *x, *y; - enum scroll_bar_part *part; - unsigned long *time; +mouse_get_pos (FRAME_PTR *f, int insist, Lisp_Object *bar_window, + enum scroll_bar_part *part, Lisp_Object *x, Lisp_Object *y, + unsigned long *time) { int ix, iy; Lisp_Object frame, tail; @@ -311,7 +304,7 @@ mouse_get_pos (f, insist, bar_window, part, x, y, time) } static void -mouse_check_moved () +mouse_check_moved (void) { int x, y; @@ -338,7 +331,7 @@ mouse_clear_clicks (void) } void -mouse_init () +mouse_init (void) { union REGS regs; struct tty_display_info *tty = CURTTY (); @@ -440,10 +433,7 @@ dosv_refresh_virtual_screen (int offset, int count) } static void -dos_direct_output (y, x, buf, len) - int x, y; - char *buf; - int len; +dos_direct_output (int y, int x, char *buf, int len) { int t0 = 2 * (x + y * screen_size_X); int t = t0 + (int) ScreenPrimary; @@ -510,8 +500,7 @@ vga_installed (void) ROWS x COLS frame. */ void -dos_set_window_size (rows, cols) - int *rows, *cols; +dos_set_window_size (int *rows, int *cols) { char video_name[30]; union REGS regs; @@ -620,7 +609,7 @@ dos_set_window_size (rows, cols) the mouse cursor may need to be refreshed. */ static void -mouse_off_maybe () +mouse_off_maybe (void) { int x, y; @@ -1864,10 +1853,7 @@ IT_copy_glyphs (int xfrom, int xto, size_t len, int ypos) /* Insert and delete glyphs. */ static void -IT_insert_glyphs (f, start, len) - struct frame *f; - register struct glyph *start; - register int len; +IT_insert_glyphs (struct frame *f, struct glyph *start, int len) { int shift_by_width = screen_size_X - (new_pos_X + len); @@ -1880,18 +1866,14 @@ IT_insert_glyphs (f, start, len) } static void -IT_delete_glyphs (f, n) - struct frame *f; - register int n; +IT_delete_glyphs (struct frame *f, int n) { abort (); } /* set-window-configuration on window.c needs this. */ void -x_set_menu_bar_lines (f, value, oldval) - struct frame *f; - Lisp_Object value, oldval; +x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) { set_menu_bar_lines (f, value, oldval); } @@ -2080,9 +2062,7 @@ DEFUN ("msdos-remember-default-colors", Fmsdos_remember_default_colors, } void -IT_set_frame_parameters (f, alist) - struct frame *f; - Lisp_Object alist; +IT_set_frame_parameters (struct frame *f, Lisp_Object alist) { Lisp_Object tail; int i, j, length = XINT (Flength (alist)); @@ -2092,33 +2072,27 @@ IT_set_frame_parameters (f, alist) = (Lisp_Object *) alloca (length * sizeof (Lisp_Object)); /* Do we have to reverse the foreground and background colors? */ int reverse = EQ (Fcdr (Fassq (Qreverse, f->param_alist)), Qt); - int need_to_reverse, was_reverse = reverse; int redraw = 0, fg_set = 0, bg_set = 0; unsigned long orig_fg, orig_bg; Lisp_Object frame_bg, frame_fg; - extern Lisp_Object Qdefault, QCforeground, QCbackground; struct tty_display_info *tty = FRAME_TTY (f); + extern Lisp_Object Qmenu_bar_lines; + extern Lisp_Object Vmenu_bar_mode; + int menu_bar_lines_defined = + !NILP (Fassq (Qmenu_bar_lines, Vdefault_frame_alist)); /* If we are creating a new frame, begin with the original screen colors used for the initial frame. */ - if (EQ (alist, Vdefault_frame_alist) + if (!f->default_face_done_p && initial_screen_colors[0] != -1 && initial_screen_colors[1] != -1) { FRAME_FOREGROUND_PIXEL (f) = initial_screen_colors[0]; FRAME_BACKGROUND_PIXEL (f) = initial_screen_colors[1]; init_frame_faces (f); + f->default_face_done_p = 1; } - orig_fg = FRAME_FOREGROUND_PIXEL (f); - orig_bg = FRAME_BACKGROUND_PIXEL (f); - frame_fg = Fcdr (Fassq (Qforeground_color, f->param_alist)); - frame_bg = Fcdr (Fassq (Qbackground_color, f->param_alist)); - /* frame_fg and frame_bg could be nil if, for example, - f->param_alist is nil, e.g. if we are called from - Fmake_terminal_frame. */ - if (NILP (frame_fg)) - frame_fg = build_string (unspecified_fg); - if (NILP (frame_bg)) - frame_bg = build_string (unspecified_bg); + orig_fg = reverse ? FRAME_BACKGROUND_PIXEL (f) : FRAME_FOREGROUND_PIXEL (f); + orig_bg = reverse ? FRAME_FOREGROUND_PIXEL (f) : FRAME_BACKGROUND_PIXEL (f); /* Extract parm names and values into those vectors. */ i = 0; @@ -2144,60 +2118,79 @@ IT_set_frame_parameters (f, alist) if (EQ (prop, Qreverse)) reverse = EQ (val, Qt); + else if (!menu_bar_lines_defined && EQ (prop, Qmenu_bar_lines)) + menu_bar_lines_defined = 1; } - need_to_reverse = reverse && !was_reverse; - if (tty->termscript && need_to_reverse) + if (tty->termscript && reverse) fprintf (tty->termscript, "<INVERSE-VIDEO>\n"); /* Now process the alist elements in reverse of specified order. */ for (i--; i >= 0; i--) { - Lisp_Object prop, val, frame; + Lisp_Object prop, val; prop = parms[i]; val = values[i]; if (EQ (prop, Qforeground_color)) { - unsigned long new_color = load_color (f, NULL, val, need_to_reverse + unsigned long new_color = load_color (f, NULL, val, reverse ? LFACE_BACKGROUND_INDEX : LFACE_FOREGROUND_INDEX); if (new_color != FACE_TTY_DEFAULT_COLOR && new_color != FACE_TTY_DEFAULT_FG_COLOR && new_color != FACE_TTY_DEFAULT_BG_COLOR) { - FRAME_FOREGROUND_PIXEL (f) = new_color; - /* Make sure the foreground of the default face for this - frame is changed as well. */ - XSETFRAME (frame, f); - Finternal_set_lisp_face_attribute (Qdefault, QCforeground, - val, frame); - fg_set = 1; + if (!reverse) + { + FRAME_FOREGROUND_PIXEL (f) = new_color; + /* Make sure the foreground of the default face for + this frame is changed as well. */ + update_face_from_frame_parameter (f, Qforeground_color, val); + fg_set = 1; + if (tty->termscript) + fprintf (tty->termscript, "<FGCOLOR %lu>\n", new_color); + } + else + { + FRAME_BACKGROUND_PIXEL (f) = new_color; + update_face_from_frame_parameter (f, Qbackground_color, val); + bg_set = 1; + if (tty->termscript) + fprintf (tty->termscript, "<BGCOLOR %lu>\n", new_color); + } redraw = 1; - if (tty->termscript) - fprintf (tty->termscript, "<FGCOLOR %lu>\n", new_color); } } else if (EQ (prop, Qbackground_color)) { - unsigned long new_color = load_color (f, NULL, val, need_to_reverse + unsigned long new_color = load_color (f, NULL, val, reverse ? LFACE_FOREGROUND_INDEX : LFACE_BACKGROUND_INDEX); if (new_color != FACE_TTY_DEFAULT_COLOR && new_color != FACE_TTY_DEFAULT_FG_COLOR && new_color != FACE_TTY_DEFAULT_BG_COLOR) { - FRAME_BACKGROUND_PIXEL (f) = new_color; - /* Make sure the background of the default face for this - frame is changed as well. */ - XSETFRAME (frame, f); - Finternal_set_lisp_face_attribute (Qdefault, QCbackground, - val, frame); - bg_set = 1; + if (!reverse) + { + FRAME_BACKGROUND_PIXEL (f) = new_color; + /* Make sure the background of the default face for + this frame is changed as well. */ + bg_set = 1; + update_face_from_frame_parameter (f, Qbackground_color, val); + if (tty->termscript) + fprintf (tty->termscript, "<BGCOLOR %lu>\n", new_color); + } + else + { + FRAME_FOREGROUND_PIXEL (f) = new_color; + fg_set = 1; + update_face_from_frame_parameter (f, Qforeground_color, val); + if (tty->termscript) + fprintf (tty->termscript, "<FGCOLOR %lu>\n", new_color); + } redraw = 1; - if (tty->termscript) - fprintf (tty->termscript, "<BGCOLOR %lu>\n", new_color); } } else if (EQ (prop, Qtitle)) @@ -2226,26 +2219,36 @@ IT_set_frame_parameters (f, alist) store_frame_param (f, prop, val); } + /* If menu-bar-lines is neither in the frame parameters nor in + default-frame-alist, set it according to menu-bar-mode. */ + if (!menu_bar_lines_defined) + { + store_frame_param (f, Qmenu_bar_lines, + NILP (Vmenu_bar_mode) + ? make_number (0) : make_number (1)); + if (tty->termscript) + fprintf (tty->termscript, "<MENU BAR LINES DEFAULTED: %d\n", + !NILP (Vmenu_bar_mode)); + } + /* If they specified "reverse", but not the colors, we need to swap the current frame colors. */ - if (need_to_reverse) + if (reverse) { Lisp_Object frame; if (!fg_set) { - XSETFRAME (frame, f); - Finternal_set_lisp_face_attribute (Qdefault, QCforeground, - tty_color_name (f, orig_bg), - frame); + FRAME_FOREGROUND_PIXEL (f) = orig_bg; + update_face_from_frame_parameter (f, Qforeground_color, + tty_color_name (f, orig_bg)); redraw = 1; } if (!bg_set) { - XSETFRAME (frame, f); - Finternal_set_lisp_face_attribute (Qdefault, QCbackground, - tty_color_name (f, orig_fg), - frame); + FRAME_BACKGROUND_PIXEL (f) = orig_fg; + update_face_from_frame_parameter (f, Qbackground_color, + tty_color_name (f, orig_fg)); redraw = 1; } } @@ -2266,7 +2269,7 @@ extern void init_frame_faces (FRAME_PTR); /* Do we need the internal terminal? */ void -internal_terminal_init () +internal_terminal_init (void) { static int init_needed = 1; char *term = getenv ("TERM"), *colors; @@ -2402,10 +2405,8 @@ initialize_msdos_display (struct terminal *term) term->read_socket_hook = &tty_read_avail_input; /* from keyboard.c */ } -dos_get_saved_screen (screen, rows, cols) - char **screen; - int *rows; - int *cols; +int +dos_get_saved_screen (char **screen, int *rows, int *cols) { #ifndef HAVE_X_WINDOWS *screen = startup_screen_buffer; @@ -2564,9 +2565,7 @@ static int keyboard_map_all; static int international_keyboard; int -dos_set_keyboard (code, always) - int code; - int always; +dos_set_keyboard (int code, int always) { int i; _go32_dpmi_registers regs; @@ -2833,8 +2832,7 @@ ibmpc_translate_map[] = #define HYPER_P 0x8000 /* pseudo */ static int -dos_get_modifiers (keymask) - int *keymask; +dos_get_modifiers (int *keymask) { union REGS regs; int mask, modifiers = 0; @@ -2916,7 +2914,7 @@ dos_get_modifiers (keymask) #define NUM_RECENT_DOSKEYS (100) int recent_doskeys_index; /* Index for storing next element into recent_doskeys */ int total_doskeys; /* Total number of elements stored into recent_doskeys */ -Lisp_Object recent_doskeys; /* A vector, holding the last 100 keystrokes */ +Lisp_Object recent_doskeys; /* A vector, holding the last 100 keystrokes */ DEFUN ("recent-doskeys", Frecent_doskeys, Srecent_doskeys, 0, 0, 0, doc: /* Return vector of last 100 keyboard input values seen in dos_rawgetc. @@ -2931,19 +2929,17 @@ and then the scan code. */) else { val = Fvector (NUM_RECENT_DOSKEYS, keys); - bcopy (keys + recent_doskeys_index, - XVECTOR (val)->contents, - (NUM_RECENT_DOSKEYS - recent_doskeys_index) * sizeof (Lisp_Object)); - bcopy (keys, - XVECTOR (val)->contents + NUM_RECENT_DOSKEYS - recent_doskeys_index, - recent_doskeys_index * sizeof (Lisp_Object)); + memcpy (XVECTOR (val)->contents, keys + recent_doskeys_index, + (NUM_RECENT_DOSKEYS - recent_doskeys_index) * sizeof (Lisp_Object)); + memcpy (XVECTOR (val)->contents + NUM_RECENT_DOSKEYS - recent_doskeys_index, + keys, recent_doskeys_index * sizeof (Lisp_Object)); return val; } } /* Get a char from keyboard. Function keys are put into the event queue. */ static int -dos_rawgetc () +dos_rawgetc (void) { struct input_event event; union REGS regs; @@ -3294,8 +3290,8 @@ dos_rawgetc () static int prev_get_char = -1; /* Return 1 if a key is ready to be read without suspending execution. */ - -dos_keysns () +int +dos_keysns (void) { if (prev_get_char != -1) return 1; @@ -3304,8 +3300,8 @@ dos_keysns () } /* Read a key. Return -1 if no key is ready. */ - -dos_keyread () +int +dos_keyread (void) { if (prev_get_char != -1) { @@ -3334,7 +3330,7 @@ static char *menu_help_message, *prev_menu_help_message; static int menu_help_paneno, menu_help_itemno; static XMenu * -IT_menu_create () +IT_menu_create (void) { XMenu *menu; @@ -3503,7 +3499,7 @@ IT_menu_display (XMenu *menu, int y, int x, int pn, int *faces, int disp_help) /* Report availability of menus. */ int -have_menus_p () { return 1; } +have_menus_p (void) { return 1; } /* Create a brand new menu structure. */ @@ -3861,8 +3857,7 @@ void msdos_downcase_filename (unsigned char *); /* Destructively turn backslashes into slashes. */ void -dostounix_filename (p) - register char *p; +dostounix_filename (char *p) { msdos_downcase_filename (p); @@ -3877,8 +3872,7 @@ dostounix_filename (p) /* Destructively turn slashes into backslashes. */ void -unixtodos_filename (p) - register char *p; +unixtodos_filename (char *p) { if (p[1] == ':' && *p >= 'A' && *p <= 'Z') { @@ -3897,9 +3891,7 @@ unixtodos_filename (p) /* Get the default directory for a given drive. 0=def, 1=A, 2=B, ... */ int -getdefdir (drive, dst) - int drive; - char *dst; +getdefdir (int drive, char *dst) { char in_path[4], *p = in_path, e = errno; @@ -3938,9 +3930,7 @@ emacs_root_dir (void) /* Remove all CR's that are followed by a LF. */ int -crlf_to_lf (n, buf) - register int n; - register unsigned char *buf; +crlf_to_lf (int n, unsigned char *buf) { unsigned char *np = buf, *startp = buf, *endp = buf + n; @@ -3972,8 +3962,7 @@ DEFUN ("msdos-long-file-names", Fmsdos_long_file_names, Smsdos_long_file_names, /* Convert alphabetic characters in a filename to lower-case. */ void -msdos_downcase_filename (p) - register unsigned char *p; +msdos_downcase_filename (unsigned char *p) { /* Always lower-case drive letters a-z, even if the filesystem preserves case in filenames. @@ -4017,8 +4006,7 @@ The argument object is never altered--the value is a copy. */) static char emacsroot[MAXPATHLEN]; char * -rootrelativepath (rel) - char *rel; +rootrelativepath (char *rel) { static char result[MAXPATHLEN + 10]; @@ -4033,10 +4021,7 @@ rootrelativepath (rel) break if one or more of these are missing. */ void -init_environment (argc, argv, skip_args) - int argc; - char **argv; - int skip_args; +init_environment (int argc, char **argv, int skip_args) { char *s, *t, *root; int len, i; @@ -4270,7 +4255,7 @@ dos_ttraw (struct tty_display_info *tty) /* Restore status of standard input and Ctrl-C checking. */ int -dos_ttcooked () +dos_ttcooked (void) { union REGS inregs, outregs; @@ -4296,11 +4281,8 @@ dos_ttcooked () file TEMPOUT and stderr to TEMPERR. */ int -run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv) - unsigned char **argv; - const char *working_dir; - int tempin, tempout, temperr; - char **envv; +run_msdos_command (unsigned char **argv, const char *working_dir, + int tempin, int tempout, int temperr, char **envv) { char *saveargv1, *saveargv2, *lowcase_argv0, *pa, *pl; char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */ @@ -4441,8 +4423,7 @@ run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv) } void -croak (badfunc) - char *badfunc; +croak (char *badfunc) { fprintf (stderr, "%s not yet implemented\r\n", badfunc); reset_all_sys_modes (); @@ -4452,8 +4433,8 @@ croak (badfunc) /* * A few unimplemented functions that we silently ignore. */ -setpgrp () {return 0; } -setpriority (x,y,z) int x,y,z; { return 0; } +int setpgrp (void) {return 0; } +int setpriority (int x, int y, int z) { return 0; } #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 2 @@ -4478,17 +4459,13 @@ static sighandler_t prev_handlers[320]; /* A signal handler which just records that a signal occurred (it will be raised later, if and when the signal is unblocked). */ static void -sig_suspender (signo) - int signo; +sig_suspender (int signo) { sigaddset (&msdos_pending_signals, signo); } int -sigprocmask (how, new_set, old_set) - int how; - const sigset_t *new_set; - sigset_t *old_set; +sigprocmask (int how, const sigset_t *new_set, sigset_t *old_set) { int signo; sigset_t new_mask; @@ -4590,10 +4567,8 @@ dos_yield_time_slice (void) /* We don't have to call timer_check here because wait_reading_process_output takes care of that. */ int -sys_select (nfds, rfds, wfds, efds, timeout) - int nfds; - SELECT_TYPE *rfds, *wfds, *efds; - EMACS_TIME *timeout; +sys_select (int nfds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, + EMACS_TIME *timeout) { int check_input; struct time t; @@ -4663,11 +4638,10 @@ sys_select (nfds, rfds, wfds, efds, timeout) #ifdef chdir #undef chdir -extern int chdir (); +extern int chdir (const char *); int -sys_chdir (path) - const char* path; +sys_chdir (const char *path) { int len = strlen (path); char *tmp = (char *)path; @@ -4696,7 +4670,7 @@ sys_chdir (path) extern void tzset (void); void -init_gettimeofday () +init_gettimeofday (void) { time_t ltm, gtm; struct tm *lstm; @@ -4714,9 +4688,7 @@ init_gettimeofday () #ifdef abort #undef abort void -dos_abort (file, line) - char *file; - int line; +dos_abort (char *file, int line) { char buffer1[200], buffer2[400]; int i, j; @@ -4732,7 +4704,7 @@ dos_abort (file, line) } #else void -abort () +abort (void) { dos_ttcooked (); ScreenSetCursor (10, 0); @@ -4757,7 +4729,8 @@ abort () static int delete_exited_processes; #endif -syms_of_msdos () +void +syms_of_msdos (void) { recent_doskeys = Fmake_vector (make_number (NUM_RECENT_DOSKEYS), Qnil); staticpro (&recent_doskeys); |