[Pkg-mc-commits] r135 - in trunk/debian: . patches patches/debian patches/utf8

winnie at alioth.debian.org winnie at alioth.debian.org
Sun May 18 12:08:58 UTC 2008


Author: winnie
Date: 2008-05-18 12:08:57 +0000 (Sun, 18 May 2008)
New Revision: 135

Modified:
   trunk/debian/control
   trunk/debian/patches/all.series
   trunk/debian/patches/debian/03_use_awk_first.patch
   trunk/debian/patches/utf8/mc-utf8-look-and-feel.patch
Log:
Some more changes


Modified: trunk/debian/control
===================================================================
--- trunk/debian/control	2008-05-17 18:17:14 UTC (rev 134)
+++ trunk/debian/control	2008-05-18 12:08:57 UTC (rev 135)
@@ -3,7 +3,7 @@
 Priority: optional
 Maintainer: Debian MC Packaging Group <pkg-mc-devel at lists.alioth.debian.org>
 Uploaders: Patrick Winnertz <winnie at debian.org>
-Build-Depends: debhelper (> 5), libglib2.0-dev, libgpmg1-dev |not+linux-gnu, gettext, libslang2-dev, quilt
+Build-Depends: debhelper (> 5), libglib2.0-dev, libgpmg1-dev |not+linux-gnu, gettext, libslang2-dev, quilt, cvs, automake
 Standards-Version: 3.7.3
 Homepage: http://www.ibiblio.org/mc/
 

Modified: trunk/debian/patches/all.series
===================================================================
--- trunk/debian/patches/all.series	2008-05-17 18:17:14 UTC (rev 134)
+++ trunk/debian/patches/all.series	2008-05-18 12:08:57 UTC (rev 135)
@@ -3,7 +3,6 @@
 bugs/64_visible_tabs.patch
 debian/01_correct_conffile_paths_in_man.patch
 debian/02_use_correct_smb_conf_path.patch
-debian/03_use_awk_first.patch
 debian/04_debian_menu_additions.patch
 mc.ext/01_tar_forgot_arg.patch
 mc.ext/02_use_arj.patch
@@ -34,7 +33,6 @@
 utf8/mc-utf8-look-and-feel.patch
 vfs/01_ftpfs_symlink.patch
 vfs/02_ignore_ftp_chmod_error.patch
-vfs/03_dont_hang_on_errors.patch
 vfs/03_fix_whitespace_via_fish.patch
 vfs/04_error_on_copymove_over_fish.patch
 vfs/05_add_lzma_support.patch

Modified: trunk/debian/patches/debian/03_use_awk_first.patch
===================================================================
--- trunk/debian/patches/debian/03_use_awk_first.patch	2008-05-17 18:17:14 UTC (rev 134)
+++ trunk/debian/patches/debian/03_use_awk_first.patch	2008-05-18 12:08:57 UTC (rev 135)
@@ -1,6 +1,6 @@
 diff -Nurwd mc-4.6.2~pre1/configure mc-4.6.2~pre1.patched/configure
---- mc-4.6.2~pre1/configure	2007-09-11 16:33:32.000000000 +0200
-+++ mc-4.6.2~pre1/configure	2008-01-24 23:37:34.000000000 +0100
+--- ./configure	2007-09-11 16:33:32.000000000 +0200
++++ ./configure	2008-01-24 23:37:34.000000000 +0100
 @@ -1562,7 +1562,7 @@
    fi
  fi

