mouse_off ();
}
-static
-IT_ring_bell ()
+static void
+IT_ring_bell (void)
{
if (visible_bell)
{
ScreenAttrib = (FACE_BACKGROUND (fp) << 4) | FACE_FOREGROUND (fp);
}
-static
+static void
IT_write_glyphs (GLYPH *str, int len)
{
int newface;
new_pos_X += len;
}
-static
-IT_clear_end_of_line (first_unused)
+static void
+IT_clear_end_of_line (int first_unused)
{
char *spaces, *sp;
int i, j;
dosv_refresh_virtual_screen (offset, i / 2);
}
-static
+static void
IT_clear_screen (void)
{
if (termscript)
new_pos_X = new_pos_Y = 0;
}
-static
+static void
IT_clear_to_end (void)
{
if (termscript)
}
}
-static
+static void
IT_cursor_to (int y, int x)
{
if (termscript)
Special treatment is required when the cursor is in the echo area,
to put the cursor at the end of the text displayed there. */
-static
-IT_cmgoto (f)
- FRAME_PTR f;
+static void
+IT_cmgoto (FRAME_PTR f)
{
/* Only set the cursor to where it should be if the display is
already in sync with the window contents. */
mouse_on ();
}
-static
-IT_reassert_line_highlight (new, vpos)
- int new, vpos;
+static void
+IT_reassert_line_highlight (int new, int vpos)
{
highlight = new;
IT_set_face (0); /* To possibly clear the highlighting. */
}
-static
-IT_change_line_highlight (new_highlight, vpos, first_unused_hpos)
+static void
+IT_change_line_highlight (int new_highlight, int vpos, int first_unused_hpos)
{
highlight = new_highlight;
IT_set_face (0); /* To possibly clear the highlighting. */
IT_clear_end_of_line (first_unused_hpos);
}
-static
-IT_update_begin ()
+static void
+IT_update_begin (struct frame *foo)
{
highlight = 0;
IT_set_face (0); /* To possibly clear the highlighting. */
screen_face = -1;
}
-static
-IT_update_end ()
+static void
+IT_update_end (struct frame *foo)
{
}
/* IT_set_terminal_modes is called when emacs is started,
resumed, and whenever the screen is redrawn! */
-static
+static void
IT_set_terminal_modes (void)
{
if (termscript)
/* IT_reset_terminal_modes is called when emacs is
suspended or killed. */
-static
+static void
IT_reset_terminal_modes (void)
{
int display_row_start = (int) ScreenPrimary;
term_setup_done = 0;
}
-static
-IT_set_terminal_window (void)
+static void
+IT_set_terminal_window (int foo)
{
}
" ~#{[|`\\^@]} Ï "
};
+/*
+ * Italian keyboard support, country code 39.
+ * '<' 56:3c*0000
+ * '>' 56:3e*0000
+ * added also {,},` as, respectively, AltGr-8, AltGr-9, AltGr-'
+ * Donated by Stefano Brozzi <brozzis@mag00.cedi.unipr.it>
+ */
+static struct dos_keyboard_map it_keyboard = {
+/* 0 1 2 3 4 5 */
+/* 0 123456789012345678901234567890123456789012345678901234 */
+ "\\1234567890'\8d qwertyuiop\8a+ asdfghjkl\95\85\97 zxcvbnm,.- ",
+/* 01 23456789012345678901234567890123456789012345678901234 */
+ "|!\"\9c$%&/()=?^ QWERTYUIOP\82* ASDFGHJKL\87øõ ZXCVBNM;:_ ",
+/* 0123456789012345678901234567890123456789012345678901234 */
+ " {}~` [] @# "
+};
+
static struct dos_keyboard_map dk_keyboard = {
/* 0 1 2 3 4 5 */
/* 0123456789012345678901234567890123456789012345678901234 */
{
1, &us_keyboard,
33, &fr_keyboard,
+ 39, &it_keyboard,
45, &dk_keyboard
};
FRAME_PTR f;
register int pix_x, pix_y;
register int *x, *y;
- void /* XRectangle */ *bounds;
+ XRectangle *bounds;
int noclip;
{
if (bounds) abort ();
text = (GLYPH *) xmalloc ((width + 2) * sizeof (GLYPH));
ScreenGetCursor (&row, &col);
mouse_get_xy (&mx, &my);
- IT_update_begin ();
+ IT_update_begin (selected_frame);
for (i = 0; i < menu->count; i++)
{
IT_cursor_to (y + i, x);
*p++ = FAST_MAKE_GLYPH (menu->submenu[i] ? 16 : ' ', face);
IT_write_glyphs (text, width + 2);
}
- IT_update_end ();
+ IT_update_end (selected_frame);
IT_cursor_to (row, col);
xfree (text);
}
{
char *s, *t, *root;
int len;
+ static const char * const tempdirs[] = {
+ "$TMPDIR", "$TEMP", "$TMP", "c:/"
+ };
+ int i;
+ const int imax = sizeof (tempdirs) / sizeof (tempdirs[0]);
+
+ /* Make sure they have a usable $TMPDIR. Many Emacs functions use
+ temporary files and assume "/tmp" if $TMPDIR is unset, which
+ will break on DOS/Windows. Refuse to work if we cannot find
+ a directory, not even "c:/", usable for that purpose. */
+ for (i = 0; i < imax ; i++)
+ {
+ const char *tmp = tempdirs[i];
+
+ if (*tmp == '$')
+ tmp = getenv (tmp + 1);
+ /* Note that `access' can lie to us if the directory resides on a
+ read-only filesystem, like CD-ROM or a write-protected floppy.
+ The only way to be really sure is to actually create a file and
+ see if it succeeds. But I think that's too much to ask. */
+ if (tmp && access (tmp, D_OK) == 0)
+ {
+ setenv ("TMPDIR", tmp, 1);
+ break;
+ }
+ }
+ if (i >= imax)
+ cmd_error_internal
+ (Fcons (Qerror,
+ Fcons (build_string ("no usable temporary directories found!!"),
+ Qnil)),
+ "While setting TMPDIR: ");
/* Find our root from argv[0]. Assuming argv[0] is, say,
"c:/emacs/bin/emacs.exe" our root will be "c:/emacs". */
file TEMPOUT and stderr to TEMPERR. */
int
-run_msdos_command (argv, dir, tempin, tempout, temperr)
+run_msdos_command (argv, working_dir, tempin, tempout, temperr, envv)
unsigned char **argv;
- Lisp_Object dir;
+ const char *working_dir;
int tempin, tempout, temperr;
+ char **envv;
{
- char *saveargv1, *saveargv2, **envv, *lowcase_argv0, *pa, *pl;
+ char *saveargv1, *saveargv2, *lowcase_argv0, *pa, *pl;
char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */
int msshell, result = -1;
int inbak, outbak, errbak;
}
}
- /* Build the environment array. */
- {
- extern Lisp_Object Vprocess_environment;
- Lisp_Object tmp, lst;
- int i, len;
-
- lst = Vprocess_environment;
- len = XFASTINT (Flength (lst));
-
- envv = alloca ((len + 1) * sizeof (char *));
- for (i = 0; i < len; i++)
- {
- tmp = Fcar (lst);
- lst = Fcdr (lst);
- CHECK_STRING (tmp, 0);
- envv[i] = alloca (XSTRING (tmp)->size + 1);
- strcpy (envv[i], XSTRING (tmp)->data);
- }
- envv[len] = (char *) 0;
- }
-
- if (STRINGP (dir))
- chdir (XSTRING (dir)->data);
+ chdir (working_dir);
inbak = dup (0);
outbak = dup (1);
errbak = dup (2);
cannot grok commands longer than 126 characters. In DJGPP v2
and later, `system' is much smarter, so we'll call it instead. */
- extern char **environ;
- environ = envv;
+ const char *cmnd;
/* A shell gets a single argument--its full command
line--whose original was saved in `saveargv2'. */
- result = system (saveargv2);
+
+ /* Don't let them pass empty command lines to `system', since
+ with some shells it will try to invoke an interactive shell,
+ which will hang Emacs. */
+ for (cmnd = saveargv2; *cmnd && isspace (*cmnd); cmnd++)
+ ;
+ if (*cmnd)
+ {
+ extern char **environ;
+ int save_system_flags = __system_flags;
+
+ /* Request the most powerful version of `system'. We need
+ all the help we can get to avoid calling stock DOS shells. */
+ __system_flags = (__system_redirect
+ | __system_use_shell
+ | __system_allow_multiple_cmds
+ | __system_allow_long_cmds
+ | __system_handle_null_commands
+ | __system_emulate_chdir);
+
+ environ = envv;
+ result = system (cmnd);
+ __system_flags = save_system_flags;
+ }
+ else
+ result = 0; /* emulate Unixy shell behavior with empty cmd line */
}
else
}
#endif /* MSDOS */
+