Modified: trunk/debian/patches/utf8/mc-utf8-look-and-feel.patch
===================================================================
--- trunk/debian/patches/utf8/mc-utf8-look-and-feel.patch	2008-05-17 18:17:14 UTC (rev 134)
+++ trunk/debian/patches/utf8/mc-utf8-look-and-feel.patch	2008-05-18 12:08:57 UTC (rev 135)
@@ -1,2300 +1,32 @@
-Index: mc-4.6.2~git20080311/src/main.c
-===================================================================
---- mc-4.6.2~git20080311.orig/src/main.c	2008-05-17 17:42:47.000000000 +0200
-+++ /dev/null	1970-01-01 00:00:00.000000000 +0000
-@@ -1,2292 +0,0 @@
--/* Main program for the Midnight Commander
--   Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
--   
--   Written by: 1994, 1995, 1996, 1997 Miguel de Icaza
--               1994, 1995 Janne Kukonlehto
--	       1997 Norbert Warmuth
--   
--   This program is free software; you can redistribute it and/or modify
--   it under the terms of the GNU General Public License as published by
--   the Free Software Foundation; either version 2 of the License, or
--   (at your option) any later version.
--   
--   This program is distributed in the hope that it will be useful,
--   but WITHOUT ANY WARRANTY; without even the implied warranty of
--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--   GNU General Public License for more details.
--
--   You should have received a copy of the GNU General Public License
--   along with this program; if not, write to the Free Software
--   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
--
--#include <config.h>
--
--#include <ctype.h>
--#include <errno.h>
--#include <locale.h>
--#include <signal.h>
--#include <stdio.h>
--#include <stdlib.h>
--#include <string.h>
--
--#include <sys/types.h>
--#include <sys/stat.h>
--#include <unistd.h>
--
--#include "global.h"
--#include "tty.h"
--#include "dir.h"
--#include "color.h"
--#include "dialog.h"
--#include "menu.h"
--#include "panel.h"
--#include "main.h"
--#include "win.h"
--#include "mouse.h"
--#include "option.h"
--#include "tree.h"
--#include "treestore.h"
--#include "cons.saver.h"
--#include "subshell.h"
--#include "key.h"		/* For init_key() and mi_getch() */
--#include "setup.h"		/* save_setup() */
--#include "profile.h"		/* free_profiles() */
--#include "boxes.h"		/* sort_box() */
--#include "layout.h"
--#include "cmd.h"		/* Normal commands */
--#include "hotlist.h"
--#include "panelize.h"
--#include "learn.h"		/* learn_keys() */
--#include "listmode.h"
--#include "execute.h"
--#include "ext.h"		/* For flush_extension_file() */
--
--/* Listbox for the command history feature */
--#include "widget.h"
--#include "command.h"
--#include "wtools.h"
--#include "complete.h"		/* For the free_completion */
--
--#include "chmod.h"
--#include "chown.h"
--#include "achown.h"
--
--#ifdef WITH_SMBFS
--#include "../vfs/smbfs.h"	/* smbfs_set_debug() */
--#endif
--
--#ifdef USE_INTERNAL_EDIT
--#   include "../edit/edit.h"
--#endif
--
--#ifdef	HAVE_CHARSET
--#include "charsets.h"
--#endif				/* HAVE_CHARSET */
--
--#ifdef USE_VFS
--#include "../vfs/gc.h"
--#endif
--
--#include "popt.h"
--
--/* When the modes are active, left_panel, right_panel and tree_panel */
--/* Point to a proper data structure.  You should check with the functions */
--/* get_current_type and get_other_type the types of the panels before using */
--/* This pointer variables */
--
--/* The structures for the panels */
--WPanel *left_panel = NULL;
--WPanel *right_panel = NULL;
--
--/* The pointer to the tree */
--WTree *the_tree = NULL;
--
--/* The Menubar */
--struct WMenu *the_menubar = NULL;
--
--/* Pointers to the selected and unselected panel */
--WPanel *current_panel = NULL;
--
--/* Set if the command is being run from the "Right" menu */
--int is_right = 0;
--
--/* Set when main loop should be terminated */
--volatile int quit = 0;
--
--/* Set if you want the possible completions dialog for the first time */
--int show_all_if_ambiguous = 0;
--
--/* Set when cd symlink following is desirable (bash mode) */
--int cd_symlinks = 1;
--
--/* If set then dialogs just clean the screen when refreshing, else */
--/* they do a complete refresh, refreshing all the parts of the program */
--int fast_refresh = 0;
--
--/* If true, marking a files moves the cursor down */
--int mark_moves_down = 1;
--
--/* If true, at startup the user-menu is invoked */
--int auto_menu = 0;
--
--/* If true, use + and \ keys normally and select/unselect do if M-+ / M-\ 
--   and M-- and keypad + / - */
--int alternate_plus_minus = 0;
--
--/* If true, then the +, - and \ keys have their special meaning only if the
-- * command line is emtpy, otherwise they behave like regular letters
-- */
--int only_leading_plus_minus = 1;
--
--int pause_after_run = pause_on_dumb_terminals;
--
--/* It true saves the setup when quitting */
--int auto_save_setup = 1;
--
--#ifndef HAVE_CHARSET
--/* If true, allow characters in the range 160-255 */
--int eight_bit_clean = 1;
--
--/*
-- * If true, also allow characters in the range 128-159.
-- * This is reported to break on many terminals (xterm, qansi-m).
-- */
--int full_eight_bits = 0;
--#endif				/* !HAVE_CHARSET */
--
--/* If true use the internal viewer */
--int use_internal_view = 1;
--
--/* Have we shown the fast-reload warning in the past? */
--int fast_reload_w = 0;
--
--/* Move page/item? When clicking on the top or bottom of a panel */
--int mouse_move_pages = 1;
--
--/* If true: l&r arrows are used to chdir if the input line is empty */
--int navigate_with_arrows = 0;
--
--/* If true use +, -, | for line drawing */
--int force_ugly_line_drawing = 0;
--
--/* If true program softkeys (HP terminals only) on startup and after every 
--   command ran in the subshell to the description found in the termcap/terminfo 
--   database */
--int reset_hp_softkeys = 0;
--
--/* The prompt */
--const char *prompt = NULL;
--
--/* The widget where we draw the prompt */
--WLabel *the_prompt;
--
--/* The hint bar */
--WLabel *the_hint;
--
--/* The button bar */
--WButtonBar *the_bar;
--
--/* For slow terminals */
--int slow_terminal = 0;
--
--/* Mouse type: GPM, xterm or none */
--Mouse_Type use_mouse_p = MOUSE_NONE;
--
--/* If true, assume we are running on an xterm terminal */
--static int force_xterm = 0;
--
--/* If on, default for "No" in delete operations */
--int safe_delete = 0;
--
--/* Controls screen clearing before an exec */
--int clear_before_exec = 1;
--
--/* Asks for confirmation before deleting a file */
--int confirm_delete = 1;
--
--/* Asks for confirmation before deleting a hotlist entry */
--int confirm_directory_hotlist_delete = 1;
--
--/* Asks for confirmation before overwriting a file */
--int confirm_overwrite = 1;
--
--/* Asks for confirmation before executing a program by pressing enter */
--int confirm_execute = 0;
--
--/* Asks for confirmation before leaving the program */
--int confirm_exit = 1;
--
--/* Asks for confirmation when using F3 to view a directory and there
--   are tagged files */
--int confirm_view_dir = 0;
--
--/* This flag indicates if the pull down menus by default drop down */
--int drop_menus = 0;
--
--/* The dialog handle for the main program */
--Dlg_head *midnight_dlg;
--
--/* Subshell: if set, then the prompt was not saved on CONSOLE_SAVE */
--/* We need to paint it after CONSOLE_RESTORE, see: load_prompt */
--int update_prompt = 0;
--
--/* The home directory */
--const char *home_dir = NULL;
--
--/* The value of the other directory, only used when loading the setup */
--char *other_dir = NULL;
--
--/* Only used at program boot */
--int boot_current_is_left = 1;
--
--static char *this_dir = NULL;
--
--/* If this is true, then when browsing the tree the other window will
-- * automatically reload it's directory with the contents of the currently
-- * selected directory.
-- */
--int xtree_mode = 0;
--
--/* If set, then print to the given file the last directory we were at */
--static char *last_wd_file = NULL;
--static char *last_wd_string = NULL;
--/* Set to 1 to suppress printing the last directory */
--static int print_last_revert = 0;
--
--/* Force colors, only used by Slang */
--int force_colors = 0;
--
--/* colors specified on the command line: they override any other setting */
--char *command_line_colors = NULL;
--
--/* File name to view if argument was supplied */
--static const char *view_one_file = NULL;
--
--/* File name to edit if argument was supplied */
--const char *edit_one_file = NULL;
--
--/* Line to start the editor on */
--static int edit_one_file_start_line = 0;
--
--/* Used so that widgets know if they are being destroyed or
--   shut down */
--int midnight_shutdown = 0;
--
--/* The user's shell */
--const char *shell = NULL;
--
--/* mc_home: The home of MC */
--char *mc_home = NULL;
--
--char cmd_buf[512];
--
--static void
--reload_panelized (WPanel *panel)
--{
--    int i, j;
--    dir_list *list = &panel->dir;
--
--    if (panel != current_panel)
--	mc_chdir (panel->cwd);
--
--    for (i = 0, j = 0; i < panel->count; i++) {
--	if (list->list[i].f.marked) {
--	    /* Unmark the file in advance. In case the following mc_lstat
--	     * fails we are done, else we have to mark the file again
--	     * (Note: do_file_mark depends on a valid "list->list [i].buf").
--	     * IMO that's the best way to update the panel's summary status
--	     * -- Norbert
--	     */
--	    do_file_mark (panel, i, 0);
--	}
--	if (mc_lstat (list->list[i].fname, &list->list[i].st)) {
--	    g_free (list->list[i].fname);
--	    continue;
--	}
--	if (list->list[i].f.marked)
--	    do_file_mark (panel, i, 1);
--	if (j != i)
--	    list->list[j] = list->list[i];
--	j++;
--    }
--    if (j == 0)
--	panel->count = set_zero_dir (list);
--    else
--	panel->count = j;
--
--    if (panel != current_panel)
--	mc_chdir (current_panel->cwd);
--}
--
--static void
--update_one_panel_widget (WPanel *panel, int force_update,
--			 const char *current_file)
--{
--    int free_pointer;
--    char *my_current_file = NULL;
--
--    if (force_update & UP_RELOAD) {
--	panel->is_panelized = 0;
--	mc_setctl (panel->cwd, VFS_SETCTL_FLUSH, 0);
--	memset (&(panel->dir_stat), 0, sizeof (panel->dir_stat));
--    }
--
--    /* If current_file == -1 (an invalid pointer) then preserve selection */
--    if (current_file == UP_KEEPSEL) {
--	free_pointer = 1;
--	my_current_file = g_strdup (panel->dir.list[panel->selected].fname);
--	current_file = my_current_file;
--    } else
--	free_pointer = 0;
--
--    if (panel->is_panelized)
--	reload_panelized (panel);
--    else
--	panel_reload (panel);
--
--    try_to_select (panel, current_file);
--    panel->dirty = 1;
--
--    if (free_pointer)
--	g_free (my_current_file);
--}
--
--void
--panel_clean_dir (WPanel *panel)
--{
--    int count = panel->count;
--
--    panel->count = 0;
--    panel->top_file = 0;
--    panel->selected = 0;
--    panel->marked = 0;
--    panel->dirs_marked = 0;
--    panel->total = 0;
--    panel->searching = 0;
--    panel->is_panelized = 0;
--    panel->dirty = 1;
--
--    clean_dir (&panel->dir, count);
--}
--
--static void
--update_one_panel (int which, int force_update, const char *current_file)
--{
--    WPanel *panel;
--
--    if (get_display_type (which) != view_listing)
--	return;
--
--    panel = (WPanel *) get_panel_widget (which);
--    update_one_panel_widget (panel, force_update, current_file);
--}
--
--/* This routine reloads the directory in both panels. It tries to
-- * select current_file in current_panel and other_file in other_panel.
-- * If current_file == -1 then it automatically sets current_file and
-- * other_file to the currently selected files in the panels.
-- *
-- * if force_update has the UP_ONLY_CURRENT bit toggled on, then it
-- * will not reload the other panel.
--*/
--void
--update_panels (int force_update, const char *current_file)
--{
--    int reload_other = !(force_update & UP_ONLY_CURRENT);
--    WPanel *panel;
--
--    update_one_panel (get_current_index (), force_update, current_file);
--    if (reload_other)
--	update_one_panel (get_other_index (), force_update, UP_KEEPSEL);
--
--    if (get_current_type () == view_listing)
--	panel = (WPanel *) get_panel_widget (get_current_index ());
--    else
--	panel = (WPanel *) get_panel_widget (get_other_index ());
--
--    mc_chdir (panel->cwd);
--}
--
--/* Save current stat of directories to avoid reloading the panels */
--/* when no modifications have taken place */
--void
--save_cwds_stat (void)
--{
--    if (fast_reload) {
--	mc_stat (current_panel->cwd, &(current_panel->dir_stat));
--	if (get_other_type () == view_listing)
--	    mc_stat (other_panel->cwd, &(other_panel->dir_stat));
--    }
--}
--
--#ifdef HAVE_SUBSHELL_SUPPORT
--void
--do_possible_cd (const char *new_dir)
--{
--    if (!do_cd (new_dir, cd_exact))
--	message (1, _("Warning"),
--		 _(" The Commander can't change to the directory that \n"
--		   " the subshell claims you are in.  Perhaps you have \n"
--		   " deleted your working directory, or given yourself \n"
--		   " extra access permissions with the \"su\" command? "));
--}
--
--void
--do_update_prompt (void)
--{
--    if (update_prompt) {
--	printf ("%s", subshell_prompt);
--	fflush (stdout);
--	update_prompt = 0;
--    }
--}
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--
--void
--change_panel (void)
--{
--    free_completions (cmdline);
--    dlg_one_down (midnight_dlg);
--}
--
--/* Stop MC main dialog and the current dialog if it exists.
-- * Needed to provide fast exit from MC viewer or editor on shell exit */
--static void
--stop_dialogs (void)
--{
--    midnight_dlg->running = 0;
--    if (current_dlg) {
--	current_dlg->running = 0;
--    }
--}
--
--static int
--quit_cmd_internal (int quiet)
--{
--    int q = quit;
--
--    if (quiet || !confirm_exit) {
--	q = 1;
--    } else {
--	if (query_dialog
--	    (_(" The Midnight Commander "),
--	     _(" Do you really want to quit the Midnight Commander? "), 0,
--	     2, _("&Yes"), _("&No")) == 0)
--	    q = 1;
--    }
--    if (q) {
--#ifdef HAVE_SUBSHELL_SUPPORT
--	if (!use_subshell)
--	    stop_dialogs ();
--	else if ((q = exit_subshell ()))
--#endif
--	    stop_dialogs ();
--    }
--    if (q)
--	quit |= 1;
--    return quit;
--}
--
--static void
--quit_cmd (void)
--{
--    quit_cmd_internal (0);
--}
--
--void
--quiet_quit_cmd (void)
--{
--    print_last_revert = 1;
--    quit_cmd_internal (1);
--}
--
--/*
-- * Touch window and refresh window functions
-- */
--
--/* This routine untouches the first line on both panels in order */
--/* to avoid the refreshing the menu bar */
--
--void
--repaint_screen (void)
--{
--    do_refresh ();
--    mc_refresh ();
--}
--
--/* Wrapper for do_subshell_chdir, check for availability of subshell */
--void
--subshell_chdir (const char *directory)
--{
--#ifdef HAVE_SUBSHELL_SUPPORT
--    if (use_subshell) {
--	if (vfs_current_is_local ())
--	    do_subshell_chdir (directory, 0, 1);
--    }
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--}
--
--void
--directory_history_add (struct WPanel *panel, const char *dir)
--{
--    char *tmp;
--
--    tmp = g_strdup (dir);
--    strip_password (tmp, 1);
--
--    panel->dir_history = list_append_unique (panel->dir_history, tmp);
--}
--
--/*
-- *  If we moved to the parent directory move the selection pointer to
-- *  the old directory name; If we leave VFS dir, remove FS specificator.
-- *
-- *  You do _NOT_ want to add any vfs aware code here. <pavel at ucw.cz>
-- */
--static const char *
--get_parent_dir_name (const char *cwd, const char *lwd)
--{
--    const char *p;
--    if (strlen (lwd) > strlen (cwd))
--	if ((p = strrchr (lwd, PATH_SEP)) && !strncmp (cwd, lwd, p - lwd) &&
--	 (strlen (cwd) == p - lwd || (p == lwd && cwd[0] == PATH_SEP &&
--	  cwd[1] == '\0'))) {
--	    return (p + 1);
--	}
--    return NULL;
--}
--
--/*
-- * Changes the current directory of the panel.
-- * Don't record change in the directory history.
-- */
--static int
--_do_panel_cd (WPanel *panel, const char *new_dir, enum cd_enum cd_type)
--{
--    const char *directory;
--    char *olddir;
--    char temp[MC_MAXPATHLEN];
--    char *translated_url;
--
--    if (cd_type == cd_parse_command) {
--	while (*new_dir == ' ')
--	    new_dir++;
--    }
--
--    olddir = g_strdup (panel->cwd);
--    new_dir = translated_url = vfs_translate_url (new_dir);
--
--    /* Convert *new_path to a suitable pathname, handle ~user */
--
--    if (cd_type == cd_parse_command) {
--	if (!strcmp (new_dir, "-")) {
--	    strcpy (temp, panel->lwd);
--	    new_dir = temp;
--	}
--    }
--    directory = *new_dir ? new_dir : home_dir;
--
--    if (mc_chdir (directory) == -1) {
--	strcpy (panel->cwd, olddir);
--	g_free (olddir);
--	g_free (translated_url);
--	return 0;
--    }
--    g_free (translated_url);
--
--    /* Success: save previous directory, shutdown status of previous dir */
--    strcpy (panel->lwd, olddir);
--    free_completions (cmdline);
--
--    mc_get_current_wd (panel->cwd, sizeof (panel->cwd) - 2);
--
--    vfs_release_path (olddir);
--
--    subshell_chdir (panel->cwd);
--
--    /* Reload current panel */
--    panel_clean_dir (panel);
--    panel->count =
--	do_load_dir (panel->cwd, &panel->dir, panel->sort_type,
--		     panel->reverse, panel->case_sensitive, panel->filter);
--    try_to_select (panel, get_parent_dir_name (panel->cwd, olddir));
--    load_hint (0);
--    panel->dirty = 1;
--    update_xterm_title_path ();
--
--    g_free (olddir);
--
--    return 1;
--}
--
--/*
-- * Changes the current directory of the panel.
-- * Record change in the directory history.
-- */
--int
--do_panel_cd (struct WPanel *panel, const char *new_dir, enum cd_enum cd_type)
--{
--    int r;
--
--    r = _do_panel_cd (panel, new_dir, cd_type);
--    if (r)
--	directory_history_add (panel, panel->cwd);
--    return r;
--}
--
--int
--do_cd (const char *new_dir, enum cd_enum exact)
--{
--    return (do_panel_cd (current_panel, new_dir, exact));
--}
--
--void
--directory_history_next (WPanel *panel)
--{
--    GList *nextdir;
--
--    nextdir = g_list_next (panel->dir_history);
--
--    if (!nextdir)
--	return;
--
--    if (_do_panel_cd (panel, (char *) nextdir->data, cd_exact))
--	panel->dir_history = nextdir;
--}
--
--void
--directory_history_prev (WPanel *panel)
--{
--    GList *prevdir;
--
--    prevdir = g_list_previous (panel->dir_history);
--
--    if (!prevdir)
--	return;
--
--    if (_do_panel_cd (panel, (char *) prevdir->data, cd_exact))
--	panel->dir_history = prevdir;
--}
--
--void
--directory_history_list (WPanel *panel)
--{
--    char *s;
--
--    if (!panel->dir_history)
--	return;
--
--    s = show_hist (panel->dir_history, panel->widget.x, panel->widget.y);
--
--    if (!s)
--	return;
--
--    if (_do_panel_cd (panel, s, cd_exact))
--	directory_history_add (panel, panel->cwd);
--    else
--	message (1, MSG_ERROR, _("Cannot change directory"));
--    g_free (s);
--}
--
--#ifdef HAVE_SUBSHELL_SUPPORT
--int
--load_prompt (int fd, void *unused)
--{
--    (void) fd;
--    (void) unused;
--
--    if (!read_subshell_prompt ())
--	return 0;
--
--    /* Don't actually change the prompt if it's invisible */
--    if (current_dlg == midnight_dlg && command_prompt) {
--	char *tmp_prompt;
--	int prompt_len;
--
--	tmp_prompt = strip_ctrl_codes (subshell_prompt);
--	prompt_len = mbstrlen (tmp_prompt);
--
--	/* Check for prompts too big */
--	if (COLS > 8 && prompt_len > COLS - 8) {
--	    tmp_prompt[COLS - 8] = '\0';
--	    prompt_len = COLS - 8;
--	}
--	prompt = tmp_prompt;
--	label_set_text (the_prompt, prompt);
--	winput_set_origin ((WInput *) cmdline, prompt_len,
--			   COLS - prompt_len);
--
--	/* since the prompt has changed, and we are called from one of the 
--	 * get_event channels, the prompt updating does not take place
--	 * automatically: force a cursor update and a screen refresh
--	 */
--	update_cursor (midnight_dlg);
--	mc_refresh ();
--    }
--    update_prompt = 1;
--    return 0;
--}
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--
--/* Used to emulate Lynx's entering leaving a directory with the arrow keys */
--int
--maybe_cd (int move_up_dir)
--{
--    if (navigate_with_arrows) {
--	if (!cmdline->buffer[0]) {
--	    if (move_up_dir) {
--		do_cd ("..", cd_exact);
--		return 1;
--	    }
--	    if (S_ISDIR (selection (current_panel)->st.st_mode)
--		|| link_isdir (selection (current_panel))) {
--		do_cd (selection (current_panel)->fname, cd_exact);
--		return 1;
--	    }
--	}
--    }
--    return 0;
--}
--
--static void
--sort_cmd (void)
--{
--    WPanel *p;
--    sortfn *sort_order;
--
--    if (!SELECTED_IS_PANEL)
--	return;
--
--    p = MENU_PANEL;
--    sort_order = sort_box (p->sort_type, &p->reverse, &p->case_sensitive);
--
--    panel_set_sort_order (p, sort_order);
--
--}
--
--static void
--treebox_cmd (void)
--{
--    char *sel_dir;
--
--    sel_dir = tree_box (selection (current_panel)->fname);
--    if (sel_dir) {
--	do_cd (sel_dir, cd_exact);
--	g_free (sel_dir);
--    }
--}
--
--#ifdef LISTMODE_EDITOR
--static void
--listmode_cmd (void)
--{
--    char *newmode;
--
--    if (get_current_type () != view_listing)
--	return;
--
--    newmode = listmode_edit (current_panel->user_format);
--    if (!newmode)
--	return;
--
--    g_free (current_panel->user_format);
--    current_panel->list_type = list_user;
--    current_panel->user_format = newmode;
--    set_panel_formats (current_panel);
--
--    do_refresh ();
--}
--#endif				/* LISTMODE_EDITOR */
--
--/* NOTICE: hotkeys specified here are overriden in menubar_paint_idx (alex) */
--static menu_entry LeftMenu[] = {
--    {' ', N_("&Listing mode..."), 'L', listing_cmd},
--    {' ', N_("&Quick view     C-x q"), 'Q', quick_view_cmd},
--    {' ', N_("&Info           C-x i"), 'I', info_cmd},
--    {' ', N_("&Tree"), 'T', tree_cmd},
--    {' ', "", ' ', 0},
--    {' ', N_("&Sort order..."), 'S', sort_cmd},
--    {' ', "", ' ', 0},
--    {' ', N_("&Filter..."), 'F', filter_cmd},
--#ifdef USE_NETCODE
--    {' ', "", ' ', 0},
--#ifdef WITH_MCFS
--    {' ', N_("&Network link..."), 'N', netlink_cmd},
--#endif
--    {' ', N_("FT&P link..."), 'P', ftplink_cmd},
--    {' ', N_("S&hell link..."), 'H', fishlink_cmd},
--#ifdef WITH_SMBFS
--    {' ', N_("SM&B link..."), 'B', smblink_cmd},
--#endif
--#endif
--    {' ', "", ' ', 0},
--    {' ', N_("&Rescan         C-r"), 'R', reread_cmd}
--};
--
--static menu_entry RightMenu[] = {
--    {' ', N_("&Listing mode..."), 'L', listing_cmd},
--    {' ', N_("&Quick view     C-x q"), 'Q', quick_view_cmd},
--    {' ', N_("&Info           C-x i"), 'I', info_cmd},
--    {' ', N_("&Tree"), 'T', tree_cmd},
--    {' ', "", ' ', 0},
--    {' ', N_("&Sort order..."), 'S', sort_cmd},
--    {' ', "", ' ', 0},
--    {' ', N_("&Filter..."), 'F', filter_cmd},
--#ifdef USE_NETCODE
--    {' ', "", ' ', 0},
--#ifdef WITH_MCFS
--    {' ', N_("&Network link..."), 'N', netlink_cmd},
--#endif
--    {' ', N_("FT&P link..."), 'P', ftplink_cmd},
--    {' ', N_("S&hell link..."), 'H', fishlink_cmd},
--#ifdef WITH_SMBFS
--    {' ', N_("SM&B link..."), 'B', smblink_cmd},
--#endif
--#endif
--    {' ', "", ' ', 0},
--    {' ', N_("&Rescan         C-r"), 'R', reread_cmd}
--};
--
--static menu_entry FileMenu[] = {
--    {' ', N_("&User menu          F2"), 'U', user_file_menu_cmd},
--    {' ', N_("&View               F3"), 'V', view_cmd},
--    {' ', N_("Vie&w file...         "), 'W', view_file_cmd},
--    {' ', N_("&Filtered view     M-!"), 'F', filtered_view_cmd},
--    {' ', N_("&Edit               F4"), 'E', edit_cmd},
--    {' ', N_("&Copy               F5"), 'C', copy_cmd},
--    {' ', N_("c&Hmod           C-x c"), 'H', chmod_cmd},
--    {' ', N_("&Link            C-x l"), 'L', link_cmd},
--    {' ', N_("&SymLink         C-x s"), 'S', symlink_cmd},
--    {' ', N_("edit s&Ymlink  C-x C-s"), 'Y', edit_symlink_cmd},
--    {' ', N_("ch&Own           C-x o"), 'O', chown_cmd},
--    {' ', N_("&Advanced chown       "), 'A', chown_advanced_cmd},
--    {' ', N_("&Rename/Move        F6"), 'R', ren_cmd},
--    {' ', N_("&Mkdir              F7"), 'M', mkdir_cmd},
--    {' ', N_("&Delete             F8"), 'D', delete_cmd},
--    {' ', N_("&Quick cd          M-c"), 'Q', quick_cd_cmd},
--    {' ', "", ' ', 0},
--    {' ', N_("select &Group      M-+"), 'G', select_cmd},
--    {' ', N_("u&Nselect group    M-\\"), 'N', unselect_cmd},
--    {' ', N_("reverse selec&Tion M-*"), 'T', reverse_selection_cmd},
--    {' ', "", ' ', 0},
--    {' ', N_("e&Xit              F10"), 'X', quit_cmd}
--};
--
--static menu_entry CmdMenu[] = {
--    /* I know, I'm lazy, but the tree widget when it's not running
--     * as a panel still has some problems, I have not yet finished
--     * the WTree widget port, sorry.
--     */
--    {' ', N_("&Directory tree"), 'D', treebox_cmd},
--    {' ', N_("&Find file            M-?"), 'F', find_cmd},
--    {' ', N_("s&Wap panels          C-u"), 'W', swap_cmd},
--    {' ', N_("switch &Panels on/off C-o"), 'P', view_other_cmd},
--    {' ', N_("&Compare directories  C-x d"), 'C', compare_dirs_cmd},
--    {' ', N_("e&Xternal panelize    C-x !"), 'X', external_panelize},
--    {' ', N_("show directory s&Izes"), 'I', dirsizes_cmd},
--    {' ', "", ' ', 0},
--    {' ', N_("command &History"), 'H', history_cmd},
--    {' ', N_("di&Rectory hotlist    C-\\"), 'R', quick_chdir_cmd},
--#ifdef USE_VFS
--    {' ', N_("&Active VFS list      C-x a"), 'A', reselect_vfs},
--#endif
--#ifdef WITH_BACKGROUND
--    {' ', N_("&Background jobs      C-x j"), 'B', jobs_cmd},
--#endif
--    {' ', "", ' ', 0},
--#ifdef USE_EXT2FSLIB
--    {' ', N_("&Undelete files (ext2fs only)"), 'U', undelete_cmd},
--#endif
--#ifdef LISTMODE_EDITOR
--    {' ', N_("&Listing format edit"), 'L', listmode_cmd},
--#endif
--#if defined (USE_EXT2FSLIB) || defined (LISTMODE_EDITOR)
--    {' ', "", ' ', 0},
--#endif
--    {' ', N_("Edit &extension file"), 'E', ext_cmd},
--    {' ', N_("Edit &menu file"), 'M', edit_mc_menu_cmd},
--#ifdef USE_INTERNAL_EDIT
--    {' ', N_("Edit edi&tor menu file"), 'T', edit_user_menu_cmd},
--    {' ', N_("Edit &syntax file"), 'S', edit_syntax_cmd}
--#endif				/* USE_INTERNAL_EDIT */
--};
--
--/* Must keep in sync with the constants in menu_cmd */
--static menu_entry OptMenu[] = {
--    {' ', N_("&Configuration..."), 'C', configure_box},
--    {' ', N_("&Layout..."), 'L', layout_cmd},
--    {' ', N_("c&Onfirmation..."), 'O', confirm_box},
--    {' ', N_("&Display bits..."), 'D', display_bits_box},
--    {' ', N_("learn &Keys..."), 'K', learn_keys},
--#ifdef USE_VFS
--    {' ', N_("&Virtual FS..."), 'V', configure_vfs},
--#endif				/* !USE_VFS */
--    {' ', "", ' ', 0},
--    {' ', N_("&Save setup"), 'S', save_setup_cmd}
--};
--
--#define menu_entries(x) sizeof(x)/sizeof(menu_entry)
--
--static Menu *MenuBar[5];
--
--void
--init_menu (void)
--{
--    MenuBar[0] =
--	create_menu (horizontal_split ? _(" &Above ") : _(" &Left "),
--		     LeftMenu, menu_entries (LeftMenu),
--		     "[Left and Right Menus]");
--    MenuBar[1] =
--	create_menu (_(" &File "), FileMenu, menu_entries (FileMenu),
--		     "[File Menu]");
--    MenuBar[2] =
--	create_menu (_(" &Command "), CmdMenu, menu_entries (CmdMenu),
--		     "[Command Menu]");
--    MenuBar[3] =
--	create_menu (_(" &Options "), OptMenu, menu_entries (OptMenu),
--		     "[Options Menu]");
--    MenuBar[4] =
--	create_menu (horizontal_split ? _(" &Below ") : _(" &Right "),
--		     RightMenu, menu_entries (RightMenu),
--		     "[Left and Right Menus]");
--}
--
--void
--done_menu (void)
--{
--    int i;
--
--    for (i = 0; i < 5; i++) {
--	destroy_menu (MenuBar[i]);
--    }
--}
--
--static void
--menu_last_selected_cmd (void)
--{
--    the_menubar->active = 1;
--    the_menubar->dropped = drop_menus;
--    the_menubar->previous_widget = midnight_dlg->current->dlg_id;
--    dlg_select_widget (the_menubar);
--}
--
--static void
--menu_cmd (void)
--{
--    if (the_menubar->active)
--	return;
--
--    if ((get_current_index () == 0) ^ (!current_panel->active))
--	the_menubar->selected = 0;
--    else
--	the_menubar->selected = 4;
--    menu_last_selected_cmd ();
--}
--
--/* Flag toggling functions */
--void
--toggle_fast_reload (void)
--{
--    fast_reload = !fast_reload;
--    if (fast_reload_w == 0 && fast_reload) {
--	message (0, _(" Information "),
--		 _
--		 (" Using the fast reload option may not reflect the exact \n"
--		  " directory contents. In this case you'll need to do a   \n"
--		  " manual reload of the directory. See the man page for   \n"
--		  " the details.                                           "));
--	fast_reload_w = 1;
--    }
--}
--
--void
--toggle_mix_all_files (void)
--{
--    mix_all_files = !mix_all_files;
--    update_panels (UP_RELOAD, UP_KEEPSEL);
--}
--
--void
--toggle_show_backup (void)
--{
--    show_backups = !show_backups;
--    update_panels (UP_RELOAD, UP_KEEPSEL);
--}
--
--void
--toggle_show_hidden (void)
--{
--    show_dot_files = !show_dot_files;
--    update_panels (UP_RELOAD, UP_KEEPSEL);
--}
--
--/*
-- * Just a hack for allowing url-like pathnames to be accepted from the
-- * command line.
-- */
--static void
--translated_mc_chdir (char *dir)
--{
--    char *newdir;
--
--    newdir = vfs_translate_url (dir);
--    mc_chdir (newdir);
--    g_free (newdir);
--}
--
--static void
--create_panels (void)
--{
--    int current_index;
--    int other_index;
--    int current_mode;
--    int other_mode;
--    char original_dir[1024];
--
--    original_dir[0] = 0;
--
--    if (boot_current_is_left) {
--	current_index = 0;
--	other_index = 1;
--	current_mode = startup_left_mode;
--	other_mode = startup_right_mode;
--    } else {
--	current_index = 1;
--	other_index = 0;
--	current_mode = startup_right_mode;
--	other_mode = startup_left_mode;
--    }
--    /* Creates the left panel */
--    if (this_dir) {
--	if (other_dir) {
--	    /* Ok, user has specified two dirs, save the original one,
--	     * since we may not be able to chdir to the proper
--	     * second directory later
--	     */
--	    mc_get_current_wd (original_dir, sizeof (original_dir) - 2);
--	}
--	translated_mc_chdir (this_dir);
--    }
--    set_display_type (current_index, current_mode);
--
--    /* The other panel */
--    if (other_dir) {
--	if (original_dir[0])
--	    translated_mc_chdir (original_dir);
--	translated_mc_chdir (other_dir);
--    }
--    set_display_type (other_index, other_mode);
--
--    if (startup_left_mode == view_listing) {
--	current_panel = left_panel;
--    } else {
--	if (right_panel)
--	    current_panel = right_panel;
--	else
--	    current_panel = left_panel;
--    }
--
--    /* Create the nice widgets */
--    cmdline = command_new (0, 0, 0);
--    the_prompt = label_new (0, 0, prompt);
--    the_prompt->transparent = 1;
--    the_bar = buttonbar_new (keybar_visible);
--
--    the_hint = label_new (0, 0, 0);
--    the_hint->transparent = 1;
--    the_hint->auto_adjust_cols = 0;
--    the_hint->widget.cols = COLS;
--
--    the_menubar = menubar_new (0, 0, COLS, MenuBar, 5);
--}
--
--static void
--copy_current_pathname (void)
--{
--    if (!command_prompt)
--	return;
--
--    command_insert (cmdline, current_panel->cwd, 0);
--    if (current_panel->cwd[strlen (current_panel->cwd) - 1] != PATH_SEP)
--	command_insert (cmdline, PATH_SEP_STR, 0);
--}
--
--static void
--copy_other_pathname (void)
--{
--    if (get_other_type () != view_listing)
--	return;
--
--    if (!command_prompt)
--	return;
--
--    command_insert (cmdline, other_panel->cwd, 0);
--    if (other_panel->cwd[strlen (other_panel->cwd) - 1] != PATH_SEP)
--	command_insert (cmdline, PATH_SEP_STR, 0);
--}
--
--static void
--copy_readlink (WPanel *panel)
--{
--    if (!command_prompt)
--	return;
--    if (S_ISLNK (selection (panel)->st.st_mode)) {
--	char buffer[MC_MAXPATHLEN];
--	char *p =
--	    concat_dir_and_file (panel->cwd, selection (panel)->fname);
--	int i;
--
--	i = mc_readlink (p, buffer, MC_MAXPATHLEN - 1);
--	g_free (p);
--	if (i > 0) {
--	    buffer[i] = 0;
--	    command_insert (cmdline, buffer, 1);
--	}
--    }
--}
--
--static void
--copy_current_readlink (void)
--{
--    copy_readlink (current_panel);
--}
--
--static void
--copy_other_readlink (void)
--{
--    if (get_other_type () != view_listing)
--	return;
--    copy_readlink (other_panel);
--}
--
--/* Insert the selected file name into the input line */
--static void
--copy_prog_name (void)
--{
--    char *tmp;
--    if (!command_prompt)
--	return;
--
--    if (get_current_type () == view_tree) {
--	WTree *tree = (WTree *) get_panel_widget (get_current_index ());
--	tmp = tree_selected_name (tree);
--    } else
--	tmp = selection (current_panel)->fname;
--
--    command_insert (cmdline, tmp, 1);
--}
--
--static void
--copy_tagged (WPanel *panel)
--{
--    int i;
--
--    if (!command_prompt)
--	return;
--    input_disable_update (cmdline);
--    if (panel->marked) {
--	for (i = 0; i < panel->count; i++) {
--	    if (panel->dir.list[i].f.marked)
--		command_insert (cmdline, panel->dir.list[i].fname, 1);
--	}
--    } else {
--	command_insert (cmdline, panel->dir.list[panel->selected].fname,
--			1);
--    }
--    input_enable_update (cmdline);
--}
--
--static void
--copy_current_tagged (void)
--{
--    copy_tagged (current_panel);
--}
--
--static void
--copy_other_tagged (void)
--{
--    if (get_other_type () != view_listing)
--	return;
--    copy_tagged (other_panel);
--}
--
--static void
--init_labels (void)
--{
--    buttonbar_set_label (midnight_dlg, 1, _("Help"), help_cmd);
--    buttonbar_set_label (midnight_dlg, 2, _("Menu"), user_file_menu_cmd);
--    buttonbar_set_label (midnight_dlg, 9, _("PullDn"), menu_cmd);
--    buttonbar_set_label (midnight_dlg, 10, _("Quit"), quit_cmd);
--}
--
--static const key_map ctl_x_map[] = {
--    {XCTRL ('c'), quit_cmd},
--    {'d', compare_dirs_cmd},
--#ifdef USE_VFS
--    {'a', reselect_vfs},
--#endif				/* USE_VFS */
--    {'p', copy_current_pathname},
--    {XCTRL ('p'), copy_other_pathname},
--    {'t', copy_current_tagged},
--    {XCTRL ('t'), copy_other_tagged},
--    {'c', chmod_cmd},
--    {'o', chown_cmd},
--    {'r', copy_current_readlink},
--    {XCTRL ('r'), copy_other_readlink},
--    {'l', link_cmd},
--    {'s', symlink_cmd},
--    {XCTRL ('s'), edit_symlink_cmd},
--    {'i', info_cmd_no_menu},
--    {'q', quick_cmd_no_menu},
--    {'h', add2hotlist_cmd},
--    {'!', external_panelize},
--#ifdef WITH_BACKGROUND
--    {'j', jobs_cmd},
--#endif				/* WITH_BACKGROUND */
--    {0, 0}
--};
--
--static int ctl_x_map_enabled = 0;
--
--static void
--ctl_x_cmd (void)
--{
--    ctl_x_map_enabled = 1;
--}
--
--static void
--nothing (void)
--{
--}
--
--static const key_map default_map[] = {
--    {KEY_F (19), menu_last_selected_cmd},
--    {KEY_F (20), quiet_quit_cmd},
--
--    {XCTRL ('@'), single_dirsize_cmd},
--
--    /* Copy useful information to the command line */
--    {ALT ('a'), copy_current_pathname},
--    {ALT ('A'), copy_other_pathname},
--
--    {ALT ('c'), quick_cd_cmd},
--
--    /* To access the directory hotlist */
--    {XCTRL ('\\'), quick_chdir_cmd},
--
--    /* Suspend */
--    {XCTRL ('z'), suspend_cmd},
--
--    /* The filtered view command */
--    {ALT ('!'), filtered_view_cmd},
--
--    /* Find file */
--    {ALT ('?'), find_cmd},
--
--    /* Panel refresh */
--    {XCTRL ('r'), reread_cmd},
--
--    /* Toggle listing between long, user defined and full formats */
--    {ALT ('t'), toggle_listing_cmd},
--
--    /* Swap panels */
--    {XCTRL ('u'), swap_cmd},
--
--    /* View output */
--    {XCTRL ('o'), view_other_cmd},
--
--    /* Control-X keybindings */
--    {XCTRL ('x'), ctl_x_cmd},
--
--    /* Trap dlg's exit commands */
--    {ESC_CHAR, nothing},
--    {XCTRL ('c'), nothing},
--    {XCTRL ('g'), nothing},
--    {0, 0},
--};
--
--static void
--setup_sigwinch (void)
--{
--#if (defined(HAVE_SLANG) || (NCURSES_VERSION_MAJOR >= 4)) && defined(SIGWINCH)
--    struct sigaction act, oact;
--    act.sa_handler = flag_winch;
--    sigemptyset (&act.sa_mask);
--    act.sa_flags = 0;
--#ifdef SA_RESTART
--    act.sa_flags |= SA_RESTART;
--#endif
--    sigaction (SIGWINCH, &act, &oact);
--#endif
--}
--
--static void
--setup_pre (void)
--{
--    /* Call all the inits */
--#ifdef HAVE_CHARSET
--/*
-- * Don't restrict the output on the screen manager level,
-- * the translation tables take care of it.
-- */
--#define full_eight_bits (1)
--#define eight_bit_clean (1)
--#endif				/* !HAVE_CHARSET */
--
--#ifndef HAVE_SLANG
--    meta (stdscr, eight_bit_clean);
--#else
--    SLsmg_Display_Eight_Bit = full_eight_bits ? 128 : 160;
--#endif
--}
--
--static void
--init_xterm_support (void)
--{
--    const char *termvalue;
--
--    termvalue = getenv ("TERM");
--    if (!termvalue || !(*termvalue)) {
--	fputs (_("The TERM environment variable is unset!\n"), stderr);
--	exit (1);
--    }
--
--    /* Check mouse capabilities */
--    xmouse_seq = tty_tgetstr ("Km");
--
--    if (strcmp (termvalue, "cygwin") == 0) {
--	force_xterm = 1;
--	use_mouse_p = MOUSE_DISABLED;
--    }
--
--    if (force_xterm || strncmp (termvalue, "xterm", 5) == 0
--	|| strncmp (termvalue, "rxvt", 4) == 0
--	|| strcmp (termvalue, "Eterm") == 0
--	|| strcmp (termvalue, "dtterm") == 0) {
--	xterm_flag = 1;
--
--	/* Default to the standard xterm sequence */
--	if (!xmouse_seq) {
--	    xmouse_seq = ESC_STR "[M";
--	}
--
--	/* Enable mouse unless explicitly disabled by --nomouse */
--	if (use_mouse_p != MOUSE_DISABLED) {
--	    const char *color_term = getenv ("COLORTERM");
--	    if (strncmp (termvalue, "rxvt", 4) == 0 ||
--		(color_term != NULL && strncmp (color_term, "rxvt", 4) == 0) ||
--		strcmp (termvalue, "Eterm") == 0) {
--		    use_mouse_p = MOUSE_XTERM_NORMAL_TRACKING;
--	    } else {
--		use_mouse_p = MOUSE_XTERM_BUTTON_EVENT_TRACKING;
--	    }
--	}
--    }
--}
--
--static void
--setup_mc (void)
--{
--    setup_pre ();
--    init_menu ();
--    create_panels ();
--    setup_panels ();
--
--#ifdef HAVE_SUBSHELL_SUPPORT
--    if (use_subshell)
--	add_select_channel (subshell_pty, load_prompt, 0);
--#endif				/* !HAVE_SUBSHELL_SUPPORT */
--
--    setup_sigwinch ();
--
--    if (baudrate () < 9600 || slow_terminal) {
--	verbose = 0;
--    }
--    init_mouse ();
--}
--
--static void
--setup_dummy_mc ()
--{
--    char d[MC_MAXPATHLEN];
--
--    mc_get_current_wd (d, MC_MAXPATHLEN);
--    setup_mc ();
--    mc_chdir (d);
--}
--
--static void
--done_mc (void)
--{
--    disable_mouse ();
--
--    done_menu ();
--
--    /* Setup shutdown
--     *
--     * We sync the profiles since the hotlist may have changed, while
--     * we only change the setup data if we have the auto save feature set
--     */
--    if (auto_save_setup)
--	save_setup ();		/* does also call save_hotlist */
--    else
--	save_hotlist ();
--    done_screen ();
--    vfs_add_current_stamps ();
--}
--
--/* This should be called after destroy_dlg since panel widgets
-- *  save their state on the profiles
-- */
--static void
--done_mc_profile (void)
--{
--    if (!auto_save_setup)
--	profile_forget_profile (profile_name);
--    sync_profiles ();
--    done_setup ();
--    free_profiles ();
--}
--
--static cb_ret_t
--midnight_callback (struct Dlg_head *h, dlg_msg_t msg, int parm)
--{
--    int i;
--
--    switch (msg) {
--
--    case DLG_IDLE:
--	/* We only need the first idle event */
--	set_idle_proc (h, 0);
--	if (auto_menu) {
--	    user_file_menu_cmd ();
--	}
--	return MSG_HANDLED;
--
--    case DLG_KEY:
--	if (ctl_x_map_enabled) {
--	    ctl_x_map_enabled = 0;
--	    for (i = 0; ctl_x_map[i].key_code; i++)
--		if (parm == ctl_x_map[i].key_code) {
--		    (*ctl_x_map[i].fn) ();
--		    return MSG_HANDLED;
--		}
--	}
--
--	/* FIXME: should handle all menu shortcuts before this point */
--	if (the_menubar->active)
--	    return MSG_NOT_HANDLED;
--
--	if (parm == KEY_F (10)) {
--	    quit_cmd ();
--	    return MSG_HANDLED;
--	}
--
--	if (parm == '\t')
--	    free_completions (cmdline);
--
--	if (parm == '\n') {
--	    for (i = 0; cmdline->buffer[i] && (cmdline->buffer[i] == ' ' ||
--		cmdline->buffer[i] == '\t'); i++);
--	    if (cmdline->buffer[i]) {
--	        send_message ((Widget *) cmdline, WIDGET_KEY, parm);
--		return MSG_HANDLED;
--	    }
--	    stuff (cmdline, "", 0);
--	    cmdline->point = 0;
--	}
--
--	/* Ctrl-Enter and Alt-Enter */
--	if (((parm & ~(KEY_M_CTRL | KEY_M_ALT)) == '\n')
--	    && (parm & (KEY_M_CTRL | KEY_M_ALT))) {
--	    copy_prog_name ();
--	    return MSG_HANDLED;
--	}
--
--	/* Ctrl-Shift-Enter */
--	if (parm == (KEY_M_CTRL | KEY_M_SHIFT | '\n')) {
--	    copy_current_pathname ();
--	    copy_prog_name ();
--	    return MSG_HANDLED;
--	}
--
--	if ((!alternate_plus_minus || !(console_flag || xterm_flag))
--	    && !quote && !current_panel->searching) {
--	    if (!only_leading_plus_minus) {
--		/* Special treatement, since the input line will eat them */
--		if (parm == '+') {
--		    select_cmd ();
--		    return MSG_HANDLED;
--		}
--
--		if (parm == '\\' || parm == '-') {
--		    unselect_cmd ();
--		    return MSG_HANDLED;
--		}
--
--		if (parm == '*') {
--		    reverse_selection_cmd ();
--		    return MSG_HANDLED;
--		}
--	    } else if (!command_prompt || !cmdline->buffer[0]) {
--		/* Special treatement '+', '-', '\', '*' only when this is 
--		 * first char on input line
--		 */
--
--		if (parm == '+') {
--		    select_cmd ();
--		    return MSG_HANDLED;
--		}
--
--		if (parm == '\\' || parm == '-') {
--		    unselect_cmd ();
--		    return MSG_HANDLED;
--		}
--
--		if (parm == '*') {
--		    reverse_selection_cmd ();
--		    return MSG_HANDLED;
--		}
--	    }
--	}
--	return MSG_NOT_HANDLED;
--
--    case DLG_HOTKEY_HANDLED:
--	if ((get_current_type () == view_listing) && current_panel->searching) {
--	    current_panel->searching = 0;
--	    current_panel->dirty = 1;
--	}
--	return MSG_HANDLED;
--
--    case DLG_UNHANDLED_KEY:
--	if (command_prompt) {
--	    int v;
--
--	    v = send_message ((Widget *) cmdline, WIDGET_KEY, parm);
--	    if (v)
--		return v;
--	}
--	if (ctl_x_map_enabled) {
--	    ctl_x_map_enabled = 0;
--	    for (i = 0; ctl_x_map[i].key_code; i++)
--		if (parm == ctl_x_map[i].key_code) {
--		    (*ctl_x_map[i].fn) ();
--		    return MSG_HANDLED;
--		}
--	} else {
--	    for (i = 0; default_map[i].key_code; i++) {
--		if (parm == default_map[i].key_code) {
--		    (*default_map[i].fn) ();
--		    return MSG_HANDLED;
--		}
--	    }
--	}
--	return MSG_NOT_HANDLED;
--
--    case DLG_DRAW:
--	/* We handle the special case of the output lines */
--	if (console_flag && output_lines)
--	    show_console_contents (output_start_y,
--				   LINES - output_lines - keybar_visible -
--				   1, LINES - keybar_visible - 1);
--	return MSG_HANDLED;
--
--    case DLG_POST_KEY:
--	if (!the_menubar->active)
--	    update_dirty_panels ();
--	return MSG_HANDLED;
--
--    default:
--	return default_dlg_callback (h, msg, parm);
--    }
--}
--
--/* Show current directory in the xterm title */
--void
--update_xterm_title_path (void)
--{
--    char *p, *s;
--
--    if (xterm_flag && xterm_title) {
--	p = s = g_strdup (strip_home_and_password (current_panel->cwd));
--	do {
--#ifndef UTF8
--	    if (!is_printable ((unsigned char) *s))
--#else /* UTF8 */
--	    if (*(unsigned char *)s < ' ')
--#endif /* UTF8 */
--		*s = '?';
--	} while (*++s);
--	fprintf (stdout, "\33]0;mc - %s\7", p);
--	fflush (stdout);
--	g_free (p);
--    }
--}
--
--/*
-- * Load new hint and display it.
-- * IF force is not 0, ignore the timeout.
-- */
--void
--load_hint (int force)
--{
--    char *hint;
--
--    if (!the_hint->widget.parent)
--	return;
--
--    if (!message_visible) {
--	label_set_text (the_hint, 0);
--	return;
--    }
--
--    if ((hint = get_random_hint (force))) {
--	if (*hint)
--	    set_hintbar (hint);
--	g_free (hint);
--    } else {
--	char text[BUF_SMALL];
--
--	g_snprintf (text, sizeof (text), _("GNU Midnight Commander %s\n"),
--		    VERSION);
--	set_hintbar (text);
--    }
--}
--
--static void
--setup_panels_and_run_mc (void)
--{
--    add_widget (midnight_dlg, the_menubar);
--    add_widget (midnight_dlg, get_panel_widget (0));
--    add_widget (midnight_dlg, get_panel_widget (1));
--    add_widget (midnight_dlg, the_hint);
--    load_hint (1);
--    add_widget (midnight_dlg, cmdline);
--    add_widget (midnight_dlg, the_prompt);
--    add_widget (midnight_dlg, the_bar);
--    init_labels ();
--
--    if (boot_current_is_left)
--	dlg_select_widget (get_panel_widget (0));
--    else
--	dlg_select_widget (get_panel_widget (1));
--
--    /* Run the Midnight Commander if no file was specified in the command line */
--    run_dlg (midnight_dlg);
--}
--
--/* result must be free'd (I think this should go in util.c) */
--static char *
--prepend_cwd_on_local (const char *filename)
--{
--    char *d;
--    int l;
--
--    if (vfs_file_is_local (filename)) {
--	if (*filename == PATH_SEP)	/* an absolute pathname */
--	    return g_strdup (filename);
--	d = g_malloc (MC_MAXPATHLEN + strlen (filename) + 2);
--	mc_get_current_wd (d, MC_MAXPATHLEN);
--	l = strlen (d);
--	d[l++] = PATH_SEP;
--	strcpy (d + l, filename);
--	canonicalize_pathname (d);
--	return d;
--    } else
--	return g_strdup (filename);
--}
--
--static int
--mc_maybe_editor_or_viewer (void)
--{
--    if (!(view_one_file || edit_one_file))
--	return 0;
--
--    setup_dummy_mc ();
--
--    /* Invoke the internal view/edit routine with:
--     * the default processing and forcing the internal viewer/editor
--     */
--    if (view_one_file) {
--	char *path = NULL;
--	path = prepend_cwd_on_local (view_one_file);
--	view_file (path, 0, 1);
--	g_free (path);
--    }
--#ifdef USE_INTERNAL_EDIT
--    else {
--	edit_file (edit_one_file, edit_one_file_start_line);
--    }
--#endif				/* USE_INTERNAL_EDIT */
--    midnight_shutdown = 1;
--    done_mc ();
--    return 1;
--}
--
--/* Run the main dialog that occupies the whole screen */
--static void
--do_nc (void)
--{
--    int midnight_colors[4];
--
--    midnight_colors[0] = NORMAL_COLOR;	/* NORMALC */
--    midnight_colors[1] = REVERSE_COLOR;	/* FOCUSC */
--    midnight_colors[2] = INPUT_COLOR;	/* HOT_NORMALC */
--    midnight_colors[3] = NORMAL_COLOR;	/* HOT_FOCUSC */
--
--    midnight_dlg =
--	create_dlg (0, 0, LINES, COLS, midnight_colors, midnight_callback,
--		    "[main]", NULL, DLG_WANT_IDLE);
--
--    /* Check if we were invoked as an editor or file viewer */
--    if (mc_maybe_editor_or_viewer ())
--	return;
--
--    setup_mc ();
--
--    setup_panels_and_run_mc ();
--
--    /* Program end */
--    midnight_shutdown = 1;
--
--    /* destroy_dlg destroys even current_panel->cwd, so we have to save a copy :) */
--    if (last_wd_file && vfs_current_is_local ()) {
--	last_wd_string = g_strdup (current_panel->cwd);
--    }
--    done_mc ();
--
--    destroy_dlg (midnight_dlg);
--    current_panel = 0;
--    done_mc_profile ();
--}
--
--/* POSIX version.  The only version we support.  */
--static void
--OS_Setup (void)
--{
--    const char *mc_libdir;
--    shell = getenv ("SHELL");
--    if (!shell || !*shell) {
--        struct passwd *pwd;
--        pwd = getpwuid (geteuid ());
--        if (pwd != NULL)
--           shell = g_strdup (pwd->pw_shell);
--    }
--    if (!shell || !*shell)
--	shell = "/bin/sh";
--
--    /* This is the directory, where MC was installed, on Unix this is DATADIR */
--    /* and can be overriden by the MC_DATADIR environment variable */
--    if ((mc_libdir = getenv ("MC_DATADIR")) != NULL) {
--	mc_home = g_strdup (mc_libdir);
--    } else {
--	mc_home = g_strdup (DATADIR);
--    }
--}
--
--static void
--sigchld_handler_no_subshell (int sig)
--{
--#ifdef __linux__
--    int pid, status;
--
--    if (!console_flag)
--	return;
--
--    /* COMMENT: if it were true that after the call to handle_console(..INIT)
--       the value of console_flag never changed, we could simply not install
--       this handler at all if (!console_flag && !use_subshell). */
--
--    /* That comment is no longer true.  We need to wait() on a sigchld
--       handler (that's at least what the tarfs code expects currently). */
--
--    pid = waitpid (cons_saver_pid, &status, WUNTRACED | WNOHANG);
--
--    if (pid == cons_saver_pid) {
--
--	if (WIFSTOPPED (status)) {
--	    /* Someone has stopped cons.saver - restart it */
--	    kill (pid, SIGCONT);
--	} else {
--	    /* cons.saver has died - disable console saving */
--	    handle_console (CONSOLE_DONE);
--	    console_flag = 0;
--	}
--    }
--    /* If we got here, some other child exited; ignore it */
--#endif				/* __linux__ */
--
--    (void) sig;
--}
--
--static void
--init_sigchld (void)
--{
--    struct sigaction sigchld_action;
--
--    sigchld_action.sa_handler =
--#ifdef HAVE_SUBSHELL_SUPPORT
--	use_subshell ? sigchld_handler :
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--	sigchld_handler_no_subshell;
--
--    sigemptyset (&sigchld_action.sa_mask);
--
--#ifdef SA_RESTART
--    sigchld_action.sa_flags = SA_RESTART;
--#else
--    sigchld_action.sa_flags = 0;
--#endif				/* !SA_RESTART */
--
--    if (sigaction (SIGCHLD, &sigchld_action, NULL) == -1) {
--#ifdef HAVE_SUBSHELL_SUPPORT
--	/*
--	 * This may happen on QNX Neutrino 6, where SA_RESTART
--	 * is defined but not implemented.  Fallback to no subshell.
--	 */
--	use_subshell = 0;
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--    }
--}
--
--static void
--print_mc_usage (poptContext ctx, FILE *stream)
--{
--    int leftColWidth;
--
--    poptSetOtherOptionHelp (ctx,
--			    _("[flags] [this_dir] [other_panel_dir]\n"));
--
--    /* print help for options */
--    leftColWidth = poptPrintHelp (ctx, stream, 0);
--    fprintf (stream, "  %-*s   %s\n", leftColWidth, _("+number"),
--	     _("Set initial line number for the internal editor"));
--    fputs (_
--	   ("\n"
--	    "Please send any bug reports (including the output of `mc -V')\n"
--	    "to mc-devel at gnome.org\n"), stream);
--    show_version (0);
--}
--
--static void
--print_color_usage (void)
--{
--    /*
--     * FIXME: undocumented keywords: viewunderline, editnormal, editbold,
--     * and editmarked.  To preserve translations, lines should be split.
--     */
--    /* TRANSLATORS: don't translate keywords and names of colors */
--    fputs (_
--	   ("--colors KEYWORD={FORE},{BACK}\n\n"
--	    "{FORE} and {BACK} can be omitted, and the default will be used\n"
--	    "\n" "Keywords:\n"
--	    "   Global:       errors, reverse, gauge, input, viewunderline\n"
--	    "   File display: normal, selected, marked, markselect\n"
--	    "   Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
--	    "                 errdhotfocus\n"
--	    "   Menus:        menu, menuhot, menusel, menuhotsel\n"
--	    "   Editor:       editnormal, editbold, editmarked\n"
--	    "   Help:         helpnormal, helpitalic, helpbold, helplink, helpslink\n"
--	    "   File types:   directory, executable, link, stalelink, device, special, core\n"
--	    "\n" "Colors:\n"
--	    "   black, gray, red, brightred, green, brightgreen, brown,\n"
--	    "   yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
--	    "   brightcyan, lightgray and white\n\n"), stdout);
--}
--
--static void
--process_args (poptContext ctx, int c, const char *option_arg)
--{
--    switch (c) {
--    case 'V':
--	show_version (1);
--	exit (0);
--	break;
--
--    case 'c':
--	disable_colors = 0;
--#ifdef HAVE_SLANG
--	force_colors = 1;
--#endif				/* HAVE_SLANG */
--	break;
--
--    case 'f':
--	printf ("%s\n", mc_home);
--	exit (0);
--	break;
--
--#ifdef USE_NETCODE
--    case 'l':
--	mc_setctl ("/#ftp:", VFS_SETCTL_LOGFILE, (void *) option_arg);
--#ifdef WITH_SMBFS
--	smbfs_set_debugf (option_arg);
--#endif				/* WITH_SMBFS */
--	break;
--
--#ifdef WITH_SMBFS
--    case 'D':
--	smbfs_set_debug (atoi (option_arg));
--	break;
--#endif				/* WITH_SMBFS */
--#endif				/* USE_NETCODE */
--
--    case 'd':
--	use_mouse_p = MOUSE_DISABLED;
--	break;
--
--#ifdef HAVE_SUBSHELL_SUPPORT
--    case 'u':
--	use_subshell = 0;
--	break;
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--
--    case 'H':
--	print_color_usage ();
--	exit (0);
--	break;
--
--    case 'h':
--	print_mc_usage (ctx, stdout);
--	exit (0);
--    }
--}
--
--static const struct poptOption argument_table[] = {
--    /* generic options */
--    {"help", 'h', POPT_ARG_NONE, NULL, 'h',
--     N_("Displays this help message"), NULL},
--    {"version", 'V', POPT_ARG_NONE, NULL, 'V',
--     N_("Displays the current version"), NULL},
--
--    /* terminal options */
--    {"xterm", 'x', POPT_ARG_NONE, &force_xterm, 0,
--     N_("Forces xterm features"), NULL},
--    {"nomouse", 'd', POPT_ARG_NONE, NULL, 'd',
--     N_("Disable mouse support in text version"), NULL},
--#if defined(HAVE_SLANG)
--    {"termcap", 't', 0, &SLtt_Try_Termcap, 0,
--     N_("Tries to use termcap instead of terminfo"), NULL},
--#endif
--    {"resetsoft", 'k', POPT_ARG_NONE, &reset_hp_softkeys, 0,
--     N_("Resets soft keys on HP terminals"), NULL},
--    {"slow", 's', POPT_ARG_NONE, &slow_terminal, 0,
--     N_("To run on slow terminals"), NULL},
--    {"stickchars", 'a', 0, &force_ugly_line_drawing, 0,
--     N_("Use stickchars to draw"), NULL},
--
--    /* color options */
--    {"nocolor", 'b', POPT_ARG_NONE, &disable_colors, 0,
--     N_("Requests to run in black and white"), NULL},
--    {"color", 'c', POPT_ARG_NONE, NULL, 'c',
--     N_("Request to run in color mode"), NULL},
--    {"colors", 'C', POPT_ARG_STRING, &command_line_colors, 0,
--     N_("Specifies a color configuration"), NULL},
--    {"help-colors", 'H', POPT_ARG_NONE, NULL, 'H',
--     N_("Displays a help screen on how to change the color scheme"), NULL},
--
--    /* debug options */
--#ifdef USE_NETCODE
--    {"ftplog", 'l', POPT_ARG_STRING, NULL, 'l',
--     N_("Log ftp dialog to specified file"), NULL},
--#ifdef WITH_SMBFS
--    {"debuglevel", 'D', POPT_ARG_STRING, NULL, 'D',
--     N_("Set debug level"), NULL},
--#endif
--#endif
--
--    /* options for wrappers */
--    {"datadir", 'f', POPT_ARG_NONE, NULL, 'f',
--     N_("Print data directory"), NULL},
--    {"printwd", 'P', POPT_ARG_STRING, &last_wd_file, 0,
--     N_("Print last working directory to specified file"), NULL},
--
--    /* subshell options */
--#ifdef HAVE_SUBSHELL_SUPPORT
--    {"subshell", 'U', POPT_ARG_NONE, &use_subshell, 0,
--     N_("Enables subshell support (default)"), NULL},
--    {"nosubshell", 'u', POPT_ARG_NONE, NULL, 'u',
--     N_("Disables subshell support"), NULL},
--#endif
--
--    /* single file operations */
--    {"view", 'v', POPT_ARG_STRING, &view_one_file, 0,
--     N_("Launches the file viewer on a file"), NULL},
--#ifdef USE_INTERNAL_EDIT
--    {"edit", 'e', POPT_ARG_STRING, &edit_one_file, 0,
--     N_("Edits one file"), NULL},
--#endif
--
--    {NULL, '\0', 0, NULL, 0, NULL, NULL}
--};
--
--static void
--handle_args (int argc, char *argv[])
--{
--    char *tmp;
--    poptContext ctx;
--    const char *base;
--    int c;
--
--    ctx =
--	poptGetContext ("mc", argc, argv, argument_table,
--			POPT_CONTEXT_NO_EXEC);
--
--#ifdef USE_TERMCAP
--    SLtt_Try_Termcap = 1;
--#endif
--
--    while ((c = poptGetNextOpt (ctx)) > 0) {
--	process_args (ctx, c, poptGetOptArg (ctx));
--    }
--
--    if (c < -1) {
--	print_mc_usage (ctx, stderr);
--	fprintf (stderr, "%s: %s\n",
--		 poptBadOption (ctx, POPT_BADOPTION_NOALIAS),
--		 poptStrerror (c));
--	exit (1);
--    }
--
--    tmp = poptGetArg (ctx);
--
--    /*
--     * Check for special invocation names mcedit and mcview,
--     * if none apply then set the current directory and the other
--     * directory from the command line arguments
--     */
--    base = x_basename (argv[0]);
--    if (!STRNCOMP (base, "mce", 3) || !STRCOMP (base, "vi")) {
--	edit_one_file = "";
--	if (tmp) {
--	    if (*tmp == '+' && isdigit ((unsigned char) tmp[1])) {
--		int start_line = atoi (tmp);
--		if (start_line > 0) {
--		    char *file = poptGetArg (ctx);
--		    if (file) {
--			tmp = file;
--			edit_one_file_start_line = start_line;
--		    }
--		}
--	    }
--	    edit_one_file = g_strdup (tmp);
--	}
--    } else if (!STRNCOMP (base, "mcv", 3) || !STRCOMP (base, "view")) {
--	if (tmp)
--	    view_one_file = g_strdup (tmp);
--	else {
--	    fputs ("No arguments given to the viewer\n", stderr);
--	    exit (1);
--	}
--    } else {
--	/* sets the current dir and the other dir */
--	if (tmp) {
--	    this_dir = g_strdup (tmp);
--	    if ((tmp = poptGetArg (ctx)))
--		other_dir = g_strdup (tmp);
--	}
--    }
--
--    poptFreeContext (ctx);
--}
--
--/*
-- * The compatibility_move_mc_files routine is intended to
-- * move all of the hidden .mc files into a private ~/.mc
-- * directory in the home directory, to avoid cluttering the users.
-- *
-- * Previous versions of the program had all of their files in
-- * the $HOME, we are now putting them in $HOME/.mc
-- */
--
--static int
--do_mc_filename_rename (const char *o_name, const char *n_name)
--{
--    char *full_o_name = concat_dir_and_file (home_dir, o_name);
--    char *full_n_name = g_strconcat (home_dir, MC_BASE, n_name, (char *) NULL);
--    int move;
--
--    move = 0 == rename (full_o_name, full_n_name);
--    g_free (full_o_name);
--    g_free (full_n_name);
--    return move;
--}
--
--static int
--compatibility_move_mc_files (void)
--{
--    struct stat s;
--    int move = 0;
--    char *mc_dir = concat_dir_and_file (home_dir, ".mc");
--
--    if (stat (mc_dir, &s) && (errno == ENOENT)
--	&& (mkdir (mc_dir, 0777) != -1)) {
--
--	move = do_mc_filename_rename (".mc.ini", "ini");
--	move += do_mc_filename_rename (".mc.hot", "hotlist");
--	move += do_mc_filename_rename (".mc.ext", "bindings");
--	move += do_mc_filename_rename (".mc.menu", "menu");
--	move += do_mc_filename_rename (".mc.bashrc", "bashrc");
--	move += do_mc_filename_rename (".mc.inputrc", "inputrc");
--	move += do_mc_filename_rename (".mc.tcshrc", "tcshrc");
--	move += do_mc_filename_rename (".mc.tree", "Tree");
--    }
--    g_free (mc_dir);
--    return move;
--}
--
--int
--main (int argc, char *argv[])
--{
--    /* if on, it displays the information that files have been moved to ~/.mc */
--    int show_change_notice = 0;
--
--    /* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */
--    setlocale (LC_ALL, "");
--    bindtextdomain ("mc", LOCALEDIR);
--    textdomain ("mc");
--
--    /* Set up temporary directory */
--    mc_tmpdir ();
--
--    OS_Setup ();
--
--    /* This variable is used by the subshell */
--    home_dir = getenv ("HOME");
--    if (!home_dir) {
--	/* mc_home was computed by OS_Setup */
--	home_dir = mc_home;
--    }
--
--    vfs_init ();
--
--#ifdef HAVE_SLANG
--    SLtt_Ignore_Beep = 1;
--#endif
--
--    handle_args (argc, argv);
--
--    /* NOTE: This has to be called before slang_init or whatever routine
--       calls any define_sequence */
--    init_key ();
--
--    /* Must be done before installing the SIGCHLD handler [[FIXME]] */
--    handle_console (CONSOLE_INIT);
--
--#ifdef HAVE_SUBSHELL_SUPPORT
--    /* Don't use subshell when invoked as viewer or editor */
--    if (edit_one_file || view_one_file)
--	use_subshell = 0;
--
--    if (use_subshell)
--	subshell_get_console_attributes ();
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--
--    /* Install the SIGCHLD handler; must be done before init_subshell() */
--    init_sigchld ();
--
--    show_change_notice = compatibility_move_mc_files ();
--
--    /* We need this, since ncurses endwin () doesn't restore the signals */
--    save_stop_handler ();
--
--    /* Must be done before init_subshell, to set up the terminal size: */
--    /* FIXME: Should be removed and LINES and COLS computed on subshell */
--#ifdef HAVE_SLANG
--    slang_init ();
--#endif
--    /* NOTE: This call has to be after slang_init. It's the small part from
--       the previous init_key which had to be moved after the call of slang_init */
--    init_key_input_fd ();
--
--    load_setup ();
--
--    init_curses ();
--
--    init_xterm_support ();
--
--#ifdef HAVE_SUBSHELL_SUPPORT
--
--    /* Done here to ensure that the subshell doesn't  */
--    /* inherit the file descriptors opened below, etc */
--    if (use_subshell)
--	init_subshell ();
--
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--
--    /* Removing this from the X code let's us type C-c */
--    load_key_defs ();
--
--    /* Also done after init_subshell, to save any shell init file messages */
--    if (console_flag)
--	handle_console (CONSOLE_SAVE);
--
--    if (alternate_plus_minus)
--	application_keypad_mode ();
--
--    if (show_change_notice) {
--	message (1, _(" Notice "),
--		 _(" The Midnight Commander configuration files \n"
--		   " are now stored in the ~/.mc directory, the \n"
--		   " files have been moved now\n"));
--    }
--#ifdef HAVE_SUBSHELL_SUPPORT
--    if (use_subshell) {
--	prompt = strip_ctrl_codes (subshell_prompt);
--	if (!prompt)
--	    prompt = "";
--    } else
--#endif				/* HAVE_SUBSHELL_SUPPORT */
--	prompt = (geteuid () == 0) ? "# " : "$ ";
--
--    /* Program main loop */
--    if (!midnight_shutdown)
--	do_nc ();
--
--    /* Save the tree store */
--    tree_store_save ();
--
--    /* Virtual File System shutdown */
--    vfs_shut ();
--
--    flush_extension_file ();	/* does only free memory */
--
--    endwin ();
--#ifdef HAVE_SLANG
--    slang_shutdown ();
--#endif
--
--    if (console_flag && !(quit & SUBSHELL_EXIT))
--	handle_console (CONSOLE_RESTORE);
--    if (alternate_plus_minus)
--	numeric_keypad_mode ();
--
--    signal (SIGCHLD, SIG_DFL);	/* Disable the SIGCHLD handler */
--
--    if (console_flag)
--	handle_console (CONSOLE_DONE);
--    putchar ('\n');		/* Hack to make shell's prompt start at left of screen */
--
--    if (last_wd_file && last_wd_string && !print_last_revert
--	&& !edit_one_file && !view_one_file) {
--	int last_wd_fd =
--	    open (last_wd_file, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL,
--		  S_IRUSR | S_IWUSR);
--
--	if (last_wd_fd != -1) {
--	    write (last_wd_fd, last_wd_string, strlen (last_wd_string));
--	    close (last_wd_fd);
--	}
--    }
--    g_free (last_wd_string);
--
--    g_free (mc_home);
--    done_key ();
--#ifdef HAVE_CHARSET
--    free_codepages_list ();
--#endif
--    g_free (this_dir);
--    g_free (other_dir);
--
--    return 0;
--}
+--- mc-4.6.1a/src/main.c.laf	2005-11-24 16:55:06.000000000 +0100
++++ mc-4.6.1a/src/main.c	2005-11-24 16:56:27.000000000 +0100
+@@ -270,6 +270,9 @@ int midnight_shutdown = 0;
+ /* The user's shell */
+ const char *shell = NULL;
+ 
++/* Is the LANG UTF-8 ? */
++gboolean is_utf8 = FALSE;
++
+ /* The xterm title */
+ char *xterm_title_str = NULL;
+ 
+@@ -2167,6 +2170,16 @@ main (int argc, char *argv[])
+     /* if on, it displays the information that files have been moved to ~/.mc */
+     int show_change_notice = 0;
+ 
++    /* Check whether we have UTF-8 locale */
++    char *lang = getenv("LANG");
++    size_t len = 0;
++    
++    if ( lang )
++    	len = strlen(lang);
++    
++    if ( len >= 5 && !strcasecmp(&lang[len-5],"UTF-8") )
++	is_utf8 = TRUE;
++
+     /* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */
+     setlocale (LC_ALL, "");
+     bindtextdomain ("mc", LOCALEDIR);
 Index: mc-4.6.2~git20080311/src/widget.c
 ===================================================================
 --- mc-4.6.2~git20080311.orig/src/widget.c	2008-05-17 17:42:47.000000000 +0200




More information about the Pkg-mc-commits mailing list