[Pkg-mc-commits] r6 - in trunk: . debian debian/extra debian/patches
winnie at alioth.debian.org
winnie at alioth.debian.org
Mon Jan 14 15:38:09 UTC 2008
Author: winnie
Date: 2008-01-14 15:38:09 +0000 (Mon, 14 Jan 2008)
New Revision: 6
Added:
trunk/debian/
trunk/debian/README.Debian
trunk/debian/changelog
trunk/debian/control
trunk/debian/copyright
trunk/debian/dirs
trunk/debian/doc-base
trunk/debian/docs
trunk/debian/extra/
trunk/debian/extra/icon.xpm
trunk/debian/extra/mcedit-debian
trunk/debian/extra/mcedit-debian.1
trunk/debian/extra/mcmfmt.1
trunk/debian/extra/mcview-debian
trunk/debian/extra/mcview-debian.1
trunk/debian/links
trunk/debian/manpages
trunk/debian/mc.postinst
trunk/debian/mc.postrm
trunk/debian/mc.prerm
trunk/debian/menu
trunk/debian/patches/
trunk/debian/patches/01_mc.ext.in.mime.patch
trunk/debian/patches/02_debian_syntax.patch
trunk/debian/patches/03_conffiles_in_mans.patch
trunk/debian/patches/04_off64t.patch
trunk/debian/patches/05_symcrash.patch
trunk/debian/patches/06_smbconf_path.patch
trunk/debian/patches/08_awk.patch
trunk/debian/patches/09_de.po.patch
trunk/debian/patches/10_it.po.patch
trunk/debian/patches/11_extfs_missing.patch
trunk/debian/patches/13_syntax.patch
trunk/debian/patches/14_cxx.syntax.patch
trunk/debian/patches/18_sh_syntax.patch
trunk/debian/patches/22_main.c.patch
trunk/debian/patches/26_vietnamese_po.patch
trunk/debian/patches/28_mc-ctype.patch
trunk/debian/patches/28_mc-dontrewrite.patch
trunk/debian/patches/32_c-vs-cxx.patch
trunk/debian/patches/36_developer_mode.patch
trunk/debian/patches/37_mcedit-segv.patch
trunk/debian/patches/40_view.c.patch
trunk/debian/patches/45_ftpfs_symlink1.patch
trunk/debian/patches/45_ftpfs_symlink2.patch
trunk/debian/patches/47_mc.menu.patch
trunk/debian/patches/48_utf8-slang2.patch
trunk/debian/patches/49_64bit.patch
trunk/debian/patches/50_utf8-more.patch
trunk/debian/patches/52_utf8-8bits-slang2.patch
trunk/debian/patches/55_mc-utf8-look-and-feel.patch
trunk/debian/patches/60_recode.patch
trunk/debian/rocks
trunk/debian/rules
trunk/debian/slang.c
trunk/debian/watch
Log:
Check in the debian dir of the mc revision which is in unstable
Property changes on: trunk/debian
___________________________________________________________________
Name: mergeWithUpstream
+ 1
Added: trunk/debian/README.Debian
===================================================================
--- trunk/debian/README.Debian (rev 0)
+++ trunk/debian/README.Debian 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,34 @@
+mc for Debian
+-------------
+
+ Debian mc package patches: http://alioth.debian.org/projects/pkg-mc/
+
+
+ The 4.6.1-pre3 introduces the charset and samba enabling in the mc package
+ compilation.
+
+ The current is a pre-release for 4.6.1 where the aim is to include as
+ many bug fixes as possible. In particular DSA 639-1 vulnerabilities.
+
+ -- Stefano Melchior <stefano.melchior at openlabs.it> Mon, 31 Jan 2005 23:50:45 +0100
+
+ Starting with version 4.6.0 Midnight Commander doesn't include any
+ GUI interface. The GNOME interface has been removed so that the
+ developers could concentrate on the text edition of the program. If
+ you need a GUI file manager, there are many of them available in the
+ Debian archive - pick one and use it.
+
+ Because of some issues a method to stay in the last working directory
+ after exit has changed with 4.6.0. See the description of the -P
+ option in the Options section of the manual and new wrapper scripts
+ in /usr/share/mc/bin/.
+
+ If you want to learn some interesting usage tips, you should read the
+ Midnight Commander FAQ (/usr/share/doc/mc/FAQ, also available through
+ the Debian doc-base interface).
+
+ Midnight Commander supports apt and dpkg archive managment through
+ it's ExtFS feature. Just "cd #apt" or "cd #dpkg" at the mc command
+ line and try it.
+
+ -- Adam Byrtek <alpha at debian.org> Wed, 5 Feb 2003 20:34:46 +0100
Added: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog (rev 0)
+++ trunk/debian/changelog 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,994 @@
+mc (1:4.6.1-8) unstable; urgency=low
+
+ * Orphaning package: Stefano has been nearly MIA during the last 3 years.
+ * Updated the watch file. Closes: #449618
+ * Note to future DDs: do not forget to use the CVS repository available
+ on Alioth: http://alioth.debian.org/projects/pkg-mc/
+
+ -- Ludovic Drolez <ldrolez at debian.org> Mon, 10 Dec 2007 19:50:47 +0100
+
+mc (1:4.6.1-7) unstable; urgency=medium
+
+ * Fixed Anton Pak's recode patch which can cause a segfault.
+ Closes: #382206, #382857, #400927
+ * Mode display bug fixed. Patch added to 50_utf8-more.patch. Closes: #415097
+ * Shift-Enter bug fixed. The line editing widget went crazy when seeing a litteral newline
+ (Shift+enter or Ctrl-q+enter). Patch added to 50_utf8-more.patch
+ Downloaded from https://svn.uhulinux.hu/packages/dev/mc/patches/
+
+ -- Ludovic Drolez <ldrolez at debian.org> Mon, 2 Apr 2007 8:44:35 +0200
+
+mc (1:4.6.1-6) unstable; urgency=medium
+
+ * debian/rules modified to fix a FTBFS during the 2nd build. Closes: #384302
+ * added 05_symcrash.patch to fix a segfault (should be in mc's CVS). Closes: #383341
+ * mpg123 title view fixed. Closes: #391644
+
+ -- Ludovic Drolez <ldrolez at debian.org> Thu, 24 Aug 2006 22:19:03 +0200
+
+mc (1:4.6.1-5) unstable; urgency=low
+
+ * Removed the Ctrl-t accelerator from 60_recode.patch. Closes: #380417
+ * Modified 47_mc.menu.patch to use 'editor' instead of the hardcoded 'vi'
+ so that mc makes use of /etc/alternatives. Closes: #373144
+ * .tar view fixed in 01_mc.ext.in.mime.patch. Closes: #381353
+ * still 68 bugs in the BTS...
+
+ -- Ludovic Drolez <ldrolez at debian.org> Mon, 31 Jul 2006 22:25:47 +0200
+
+mc (1:4.6.1-4) unstable; urgency=medium
+
+ * added 52_utf8-8bits-slang2.patch. Closes: #359016, #378786
+ * added 55_mc-utf8-look-and-feel.patch : nicer look and feel
+ * added 60_recode.patch : a patch to choose the charset from mc
+ * 77 bugs should still remain after this upload... If you have some time please join
+ the Debian MC team.
+
+ -- Ludovic Drolez <ldrolez at debian.org> Thu, 12 Jul 2006 20:00:00 +0200
+
+mc (1:4.6.1-3) unstable; urgency=low
+
+ * Changelog removed. Closes: #317707
+ * Lowered the alternative priority on 'view' and 'edit'. Closes: #367991
+ * Patched the UTF8 patch to allow compiling mc without UTF8. Closes: #367187
+ * html files can be opened with links, w3m or lynx. Closes: #332910
+ * added 04_off64t.patch to fix problems with tar archives
+ larger than 2GB. Already added in mc's CVS. Closes: #324755
+ * in 50_utf8-more.patch added a small patch for a problem in the status
+ line with UTF-8 locales. Closes: #360427
+ * 78 bugs should still remain after this upload...
+
+ -- Ludovic Drolez <ldrolez at debian.org> Thu, 22 Jun 2006 16:55:12 +0200
+
+mc (1:4.6.1-2) unstable; urgency=medium
+
+ * mc with UTF-8 support upload. Closes: #354691, #309398, #126077, #242194
+ * added Ubuntu UTF-8 patches: 48_utf8-slang2.patch
+ Many thanks to Leonard den Ottolander and Sebastian Droge
+ * removed 27_menu-generation.patch because of UTF-8 problems
+ * convert help and hint files to UTF-8 in the Debian makefile
+ * 49_64bit.patch: patch to solve some 64bit problems from Gentoo
+ * use arj instead of unarj. Closes: #340089
+
+ -- Ludovic Drolez <ldrolez at debian.org> Mon, 20 Mar 2006 23:41:40 +0200
+
+mc (1:4.6.1-1) unstable; urgency=low
+
+ * New upstream release. Closes: #321805, #298345
+ getgrouplist() is not used anymore. Closes: #313401
+ * View jpegs with /usr/bin/exif. Closes: #207655
+ * Handle .ipk like .tgz. Closes: #323927
+ * Filter for .mo files. Closes: #318077
+ * Obsolete patches: 07_mc-tar-name-length-fix.patch,
+ 24_mc-complete-show-all-fix.patch, 33_mc-iconv-error.patch.
+ * 79 bugs should still remain after this upload...
+
+ -- Ludovic Drolez <ldrolez at debian.org> Mon, 5 Sep 2005 22:02:24 +0200
+
+mc (1:4.6.0-4.6.1-pre4-2) unstable; urgency=low
+
+ * Build against libslang2-dev. Closes: #315241
+ * Added 07_mc-tar-name-length-fix.patch. Closes: #315597
+ * Modified 35_mc.ext.in.patch to improve to deb vfs view. Closes: #198691
+ * Added 09_de.po.patch to fix some typos in mc's de.po. Closes: #313796, #309957
+ * Combined 35_mc.ext.in.patch, 04_dpkg_and_apt_vfs.patch, 01_mime.patch,
+ 41_antiword_mc.ext.patch
+ to 01_mc.ext.in.mime.patch to fix build problems.
+
+ -- Ludovic Drolez <ldrolez at debian.org> Tue, 21 Jun 2005 20:01:31 +0200
+
+mc (1:4.6.0-4.6.1-pre4-1) unstable; urgency=low
+
+ * New upstream release. Closes: #309630
+ 20_german_translation.patch, 23_php.singlequote_fix.patch,
+ 30_mc-spaceprompt1.patch, 43_AUTHORS.patch, 32_lang-with-env.patch removed
+ * Build with debian slang1-dev
+ * Do not remove /etc/mc/mc.ini. Closes: #198954
+
+ -- Ludovic Drolez <ldrolez at debian.org> Wed, 18 May 2005 23:15:05 +0200
+
+mc (1:4.6.0-4.6.1-pre3-3) unstable; urgency=medium
+
+ * urgency=medium because of 3 important bugs introduced by the last upload.
+ * removed 46_dotdotdir.patch to fix the tar bug. Closes: #308546
+ * replaced the iconv patch, 33_mc-iconv-error.patch, with a new
+ one provided by Roland Illig. Closes: #308296
+ * added cxx.syntax by copying the old c.syntax to it. Closes: #308794
+ * removed the useless 44_str_unconst.patch.
+
+ -- Ludovic Drolez <ldrolez at debian.org> Wed, 11 May 2005 22:57:44 +0200
+
+mc (1:4.6.0-4.6.1-pre3-2) unstable; urgency=medium
+
+ * Urgency set to medium because of LOTS of annoying bugs fixed and
+ the segfault in mcedit.
+ * Fixed German po translation with upstream, 20_german_translation.patch.
+ Closes: #253869
+ * Added Antiword to view .doc files, 41_antiword_mc.ext.patch
+ Closes: #305649
+ * Added menu entry for Debian source packages, 47_mc.menu.diff
+ Closes: #307344
+ * Fixed Samba enabling. Closes: #264890
+ * Fixed Build-Depend on libgpm for GNU/non-Linux. Closes: #226987
+ * Added colored syntax for man pages by Michelle Konzack,
+ 13_syntax.patch. Closes: #298322
+ * Improved shell syntax highlighting by Michelle Konzack: 18_sh_syntax.patch.
+ Closes: #299210
+ * Improved php syntax HL with 23_php.singlequote_fix.patch
+ * Fixed colored syntax highlighting and hostname in the title bar,
+ 22_main.c.patch
+ * Fixed tar file system glitch for "tar -cvzlf file.tgz / /home/"
+ Closes: #89350
+ * Fixed problems with View and Edit when used with LANG=hu_HU. Closes: #103242
+ * Fixed unprintable control sequences in PS1 cause broken prompt
+ Closes: #83447
+ * Fixed: mcedit: subshell changes directory. Closes: #208867
+ * Fixed the #utar archive content viewer missing files. Closes: #228934
+ * Enabled charset conversion feature. Closes: #109956, #167986
+ * Added new keybinding by Vitja Makarov with 42_keybindings-0.2.2.patch
+ * Added const_cast to be replaced by str_unconst, 44_str_unconst.patch
+ by Roland Illig.
+ * Improved symlink handling in ftpfs (45_ftpfs_symlink*.patch) by P.Tsekov.
+ * Parent directory's patch by Leonard den Ottolander with 46_dotdotdir.patch
+ * Fixed user at hostname in the term emulation title bar.
+ * Added new menu generation patch by Roland Illig
+ with 27_menu-generation.patch
+ * Fixed: possible data loss when quota exedeed by Jindrich Novy.
+ * Fixed uarj bug from Savannah with 29_uarj_bug.patch (Savannah #12406).
+ * Added patch to view inside udebs by Mantas Kriauciunas, 35_mc.ext.in.patch
+ (Sannavah #3899)
+ * Added "space on prompt bugfix" by Jindrich Novy with
+ 30_mc-spaceprompt1.patch. Closes: #305859
+ * Added Bad error checking after iconv() call patch by Jindrich Novy with
+ 33_mc-iconv-error.patch
+ * Added syntax patches for c vs. cxx with 32_c-vs-cxx.patch
+ * Added syntax patches for scripts starting with /usr/bin/env with
+ 32_lang-with-env.patch
+ * Added a substitute for --enable-maintainer-mode with 36_developer_mode.patch
+ by Roland Illig.
+ * Fixed mc core dumps when not find "context default" section in syntax section
+ with 37_mcedit-segv.patch by Ian Zagorskih.
+ * Added the ext2 quote fixing hunks by Leonard den Ottolander.
+ * Added AUTHORS patch, 43_AUTHORS.patch, by Leonard den Ottolander.
+ * Added mcedit position remember bugfix by Christian Hamar with
+ 31_mc_filepos_bugfix_461pre4a.patch
+ * Added fix for End key in viewer by Jindrich Makovicka with 40_view.c.patch
+ * Added Vietnamese translation with 26_vietnamese_po.patch
+ * Fixed 11_extfs_missing.patch because of problems with .jar files.
+ Closes: #299932.
+ * added zip, unzip, bzip2 to 'Suggests'.
+
+ -- Ludovic Drolez <ldrolez at debian.org> Sun, 6 Mar 2005 12:06:32 +0100
+
+mc (1:4.6.0-4.6.1-pre3-1) unstable; urgency=high
+
+ * New maintainers: Stefano Melchior and Ludovic Drolez (closes: #282301).
+ * Urgency set to high because of security bug fixes.
+ * Missing quoting in ext2 and i18n fix.
+ * Samba lib warning (netmask.c) fixed by 12_netmask_c.patch.
+ * Security upload to handle DSA 639 (references: CAN-2004-1004,
+ CAN-2004-1005, CAN-2004-1009, CAN-2004-1090, CAN-2004-1091, CAN-2004-1092,
+ CAN-2004-1093, CAN-2004-1174, CAN-2004-1175, CAN-2004-1176),
+ Fixed upstream in the pre3 release (Closes: #295261).
+ * Pre3 release includes fix for CAN-2004-0226 (closes: #286395).
+ * Fixed ftp filesystem impossibility to list dirs when password contains #
+ (closes: #92121).
+ * Fixed subshell impossibility to be started (closes: #241891).
+ * Fixed CAN-2004-0494 (closes: #267596).
+ * Fixed buffer overflow and format string vulnerabilities (closes: #295259).
+ * Italian hotkey translation changed (closes: #231071).
+ * New upstream pre-release.
+
+ -- Ludovic Drolez <ldrolez at debian.org> Mon, 17 Feb 2005 22:45:32 +0100
+
+mc (1:4.6.0-4.6.1-pre1-3) unstable; urgency=low
+
+ * Polish documentation fix no longer needed.
+
+ -- Adam Byrtek <alpha at debian.org> Wed, 5 May 2004 00:08:26 +0200
+
+mc (1:4.6.0-4.6.1-pre1-2) unstable; urgency=high
+
+ * Security upload to handle DSA-497-1 (references: CAN-2004-0226,
+ CAN-2004-0231, CAN-2004-0232). Patch by Jakub Jelinek ported to
+ 4.6.1-pre1 by Adam Byrtek.
+
+ -- Adam Byrtek <alpha at debian.org> Tue, 4 May 2004 09:28:26 +0200
+
+mc (1:4.6.0-4.6.1-pre1-1) unstable; urgency=high
+
+ * Security upload to fix buffer overflow, 4.6.1 final will be there
+ soon (closes: #226737).
+ * --without-x configure flag removed as mc now libX11 is loaded
+ dynamically using gmodule, if possible.
+
+ -- Adam Byrtek <alpha at debian.org> Thu, 15 Jan 2004 15:55:52 +0100
+
+mc (1:4.6.0-5) unstable; urgency=low
+
+ * Fix segfault when TERM is unset (closes: #191867).
+ * Removed conflict with gmc, which works with 4.6.0. Note that gmc
+ installation still requires some --force (closes: #192493).
+ * Files in /var/log are no longer treated as manpages
+ (closes: #179350).
+
+ -- Adam Byrtek <alpha at debian.org> Tue, 17 Jun 2003 15:37:05 +0200
+
+mc (1:4.6.0-4) unstable; urgency=low
+
+ * Standard `awk' detected first by configure, not the specific
+ implmentation (closes: #181972).
+ * Polish translation breakage fixed (closes: #183275).
+
+ -- Adam Byrtek <alpha at debian.org> Wed, 19 Mar 2003 22:17:16 +0100
+
+mc (1:4.6.0-3) unstable; urgency=low
+
+ * `mcview' and `mcedit' added as alternatives for `editor' and `view'
+ (closes: #116518).
+
+ -- Adam Byrtek <alpha at debian.org> Tue, 11 Feb 2003 22:05:00 +0100
+
+mc (1:4.6.0-2) unstable; urgency=low
+
+ * Control field 'Replaces: manpages-pl' added to replace Polish
+ manual from this package with official one (closes: #180442).
+ * 'Replaces: mc-common' added to make upgrade smoother.
+ * 'Conflicts: suidmanager' because mc used to use it, but it is now
+ deprecated (closes: #180431).
+ * Doesn't depend on libgpm when compiling on HURD.
+
+ * README.Debian now mentions -P syntax changes (close: #180551).
+
+ -- Adam Byrtek <alpha at debian.org> Tue, 11 Feb 2003 13:55:47 +0100
+
+mc (1:4.6.0-1) unstable; urgency=low
+
+ * New upstream release.
+ * First 4.6.0 official upload, and package takeover.
+
+ -- Adam Byrtek <alpha at debian.org> Wed, 5 Feb 2003 20:34:46 +0100
+
+mc (4.6.0-pre3-1) unstable; urgency=low
+
+ * New upstream prerelease.
+
+ -- Adam Byrtek <alpha at debian.org> Wed, 22 Jan 2003 09:54:58 +0100
+
+mc (4.6.0-pre2-2) unstable; urgency=low
+
+ * Patches checked, unneccesary removed, others reviewed.
+
+ -- Adam Byrtek <alpha at debian.org> Wed, 15 Jan 2003 00:35:20 +0100
+
+mc (4.6.0-pre2-1) unstable; urgency=low
+
+ * New upstream release (gmc, mc-common packages removed).
+ * New maintainer, some cleanups.
+ * Menu icon added (credits for the icon go to BigVax, bigvax at mail.ru).
+ * New description (taken from freshmeat.net).
+
+ -- Adam Byrtek <alpha at debian.org> Sun, 29 Dec 2002 16:18:18 +0100
+
+mc (4.5.55-1.2) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Make /etc/CORBA/servers/gmc.gnorba a conffile (closes: #132831).
+ * Correct spelling mistakes in descriptions (closes: #124680, #125121).
+ * Update convert-metadata.db to deal with libgnome32 linking against db3
+ rather than db2, and add a new debconf question prompting the admin to
+ run it. I've left the db1->db2 question there temporarily for historical
+ and translation interest (closes: #103102).
+ * Upgrades from slink need both libdb2-util and libdb3-util. Fortunately,
+ they can coexist. I'll leave it up to the maintainers what to do about
+ this after the woody release.
+
+ -- Colin Watson <cjwatson at debian.org> Sat, 16 Feb 2002 23:09:34 +0000
+
+mc (4.5.55-1.1) unstable; urgency=low
+
+ * Non-maintainer upload, with Martin's permission.
+ * Build-depend on docbook-utils, not cygnus-stylesheets (closes: #123161).
+ * Remove bashism in debian/rules (closes: #126733).
+ * Depend on perl rather than on dummy packages (closes: #113208).
+
+ -- Colin Watson <cjwatson at debian.org> Tue, 15 Jan 2002 01:20:08 +0000
+
+mc (4.5.55-1) unstable; urgency=low
+
+ * New upstream release
+ * Enable mouse for Eterm TERM value
+ * mc.ext stabilized again upstream, so make it more Debian compliant
+ again, closes: #105935, #98827
+ * gmc documentation is fixed, closes: #107936
+ * Fix german locale, closes: #108302
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 2 Sep 2001 17:07:56 +0200
+
+mc (4.5.54-2) unstable; urgency=low
+
+ * Use new config.guess and config.sub to allow compilation on hppa
+
+ -- Martin Bialasinski <martinb at debian.org> Fri, 13 Jul 2001 23:47:18 +0200
+
+mc (4.5.54-1) unstable; urgency=low
+
+ * New upstream release, closes: #99127
+ * make gzip, compress, bzip, bzip2 entries in mc.ext more specific
+ closes: #97242, #103800, #102512, #97896, #96649, #104111
+ (Oskar Liljeblad)
+ * Updated syntax highlighting for debian files, closes: #93228
+ (Lenart Janos)
+ * Fix regexp for rexx files in mc.ext, closes: #98432 (Michel Casabona)
+ * Build fixes for the hurd, closes: #101542, #101543 (Marcus Brinkmann)
+ * Danish translation for the debconf template, closes: #100335
+ (Jesper R. Meyer)
+ * Dutch translation for the debconf template, closes: #95738
+ (Thomas J. Zeeman)
+ * Spanish translation for the debconf template, closes: #102903
+ (Carlos Valdivia Yague)
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 8 Jul 2001 12:19:24 +0200
+
+mc (4.5.51-16) unstable; urgency=low
+
+ * Update zu the uzip extfs
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 4 Mar 2001 20:57:25 +0100
+
+mc (4.5.51-15) unstable; urgency=low
+
+ * Update uzip extfs, closes: #86913
+ * Fix compilation, closes: #87414
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 28 Feb 2001 19:32:44 +0100
+
+mc (4.5.51-14) unstable; urgency=low
+
+ * Translations for the gmc debconf template, thanks to
+ fr by Thomas Morin, closes: #83765
+ sv by Andre Dahlqvist, closes: #83677
+
+ -- Martin Bialasinski <martinb at debian.org> Sat, 3 Feb 2001 21:55:27 +0100
+
+mc (4.5.51-13) unstable; urgency=high
+
+ * Added libgnorba-dev to the build-depends. It is not pulled in by
+ libgnome-dev on the m68k autobuilder, closes: #81200
+ * Fixed dependancy on perl (lintian)
+ * Fix for devfs in cons.saver, closes: #57557
+ * Patch for proxy support in ftpfs from Mandrake
+ * [gmc] Disabled checking of owner on file rename as a dirty fix
+ closes: #80544
+ * [gmc] Don't let the use confirm twice that he wants to exit,
+ closes: #48523
+ * Updated FAQ to reflect rename of mc mailinglists
+ * Fix security bug using quick patch by Andrew V. Samoilov
+ see http://www.securityfocus.com/vdb/?id=2016
+ * Statoverride adaption
+
+ -- Martin Bialasinski <martinb at debian.org> Thu, 11 Jan 2001 20:07:02 +0100
+
+mc (4.5.51-12) unstable; urgency=high
+
+ * Added build-depends
+ * Recompiled with latest glibc, closes: #74905, #74906, #75134, #77172
+ * Added menu hints, closes: #80014, #80038
+ * Fix problems with file selection code, closes: #79639
+ Thanks to Alexander Viro
+
+ -- Martin Bialasinski <martinb at debian.org> Thu, 21 Dec 2000 14:48:35 +0100
+
+mc (4.5.51-11) unstable; urgency=high
+
+ * Security fix for cons.saver, bugtraq id 1945
+ serious local DoS possibility
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 15 Nov 2000 20:05:20 +0100
+
+mc (4.5.51-10) unstable; urgency=low
+
+ * Fix for ftpfs, closes: #61239
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 12 Nov 2000 20:37:50 +0100
+
+mc (4.5.51-9) unstable; urgency=low
+
+ * Upstream patch to fix storing on root directory on a ftp server
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 8 Nov 2000 01:01:40 +0100
+
+mc (4.5.51-8) unstable; urgency=low
+
+ * Small fix to the .deb entry in mc.ext to make it work with new
+ and old tar
+ * New uzip extfs by Oskar Liljeblad, closes: #75353
+
+ -- Martin Bialasinski <martinb at debian.org> Sat, 4 Nov 2000 00:05:08 +0100
+
+mc (4.5.51-7) unstable; urgency=low
+
+ * Quote pathname on C-x p and C-x P, closes: #72632
+ Thanks to Lois Lefort (sorry, missed the report somehow)
+
+ -- Martin Bialasinski <martinb at debian.org> Sat, 21 Oct 2000 14:50:12 +0200
+
+mc (4.5.51-6) unstable; urgency=low
+
+ * Changed F3 view of .deb and .rpm files like done on advanced mc,
+ changed dependancies a bit to suit this
+ * Correcting small spelling error (#21825 in the GNOME BTS)
+ * Make mouse work in rxvt, closes: #74400
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 18 Oct 2000 20:22:45 +0200
+
+mc (4.5.51-5) unstable; urgency=low
+
+ * Upstream patch to fix %e behaviour on opening files for edit in gmc
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 4 Oct 2000 22:27:04 +0200
+
+mc (4.5.51-4) unstable; urgency=low
+
+ * Fix typo in mc.ext and mc-gnome.ext, thanks to Robert Luberda
+ Closes: #71788
+
+ -- Martin Bialasinski <martinb at debian.org> Sat, 16 Sep 2000 09:33:57 +0200
+
+mc (4.5.51-3) unstable; urgency=low
+
+ * Fix to the patchfs by Loic Lefort, Closes: #71430
+ * Fix filelocations in the manpages
+ * Add the patchfs to mc.ext, so you can enter a (compressed)
+ patch with <RET>
+
+ -- Martin Bialasinski <martinb at debian.org> Fri, 15 Sep 2000 00:16:50 +0200
+
+mc (4.5.51-2) unstable; urgency=low
+
+ * Fixed some strange problems with the patches, Closes: #69516
+
+ -- Martin Bialasinski <martinb at debian.org> Mon, 21 Aug 2000 01:13:21 +0200
+
+mc (4.5.51-1) unstable; urgency=low
+
+ * New upstream release, closes: #62261, #64975
+ * Fixed description, closes: #62260
+ * Moved locales data into mc-common, closes: #67577
+ * Move documentation to /usr/share/doc and make a symlink in
+ /usr/share/gnome/help
+ * Fix gmc doc-base description, closes: #68671
+ * Don't install a wrong manpage
+
+ -- Martin Bialasinski <martinb at debian.org> Mon, 14 Aug 2000 23:39:48 +0200
+
+mc (4.5.42-16) unstable; urgency=low
+
+ * Fix path in doc-base and create a missing symlink
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 26 Mar 2000 22:52:15 +0200
+
+mc (4.5.42-15) unstable; urgency=low
+
+ * Fix usage of debconf. Don't issue the warning on new installs
+ * Move convert.metadata.db from /usr/lib/mc to /usr/bin
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 26 Mar 2000 14:37:36 +0200
+
+mc (4.5.42-14) unstable; urgency=low
+
+ * make convert-metadata.db executable in the postinst
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 19 Mar 2000 23:43:44 +0100
+
+mc (4.5.42-13) unstable; urgency=low
+
+ * Changed the undelfs example in mc.sgml and mc.1.in as well
+ * Fix build from source bug, closes: #60289
+
+ -- Martin Bialasinski <martinb at debian.org> Mon, 13 Mar 2000 18:19:34 +0100
+
+mc (4.5.42-12) unstable; urgency=low
+
+ * Fix problem with hex view, roll-over on first position.
+ Patch by Loic Lefort
+
+ -- Martin Bialasinski <martinb at debian.org> Mon, 13 Mar 2000 12:17:16 +0100
+
+mc (4.5.42-11) frozen unstable; urgency=low
+
+ * [gmc] Let the admin know that he must run convert-metadata.db
+ via debconf. Closes: #58707
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 12 Mar 2000 20:27:56 +0100
+
+mc (4.5.42-10) frozen unstable; urgency=low
+
+ * Fixed documentation bug, closes: #60045
+ * Fixed terminfo searchpath in internal slang, closes: #56272
+ * [gmc] added dependancy on eject and made some comments in README.Debian,
+ closes: #59214
+
+ -- Martin Bialasinski <martinb at debian.org> Sun, 12 Mar 2000 01:16:41 +0100
+
+mc (4.5.42-9) frozen unstable; urgency=low
+
+ * convert-metadata.db : set gid and egid before setting uid and euid. Doh!
+ * Helpfile mentioned non-existing file. Closes: #56053
+ * Fix small typo in mc.ext.in, part of #55897
+ * Upload with full sources due to the change in the packaging method
+
+ -- Martin Bialasinski <martinb at debian.org> Mon, 6 Mar 2000 16:06:37 +0100
+
+mc (4.5.42-8) frozen unstable; urgency=low
+
+ * Switched to the Multipatch System the X packages use.
+ * Patch from Andrew V. Samoilov, so the display is correct
+ when selecting more than 2GB of files, closes: #53980, #58920
+ * Added "or" and "and" keywords to perl sytnax file - patch by
+ Tomasz Wegrzanowski, closes: #58437
+ * Fix german translation, closes: #55401
+ partly closes #56117
+ * compile with --with-netrc
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 1 Mar 2000 01:50:05 +0100
+
+mc (4.5.42-7) unstable; urgency=low
+
+ * Fixes missing esac in mc.menu, thanks to Michel Casabona
+ Closes: #54108
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 12 Jan 2000 21:22:47 +0100
+
+mc (4.5.42-6) unstable; urgency=low
+
+ * Fixes a y2k bug in the apt and dpkg vfs, closes: #54037
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 5 Jan 2000 17:39:43 +0100
+
+mc (4.5.42-5) unstable; urgency=low
+
+ * [gmc] Added dependancy on libdb-util* for convert-metadata.db
+
+ -- Martin Bialasinski <martinb at debian.org> Tue, 4 Jan 2000 14:20:05 +0100
+
+mc (4.5.42-4) unstable; urgency=low
+
+ * [gmc] Revised patch for the icon handling, closes: #53814
+
+ -- Martin Bialasinski <martinb at debian.org> Sat, 1 Jan 2000 17:53:13 +0100
+
+mc (4.5.42-3) unstable; urgency=low
+
+ * [gmc] Applied patch for icon misplacement, closes: #51571
+ * SEP, closes #52250
+ * Fixed lintian warnings about copyright file location
+
+ -- Martin Bialasinski <martinb at debian.org> Mon, 27 Dec 1999 18:43:18 +0100
+
+mc (4.5.42-2) unstable; urgency=low
+
+ * New version of the apt/dpkg vfs
+
+ -- Martin Bialasinski <martinb at debian.org> Mon, 20 Dec 1999 11:18:26 +0100
+
+mc (4.5.42-1) unstable; urgency=low
+
+ * New upstream release
+ * [gmc] Remove notice how to fix broken desktop icons from postinst
+ * enable NLS
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 8 Dec 1999 12:22:13 +0100
+
+mc (4.5.40-8) unstable; urgency=low
+
+ * Small fix to the apt and dpkg vfs.
+
+ -- Martin Bialasinski <martinb at debian.org> Fri, 3 Dec 1999 18:16:41 +0100
+
+mc (4.5.40-7) unstable; urgency=low
+
+ * Really fixes all zip,jar archive problems,
+ thanks again to Oskar Liljeblad. Closes: #50528, #51779
+ * Amazing new vfs by Piotr Roszatycki <dexter at fnet.pl>, a
+ dpkg and apt frontend! See README.Debian for info.
+ Closes: #46694
+
+ -- Martin Bialasinski <martinb at debian.org> Fri, 3 Dec 1999 00:11:07 +0100
+
+mc (4.5.40-6) unstable; urgency=low
+
+ * Fixed problem with ~/.gnome/metadata.db
+ libc switch from DB 1.85 to DB 2, so the file has to be recreated.
+ Shipping a conversion script as /usr/lib/mc/convert-metadata.db
+ Closes: #47115, #46491
+ * Don't wait for upstream to include the new Debian logo, Closes: #46502
+
+ -- Martin Bialasinski <martinb at debian.org> Tue, 30 Nov 1999 21:24:35 +0100
+
+mc (4.5.40-5) unstable; urgency=low
+
+ * Patch for mc.ext by Tomasz Wegrzanowski <maniek at beer.com>
+ to use sensible-* Closes: #50210
+ * Patch for mc.ext by Oskar Liljeblad <osk at hem.passagen.se>
+ to use run-mailcap Closes: #50732
+ * Missing closing bracket in uzip.in (thanks to Andreas Wappel),
+ fixed the other repored problems. Closes: #48003
+ (Also #50528, #50452, but has to be checked)
+ * Using a better fix for the tar problem in the deb vfs
+
+ -- Martin Bialasinski <martinb at debian.org> Thu, 25 Nov 1999 23:45:20 +0100
+
+mc (4.5.40-4) unstable; urgency=low
+
+ * Use mc's own slang, which has some modifications.
+ Closes: #47487
+ * mc doesn't have a mtools vfs for some time now, closes: #26821
+ * Included syntax highlighting definitions for debian/changelog,
+ debian/rules, debian/control and sources.list, closes: #47403
+ Thanks to Radovan Garabik <garabik at melkor.dnp.fmph.uniba.sk>
+
+ -- Martin Bialasinski <martinb at debian.org> Sat, 31 Oct 1999 13:59:54 +0200
+
+mc (4.5.40-3) unstable; urgency=low
+
+ * Recompiled with slang 1.3 - Fixes the dreadful
+ "right border is not cleaned" and other display bugs.
+ Closes: #34315, #40496, #41166, #47328 and part of #47197
+
+ -- Martin Bialasinski <martinb at debian.org> Thu, 14 Oct 1999 19:03:32 +0200
+
+mc (4.5.40-2) unstable; urgency=low
+
+ * Added conflicts to the versions before mc-common was introduced
+
+ -- Martin Bialasinski <martinb at debian.org> Sat, 2 Oct 1999 12:34:06 +0200
+
+mc (4.5.40-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Martin Bialasinski <martinb at debian.org> Thu, 30 Sep 1999 00:51:33 +0200
+
+mc (4.5.39-1) unstable; urgency=low
+
+ * New upstream version
+ * Uploading as a co-maintainer
+ * New package setup
+ - mc-common, mc and gmc
+ - mc and gmc don't conflict anymore
+ Closes: #43761
+ * Using debhelper, no more fhs problems, closes: #45962
+ * Applied fixes for new tar format (without leading ./)
+ Closes: #45473, #45432, #45145, #45131, #44965, #45340
+ * Suidregister only in the mc package, closes: #45014
+ * smbfs was removed before, closes: #45481, #45267, #45339
+ * Added xterm-color to the list of color capable TERMs in mc.ini
+ * Added note in README about fixing ~/.mc/ini to enable colored mc
+ Closes: #26820
+ * Added TODO and upstream changelogs to the packages
+
+ -- Martin Bialasinski <martinb at debian.org> Tue, 28 Sep 1999 03:09:32 +0200
+
+mc (4.5.38-4) unstable; urgency=low
+
+ * add -f to the rm's in debian/rules (Close: #45650)
+
+ -- Michael Bramer <grisu at debian.org> Fri, 24 Sep 1999 07:58:57 +0200
+
+mc (4.5.38-3) unstable; urgency=low
+
+ * remove mc.real to mc and remove the --with-samba option. I must
+ work with the sources.
+ Sorry, for the last problems.
+
+ -- Michael Bramer <grisu at debian.org> Sun, 19 Sep 1999 14:25:57 +0200
+
+mc (4.5.38-2) unstable; urgency=low
+
+ * add .real to mc in /usr/bin/mc
+
+ -- Michael Bramer <grisu at debian.org> Wed, 15 Sep 1999 13:23:44 +0200
+
+mc (4.5.38-1) unstable; urgency=low
+
+ * add patch from viro at math.psu.edu (Close:#29176)
+ * add --with-samba to configure
+ * move /usr/bin/mc to /usr/bin/mc.real and add the
+ script /usr/bin/mc (Close:#43168)
+ * recompiled with slang1-dev 1.2.2-3 (Close:#44359)
+ * add link from /usr/bin/mcedit to /usr/bin/mc (Close:#40943)
+ * new upstream version
+
+ -- Michael Bramer <grisu at debian.org> Tue, 7 Sep 1999 22:34:18 +0200
+
+mc (4.5.37-2) unstable; urgency=low
+
+ * rebuild with newer gpm. (now should use /var/run/gpmctl and not
+ /dev/gpmctl)
+
+ -- Michael Bramer <grisu at debian.org> Wed, 4 Aug 1999 11:41:32 +0200
+
+mc (4.5.37-1) unstable; urgency=low
+
+ * new upstream version
+
+ -- Michael Bramer <grisu at debian.org> Tue, 3 Aug 1999 22:29:21 +0200
+
+mc (4.5.33-6) unstable; urgency=low
+
+ * set auto_save_setup to no in mc.ini
+
+ -- Michael Bramer <grisu at debian.org> Sat, 3 Jul 1999 11:32:50 +0200
+
+mc (4.5.33-5) unstable; urgency=low
+
+ * add link from /usr/lib/mc/mc.ini to /etc/mc/
+
+ -- Michael Bramer <grisu at debian.org> Sat, 3 Jul 1999 09:02:00 +0200
+
+mc (4.5.33-4) unstable; urgency=low
+
+ * add 'AWK="awk"' in debian/rules
+ * remove /usr/etc/mc (change rules and Makefiles.in's) (close: 37070)
+ * remove changelog_intl.gz (close: 36683)
+ * remove README.debian (close: 36682)
+ * add 'color_terminals=linux,xterm-debian,screen' in debian/addons/mc.ini
+ (close: 26820)
+ * move /usr/lib/mc/term/ to /urs/doc/mc/ (close: 26022)
+
+ -- Michael Bramer <grisu at debian.org> Fri, 2 Jul 1999 14:54:14 +0200
+
+mc (4.5.33-3) unstable; urgency=low
+
+ * Add 'Provides: mc' in gmc-package controlfile (close: #35005)
+
+ -- Michael Bramer <grisu at debian.org> Tue, 29 Jun 1999 23:52:56 +0200
+
+mc (4.5.33-2) unstable; urgency=low
+
+ * now compiled with the installed package e2fslibs-dev (close: 40335)
+
+ -- Michael Bramer <grisu at debian.org> Tue, 29 Jun 1999 00:44:50 +0200
+
+mc (4.5.33-1) unstable; urgency=low
+
+ * new upstream version
+
+ -- Michael Bramer <grisu at debian.org> Wed, 9 Jun 1999 05:02:23 +0200
+
+mc (4.5.30-2) unstable; urgency=low
+
+ * Patch from Martin Bialasinski <martin at internet-treff.uni-koeln.de> close:#36246
+
+ -- Michael Bramer <grisu at debian.org> Mon, 19 Apr 1999 12:19:25 +0200
+
+mc (4.5.30-1) unstable; urgency=low
+
+ * new upstream version
+
+ -- Michael Bramer <grisu at debian.org> Wed, 14 Apr 1999 17:41:15 +0200
+
+mc (4.5.25-1) unstable; urgency=low
+
+ * change the download source to:
+ ftp://ftp.sunsite.org.uk/packages/gnome/sources/mc
+ * add --sysconfdir=/etc in the rule file
+ * new upstream version (with my patches :-)
+
+ -- Michael Bramer <grisu at debian.org> Tue, 16 Mar 1999 13:38:32 +0100
+
+mc (4.5.22-1) unstable; urgency=low
+
+ * change ee to eeyes in lib/mc-gnome.ext.in
+ * new upstream version
+
+ -- Michael Bramer <grisu at debian.org> Thu, 4 Mar 1999 23:47:37 +0100
+
+mc (4.5.21-1) unstable; urgency=low
+
+ * remove usr/share/pixmaps/ from mc
+ (from the 'first' 4.5.21-1 upload in gnome-staging)
+ * remove usr/bin/plain-gmc from mc
+ (from the 'first' 4.5.21-1 upload in gnome-staging)
+ * add patch from viro at math.psu.edu close:29176
+ * new config files: mc.global and mc-gnome.ext
+ * add link from /usr/lib/etc/mc.global to /etc/mc/mc.global
+ * add links from /usr/lib/mc/* to /etc/mc/
+ * new upstream version
+ * add a '-f' to -rm gnome/gmc in debian/rule
+ * change 'ee' in 'eeyes' in lib/mc-gnome.ext
+ * add the conffiles in the gmc-package
+
+ -- Michael Bramer <grisu at debian.org> Sat, 27 Feb 1999 00:11:28 +0100
+
+mc (4.5.1-1.1) frozen; urgency=medium
+
+ * NMU in behalf of Michael Bramer as he has not got a pure slink system
+ * Fixes Bug#33341, priority important (buffer overrun) for slink
+
+ -- Martin Bialasinski <martinb at debian.org> Wed, 17 Feb 1999 00:26:48 +0100
+
+mc (4.5.1-1) unstable; urgency=low
+
+ * new (beta) version
+
+ -- Michael Bramer <grisu at debian.org> Thu, 22 Oct 1998 19:48:42 +0200
+
+mc (4.1.36-1) unstable; urgency=low
+
+ * change from +Z to -Z for zsh (close:#26428)
+ * add Suggests:rpm (close:#26137)
+ * remove /usr/doc/mc/README.edit (close:#26047)
+ * add patch from Patrik Rak in deb.in (close:#25838)
+ * add link from /usr/lib/mc/mc.ext to /etc/mc/mc.ext (close#25719)
+ * New upsteam release
+
+ -- Michael Bramer <grisu at debian.org> Thu, 15 Oct 1998 11:41:11 +0200
+
+mc (4.1.35-6) unstable; urgency=low
+
+ * don't print debug-code in gnome/*.c (#25587)
+ * move usr/doc/mc/changelog_src.gz to usr/doc/mc/changelog.gz
+ * Change menue from Apps/Misc to Apps/Tools
+
+ -- Michael Bramer <grisu at debian.org> Wed, 26 Aug 1998 10:23:43 +0200
+
+mc (4.1.35-5) unstable; urgency=low
+
+ * make the menufiles in the new format
+ * change from ee to eeyes for *.jpeg etc. in mc.ext
+
+ -- Michael Bramer <grisu at debian.org> Tue, 25 Aug 1998 18:35:11 +0200
+
+mc (4.1.35-4) unstable; urgency=low
+
+ * add to debstd the -u option
+ * make a new build with gonme0.27 and co.
+
+ -- Michael Bramer <grisu at debian.org> Mon, 17 Aug 1998 13:07:11 +0200
+
+mc (4.1.35-3) unstable; urgency=low
+
+ * add all changelog-files in /usr/doc/[g]mc
+ * make for gmc a /usr/doc/gmc/
+ * add a '!' in the first line from mcfn_install.in, now: #!/bin/sh
+ * typo in the Description (thanks to joey)
+ * don't print debug-code in gdesktop.c (#25587)
+
+ -- Michael Bramer <grisu at debian.org> Mon, 10 Aug 1998 23:29:33 +0200
+
+mc (4.1.35-2) unstable; urgency=low
+
+ * the multi-package is not nice, but it should work
+ * add gmc support in a multi-binary-package
+ * new maintainer
+
+ -- Michael Bramer <grisu at debian.org> Fri, 31 Jul 1998 13:04:28 +0200
+
+mc (4.1.35-1) frozen unstable; urgency=low
+
+ * New upsteam release fixes a bug introduced by last version,
+ which made the history input lines stop working. Since this
+ is one of the essential useability features of MC which will
+ most certainly provoke bug reports this here should still go
+ into frozen.
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Tue, 26 May 1998 05:00:05 +0100
+
+mc (4.1.34-1) frozen unstable; urgency=low
+
+ * New upsteam release really fixes Bug#20727 and some bugs no one
+ has even bothered to report until now. :-)
+ * Added "--without-gnome" and "--disable-nls" flags to debian/rules.
+ The internationalized Gnome version of MC is becoming pretty mature,
+ but will not go into frozen, sorry.
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Fri, 15 May 1998 21:36:56 +0100
+
+mc (4.1.28-3) frozen unstable; urgency=low
+
+ * Rebuild using ss-dev, comerr-dev and e2fslibs-dev closing Bug#21749
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Tue, 28 Apr 1998 22:32:15 +0100
+
+mc (4.1.28-2) frozen unstable; urgency=low
+
+ * Changed debian/postinst to address and close Bug#20871. I wonder why
+ this didn't show up earlier?
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Wed, 08 Apr 1998 21:29:51 +0100
+
+mc (4.1.28-1) frozen unstable; urgency=low
+
+ * New upstream release.
+ * Compiled with ext2undel feature closing Bug#20752.
+ * Fixes an upstream bug which made MC crash when trying to copy an
+ unreadable file via FTP.
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Mon, 06 Apr 1998 17:23:15 +0100
+
+mc (4.1.27-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Fri, 27 Feb 1998 07:44:29 +0100
+
+mc (4.1.26-1) unstable; urgency=low
+
+ * New upstream release.
+ * Updated to standards version 2.4.0.0
+ * Updated postal address of FSF in copyright file
+ * Added manual page for 'mcmfmt'.
+ * Adapted control file to place package in section "utils"
+ with priority "optional".
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Fri, 20 Feb 1998 03:41:38 +0100
+
+mc (4.1.24-1) unstable; urgency=low
+
+ * New upstream release version
+ * Binary package now smaller because upstream maintainer truncated
+ the src/Changelog file which has grown far too large over time. ;-)
+ * Changed "Architecture: i386" to "Architecture: any" in control file.
+ This addresses and closes bug #17226 as reported by James Troup.
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Thu, 22 Jan 1998 18:32:55 +0100
+
+mc (4.1.22-2) unstable; urgency=low
+
+ * Adapted debian/changelog to reflect official Debian release history
+ * Added debian/menu file from former maintainer
+ * Closing supposedly outdated bugs #9868, #14744, #14768, #16050
+ and #11968 due to increase of upstream version number.
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Fri, 16 Jan 1998 23:41:32 +0100
+
+mc (4.1.22-1) unstable; urgency=low
+
+ * New maintainer
+ * New upstream version
+
+ -- Paul Seelig <pseelig at goofy.zdv.uni-mainz.de> Fri, 16 Jan 1998 17:41:32 +0100
+
+mc (4.1.9-1) unstable; urgency=low
+
+ * Upgraded to latest upstream release (Bugs #13145, #14012).
+ * Use pristine source.
+ * Wrote patch to build with libc6.
+ * Orphaned the package (Unfixed since 6 months).
+ * Recommends file (Bug #7338).
+ * #11864 sould be fixed (libgpmg problem).
+ * Depend on login-970616-1 and don't install cons.saver suid root
+ (Bug #13440).
+ * Corrected debian/rules (make clean shouldn't fail).
+
+ -- Vincent Renardias <vincent at waw.com> Mon, 10 Nov 1997 00:05:02 +0100
+
+mc (3.5.17-1) unstable; urgency=low
+
+ * Upgraded to latest upstream release
+ * Sources converted to new format
+
+ -- Fernando Alegre <alegre at debian.org> Mon, 24 Feb 1997 12:56:43 +0100
+
Added: trunk/debian/control
===================================================================
--- trunk/debian/control (rev 0)
+++ trunk/debian/control 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,20 @@
+Source: mc
+Section: utils
+Priority: optional
+Maintainer: Debian QA Group <packages at qa.debian.org>
+Build-Depends: debhelper (>> 4.0.0), libglib2.0-dev, libgpmg1-dev |not+linux-gnu, gettext, libslang2-dev
+Standards-Version: 3.7.2
+
+Package: mc
+Architecture: any
+Depends: ${shlibs:Depends}
+Suggests: perl, mime-support, zip, unzip, bzip2, links | w3m | lynx, arj
+Conflicts: mc-common, suidmanager (<< 0.52)
+Replaces: mc-common, manpages-pl (<= 20030210)
+Description: midnight commander - a powerful file manager
+ GNU Midnight Commander is a text-mode full-screen file manager. It
+ uses a two panel interface and a subshell for command execution. It
+ includes an internal editor with syntax highlighting and an internal
+ viewer with support for binary files. Also included is Virtual
+ Filesystem (VFS), that allows files on remote systems (e.g. FTP, SSH,
+ SMB servers) and files inside archives to be manipulated like real files.
Added: trunk/debian/copyright
===================================================================
--- trunk/debian/copyright (rev 0)
+++ trunk/debian/copyright 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,22 @@
+This package was debianized by Paul Seelig <pseelig at mail.uni-mainz.de>
+on Tue Apr 1 14:32:15 1997. It has been maintained by Michael Bramer
+and Martin Bialasinski <mc at internet-treff.uni-koeln.de>.
+
+From Jan 2004 this package is maintained by:
+ Stefano Melchior <stefano.melchior at openlabs.it> and Ludovic Drolez <ldrolez at free.fr>
+
+From Dec 2002 to Dec 2004 this package was maintained by:
+ Adam Byrtek <alpha at debian.org>
+
+It was downloaded from:
+ http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/
+
+Homepage:
+ http://www.ibiblio.org/mc/
+
+Authors:
+ See /usr/share/doc/mc/AUTHORS
+
+Copyright:
+ This software is released under a GPL license - see the
+ /usr/share/common-licenses/GPL file.
Added: trunk/debian/dirs
===================================================================
--- trunk/debian/dirs (rev 0)
+++ trunk/debian/dirs 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,2 @@
+/etc/mc
+/usr/share/pixmaps
Added: trunk/debian/doc-base
===================================================================
--- trunk/debian/doc-base (rev 0)
+++ trunk/debian/doc-base 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,8 @@
+Document: MC-FAQ
+Title: Midnight Commander FAQ
+Author: Janne Kukonlehto <janne at gnome.org>
+Abstract: Midnight Commander Frequently Asked Questions and the Answers
+Section: Apps/Tools
+
+Format: text
+Files: /usr/share/doc/mc/FAQ.gz
Added: trunk/debian/docs
===================================================================
--- trunk/debian/docs (rev 0)
+++ trunk/debian/docs 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,8 @@
+FAQ
+NEWS
+README
+AUTHORS
+TODO
+AUTHORS
+ABOUT-NLS
+HACKING
Added: trunk/debian/extra/icon.xpm
===================================================================
--- trunk/debian/extra/icon.xpm (rev 0)
+++ trunk/debian/extra/icon.xpm 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,45 @@
+/* XPM */
+static char *icon[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 7 1",
+" c black",
+". c gray20",
+"X c blue",
+"o c cyan",
+"O c yellow",
+"+ c gray80",
+"@ c gray90",
+/* pixels */
+"+ at +@+ at ++@++ at +@+ at +@+ at ++@@++ at ++@+@",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XXOOOOOXXoXOOXXoXXXOOOOXXoXOOX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XoooooooXoXooXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XoooooooXoXooXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XoooooooXoXooXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XoooooooXoXooXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XoooooooXoXooXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"+XoooooooXoXooXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XXXXXXXXXoXXXXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@XXXXXXXXXoXXXXXoXoooooooXoXooX.",
+"+XXXXXXXXXoXXXXXoXXXXXXXXXoXXXX.",
+"@oooooooooooooooooooooooooooooo ",
+"+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+"@XooooooXoXoooXXXXooooooXooXooX.",
+"+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+"+oooooooooooooooooooooooooooooo.",
+"@ .",
+"+ .",
+"+.+ .",
+"@ .",
+"++O++ ++++ O++O +O++O +O++ ++O+.",
+"+..............................."
+};
Added: trunk/debian/extra/mcedit-debian
===================================================================
--- trunk/debian/extra/mcedit-debian (rev 0)
+++ trunk/debian/extra/mcedit-debian 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# mcedit wrapper for Debian alternatives system
+
+mcedit $@
Added: trunk/debian/extra/mcedit-debian.1
===================================================================
--- trunk/debian/extra/mcedit-debian.1 (rev 0)
+++ trunk/debian/extra/mcedit-debian.1 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,19 @@
+.TH MCEDIT-DEBIAN 1
+.SH NAME
+mcedit-debian \- mcedit wrapper
+.br
+.SH DESCRIPTION
+This script is just a wrapper for
+.B mcedit,
+(the Midnight Commander internal editor) to use with Debian
+alternatives system.
+.SH OPTIONS
+Full list of supported options could be found on the
+.BR mcedit (1)
+manpage.
+.SH SEE ALSO
+.BR mcedit (1),
+.BR mc (1)
+.SH AUTHOR
+This manual page was written by Adam Byrtek <alpha at debian.org>, for
+the Debian GNU/Linux system.
Added: trunk/debian/extra/mcmfmt.1
===================================================================
--- trunk/debian/extra/mcmfmt.1 (rev 0)
+++ trunk/debian/extra/mcmfmt.1 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,14 @@
+.TH MCMFMT 1
+.SH NAME
+mcmfmt \- sets bold and underline for mail files
+.br
+.SH "DESCRIPTION"
+.B mcmfmt
+is a program for internal use by the Midnight Commander only. It sets bold and underline for mail files.
+.SH OPTIONS
+There are no options for this program.
+.SH "SEE ALSO"
+mc(1)
+.SH AUTHOR
+This manual page was written by Paul Seelig <pseelig at goofy.zdv.uni-mainz.de>,
+for the Debian GNU/Linux system (but may be used by others).
Added: trunk/debian/extra/mcview-debian
===================================================================
--- trunk/debian/extra/mcview-debian (rev 0)
+++ trunk/debian/extra/mcview-debian 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# mcview wrapper for Debian alternatives system
+
+mcview $@
Added: trunk/debian/extra/mcview-debian.1
===================================================================
--- trunk/debian/extra/mcview-debian.1 (rev 0)
+++ trunk/debian/extra/mcview-debian.1 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,19 @@
+.TH MCVIEW-DEBIAN 1
+.SH NAME
+mcview-debian \- mcview wrapper
+.br
+.SH DESCRIPTION
+This script is just a wrapper for
+.B mcview,
+(the Midnight Commander internal viewer) to use with Debian
+alternatives system.
+.SH OPTIONS
+Full list of supported options could be found on the
+.BR mcview (1)
+manpage.
+.SH SEE ALSO
+.BR mcview (1),
+.BR mc (1)
+.SH AUTHOR
+This manual page was written by Adam Byrtek <alpha at debian.org>, for
+the Debian GNU/Linux system.
Added: trunk/debian/links
===================================================================
--- trunk/debian/links (rev 0)
+++ trunk/debian/links 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,3 @@
+/etc/mc/mc.ext /usr/share/mc/mc.ext
+/etc/mc/mc.menu /usr/share/mc/mc.menu
+/etc/mc/mc.lib /usr/share/mc/mc.lib
Added: trunk/debian/manpages
===================================================================
--- trunk/debian/manpages (rev 0)
+++ trunk/debian/manpages 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,3 @@
+debian/extra/mcmfmt.1
+debian/extra/mcedit-debian.1
+debian/extra/mcview-debian.1
Added: trunk/debian/mc.postinst
===================================================================
--- trunk/debian/mc.postinst (rev 0)
+++ trunk/debian/mc.postinst 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,14 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ configure|abort-upgrade)
+ update-alternatives --install /usr/bin/view view /usr/bin/mcview-debian 25 \
+ --slave /usr/share/man/man1/view.1.gz view.1.gz /usr/share/man/man1/mcview.1.gz
+ update-alternatives --install /usr/bin/editor editor /usr/bin/mcedit-debian 25 \
+ --slave /usr/share/man/man1/editor.1.gz editor.1.gz /usr/share/man/man1/mcedit.1.gz
+ ;;
+esac
+
+#DEBHELPER#
Added: trunk/debian/mc.postrm
===================================================================
--- trunk/debian/mc.postrm (rev 0)
+++ trunk/debian/mc.postrm 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ purge)
+ rm -f /etc/mc/mc.lib /etc/mc/mc.ext /etc/mc/mc.menu
+ rmdir /etc/mc 2>/dev/null || true
+ ;;
+esac
+
+#DEBHELPER#
Added: trunk/debian/mc.prerm
===================================================================
--- trunk/debian/mc.prerm (rev 0)
+++ trunk/debian/mc.prerm 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+set -e
+
+case "$1" in
+ remove)
+ update-alternatives --remove editor /usr/bin/mcedit-debian
+ update-alternatives --remove view /usr/bin/mcview-debian
+ ;;
+esac
+
+#DEBHELPER#
Added: trunk/debian/menu
===================================================================
--- trunk/debian/menu (rev 0)
+++ trunk/debian/menu 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,8 @@
+?package(mc):\
+ needs="text"\
+ section="Apps/Tools"\
+ title="mc"\
+ longtitle="Midnight Commander"\
+ hints="File managers"\
+ command="/usr/bin/mc"\
+ icon="/usr/share/pixmaps/mc.xpm"
Added: trunk/debian/patches/01_mc.ext.in.mime.patch
===================================================================
--- trunk/debian/patches/01_mc.ext.in.mime.patch (rev 0)
+++ trunk/debian/patches/01_mc.ext.in.mime.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,317 @@
+--- lib/mc.ext.in.orig 2006-06-22 21:05:05.000000000 +0200
++++ lib/mc.ext.in 2006-10-10 17:53:46.000000000 +0200
+@@ -106,8 +106,8 @@
+
+ ### Archives ###
+
+-# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z
+-regex/\.t([gp]?z|ar\.g?[zZ])$
++# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z, .ipk
++regex/\.t([gp]?z|ar\.g?[zZ])$|\.ipk$
+ Open=%cd %p#utar
+ View=%view{ascii} gzip -dc %f 2>/dev/null | tar tvvf -
+
+@@ -132,7 +132,7 @@
+ # tar
+ regex/\.(tar|TAR)$
+ Open=%cd %p#utar
+- View=%view{ascii} tar tvvf %f
++ View=%view{ascii} tar tvvf - < %f
+
+ # lha
+ type/^LHa\ .*archive
+@@ -142,7 +142,7 @@
+ # arj
+ regex/\.a(rj|[0-9][0-9])$
+ Open=%cd %p#uarj
+- View=%view{ascii} unarj l %f
++ View=%view{ascii} arj l %f
+
+ # ha
+ regex/\.([Hh][Aa])$
+@@ -194,7 +194,16 @@
+ # deb
+ regex/\.u?deb$
+ Open=%cd %p#deb
+- View=%view{ascii} dpkg-deb -c %f
++ View=%view{ascii} dpkg-deb -I %f && echo && dpkg-deb -c %f
++
++# dpkg
++shell/.debd
++ Open=%cd %p#debd
++ View=%view{ascii} dpkg -s `echo %p | sed 's/\([0-9a-z.-]*\).*/\1/'`
++# apt
++shell/.deba
++ Open=%cd %p#deba
++ View=%view{ascii} apt-cache show `echo %p | sed 's/\([0-9a-z.-]*\).*/\1/'`
+
+ # ISO9660
+ regex/\.iso$
+@@ -210,28 +219,28 @@
+
+ # C
+ shell/.c
+- Open=%var{EDITOR:vi} %f
++ Open=sensible-editor %f
+
+ # Fortran
+ shell/.f
+- Open=%var{EDITOR:vi} %f
++ Open=sensible-editor %f
+
+ # Header
+ regex/\.(h|hpp)$
+- Open=%var{EDITOR:vi} %f
++ Open=sensible-editor %f
+
+ # Object
+ shell/.o
+- #Open=%var{PAGER:more} %f
++ #Open=sensible-pager %f
+ View=%view{ascii} file %f && nm %f
+
+ # Asm
+ shell/.s
+- Open=%var{EDITOR:vi} %f
++ Open=sensible-editor %f
+
+ # C++
+ regex/\.(C|cc|cpp)$
+- Open=%var{EDITOR:vi} %f
++ Open=sensible-editor %f
+
+
+ ### Documentation ###
+@@ -252,7 +261,7 @@
+ View=%view{ascii} file %f && nm %f
+
+ regex/(([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])|\.man)$
+- Open=case %d/%f in */log/*|*/logs/*) cat %f ;; *) nroff @MAN_FLAGS@ @MANDOC@ %f ;; esac | %var{PAGER:more}
++ Open=case %d/%f in */log/*|*/logs/*) cat %f ;; *) nroff @MAN_FLAGS@ @MANDOC@ %f ;; esac | sensible-pager
+ View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) cat %f ;; *) nroff @MAN_FLAGS@ @MANDOC@ %f ;; esac
+
+ # Troff with me macros.
+@@ -262,25 +271,25 @@
+ View=
+
+ shell/.me
+- Open=nroff @MAN_FLAGS@ -me %f | %var{PAGER:more}
++ Open=nroff @MAN_FLAGS@ -me %f | sensible-pager
+ View=%view{ascii,nroff} nroff @MAN_FLAGS@ -me %f
+
+ # Troff with ms macros.
+ shell/.ms
+- Open=nroff @MAN_FLAGS@ -ms %f | %var{PAGER:more}
++ Open=nroff @MAN_FLAGS@ -ms %f | sensible-pager
+ View=%view{ascii,nroff} nroff @MAN_FLAGS@ -ms %f
+
+ # Manual page - compressed
+ regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.g?[Zz]$
+- Open=case %d/%f in */log/*|*/logs/*) gzip -dc %f ;; *) gzip -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
++ Open=case %d/%f in */log/*|*/logs/*) gzip -dc %f ;; *) gzip -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | sensible-pager
+ View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) gzip -dc %f ;; *) gzip -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
+
+ regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.bz$
+- Open=case %d/%f in */log/*|*/logs/*) bzip -dc %f ;; *) bzip -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
++ Open=case %d/%f in */log/*|*/logs/*) bzip -dc %f ;; *) bzip -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | sensible-pager
+ View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) bzip -dc %f ;; *) bzip -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
+
+ regex/([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.bz2$
+- Open=case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | %var{PAGER:more}
++ Open=case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac | sensible-pager
+ View=%view{ascii,nroff} case %d/%f in */log/*|*/logs/*) bzip2 -dc %f ;; *) bzip2 -dc %f | nroff @MAN_FLAGS@ @MANDOC@ ;; esac
+
+
+@@ -290,6 +299,7 @@
+ Include=image
+
+ type/^JPEG
++ View=%view{ascii} identify %f; test -x /usr/bin/exif && echo && exif %f
+ Include=image
+
+ type/^PC\ bitmap
+@@ -317,14 +327,16 @@
+ Open=gimp %f
+
+ shell/.xbm
+- Open=bitmap %f
++ Include=image
++ #Open=bitmap %f
+
+ shell/.xpm
+ Include=image
+ View=sxpm %f
+
+ include/image
+- Open=if [ "$DISPLAY" = "" ]; then zgv %f; else (gqview %f &); fi
++ Open=see %f
++ #Open=if [ "$DISPLAY" = "" ]; then zgv %f; else (gqview %f &); fi
+ View=%view{ascii} identify %f
+ #View=%view{ascii} asciiview %f
+
+@@ -332,25 +344,30 @@
+ ### Sound files ###
+
+ regex/\.([wW][aA][vV]|[sS][nN][dD]|[vV][oO][cC]|[aA][uU]|[sS][mM][pP]|[aA][iI][fF][fF]|[sS][nN][dD])$
+- Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms -e %f 1>/dev/null 2>&1 &); fi
++ Open=run-mailcap audio/x-wav:%f
++ #Open=if [ "$DISPLAY" = "" ]; then play %f; else (xmms -e %f 1>/dev/null 2>&1 &); fi
+
+ regex/\.([mM][oO][dD]|[sS]3[mM]|[xX][mM]|[iI][tT]|[mM][tT][mM]|669|[sS][tT][mM]|[uU][lL][tT]|[fF][aA][rR])$
+- Open=mikmod %f
+- #Open=tracker %f
++ Open=run-mailcap application/x-mod:%f
++ #Open=mikmod %f
++ #Open=tracker %f
+
+ regex/\.([wW][aA][wW]22)$
+ Open=vplay -s 22 %f
+
+ regex/\.([mM][pP]3)$
+- Open=if [ "$DISPLAY" = "" ]; then mpg123 %f; else (xmms %f &); fi
+- View=%view{ascii} mpg123 -vtn1 %f 2>&1 | sed -n '/^Title/,/^Comment/p;/^MPEG/,/^Audio/p'
++ Open=run-mailcap audio/mpeg:%f
++ #Open=if [ "$DISPLAY" = "" ]; then mpg123 %f; else (xmms %f &); fi
++ View=%view{ascii} mpg123 -vtn1 %f 2>&1 | sed -n '/Title:/,/Comment:/p;/^MPEG/,/^Audio/p'
+
+ regex/\.([oO][gG][gG])$
+- Open=if [ "$DISPLAY" = "" ]; then ogg123 %f; else (xmms %f &); fi
++ Open=run-mailcap application/x-ogg:%f &
++ #Open=if [ "$DISPLAY" = "" ]; then ogg123 %f; else (xmms %f &); fi
+ View=%view{ascii} ogginfo %s
+
+ regex/\.([mM][iI][dD][iI]?|[rR][mM][iI][dD]?)$
+- Open=timidity %f
++ Open=run-mailcap audio/midi:%f
++ #Open=timidity %f
+
+ regex/\.([wW][mM][aA])$
+ Open=mplayer -vo null %f
+@@ -390,10 +407,12 @@
+ Include=video
+
+ regex/\.([rR][aA]?[mM])$
+- Open=(realplay %f >/dev/null 2>&1 &)
++ Open=run-mailcap audio/x-pn-realaudio:%f
++ #Open=(realplay %f >/dev/null 2>&1 &)
+
+ include/video
+- Open=(mplayer %f >/dev/null 2>&1 &)
++ Open=see %f
++ #Open=(mplayer %f >/dev/null 2>&1 &)
+ #Open=(gtv %f >/dev/null 2>&1 &)
+ #Open=(xanim %f >/dev/null 2>&1 &)
+
+@@ -402,12 +421,14 @@
+
+ # Postscript
+ type/^PostScript
+- Open=(gv %f &)
++ Open=run-mailcap application/postscript:%f
++ #Open=(gv %f &)
+ View=%view{ascii} ps2ascii %f
+
+ # PDF
+ type/^PDF
+- Open=(xpdf %f &)
++ Open=run-mailcap application/pdf:%f &
++ #Open=(xpdf %f &)
+ #Open=(acroread %f &)
+ #Open=(ghostview %f &)
+ View=%view{ascii} pdftotext %f -
+@@ -417,8 +438,9 @@
+
+ # html
+ regex/\.([hH][tT][mM][lL]?)$
+- Open=(if test -n "@X11_WWW@" && test -n "$DISPLAY"; then (@X11_WWW@ file://%d/%p &) 1>&2; else links %f || lynx -force_html %f || ${PAGER:-more} %f; fi) 2>/dev/null
+- View=%view{ascii} lynx -dump -force_html %f
++ Open=run-mailcap text/html:%f
++ #Open=(if test -n "@X11_WWW@" && test -n "$DISPLAY"; then (@X11_WWW@ file://%d/%p &) 1>&2; else links %f || lynx -force_html %f || ${PAGER:-more} %f; fi) 2>/dev/null
++ View=%view{ascii} links -dump %f 2>/dev/null || w3m -dump %f 2>/dev/null || lynx -dump -force_html %f
+
+ # StarOffice 5.2
+ shell/.sdw
+@@ -435,22 +457,26 @@
+
+ # Microsoft Word Document
+ regex/\.([Dd][oO][cCtT]|[Ww][rR][iI])$
+- Open=(abiword %f >/dev/null 2>&1 &)
+- View=%view{ascii} catdoc -w %f || word2x -f text %f - || strings %f
++ Open=run-mailcap application/msword:%f
++ #Open=(abiword %f >/dev/null 2>&1 &)
++ View=%view{ascii} antiword -t %f || catdoc -w %f || word2x -f text %f - || strings %f
+ type/^Microsoft\ Word
+ Open=(abiword %f >/dev/null 2>&1 &)
+- View=%view{ascii} catdoc -w %f || word2x -f text %f - || strings %f
++ View=%view{ascii} antiword -t %f || catdoc -w %f || word2x -f text %f - || strings %f
+
+ # RTF document
+ regex/\.([rR][tT][fF])$
+- Open=(abiword %f >/dev/null 2>&1 &)
++ Open=run-mailcap text/rtf:%f
++ #Open=(abiword %f >/dev/null 2>&1 &)
+
+ # Microsoft Excel Worksheet
+ regex/\.([xX][lL][sSwW])$
+- Open=(gnumeric %f >/dev/null 2>&1 &)
++ Open=run-mailcap application/vnd.ms-excel:%f
++ #Open=(gnumeric %f >/dev/null 2>&1 &)
+ View=%view{ascii} xls2csv %f || strings %f
+ type/^Microsoft\ Excel
+- Open=(gnumeric %f >/dev/null 2>&1 &)
++ Open=run-mailcap application/vnd.ms-excel:%f
++ #Open=(gnumeric %f >/dev/null 2>&1 &)
+ View=%view{ascii} xls2csv %f || strings %f
+
+ # Use OpenOffice.org to open any MS Office documents
+@@ -463,12 +489,14 @@
+
+ # DVI
+ regex/\.([dD][vV][iI])$
+- Open=if [ x$DISPLAY = x ]; then dvisvga %f; else (xdvi %f &); fi
++ Open=run-mailcap application/x-dvi:%f
++ #Open=if [ x$DISPLAY = x ]; then dvisvga %f; else (xdvi %f &); fi
+ View=%view{ascii} dvi2tty %f
+
+ # TeX
+ regex/\.([Tt][Ee][Xx])$
+- Open=%var{EDITOR:vi} %f
++ Open=sensible-editor %f
++ #Open=%var{EDITOR:vi} %f
+
+
+ ### Miscellaneous ###
+@@ -509,24 +537,29 @@
+
+ # gzip
+ type/^gzip
+- Open=gzip -dc %f | %var{PAGER:more}
++ Open=gzip -dc %f | sensible-pager
+ View=%view{ascii} gzip -dc %f 2>/dev/null
+
+ # bzip2
+ type/^bzip2
+- Open=bzip2 -dc %f | %var{PAGER:more}
++ Open=bzip2 -dc %f | sensible-pager
+ View=%view{ascii} bzip2 -dc %f 2>/dev/null
+
+ # bzip
+ type/^bzip
+- Open=bzip -dc %f | %var{PAGER:more}
++ Open=bzip -dc %f | sensible-pager
+ View=%view{ascii} bzip -dc %f 2>/dev/null
+
+ # compress
+ type/^compress
+- Open=gzip -dc %f | %var{PAGER:more}
++ Open=gzip -dc %f | sensible-pager
+ View=%view{ascii} gzip -dc %f 2>/dev/null
+
++### Debian additions ###
++
++# Gettext Catalogs
++shell/.mo
++ View=%view{ascii} msgunfmt %f || cat %f
+
+ ### Default ###
+
Added: trunk/debian/patches/02_debian_syntax.patch
===================================================================
--- trunk/debian/patches/02_debian_syntax.patch (rev 0)
+++ trunk/debian/patches/02_debian_syntax.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,118 @@
+diff -urN mc-4.6.0-pre2.orig/syntax/debian-changelog.syntax mc-4.6.0-pre2/syntax/debian-changelog.syntax
+--- mc-4.6.0-pre2.orig/syntax/debian-changelog.syntax 1970-01-01 01:00:00.000000000 +0100
++++ mc-4.6.0-pre2/syntax/debian-changelog.syntax 2002-12-29 18:11:08.000000000 +0100
+@@ -0,0 +1,20 @@
++context default
++
++ keyword linestart \s\s\* brightcyan/17
++ keyword linestart \s-- brightred/19
++ keyword linestart \s\s\s\s\+ cyan/17
++
++ keyword <*@*> brightred/19
++ keyword whole experimental; brightmagenta/magenta
++ keyword whole unstable; brightmagenta/magenta
++ keyword whole stable; brightmagenta/magenta
++ keyword whole urgency=low yellow/24
++ keyword whole urgency=medium brightgreen/6
++ keyword whole urgency=high white/25
++ keyword whole urgency=LOW yellow/24
++ keyword whole urgency=MEDIUM brightgreen/6
++ keyword whole urgency=HIGH white/25
++
++ keyword whole bug white/25
++ keyword whole Bug white/25
++ keyword whole BUG white/25
+diff -urN mc-4.6.0-pre2.orig/syntax/debian-control.syntax mc-4.6.0-pre2/syntax/debian-control.syntax
+--- mc-4.6.0-pre2.orig/syntax/debian-control.syntax 1970-01-01 01:00:00.000000000 +0100
++++ mc-4.6.0-pre2/syntax/debian-control.syntax 2002-12-29 18:11:13.000000000 +0100
+@@ -0,0 +1,23 @@
++context default
++ keyword linestart Source brightmagenta/20
++ keyword linestart Section brightmagenta/20
++ keyword linestart Priority brightmagenta/20
++ keyword linestart Maintainer brightmagenta/20
++ keyword linestart Standards-Version brightmagenta/20
++ keyword linestart Package green/6
++ keyword linestart Architecture green/6
++ keyword linestart Depends green/6
++ keyword linestart Recommends green/6
++ keyword linestart Suggests green/6
++ keyword linestart Conflicts green/6
++ keyword linestart Replaces green/6
++ keyword linestart Provides green/6
++ keyword linestart Pre-Depends green/6
++ keyword linestart Build-Depends green/6
++ keyword linestart Build-Depends-Indep green/6
++ keyword linestart Build-Conflicts green/6
++ keyword linestart Build-Conflicts-Indep green/6
++ keyword linestart Description green/6
++ keyword <*@*> brightred/19
++
++context linestart \s \n brown/22
+diff -urN mc-4.6.0-pre2.orig/syntax/debian-sources-list.syntax mc-4.6.0-pre2/syntax/debian-sources-list.syntax
+--- mc-4.6.0-pre2.orig/syntax/debian-sources-list.syntax 1970-01-01 01:00:00.000000000 +0100
++++ mc-4.6.0-pre2/syntax/debian-sources-list.syntax 2002-12-29 18:11:16.000000000 +0100
+@@ -0,0 +1,12 @@
++context default
++ keyword linestart deb-src brightmagenta/20
++ keyword linestart deb brightmagenta/20
++ keyword \$\(ARCH\) brightred/18
++
++context # \n brown/22
++context ftp\:\/\/ \s green/6
++context http\:\/\/ \s green/6
++context cdrom\:\/ \s yellow/24
++context file\:\/ \s brightcyan/14
++
++###############################################################################
+diff -urN mc-4.6.0-pre2.orig/syntax/Makefile.am mc-4.6.0-pre2/syntax/Makefile.am
+--- mc-4.6.0-pre2.orig/syntax/Makefile.am 2002-09-22 02:06:27.000000000 +0200
++++ mc-4.6.0-pre2/syntax/Makefile.am 2002-12-29 18:01:24.000000000 +0100
+@@ -5,6 +5,9 @@
+ ada95.syntax \
+ c.syntax \
+ changelog.syntax \
++ debian-changelog.syntax \
++ debian-control.syntax \
++ debian-sources-list.syntax \
+ diff.syntax \
+ dos.syntax \
+ fortran.syntax \
+diff -urN mc-4.6.0-pre2.orig/syntax/Makefile.in mc-4.6.0-pre2/syntax/Makefile.in
+--- mc-4.6.0-pre2.orig/syntax/Makefile.in 2002-12-26 22:38:19.000000000 +0100
++++ mc-4.6.0-pre2/syntax/Makefile.in 2002-12-29 18:01:45.000000000 +0100
+@@ -190,6 +190,9 @@
+ ada95.syntax \
+ c.syntax \
+ changelog.syntax \
++ debian-changelog.syntax \
++ debian-control.syntax \
++ debian-sources-list.syntax \
+ diff.syntax \
+ dos.syntax \
+ fortran.syntax \
+diff -urN mc-4.6.0-pre2.orig/syntax/Syntax mc-4.6.0-pre2/syntax/Syntax
+--- mc-4.6.0-pre2.orig/syntax/Syntax 2003-01-14 22:26:40.000000000 +0100
++++ mc-4.6.0-pre2/syntax/Syntax 2002-12-13 09:12:52.000000000 +0100
+@@ -116,6 +116,21 @@
+ file [Ss]yntax$ Syntax\sHighlighting\sdefinitions ^#\ssyntax\srules\sversion\s
+ include syntax.syntax
+
++file sources.list$ sources\slist
++include debian-sources-list.syntax
++
++file control$ Debian\scontrol\sfile
++include debian-control.syntax
++
++file (rules|rocks)$ Debian\srules
++include makefile.syntax
++
++file .\*changelog$ Debian\schangelog\sfile
++include debian-changelog.syntax
++
++file changelog.Debian$ Debian\schangelog\sfile
++include debian-changelog.syntax
++
+ file .\* unknown
+ include unknown.syntax
+
Added: trunk/debian/patches/03_conffiles_in_mans.patch
===================================================================
--- trunk/debian/patches/03_conffiles_in_mans.patch (rev 0)
+++ trunk/debian/patches/03_conffiles_in_mans.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,90 @@
+diff -urN mc-4.6.0-pre3.orig/doc/mc.1.in mc-4.6.0-pre3/doc/mc.1.in
+--- mc-4.6.0-pre3.orig/doc/mc.1.in 2003-01-14 21:01:34.000000000 +0100
++++ mc-4.6.0-pre3/doc/mc.1.in 2003-01-14 21:59:38.000000000 +0100
+@@ -1337,7 +1337,7 @@
+ but only if it is owned by user or root and is not world-writable.
+ If no such file found, ~/.mc/menu is tried in the same way,
+ and otherwise mc uses the default system-wide menu
+- at prefix@/share/mc/mc.menu.
++/etc/mc/mc.menu.
+ .PP
+ The format of the menu file is very simple. Lines that start with
+ anything but space or tab are considered entries for the menu (in
+@@ -1855,7 +1855,7 @@
+ At startup the Midnight Commander will try to load initialization
+ information from the ~/.mc/ini file. If this file doesn't exist, it will
+ load the information from the system-wide configuration file, located in
+- at prefix@/share/mc/mc.ini. If the system-wide configuration file doesn't
++/etc/mc/mc.ini. If the system-wide configuration file doesn't
+ exist, MC uses the default settings.
+ .PP
+ The
+@@ -3045,7 +3045,7 @@
+ .IP
+ The help file for the program.
+ .PP
+-.I @prefix@/share/mc/mc.ext
++.I /etc/mc/mc.ext
+ .IP
+ The default system-wide extensions file.
+ .PP
+@@ -3054,12 +3054,12 @@
+ User's own extension, view configuration and edit configuration
+ file. They override the contents of the system wide files if present.
+ .PP
+-.I @prefix@/share/mc/mc.ini
++.I /etc/mc/mc.ini
+ .IP
+ The default system-wide setup for the Midnight Commander, used only if
+ the user doesn't have his own ~/.mc/ini file.
+ .PP
+-.I @prefix@/share/mc/mc.lib
++.I /etc/mc/mc.lib
+ .IP
+ Global settings for the Midnight Commander. Settings in this file
+ affect all users, whether they have ~/.mc/ini or not. Currently, only
+@@ -3077,7 +3077,7 @@
+ .IP
+ This file contains the hints (cookies) displayed by the program.
+ .PP
+-.I @prefix@/share/mc/mc.menu
++.I /etc/mc/mc.menu
+ .IP
+ This file contains the default system-wide applications menu.
+ .PP
+diff -urN mc-4.6.0-pre3.orig/doc/mcedit.1.in mc-4.6.0-pre3/doc/mcedit.1.in
+--- mc-4.6.0-pre3.orig/doc/mcedit.1.in 2003-01-20 15:18:36.000000000 +0100
++++ mc-4.6.0-pre3/doc/mcedit.1.in 2003-01-23 18:57:57.000000000 +0100
+@@ -436,12 +436,12 @@
+ .IP
+ The help file for the program.
+ .PP
+-.I @prefix@/share/mc/mc.ini
++.I /etc/mc/mc.ini
+ .IP
+ The default system-wide setup for GNU Midnight Commander, used only if
+ the user's own ~/.mc/ini file is missing.
+ .PP
+-.I @prefix@/share/mc/mc.lib
++.I /etc/mc/mc.lib
+ .IP
+ Global settings for the Midnight Commander. Settings in this file
+ affect all users, whether they have ~/.mc/ini or not.
+diff -urN mc-4.6.0-pre3.orig/doc/mcview.1.in mc-4.6.0-pre3/doc/mcview.1.in
+--- mc-4.6.0-pre3.orig/doc/mcview.1.in 2003-01-20 15:18:36.000000000 +0100
++++ mc-4.6.0-pre3/doc/mcview.1.in 2003-01-23 18:58:24.000000000 +0100
+@@ -65,12 +65,12 @@
+ .IP
+ The help file for the program.
+ .PP
+-.I @prefix@/share/mc/mc.ini
++.I /etc/mc/mc.ini
+ .IP
+ The default system-wide setup for GNU Midnight Commander, used only if
+ the user's own ~/.mc/ini file is missing.
+ .PP
+-.I @prefix@/share/mc/mc.lib
++.I /etc/mc/mc.lib
+ .IP
+ Global settings for the Midnight Commander. Settings in this file
+ affect all users, whether they have ~/.mc/ini or not.
Added: trunk/debian/patches/04_off64t.patch
===================================================================
--- trunk/debian/patches/04_off64t.patch (rev 0)
+++ trunk/debian/patches/04_off64t.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,189 @@
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/cpio.c mc-4.6.1-pre4/vfs/cpio.c
+--- mc-4.6.1-pre4.debian/vfs/cpio.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1-pre4/vfs/cpio.c 2005-08-23 21:32:39.306219927 +0200
+@@ -83,7 +83,7 @@
+ struct vfs_s_inode *inode;
+ };
+
+-static int cpio_position;
++static off_t cpio_position;
+
+ static int cpio_find_head(struct vfs_class *me, struct vfs_s_super *super);
+ static int cpio_read_bin_head(struct vfs_class *me, struct vfs_s_super *super);
+@@ -107,7 +107,7 @@
+ return l;
+ }
+
+-static int cpio_skip_padding(struct vfs_s_super *super)
++static off_t cpio_skip_padding(struct vfs_s_super *super)
+ {
+ switch(super->u.arch.type) {
+ case CPIO_BIN:
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/direntry.c mc-4.6.1-pre4/vfs/direntry.c
+--- mc-4.6.1-pre4.debian/vfs/direntry.c 2004-11-29 19:44:49.000000000 +0100
++++ mc-4.6.1-pre4/vfs/direntry.c 2005-08-23 21:32:39.307219773 +0200
+@@ -836,13 +836,13 @@
+ return 0;
+ }
+
+-static int
++static off_t
+ vfs_s_lseek (void *fh, off_t offset, int whence)
+ {
+ off_t size = FH->ino->st.st_size;
+
+ if (FH->handle != -1){ /* If we have local file opened, we want to work with it */
+- int retval = lseek (FH->handle, offset, whence);
++ off_t retval = lseek (FH->handle, offset, whence);
+ if (retval == -1)
+ FH->ino->super->me->verrno = errno;
+ return retval;
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/extfs.c mc-4.6.1-pre4/vfs/extfs.c
+--- mc-4.6.1-pre4.debian/vfs/extfs.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1-pre4/vfs/extfs.c 2005-08-23 21:32:39.309219464 +0200
+@@ -1125,7 +1125,7 @@
+ return 0;
+ }
+
+-static int extfs_lseek (void *data, off_t offset, int whence)
++static off_t extfs_lseek (void *data, off_t offset, int whence)
+ {
+ struct pseudofile *file = (struct pseudofile *) data;
+
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/local.c mc-4.6.1-pre4/vfs/local.c
+--- mc-4.6.1-pre4.debian/vfs/local.c 2004-09-25 01:00:18.000000000 +0200
++++ mc-4.6.1-pre4/vfs/local.c 2005-08-23 21:32:39.310219310 +0200
+@@ -197,7 +197,7 @@
+ return chdir (path);
+ }
+
+-int
++off_t
+ local_lseek (void *data, off_t offset, int whence)
+ {
+ int fd = * (int *) data;
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/local.h mc-4.6.1-pre4/vfs/local.h
+--- mc-4.6.1-pre4.debian/vfs/local.h 2004-08-17 11:17:43.000000000 +0200
++++ mc-4.6.1-pre4/vfs/local.h 2005-08-23 21:32:39.318218076 +0200
+@@ -11,7 +11,7 @@
+ extern int local_read (void *data, char *buffer, int count);
+ extern int local_fstat (void *data, struct stat *buf);
+ extern int local_errno (struct vfs_class *me);
+-extern int local_lseek (void *data, off_t offset, int whence);
++extern off_t local_lseek (void *data, off_t offset, int whence);
+ #ifdef HAVE_MMAP
+ extern caddr_t local_mmap (struct vfs_class *me, caddr_t addr, size_t len,
+ int prot, int flags, void *data, off_t offset);
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/mcfs.c mc-4.6.1-pre4/vfs/mcfs.c
+--- mc-4.6.1-pre4.debian/vfs/mcfs.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1-pre4/vfs/mcfs.c 2005-08-23 21:32:39.315218539 +0200
+@@ -1037,7 +1037,7 @@
+ return 0;
+ }
+
+-static int
++static off_t
+ mcfs_lseek (void *data, off_t offset, int whence)
+ {
+ mcfs_handle *info = (mcfs_handle *) data;
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/smbfs.c mc-4.6.1-pre4/vfs/smbfs.c
+--- mc-4.6.1-pre4.debian/vfs/smbfs.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1-pre4/vfs/smbfs.c 2005-08-23 21:32:39.317218231 +0200
+@@ -1585,7 +1585,7 @@
+
+ #define smbfs_lstat smbfs_stat /* no symlinks on smb filesystem? */
+
+-static int
++static off_t
+ smbfs_lseek (void *data, off_t offset, int whence)
+ {
+ smbfs_handle *info = (smbfs_handle *) data;
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/tar.c mc-4.6.1-pre4/vfs/tar.c
+--- mc-4.6.1-pre4.debian/vfs/tar.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1-pre4/vfs/tar.c 2005-08-23 21:32:39.311219156 +0200
+@@ -194,7 +194,7 @@
+ }
+
+ /* As we open one archive at a time, it is safe to have this static */
+-static int current_tar_position = 0;
++static off_t current_tar_position = 0;
+
+ /* Returns fd of the open tar file */
+ static int
+@@ -457,7 +457,7 @@
+ struct stat st;
+ struct vfs_s_entry *entry;
+ struct vfs_s_inode *inode, *parent;
+- long data_position;
++ off_t data_position;
+ char *q;
+ int len;
+ char *current_file_name, *current_link_name;
+@@ -642,8 +642,9 @@
+ int fd = FH_SUPER->u.arch.fd;
+ struct vfs_class *me = FH_SUPER->me;
+
+- if (mc_lseek (fd, begin + FH->pos, SEEK_SET) !=
+- begin + FH->pos) ERRNOR (EIO, -1);
++
++ off_t o = mc_lseek(fd, begin + FH->pos, SEEK_SET);
++ if ( o != begin + FH->pos) ERRNOR (EIO, -1);
+
+ count = MIN(count, FH->ino->st.st_size - FH->pos);
+
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/undelfs.c mc-4.6.1-pre4/vfs/undelfs.c
+--- mc-4.6.1-pre4.debian/vfs/undelfs.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1-pre4/vfs/undelfs.c 2005-08-23 21:32:39.313218847 +0200
+@@ -645,7 +645,7 @@
+ }
+
+ /* this has to stay here for now: vfs layer does not know how to emulate it */
+-static int
++static off_t
+ undelfs_lseek(void *vfs_info, off_t offset, int whence)
+ {
+ return -1;
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/vfs-impl.h mc-4.6.1-pre4/vfs/vfs-impl.h
+--- mc-4.6.1-pre4.debian/vfs/vfs-impl.h 2004-09-02 15:57:59.000000000 +0200
++++ mc-4.6.1-pre4/vfs/vfs-impl.h 2005-08-23 21:32:39.318218076 +0200
+@@ -53,7 +53,7 @@
+ int (*rename) (struct vfs_class *me, const char *p1, const char *p2);
+ int (*chdir) (struct vfs_class *me, const char *path);
+ int (*ferrno) (struct vfs_class *me);
+- int (*lseek) (void *vfs_info, off_t offset, int whence);
++ off_t (*lseek) (void *vfs_info, off_t offset, int whence);
+ int (*mknod) (struct vfs_class *me, const char *path, int mode, int dev);
+
+ vfsid (*getid) (struct vfs_class *me, const char *path);
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/vfs.c mc-4.6.1-pre4/vfs/vfs.c
+--- mc-4.6.1-pre4.debian/vfs/vfs.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1-pre4/vfs/vfs.c 2005-08-23 21:32:39.312219002 +0200
+@@ -623,14 +623,14 @@
+ off_t mc_lseek (int fd, off_t offset, int whence)
+ {
+ struct vfs_class *vfs;
+- int result;
++ off_t result;
+
+ if (fd == -1)
+ return -1;
+
+ vfs = vfs_op (fd);
+ result = vfs->lseek ? (*vfs->lseek)(vfs_info (fd), offset, whence) : -1;
+- if (result == -1)
++ if (result == (off_t)-1)
+ errno = vfs->lseek ? ferrno (vfs) : E_NOTSUPP;
+ return result;
+ }
+diff -N -r -u -x config.log mc-4.6.1-pre4.debian/vfs/xdirentry.h mc-4.6.1-pre4/vfs/xdirentry.h
+--- mc-4.6.1-pre4.debian/vfs/xdirentry.h 2004-10-06 20:04:15.000000000 +0200
++++ mc-4.6.1-pre4/vfs/xdirentry.h 2005-08-23 21:32:39.326216843 +0200
+@@ -90,7 +90,7 @@
+ char *linkname; /* Symlink's contents */
+ char *localname; /* Filename of local file, if we have one */
+ struct timeval timestamp; /* Subclass specific */
+- long data_offset; /* Subclass specific */
++ off_t data_offset; /* Subclass specific */
+ };
+
+ /* Data associated with an open file */
Added: trunk/debian/patches/05_symcrash.patch
===================================================================
--- trunk/debian/patches/05_symcrash.patch (rev 0)
+++ trunk/debian/patches/05_symcrash.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,45 @@
+--- mc-4.6.1/src/util.c.symcrash 2005-09-13 12:32:54.000000000 +0200
++++ mc-4.6.1/src/util.c 2005-09-13 12:39:09.000000000 +0200
+@@ -1406,21 +1406,23 @@
+ * as needed up in first and then goes down using second */
+ char *diff_two_paths (const char *first, const char *second)
+ {
+- char *p, *q, *r, *s, *buf = 0;
++ char *p, *q, *r, *s, *buf = NULL;
+ int i, j, prevlen = -1, currlen;
+ char *my_first = NULL, *my_second = NULL;
+
+ my_first = resolve_symlinks (first);
+ if (my_first == NULL)
+ return NULL;
++ my_second= resolve_symlinks (second);
++ if (my_second == NULL) {
++ g_free (my_first);
++ return NULL;
++ }
+ for (j = 0; j < 2; j++) {
+ p = my_first;
+ if (j) {
+- my_second = resolve_symlinks (second);
+- if (my_second == NULL) {
+- g_free (my_first);
++ if (my_second == NULL)
+ return buf;
+- }
+ }
+ q = my_second;
+ for (;;) {
+--- mc-4.6.1/src/file.c.symcrash 2005-09-13 12:32:54.000000000 +0200
++++ mc-4.6.1/src/file.c 2005-09-13 12:29:16.000000000 +0200
+@@ -387,9 +387,9 @@
+ char *p, *q, *s;
+
+ const char *r = strrchr (src_path, PATH_SEP);
+-
++
+ if (r) {
+- p = g_strndup (src_path, r - src_path);
++ p = g_strndup (src_path, r - src_path + 1);
+ if (*dst_path == PATH_SEP)
+ q = g_strdup (dst_path);
+ else
Added: trunk/debian/patches/06_smbconf_path.patch
===================================================================
--- trunk/debian/patches/06_smbconf_path.patch (rev 0)
+++ trunk/debian/patches/06_smbconf_path.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,11 @@
+--- vfs/smbfs.c.orig 2002-12-13 15:57:39.000000000 +0100
++++ vfs/smbfs.c 2002-12-13 15:57:46.000000000 +0100
+@@ -259,7 +259,7 @@
+ static int
+ smbfs_init (struct vfs_class * me)
+ {
+- const char *servicesf = CONFIGDIR PATH_SEP_STR "smb.conf";
++ const char *servicesf = CONFIGDIR PATH_SEP_STR "samba/smb.conf";
+
+ /* DEBUGLEVEL = 4; */
+
Added: trunk/debian/patches/08_awk.patch
===================================================================
--- trunk/debian/patches/08_awk.patch (rev 0)
+++ trunk/debian/patches/08_awk.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,12 @@
+diff -urN mc-4.6.0.orig/configure mc-4.6.0/configure
+--- mc-4.6.0.orig/configure 2003-02-05 19:09:04.000000000 +0100
++++ mc-4.6.0/configure 2003-03-03 21:23:03.000000000 +0100
+@@ -1489,7 +1489,7 @@
+ echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+ fi
+
+-for ac_prog in gawk mawk nawk awk
++for ac_prog in awk gawk mawk nawk
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
Added: trunk/debian/patches/09_de.po.patch
===================================================================
--- trunk/debian/patches/09_de.po.patch (rev 0)
+++ trunk/debian/patches/09_de.po.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,56 @@
+--- po/de.po.orig 2005-06-11 16:42:51.000000000 +0200
++++ po/de.po 2005-06-14 18:55:30.000000000 +0200
+@@ -1411,7 +1411,7 @@
+ #: src/cmd.c:988
+ #, c-format
+ msgid " edit symlink: %s "
+-msgstr " symbolschen Link barbeiten: %s"
++msgstr " symbolschen Link bearbeiten: %s"
+
+ #: src/cmd.c:999
+ #, c-format
+@@ -1561,7 +1561,7 @@
+ " Cannot create temporary command file \n"
+ " %s "
+ msgstr ""
+-" Kann temporäre Befehlsdaei nicht anlegen \n"
++" Kann temporäre Befehlsdatei nicht anlegen \n"
+ " %s "
+
+ #: src/ext.c:117 src/user.c:585
+@@ -1669,7 +1669,7 @@
+ " Cannot stat source file \"%s\" \n"
+ " %s "
+ msgstr ""
+-" Kann Quelldaei \"%s\" nicht untersuchen \n"
++" Kann Quelldatei \"%s\" nicht untersuchen \n"
+ " %s "
+
+ #: src/file.c:517 src/file.c:1058
+@@ -2575,7 +2575,7 @@
+ #: src/learn.c:115
+ #, c-format
+ msgid " You have entered \"%s\""
+-msgstr " Sie haben \"%s\" einggeben"
++msgstr " Sie haben \"%s\" eingegeben"
+
+ #. TRANSLATORS: This label appears near learned keys. Keep it short.
+ #: src/learn.c:164
+@@ -2667,7 +2667,7 @@
+
+ #: src/main.c:811 src/main.c:835
+ msgid "S&hell link..."
+-msgstr "Shell-Verbindung..."
++msgstr "S&hell-Verbindung..."
+
+ #: src/main.c:813 src/main.c:837
+ msgid "SM&B link..."
+@@ -4199,7 +4199,7 @@
+ #: vfs/ftpfs.c:684
+ #, c-format
+ msgid "ftpfs: connection to server failed: %s"
+-msgstr "ftpfs: Verbindung zum Server fehlgeschlgen: %s"
++msgstr "ftpfs: Verbindung zum Server fehlgeschlagen: %s"
+
+ #: vfs/ftpfs.c:725
+ #, c-format
Added: trunk/debian/patches/10_it.po.patch
===================================================================
--- trunk/debian/patches/10_it.po.patch (rev 0)
+++ trunk/debian/patches/10_it.po.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,11 @@
+--- mc-4.6.0-4.6.1-pre4.orig/po/it.po
++++ mc-4.6.0-4.6.1-pre4/po/it.po
+@@ -2097,7 +2097,7 @@
+
+ #: src/filegui.c:524
+ msgid "A&ppend"
+-msgstr "Atta&cca"
++msgstr "atta&Cca"
+
+ #: src/filegui.c:527
+ msgid "Overwrite this target?"
Added: trunk/debian/patches/11_extfs_missing.patch
===================================================================
--- trunk/debian/patches/11_extfs_missing.patch (rev 0)
+++ trunk/debian/patches/11_extfs_missing.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,127 @@
+diff -pruN vfs/extfs/uzip.in vfs/extfs/uzip.in
+--- vfs/extfs/uzip.in 2004-09-03 14:40:11.000000000 +0200
++++ vfs/extfs/uzip.in 2005-02-06 13:02:49.000000000 +0100
+@@ -34,6 +34,14 @@ my $cmd_delete = "$app_zip -d";
+ # Command used to extract a file to standard out
+ my $cmd_extract = "$app_unzip -p";
+
++# -rw-r--r-- 2.2 unx 2891 tx 1435 defN 20000330.211927 ./edit.html
++# (perm) (?) (?) (size) (?) (zippedsize) (method) (yyyy)(mm)(dd)(HH)(MM) (fname)
++my $regex_zipinfo_line = qr"^(\S{7,10})\s+(\d+\.\d+)\s+(\S+)\s+(\d+)\s+(\S\S)\s+(\d+)\s+(\S{4})\s+(\d{4})(\d\d)(\d\d)\.(\d\d)(\d\d)(\d\d)\s(.*)$";
++
++# 2891 Defl:N 1435 50% 03-30-00 21:19 50cbaaf8 ./edit.html
++# (size) (method) (zippedsize) (zipratio) (mm)(dd)(yy)(HH)(MM) (cksum) (fname)
++my $regex_nonzipinfo_line = qr"^\s*(\d+)\s+(\S+)\s+(\d+)\s+(-?\d+\%)\s+(\d?\d)-(\d?\d)-(\d\d)\s+(\d?\d):(\d\d)\s+([0-9a-f]+)\s\s(.*)$";
++
+ #
+ # Main code
+ #
+@@ -50,6 +58,50 @@ my $aarchive = absolutize($archive, $old
+ my $cmd_list = ($op_has_zipinfo ? $cmd_list_zi : $cmd_list_nzi);
+ my ($qarchive, $aqarchive) = map (quotemeta, $archive, $aarchive);
+
++# Strip all "." and ".." path components from a pathname.
++sub zipfs_canonicalize_pathname($) {
++ my ($fname) = @_;
++ $fname =~ s,/+,/,g;
++ $fname =~ s,(^|/)(?:\.?\./)+,$1,;
++ return $fname;
++}
++
++# The Midnight Commander never calls this script with archive pathnames
++# starting with either "./" or "../". Some ZIP files contain such names,
++# so we need to build a translation table for them.
++my $zipfs_realpathname_table = undef;
++sub zipfs_realpathname($) {
++ my ($fname) = @_;
++
++ if (!defined($zipfs_realpathname_table)) {
++ $zipfs_realpathname_table = {};
++ if (!open(ZIP, "$cmd_list $qarchive |")) {
++ return $fname;
++ }
++ foreach my $line (<ZIP>) {
++ $line =~ s/\r*\n*$//;
++ if ($op_has_zipinfo) {
++ if ($line =~ $regex_zipinfo_line) {
++ my ($fname) = ($14);
++ $zipfs_realpathname_table->{zipfs_canonicalize_pathname($fname)} = $fname;
++ }
++ } else {
++ if ($line =~ $regex_nonzipinfo_line) {
++ my ($fname) = ($11);
++ $zipfs_realpathname_table->{zipfs_canonicalize_pathname($fname)} = $fname;
++ }
++ }
++ }
++ if (!close(ZIP)) {
++ return $fname;
++ }
++ }
++ if (exists($zipfs_realpathname_table->{$fname})) {
++ return $zipfs_realpathname_table->{$fname};
++ }
++ return $fname;
++}
++
+ if ($cmd eq 'list') { &mczipfs_list(@ARGV); }
+ if ($cmd eq 'rm') { &mczipfs_rm(@ARGV); }
+ if ($cmd eq 'rmdir') { &mczipfs_rmdir(@ARGV); }
+@@ -63,7 +115,12 @@ exit 1;
+
+ # Remove a file from the archive.
+ sub mczipfs_rm {
+- my ($qfile) = map { &zipquotemeta($_) } @_;
++ my ($qfile) = map { &zipquotemeta(zipfs_realpathname($_)) } @_;
++
++ # "./" at the beginning of pathnames is stripped by Info-ZIP,
++ # so convert it to "[.]/" to prevent stripping.
++ $qfile =~ s/^\\\./[.]/;
++
+ &checkargs(1, 'archive file', @_);
+ &safesystem("$cmd_delete $qarchive $qfile >/dev/null");
+ exit;
+@@ -74,7 +131,7 @@ sub mczipfs_rm {
+ # additional slash to the directory name to remove. I am not
+ # sure this is absolutely necessary, but it doesn't hurt.
+ sub mczipfs_rmdir {
+- my ($qfile) = map { &zipquotemeta($_) } @_;
++ my ($qfile) = map { &zipquotemeta(zipfs_realpathname($_)) } @_;
+ &checkargs(1, 'archive directory', @_);
+ &safesystem("$cmd_delete $qarchive $qfile/ >/dev/null", 12);
+ exit;
+@@ -84,7 +141,7 @@ sub mczipfs_rmdir {
+ # Note that we don't need to check if the file is a link,
+ # because mc apparently doesn't call copyout for symbolic links.
+ sub mczipfs_copyout {
+- my ($qafile, $qfsfile) = map { &zipquotemeta($_) } @_;
++ my ($qafile, $qfsfile) = map { &zipquotemeta(zipfs_realpathname($_)) } @_;
+ &checkargs(1, 'archive file', @_);
+ &checkargs(2, 'local file', @_);
+ &safesystem("$cmd_extract $qarchive $qafile > $qfsfile", 11);
+@@ -195,14 +252,14 @@ sub mczipfs_list {
+ next if /^Archive:/;
+ next if /^\d+ file/;
+ next if /^Empty zipfile\.$/;
+- my @match = /^(.{10}) +([\d.]+) +([a-z\d]+) +(\d+) +([^ ]{2}) +(\d+) +([^ ]{4}) +(\d{4})(\d\d)(\d\d)\.(\d\d)(\d\d)(\d\d) +(.*)$/;
++ my @match = /$regex_zipinfo_line/;
+ next if ($#match != 13);
+ &checked_print_file(@match);
+ }
+ } else {
+ while (<PIPE>) {
+ chomp;
+- my @match = /^ *(\d+) +([^ ]+) +(\d+) +(-?\d+\%) +(\d?\d)-(\d?\d)-(\d\d) (\d?\d):(\d\d) +([0-9a-f]+) +(.*)$/;
++ my @match = /$regex_nonzipinfo_line/;
+ next if ($#match != 10);
+ my @rmatch = ('', '', 'unknown', $match[0], '', $match[2], $match[1],
+ $match[6] + ($match[6] < 70 ? 2000 : 1900), $match[4], $match[5],
+@@ -230,7 +287,7 @@ sub mczipfs_list {
+ sub mczipfs_run {
+ my ($afile) = @_;
+ &checkargs(1, 'archive file', @_);
+- my $qafile = &zipquotemeta($afile);
++ my $qafile = &zipquotemeta(zipfs_realpathname($afile));
+ my $tmpdir = &mktmpdir();
+ my $tmpfile = File::Basename::basename($afile);
+
Added: trunk/debian/patches/13_syntax.patch
===================================================================
--- trunk/debian/patches/13_syntax.patch (rev 0)
+++ trunk/debian/patches/13_syntax.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,13 @@
+--- syntax/Syntax Sun Mar 6 14:11:31 2005
++++ syntax/Syntax Sun Mar 6 19:00:44 2005
+@@ -41,8 +41,9 @@
+ file ..\*\\.(rb|RB)$ Ruby\sProgram ^#!\s\*/.\*/ruby
+ include ruby.syntax
+
+-file ..\*\\.(man|[0-9n]|[0-9]x)$ NROFF\sSource
++file ..\*\\.(man|[0-9n]|[0-9](x|ncurses|ssl|p|pm|menu|form|vga|t|td))$ NROFF\sSource
+ include nroff.syntax
++
+
+ file ..\*\\.(htm|html|HTM|HTML)$ HTML\sFile
+ include html.syntax
Added: trunk/debian/patches/14_cxx.syntax.patch
===================================================================
--- trunk/debian/patches/14_cxx.syntax.patch (rev 0)
+++ trunk/debian/patches/14_cxx.syntax.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,141 @@
+--- mc-4.6.0-4.6.1-pre4.orig/syntax/Makefile.in
++++ mc-4.6.0-4.6.1-pre4/syntax/Makefile.in
+@@ -227,6 +227,7 @@
+ aspx.syntax \
+ assembler.syntax \
+ c.syntax \
++ cxx.syntax \
+ cs.syntax \
+ changelog.syntax \
+ diff.syntax \
+--- mc-4.6.0-4.6.1-pre4.orig/syntax/cxx.syntax
++++ mc-4.6.0-4.6.1-pre4/syntax/cxx.syntax
+@@ -0,0 +1,128 @@
++context default
++ keyword whole auto yellow
++ keyword whole break yellow
++ keyword whole case yellow
++ keyword whole char yellow
++ keyword whole const yellow
++ keyword whole continue yellow
++ keyword whole default yellow
++ keyword whole do yellow
++ keyword whole double yellow
++ keyword whole else yellow
++ keyword whole enum yellow
++ keyword whole extern yellow
++ keyword whole float yellow
++ keyword whole for yellow
++ keyword whole goto yellow
++ keyword whole if yellow
++ keyword whole int yellow
++ keyword whole long yellow
++ keyword whole register yellow
++ keyword whole return yellow
++ keyword whole short yellow
++ keyword whole signed yellow
++ keyword whole sizeof yellow
++ keyword whole static yellow
++ keyword whole struct yellow
++ keyword whole switch yellow
++ keyword whole typedef yellow
++ keyword whole union yellow
++ keyword whole unsigned yellow
++ keyword whole void yellow
++ keyword whole volatile yellow
++ keyword whole while yellow
++ keyword whole asm yellow
++ keyword whole catch yellow
++ keyword whole class yellow
++ keyword whole friend yellow
++ keyword whole delete yellow
++ keyword whole inline yellow
++ keyword whole new yellow
++ keyword whole operator yellow
++ keyword whole private yellow
++ keyword whole protected yellow
++ keyword whole public yellow
++ keyword whole this yellow
++ keyword whole throw yellow
++ keyword whole template yellow
++ keyword whole try yellow
++ keyword whole virtual yellow
++ keyword whole bool yellow
++ keyword whole const_cast yellow
++ keyword whole dynamic_cast yellow
++ keyword whole explicit yellow
++ keyword whole false yellow
++ keyword whole mutable yellow
++ keyword whole namespace yellow
++ keyword whole reinterpret_cast yellow
++ keyword whole static_cast yellow
++ keyword whole true yellow
++ keyword whole typeid yellow
++ keyword whole typename yellow
++ keyword whole using yellow
++ keyword whole wchar_t yellow
++ keyword whole ... yellow
++ keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta
++
++ keyword /\* brown
++ keyword \*/ brown
++ keyword // brown
++
++ keyword '\\\{"abtnvfr\}' brightgreen
++ keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen
++ keyword '\\'' brightgreen
++ keyword '\\\\' brightgreen
++ keyword '\\0' brightgreen
++ keyword '\{\s!"#$%&()\*\+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\}' brightgreen
++
++ keyword > yellow
++ keyword < yellow
++ keyword \+ yellow
++ keyword - yellow
++ keyword \* yellow
++ keyword / yellow
++ keyword % yellow
++ keyword = yellow
++ keyword != yellow
++ keyword == yellow
++ keyword { brightcyan
++ keyword } brightcyan
++ keyword ( brightcyan
++ keyword ) brightcyan
++ keyword [ brightcyan
++ keyword ] brightcyan
++ keyword , brightcyan
++ keyword : brightcyan
++ keyword ? brightcyan
++ keyword ; brightmagenta
++
++context exclusive /\* \*/ brown
++ spellcheck
++
++context exclusive // \n brown
++ spellcheck
++
++context linestart # \n brightred
++ keyword \\\n yellow
++ keyword /\**\*/ brown
++ keyword //*\n brown
++ keyword "+" red
++ keyword <+> red
++
++context " " green
++ spellcheck
++ keyword \\" brightgreen
++ keyword %% brightgreen
++ keyword %\[#0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[L\]\{eEfgGoxX\} brightgreen
++ keyword %\[0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[hl\]\{diuxX\} brightgreen
++ keyword %\[hl\]n brightgreen
++ keyword %\[-\]\[0123456789\*\]\[.\]\[0123456789\*\]s brightgreen
++ keyword %[*] brightgreen
++ keyword %c brightgreen
++ keyword %p brightgreen
++ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
++ keyword \\\\ brightgreen
++ keyword \\' brightgreen
++ keyword \\\{abtnvfr\} brightgreen
++
++
Added: trunk/debian/patches/18_sh_syntax.patch
===================================================================
--- trunk/debian/patches/18_sh_syntax.patch (rev 0)
+++ trunk/debian/patches/18_sh_syntax.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,468 @@
+/* Creator: Michelle Konzack */
+/* E-Mail: <linux4michelle at freenet.de> */
+/* */
+/* Creation-Date: Sat, 12 Mar 2005 16:59:01 +0100 */
+
+
+--- syntax/sh.syntax Sat Mar 12 16:54:56 2005
++++ syntax/sh.syntax Sat Mar 12 16:57:47 2005
+@@ -41,7 +41,9 @@ wholechars abcdefghijklmnopqrstuvwxyzABC
+ keyword whole bg yellow
+ keyword whole break yellow
+ keyword whole case yellow
++ keyword whole clear yellow
+ keyword whole continue yellow
++ keyword whole declare yellow
+ keyword whole done yellow
+ keyword whole do yellow
+ keyword whole elif yellow
+@@ -56,11 +58,13 @@ wholechars abcdefghijklmnopqrstuvwxyzABC
+ keyword whole for yellow
+ keyword whole if yellow
+ keyword whole in yellow
++ keyword whole let yellow
+ keyword whole read yellow
+ keyword whole return yellow
+ keyword whole select yellow
+ keyword whole set yellow
+ keyword whole shift yellow
++ keyword whole source yellow
+ keyword whole then yellow
+ keyword whole trap yellow
+ keyword whole umask yellow
+@@ -69,6 +73,8 @@ wholechars abcdefghijklmnopqrstuvwxyzABC
+ keyword whole wait yellow
+ keyword whole while yellow
+
++ keyword whole apt-get cyan
++ keyword whole ar cyan
+ keyword whole arch cyan
+ keyword whole ash cyan
+ keyword whole awk cyan
+@@ -77,90 +83,204 @@ wholechars abcdefghijklmnopqrstuvwxyzABC
+ keyword whole bg_backup cyan
+ keyword whole bg_restore cyan
+ keyword whole bsh cyan
++ keyword whole bzip cyan
++ keyword whole bzip2 cyan
++ keyword whole cam cyan
+ keyword whole cat cyan
+ keyword whole cd cyan
++ keyword whole cdda2wav cyan
+ keyword whole chgrp cyan
+ keyword whole chmod cyan
+ keyword whole chown cyan
++ keyword whole cmp cyan
++ keyword whole col cyan
++ keyword whole compress cyan
+ keyword whole cp cyan
+ keyword whole cpio cyan
++ keyword whole cpp cyan
+ keyword whole csh cyan
++ keyword whole curl cyan
++ keyword whole cut cyan
+ keyword whole date cyan
+ keyword whole dd cyan
+ keyword whole df cyan
++ keyword whole dialog cyan
++ keyword whole diff cyan
++ keyword whole dirname cyan
+ keyword whole dmesg cyan
+ keyword whole dnsdomainname cyan
+ keyword whole doexec cyan
+ keyword whole domainname cyan
++ keyword whole dpkg cyan
++ keyword whole dpkg-buildpackage cyan
++ keyword whole dpkg-scanpackages cyan
++ keyword whole dpkg-scansources cyan
+ keyword whole echo cyan
+ keyword whole ed cyan
++ keyword whole editor cyan
+ keyword whole egrep cyan
+ keyword whole ex cyan
++ keyword whole fakeroot cyan
+ keyword whole false cyan
++ keyword whole fdformat cyan
++ keyword whole fetchmail cyan
+ keyword whole fgrep cyan
+ keyword whole find cyan
++ keyword whole formail cyan
++ keyword whole free cyan
++ keyword whole freeze cyan
+ keyword whole fsconf cyan
+ keyword whole gawk cyan
++ keyword whole gdb cyan
++ keyword whole gcc cyan
+ keyword whole grep cyan
+ keyword whole gunzip cyan
+ keyword whole gzip cyan
++ keyword whole ha cyan
+ keyword whole hostname cyan
+ keyword whole igawk cyan
++ keyword whole insmod cyan
+ keyword whole ipcalc cyan
++ keyword whole iptables cyan
+ keyword whole kill cyan
+ keyword whole ksh cyan
++ keyword whole lame cyan
++ keyword whole less cyan
++ keyword whole lharc cyan
++ keyword whole lilo cyan
++ keyword whole linux_logo cyan
+ keyword whole linuxconf cyan
+ keyword whole ln cyan
++ keyword whole locale cyan
++ keyword whole logger cyan
+ keyword whole login cyan
+ keyword whole lpdconf cyan
+ keyword whole ls cyan
++ keyword whole lynx cyan
+ keyword whole mail cyan
++ keyword whole man cyan
++ keyword whole mc cyan
++ keyword whole mcedit cyan
++ keyword whole mcview cyan
++ keyword whole mimedecode cyan
+ keyword whole mkdir cyan
++ keyword whole mkdirhier cyan
++ keyword whole mkfs.ext2 cyan
++ keyword whole mkfs.ext3 cyan
++ keyword whole mkfs.minix cyan
++ keyword whole mkfs.msdos cyan
++ keyword whole mke2fs cyan
++ keyword whole mkdosfs cyan
++ keyword whole mkinitrd cyan
+ keyword whole mknod cyan
+ keyword whole mktemp cyan
++ keyword whole modprobe cyan
+ keyword whole more cyan
+ keyword whole mount cyan
++ keyword whole mozilla cyan
++ keyword whole mp3info cyan
++ keyword whole munpack cyan
++ keyword whole msgfmt cyan
+ keyword whole mt cyan
++ keyword whole mutt cyan
+ keyword whole mv cyan
+ keyword whole netconf cyan
+ keyword whole netstat cyan
+ keyword whole nice cyan
+ keyword whole nisdomainname cyan
++ keyword whole nm cyan
++ keyword whole patch cyan
++ keyword whole pinfo cyan
+ keyword whole ping cyan
++ keyword whole procmail cyan
+ keyword whole ps cyan
+ keyword whole pwd cyan
++ keyword whole rar cyan
+ keyword whole red cyan
+ keyword whole remadmin cyan
++ keyword whole rename cyan
+ keyword whole rm cyan
+ keyword whole rmdir cyan
++ keyword whole rmmod cyan
++ keyword whole rplay cyan
+ keyword whole rpm cyan
++ keyword whole rpm2cpio cyan
+ keyword whole sed cyan
+ keyword whole set cyan
+ keyword whole setserial cyan
+ keyword whole sh cyan
+ keyword whole sleep cyan
+ keyword whole sort cyan
++ keyword whole sa-learn cyan
++ keyword whole spamassassin cyan
++ keyword whole spamc cyan
++ keyword whole spamd cyan
++ keyword whole ssmtp cyan
++ keyword whole strace cyan
+ keyword whole stty cyan
+ keyword whole su cyan
+ keyword whole sync cyan
+ keyword whole taper cyan
+ keyword whole tar cyan
++ keyword whole tcpdump cyan
+ keyword whole tcsh cyan
+ keyword whole test cyan
++ keyword whole tempfile cyan
+ keyword whole time cyan
++ keyword whole tnef cyan
+ keyword whole touch cyan
++ keyword whole tr cyan
+ keyword whole true cyan
++ keyword whole tune2fs cyan
+ keyword whole umount cyan
+ keyword whole uname cyan
++ keyword whole unarj cyan
++ keyword whole uniq cyan
++ keyword whole unzip cyan
++ keyword whole uptime cyan
+ keyword whole userconf cyan
+ keyword whole usleep cyan
+ keyword whole vi cyan
+ keyword whole view cyan
+ keyword whole vim cyan
++ keyword whole wc cyan
++ keyword whole wget cyan
++ keyword whole whiptail cyan
++ keyword whole wvWare cyan
+ keyword whole xconf cyan
++ keyword whole xgettext cyan
++ keyword whole xmessage cyan
++ keyword whole xmodmap cyan
++ keyword whole xterm cyan
+ keyword whole ypdomainname cyan
+ keyword whole zcat cyan
++ keyword whole zgv cyan
++ keyword whole zip cyan
++ keyword whole zoo cyan
+ keyword whole zsh cyan
++ keyword whole Xdialog cyan
++
++ keyword whole gpg red
++ keyword whole md5sum red
++ keyword whole openssl red
++ keyword whole ssh red
++
++ keyword whole TEXTDOMAINDIR magenta
++ keyword whole TEXTDOMAIN magenta
++ keyword whole VERSION magenta
++
++ keyword whole jpegtopnm cyan
++ keyword whole pnmscale cyan
++ keyword whole ppmtoxpm cyan
++
++ keyword whole /dev/audio brightblue
++ keyword whole /dev/dsp brightblue
++ keyword whole /dev/null brightblue
++ keyword whole /dev/mixed brightblue
++ keyword whole /dev/stdin brightblue
++ keyword whole /dev/stdout brightblue
++ keyword whole /dev/stderr brightblue
++ keyword whole /dev/zero brightblue
+
+ wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
+
+@@ -224,7 +344,9 @@ wholechars abcdefghijklmnopqrstuvwxyzABC
+
+ keyword whole break yellow
+ keyword whole case yellow
++ keyword whole clear yellow
+ keyword whole continue yellow
++ keyword whole declare yellow
+ keyword whole done yellow
+ keyword whole do yellow
+ keyword whole elif yellow
+@@ -238,11 +360,15 @@ wholechars abcdefghijklmnopqrstuvwxyzABC
+ keyword whole return yellow
+ keyword whole select yellow
+ keyword whole shift yellow
++ keyword whole source yellow
+ keyword whole then yellow
+ keyword whole trap yellow
+ keyword whole until yellow
++ keyword whole wait yellow
+ keyword whole while yellow
+
++ keyword whole apt-get cyan
++ keyword whole ar cyan
+ keyword whole arch cyan
+ keyword whole ash cyan
+ keyword whole awk cyan
+@@ -251,89 +377,194 @@ wholechars abcdefghijklmnopqrstuvwxyzABC
+ keyword whole bg_backup cyan
+ keyword whole bg_restore cyan
+ keyword whole bsh cyan
++ keyword whole bzip cyan
++ keyword whole bzip2 cyan
++ keyword whole cam cyan
+ keyword whole cat cyan
+ keyword whole cd cyan
++ keyword whole cdda2wav cyan
+ keyword whole chgrp cyan
+ keyword whole chmod cyan
+ keyword whole chown cyan
++ keyword whole cmp cyan
++ keyword whole col cyan
++ keyword whole compress cyan
+ keyword whole cp cyan
+ keyword whole cpio cyan
++ keyword whole cpp cyan
+ keyword whole csh cyan
++ keyword whole curl cyan
++ keyword whole cut cyan
+ keyword whole date cyan
+ keyword whole dd cyan
+ keyword whole df cyan
++ keyword whole dialog cyan
++ keyword whole diff cyan
++ keyword whole dirname cyan
+ keyword whole dmesg cyan
+ keyword whole dnsdomainname cyan
+ keyword whole doexec cyan
+ keyword whole domainname cyan
++ keyword whole dpkg cyan
++ keyword whole dpkg-buildpackage cyan
++ keyword whole dpkg-scanpackages cyan
++ keyword whole dpkg-scansources cyan
+ keyword whole echo cyan
+ keyword whole ed cyan
++ keyword whole editor cyan
+ keyword whole egrep cyan
+ keyword whole ex cyan
++ keyword whole fakeroot cyan
+ keyword whole false cyan
++ keyword whole fdformat cyan
++ keyword whole fetchmail cyan
+ keyword whole fgrep cyan
+ keyword whole find cyan
++ keyword whole free cyan
++ keyword whole freeze cyan
+ keyword whole fsconf cyan
+ keyword whole gawk cyan
++ keyword whole gdb cyan
++ keyword whole gcc cyan
+ keyword whole grep cyan
+ keyword whole gunzip cyan
+ keyword whole gzip cyan
++ keyword whole ha cyan
+ keyword whole hostname cyan
+ keyword whole igawk cyan
++ keyword whole insmod cyan
++ keyword whole iptables cyan
+ keyword whole ipcalc cyan
+ keyword whole kill cyan
+ keyword whole ksh cyan
++ keyword whole lame cyan
++ keyword whole less cyan
++ keyword whole lharc cyan
++ keyword whole lilo cyan
++ keyword whole linux_logo cyan
+ keyword whole linuxconf cyan
+ keyword whole ln cyan
++ keyword whole locale cyan
++ keyword whole logger cyan
+ keyword whole login cyan
+ keyword whole lpdconf cyan
+ keyword whole ls cyan
++ keyword whole lynx cyan
+ keyword whole mail cyan
++ keyword whole man cyan
++ keyword whole mc cyan
++ keyword whole mcedit cyan
++ keyword whole mcview cyan
++ keyword whole mimedecode cyan
+ keyword whole mkdir cyan
++ keyword whole mkdirhier cyan
++ keyword whole mkfs.ext2 cyan
++ keyword whole mkfs.ext3 cyan
++ keyword whole mkfs.minix cyan
++ keyword whole mkfs.msdos cyan
++ keyword whole mke2fs cyan
++ keyword whole mkdosfs cyan
++ keyword whole mkinitrd cyan
+ keyword whole mknod cyan
+ keyword whole mktemp cyan
++ keyword whole modprobe cyan
+ keyword whole more cyan
+ keyword whole mount cyan
++ keyword whole mozilla cyan
++ keyword whole mp3info cyan
++ keyword whole msgfmt cyan
+ keyword whole mt cyan
++ keyword whole mutt cyan
+ keyword whole mv cyan
+ keyword whole netconf cyan
+ keyword whole netstat cyan
+ keyword whole nice cyan
+ keyword whole nisdomainname cyan
++ keyword whole nm cyan
++ keyword whole patch cyan
++ keyword whole pinfo cyan
+ keyword whole ping cyan
+ keyword whole ps cyan
+ keyword whole pwd cyan
++ keyword whole rar cyan
+ keyword whole red cyan
+ keyword whole remadmin cyan
++ keyword whole rename cyan
+ keyword whole rm cyan
+ keyword whole rmdir cyan
++ keyword whole rmmod cyan
++ keyword whole rplay cyan
+ keyword whole rpm cyan
++ keyword whole rpm2cpio cyan
+ keyword whole sed cyan
+ keyword whole set cyan
+ keyword whole setserial cyan
+ keyword whole sh cyan
+ keyword whole sleep cyan
+ keyword whole sort cyan
++ keyword whole sa-learn cyan
++ keyword whole spamassassin cyan
++ keyword whole spamc cyan
++ keyword whole spamd cyan
++ keyword whole ssmtp cyan
++ keyword whole strace cyan
+ keyword whole stty cyan
+ keyword whole su cyan
+ keyword whole sync cyan
+ keyword whole taper cyan
+ keyword whole tar cyan
++ keyword whole tcpdump cyan
+ keyword whole tcsh cyan
++ keyword whole tempfile cyan
+ keyword whole test cyan
+ keyword whole time cyan
++ keyword whole tnef cyan
+ keyword whole touch cyan
++ keyword whole tr cyan
+ keyword whole true cyan
++ keyword whole tune2fs cyan
+ keyword whole umount cyan
+ keyword whole uname cyan
++ keyword whole unarj cyan
++ keyword whole uniq cyan
++ keyword whole unzip cyan
++ keyword whole uptime cyan
+ keyword whole userconf cyan
+ keyword whole usleep cyan
+ keyword whole vi cyan
+ keyword whole view cyan
+ keyword whole vim cyan
++ keyword whole wc cyan
++ keyword whole wget cyan
++ keyword whole whiptail cyan
++ keyword whole wvWare cyan
+ keyword whole xconf cyan
++ keyword whole xgettext cyan
++ keyword whole xmessage cyan
++ keyword whole xmodmap cyan
++ keyword whole xterm cyan
+ keyword whole ypdomainname cyan
+ keyword whole zcat cyan
++ keyword whole zgv cyan
++ keyword whole zoo cyan
++ keyword whole zip cyan
+ keyword whole zsh cyan
++ keyword whole Xdialog cyan
+
+-
++ keyword whole gpg red
++ keyword whole md5sum red
++ keyword whole openssl red
++ keyword whole ssh red
++
++ keyword whole TEXTDOMAINDIR magenta
++ keyword whole TEXTDOMAIN magenta
++ keyword whole VERSION magenta
++
++ keyword whole /dev/audio brightblue
++ keyword whole /dev/dsp brightblue
++ keyword whole /dev/null brightblue
++ keyword whole /dev/mixed brightblue
++ keyword whole /dev/stdin brightblue
++ keyword whole /dev/stdout brightblue
++ keyword whole /dev/stderr brightblue
++ keyword whole /dev/zero brightblue
Added: trunk/debian/patches/22_main.c.patch
===================================================================
--- trunk/debian/patches/22_main.c.patch (rev 0)
+++ trunk/debian/patches/22_main.c.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,51 @@
+--- src/main.c Fri Nov 14 21:43:12 2003
++++ src/main.c Fri Mar 18 15:36:41 2005
+@@ -1597,21 +1597,45 @@
+
+ #define xtoolkit_panel_setup()
+
+-/* Show current directory in the xterm title */
++/* Show hostname and current directory in the xterm title */
+ void
+ update_xterm_title_path (void)
+ {
+ unsigned char *p, *s;
++ char *pvp;
++ size_t pvlen;
++ int pvresult;
+
+ if (xterm_flag && xterm_title) {
++ // currrent path
+ p = s = g_strdup (strip_home_and_password (current_panel->cwd));
++ // hostname
++ pvlen = strlen(p);
++ pvp = g_malloc (pvlen + 64); //approach - max hostname length
++ pvresult = gethostname(pvp, 63);
++ if (pvresult) { // print just current path
++ g_free (pvp);
++ pvp = p;
++ } else {
++ s = pvp;
++ do { // merge hostname with path
++ if (!is_printable (*s))
++ *s = '?';
++ } while (*++s!=0x00);
++ *s++=':';
++ strcpy (s, p);
++ g_free (p);
++ }
++
+ do {
+ if (!is_printable (*s))
+ *s = '?';
+ } while (*++s);
+- fprintf (stdout, "\33]0;mc - %s\7", p);
++// fprintf (stdout, "\33]0;mc - %s\7", p);
++ fprintf (stdout, "\33]0;mc - %s\7", pvp);
+ fflush (stdout);
+- g_free (p);
++// g_free (p);
++ g_free (pvp);
+ }
+ }
+
Added: trunk/debian/patches/26_vietnamese_po.patch
===================================================================
--- trunk/debian/patches/26_vietnamese_po.patch (rev 0)
+++ trunk/debian/patches/26_vietnamese_po.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,4459 @@
+--- /dev/null 2005-03-28 19:01:57.000000000 +0200
++++ po/vi.po 2005-04-03 00:46:14.000000000 +0200
+@@ -0,0 +1,4456 @@
++# Vietnamese translation of Midnight Commander
++# Copyright (C) 1998-2003, 2005 Free Software Foundation, Inc.
++# First translator(s): Phan Vinh Thinh <teppi at vnlinux.org>, 2005.
++#
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: mc 4.6.1\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2003-12-24 12:16-0500\n"
++"PO-Revision-Date: 2005-03-29 01:20+0300\n"
++"Last-Translator: Phan Vinh Thinh <teppi at vnlinux.org>\n"
++"Language-Team: Vietnamese <gnomevi-list at lists.sourceforge.net>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: KBabel 1.9.1\n"
++
++#: edit/edit.c:146 edit/edit.c:277 edit/edit.c:285 edit/edit.c:333
++#: edit/edit.c:348 edit/edit.c:359 edit/edit.c:375 edit/edit.c:2665
++#: edit/editcmd.c:282 edit/editcmd.c:290 edit/editcmd.c:1719 src/wtools.c:120
++#: src/wtools.c:275
++msgid "Error"
++msgstr "Lá»i"
++
++#: edit/edit.c:149 edit/edit.c:336
++msgid " Cannot open file for reading: "
++msgstr " Không thá» má» táºp tin Äá» Äá»c: "
++
++#: edit/edit.c:279
++msgid " Error reading from pipe: "
++msgstr " Lá»i Äá»c từ ÄÆ°á»ng á»ng (pipe): "
++
++#: edit/edit.c:288
++msgid " Cannot open pipe for reading: "
++msgstr " Không thá» má» ÄÆ°á»ng á»ng Äá» Äá»c: "
++
++#: edit/edit.c:351
++msgid " Cannot get size/permissions info for file: "
++msgstr " Không lấy ÄÆ°á»£c thông tin kÃch thưá»c/quyá»n hạn cá»§a táºp tin: "
++
++#: edit/edit.c:360
++msgid " Not an ordinary file: "
++msgstr " Táºp tin không thông thưá»ng: "
++
++#: edit/edit.c:376
++msgid " File is too large: "
++msgstr " Táºp tin quá lá»n: "
++
++#: edit/edit.c:2665
++msgid "Macro recursion is too deep"
++msgstr "Äá» qui cá»§a macro quá sâu"
++
++#: edit/edit.h:262
++msgid "&Dismiss"
++msgstr "Äó&ng"
++
++#: edit/edit.h:264 edit/editcmd.c:382 edit/editcmd.c:1228 edit/editcmd.c:1310
++#: edit/editcmd.c:2569 edit/editmenu.c:37 edit/editoptions.c:71
++#: src/boxes.c:139 src/boxes.c:276 src/boxes.c:372 src/boxes.c:464
++#: src/boxes.c:590 src/boxes.c:713 src/boxes.c:835 src/boxes.c:945
++#: src/boxes.c:1013 src/filegui.c:763 src/find.c:184 src/layout.c:348
++#: src/option.c:113 src/subshell.c:323 src/view.c:2107 src/wtools.c:441
++msgid "&OK"
++msgstr "Äá»ng ý &="
++
++#: edit/editcmd.c:45 edit/editcmd.c:46
++msgid " Enter file name: "
++msgstr " Hãy nháºp tên táºp tin: "
++
++#: edit/editcmd.c:283
++msgid " Error writing to pipe: "
++msgstr " Lá»i ghi và o ÄÆ°á»ng á»ng: "
++
++#: edit/editcmd.c:293
++msgid " Cannot open pipe for writing: "
++msgstr " Không thá» má» ÄÆ°á»ng á»ng Äá» ghi: "
++
++#: edit/editcmd.c:375
++msgid "Quick save "
++msgstr "&Lưu nhanh"
++
++#: edit/editcmd.c:376
++msgid "Safe save "
++msgstr "Lưu &an toà n"
++
++#: edit/editcmd.c:377
++msgid "Do backups -->"
++msgstr "&Sao lưu -->"
++
++#: edit/editcmd.c:380 edit/editcmd.c:1169 edit/editcmd.c:1226
++#: edit/editcmd.c:1308 edit/editcmd.c:2567 edit/editoptions.c:68
++#: src/achown.c:68 src/boxes.c:140 src/boxes.c:277 src/boxes.c:370
++#: src/boxes.c:462 src/boxes.c:588 src/boxes.c:711 src/boxes.c:833
++#: src/boxes.c:1013 src/chmod.c:96 src/chown.c:72 src/cmd.c:856
++#: src/filegui.c:745 src/find.c:184 src/hotlist.c:121 src/hotlist.c:523
++#: src/hotlist.c:830 src/hotlist.c:926 src/layout.c:349 src/learn.c:58
++#: src/option.c:114 src/panelize.c:66 src/view.c:441 src/view.c:2104
++#: src/wtools.c:46 src/wtools.c:439
++msgid "&Cancel"
++msgstr "Äóng há»p thoại &-"
++
++#: edit/editcmd.c:386
++msgid "Extension:"
++msgstr "&Má» rá»ng:"
++
++#: edit/editcmd.c:392
++msgid " Edit Save Mode "
++msgstr " Chế Äá» ghi nhá» "
++
++#: edit/editcmd.c:465 edit/editcmd.c:524
++msgid " Save As "
++msgstr " Ghi như "
++
++#: edit/editcmd.c:482 edit/editcmd.c:804 edit/editcmd.c:841
++#: edit/editcmd.c:1000 edit/editcmd.c:1113 src/file.c:599 src/help.c:318
++#: src/main.c:424 src/screen.c:1415 src/selcodepage.c:105 src/subshell.c:319
++#: src/subshell.c:653 src/utilunix.c:401 src/utilunix.c:405 src/utilunix.c:427
++#: vfs/mcfs.c:138
++msgid "Warning"
++msgstr "Cảnh báo"
++
++#: edit/editcmd.c:483
++msgid " A file already exists with this name. "
++msgstr " Táºp tin có tên như váºy Äã tá»n tại. "
++
++#: edit/editcmd.c:484
++msgid "Overwrite"
++msgstr "Ghi chèn"
++
++#: edit/editcmd.c:484 edit/editcmd.c:569 edit/editcmd.c:768 edit/editcmd.c:804
++#: edit/editcmd.c:844 edit/editcmd.c:1003 edit/editcmd.c:1116
++msgid "Cancel"
++msgstr "Há»§y bá»"
++
++#: edit/editcmd.c:526 edit/editcmd.c:2293 src/view.c:440
++msgid " Cannot save file. "
++msgstr " Không thá» ghi nhá» táºp tin. "
++
++#: edit/editcmd.c:626 edit/editcmd.c:634 edit/editcmd.c:659 edit/editcmd.c:706
++msgid " Delete macro "
++msgstr " Xóa macro "
++
++#: edit/editcmd.c:628
++msgid " Cannot open temp file "
++msgstr " Không thá» má» táºp tin tạm thá»i "
++
++#: edit/editcmd.c:636 edit/editcmd.c:697 edit/editcmd.c:754
++msgid " Cannot open macro file "
++msgstr " Không thá» má» táºp tin chứa các macro "
++
++#: edit/editcmd.c:660
++msgid " Cannot overwrite macro file "
++msgstr " Không thá» ghi chèn lên táºp tin chứa các macro "
++
++#: edit/editcmd.c:676 edit/editcmd.c:697
++msgid " Save macro "
++msgstr " Ghi nhá» macro "
++
++#: edit/editcmd.c:678
++msgid " Press the macro's new hotkey: "
++msgstr " Hãy nhấn phÃm tắt má»i cá»§a macro: "
++
++#: edit/editcmd.c:707 edit/editkeys.c:195 edit/editkeys.c:225
++msgid " Press macro hotkey: "
++msgstr " Hãy nhấn phÃm tắt cá»§a macro: "
++
++#: edit/editcmd.c:753
++msgid " Load macro "
++msgstr " Nạp macro "
++
++#: edit/editcmd.c:766
++msgid " Confirm save file? : "
++msgstr " Phê chuẩn viá»c ghi nhá» táºp tin?: "
++
++#: edit/editcmd.c:768 src/view.c:439
++msgid " Save file "
++msgstr " Ghi nhá» táºp tin "
++
++#: edit/editcmd.c:768 edit/editwidget.c:288 src/view.c:2220
++msgid "Save"
++msgstr "Ghinhá»"
++
++#: edit/editcmd.c:804 edit/editcmd.c:842
++msgid ""
++" Current text was modified without a file save. \n"
++" Continue discards these changes. "
++msgstr ""
++" VÄn bản hiá»n thá»i Äã thay Äá»i và chưa ÄÆ°á»£c ghi nhá». \n"
++" Tiếp tục thao tác sẽ là m mất những thay Äá»i nà y. "
++
++#: edit/editcmd.c:804 edit/editcmd.c:843 edit/editcmd.c:1003
++#: edit/editcmd.c:1116
++msgid "Continue"
++msgstr "Tiếp tục"
++
++#: edit/editcmd.c:850
++msgid " Load "
++msgstr " Nạp "
++
++#: edit/editcmd.c:1002 edit/editcmd.c:1115
++msgid " Block is large, you may not be able to undo this action. "
++msgstr " Khá»i quá lá»n, có thá» bạn sẽ không há»§y bá» ÄÆ°á»£c bưá»c nà y. "
++
++#: edit/editcmd.c:1171
++msgid "O&ne"
++msgstr "&Má»t"
++
++#: edit/editcmd.c:1173 src/file.c:2210 src/filegui.c:521
++msgid "A&ll"
++msgstr "&Tất cả"
++
++#: edit/editcmd.c:1175 src/file.c:2147 src/filegui.c:210
++msgid "&Skip"
++msgstr "&Bá» qua"
++
++#: edit/editcmd.c:1177
++msgid "&Replace"
++msgstr "&Thay thế"
++
++#: edit/editcmd.c:1184 edit/editcmd.c:1191
++msgid " Replace with: "
++msgstr " Thay thế bằng: "
++
++#: edit/editcmd.c:1196
++msgid " Confirm replace "
++msgstr " Phê chuẩn thay thế "
++
++#: edit/editcmd.c:1230 edit/editcmd.c:1312
++msgid "scanf &Expression"
++msgstr "biá»u thức &Scanf"
++
++#: edit/editcmd.c:1232
++msgid "replace &All"
++msgstr "&Thay thế tất cả"
++
++#: edit/editcmd.c:1234
++msgid "pr&Ompt on replace"
++msgstr "&Há»i trưá»c khi thay"
++
++#: edit/editcmd.c:1236 edit/editcmd.c:1314 src/view.c:2110
++msgid "&Backwards"
++msgstr "&Tìm ngược lại"
++
++#: edit/editcmd.c:1238 edit/editcmd.c:1316
++msgid "&Regular expression"
++msgstr "&Biá»u thức chÃnh quy"
++
++#: edit/editcmd.c:1240 edit/editcmd.c:1318
++msgid "&Whole words only"
++msgstr "&Chá» những từ Äầy Äá»§"
++
++#: edit/editcmd.c:1242 edit/editcmd.c:1320 src/find.c:176
++msgid "case &Sensitive"
++msgstr "có tÃnh &Kiá»u chữ"
++
++#: edit/editcmd.c:1246
++msgid " Enter replacement argument order eg. 3,2,1,4 "
++msgstr " Hãy nháºp thứ tá»± cá»§a tham sá» thay thế, và dụ 3,2,1,4 "
++
++#: edit/editcmd.c:1250
++msgid " Enter replacement string:"
++msgstr " Nháºp chuá»i thay thế:"
++
++#: edit/editcmd.c:1254 edit/editcmd.c:1324 src/view.c:2115
++msgid " Enter search string:"
++msgstr " Nháºp chuá»i tìm kiếm:"
++
++#: edit/editcmd.c:1273 edit/editcmd.c:1925 edit/editcmd.c:1949
++msgid " Replace "
++msgstr " Thay thế "
++
++#: edit/editcmd.c:1338 edit/editcmd.c:2036 edit/editcmd.c:2038
++#: edit/editcmd.c:2066 edit/editwidget.c:293 src/view.c:1594 src/view.c:1673
++#: src/view.c:1826 src/view.c:1838 src/view.c:2060 src/view.c:2113
++#: src/view.c:2120 src/view.c:2236
++msgid "Search"
++msgstr "Tìm"
++
++#: edit/editcmd.c:1719
++msgid " Invalid regular expression, or scanf expression with to many conversions "
++msgstr " Biá»u thức chÃnh quy không Äúng, hoặc biá»u thức scanf có quá nhiá»u biến Äá»i "
++
++#: edit/editcmd.c:1927
++msgid " Error in replacement format string. "
++msgstr " Lá»i trong Äá»nh dạng chuá»i thay thế. "
++
++#: edit/editcmd.c:1957
++#, c-format
++msgid " %ld replacements made. "
++msgstr " %ld thay thế ÄÆ°á»£c thá»±c hiá»n. "
++
++#: edit/editcmd.c:1960 edit/editcmd.c:2038 edit/editcmd.c:2066 src/view.c:1673
++#: src/view.c:1838
++msgid " Search string not found "
++msgstr " Không tìm thấy chuá»i tìm kiếm "
++
++#: edit/editcmd.c:2036
++#, c-format
++msgid " %d finds made, %d bookmarks added "
++msgstr " tìm thấy %d , thêm %d thẻ Äánh dấu (bookmark) "
++
++#: edit/editcmd.c:2088 edit/editwidget.c:296 src/help.c:826 src/main.c:1208
++#: src/view.c:456 src/view.c:2215 src/view.c:2246
++msgid "Quit"
++msgstr "Thoát"
++
++#: edit/editcmd.c:2088 src/view.c:457
++msgid " File was modified, Save with exit? "
++msgstr "Táºp tin Äã thay Äá»i, ghi nhá» khi thoát? "
++
++#: edit/editcmd.c:2089 src/view.c:458
++msgid "Cancel quit"
++msgstr "Không thoát"
++
++#: edit/editcmd.c:2089 src/cmd.c:195 src/file.c:1837 src/file.c:2209
++#: src/filegui.c:526 src/hotlist.c:1049 src/main.c:471 src/screen.c:1952
++#: src/subshell.c:654 src/tree.c:708 src/view.c:458 vfs/mcfs.c:143
++msgid "&Yes"
++msgstr "&Có"
++
++#: edit/editcmd.c:2089 src/cmd.c:195 src/file.c:1837 src/file.c:2209
++#: src/filegui.c:525 src/hotlist.c:1049 src/main.c:471 src/screen.c:1953
++#: src/subshell.c:654 src/tree.c:708 src/view.c:458 vfs/mcfs.c:143
++msgid "&No"
++msgstr "&Không"
++
++#: edit/editcmd.c:2202
++msgid " Copy to clipboard "
++msgstr "Sao chép và o bá» Äá»m "
++
++#: edit/editcmd.c:2202 edit/editcmd.c:2215
++msgid " Unable to save to file. "
++msgstr "Không ghi nhá» ÄÆ°á»£c táºp tin. "
++
++#: edit/editcmd.c:2215
++msgid " Cut to clipboard "
++msgstr "Cắt và o bá» Äá»m "
++
++#: edit/editcmd.c:2243 src/view.c:2005
++msgid " Goto line "
++msgstr "Chuyá»n tá»i dòng "
++
++#: edit/editcmd.c:2243
++msgid " Enter line: "
++msgstr "Hãy nháºp sá» thứ tá»± dòng: "
++
++#: edit/editcmd.c:2278 edit/editcmd.c:2291
++msgid " Save Block "
++msgstr "Ghi nhá» khá»i "
++
++#: edit/editcmd.c:2307 edit/editcmd.c:2320
++msgid " Insert File "
++msgstr "Chèn táºp tin "
++
++#: edit/editcmd.c:2322
++msgid " Cannot insert file. "
++msgstr "Không chèn ÄÆ°á»£c táºp tin. "
++
++#: edit/editcmd.c:2339
++msgid " Sort block "
++msgstr "Sắp xếp khá»i "
++
++#: edit/editcmd.c:2339 edit/editcmd.c:2465
++msgid " You must first highlight a block of text. "
++msgstr "Äầu tiên bạn phải chá»n má»t khá»i vÄn bản. "
++
++#: edit/editcmd.c:2346
++msgid " Run Sort "
++msgstr "Thá»±c hiá»n sắp xếp "
++
++#: edit/editcmd.c:2347
++msgid " Enter sort options (see manpage) separated by whitespace: "
++msgstr "Nháºp tùy chá»n sắp xếp (xem trang man), phân cách nhau bá»i khoảng trắng: "
++
++#: edit/editcmd.c:2358 edit/editcmd.c:2363
++msgid " Sort "
++msgstr "Sắp xếp "
++
++#: edit/editcmd.c:2359
++msgid " Cannot execute sort command "
++msgstr "Không thá» thá»±c hiá»n câu lá»nh sort "
++
++#: edit/editcmd.c:2364
++msgid " Sort returned non-zero: "
++msgstr "Sắp xếp trả lại giá trỠkhác không: "
++
++#: edit/editcmd.c:2388
++msgid "Paste output of external command"
++msgstr "Dán kết quả cá»§a lá»nh ngoại trú"
++
++#: edit/editcmd.c:2389
++msgid "Enter shell command(s):"
++msgstr "Nháºp (các) câu lá»nh shell:"
++
++#: edit/editcmd.c:2398
++msgid "External command"
++msgstr "Lá»nh ngoại trú"
++
++#: edit/editcmd.c:2399
++msgid "Cannot execute command"
++msgstr "Không thá»±c hiá»n ÄÆ°á»£c câu lá»nh"
++
++#: edit/editcmd.c:2433
++msgid "Error creating script:"
++msgstr "Lá»i tạo script:"
++
++#: edit/editcmd.c:2441
++msgid "Error reading script:"
++msgstr "Lá»i Äá»c script:"
++
++#: edit/editcmd.c:2450
++msgid "Error closing script:"
++msgstr "Lá»i Äóng script:"
++
++#: edit/editcmd.c:2456
++msgid "Script created:"
++msgstr "Äã tạo script:"
++
++#: edit/editcmd.c:2463
++msgid "Process block"
++msgstr "Xá» lý khá»i"
++
++#: edit/editcmd.c:2562
++msgid " Mail "
++msgstr " Thư "
++
++#: edit/editcmd.c:2573
++msgid " Copies to"
++msgstr " Sao chép tá»i"
++
++#: edit/editcmd.c:2577
++msgid " Subject"
++msgstr " Tên thư"
++
++#: edit/editcmd.c:2581
++msgid " To"
++msgstr " Ngưá»i nháºn"
++
++#: edit/editcmd.c:2583
++msgid " mail -s <subject> -c <cc> <to>"
++msgstr " mail -s <Tên thư> -c <cc> <Ngưá»i nháºn>"
++
++#: edit/editkeys.c:180
++msgid " Emacs key: "
++msgstr "PhÃm Emacs: "
++
++#: edit/editkeys.c:194 edit/editkeys.c:225
++msgid " Execute Macro "
++msgstr "Thá»±c hiá»n Macro "
++
++#: edit/editkeys.c:217
++msgid " Insert Literal "
++msgstr " Chèn vÄn bản thuần túy "
++
++#: edit/editkeys.c:218
++msgid " Press any key: "
++msgstr " Nhấn phÃm bất kỳ: "
++
++#: edit/editlock.c:148
++#, c-format
++msgid ""
++"File \"%s\" is already being edited\n"
++"User: %s\n"
++"Process ID: %d"
++msgstr ""
++"Táºp tin \"%s\" Äang ÄÆ°á»£c soạn thảo\n"
++"Ngưòi dùng: %s\n"
++"ID tiến trình: %d"
++
++#: edit/editlock.c:153
++msgid "File locked"
++msgstr "Táºp tin bá» khóa"
++
++#: edit/editlock.c:153
++msgid "&Grab lock"
++msgstr "&Chiếm Äoạt khóa"
++
++#: edit/editlock.c:154
++msgid "&Ignore lock"
++msgstr "&Lá»i Äi khóa"
++
++#: edit/editmenu.c:55
++msgid " About "
++msgstr " VỠchương trình "
++
++#: edit/editmenu.c:56
++msgid ""
++"\n"
++" Cooledit v3.11.5\n"
++"\n"
++" Copyright (C) 1996 the Free Software Foundation\n"
++"\n"
++" A user friendly text editor written\n"
++" for the Midnight Commander.\n"
++msgstr ""
++"\n"
++" Cooledit v3.11.5\n"
++"\n"
++" Copyright (C) 1996 the Free Software Foundation\n"
++"\n"
++" Trình soạn thảo vá»i giao diá»n ngưá»i dùng thân thiá»n.\n"
++" ÄÆ°á»£c viết cho Midnight Commander.\n"
++
++#: edit/editmenu.c:283 edit/editmenu.c:301
++msgid "&Open file..."
++msgstr "&Má» táºp tin..."
++
++#: edit/editmenu.c:284
++msgid "&New C-n"
++msgstr "&Táºp tin má»i C-n"
++
++#: edit/editmenu.c:286 edit/editmenu.c:304
++msgid "&Save F2"
++msgstr "&Ghi nhá» F2"
++
++#: edit/editmenu.c:287 edit/editmenu.c:305
++msgid "Save &as... F12"
++msgstr "Ghi &như... F12"
++
++#: edit/editmenu.c:289 edit/editmenu.c:307
++msgid "&Insert file... F15"
++msgstr "&Chèn táºp tin... F15"
++
++#: edit/editmenu.c:290
++msgid "Copy to &file... C-f"
++msgstr "Ché&p và o táºp tin... C-f"
++
++#: edit/editmenu.c:292 edit/editmenu.c:310
++msgid "&User menu... F11"
++msgstr "Trình ÄÆ¡n ngưá»i &dùng... F11"
++
++#: edit/editmenu.c:294 edit/editmenu.c:312
++msgid "A&bout... "
++msgstr "&VỠchương trình... "
++
++#: edit/editmenu.c:296 edit/editmenu.c:314
++msgid "&Quit F10"
++msgstr "T&hoát F10"
++
++#: edit/editmenu.c:302
++msgid "&New C-x k"
++msgstr "&Táºp tin má»i C-x k"
++
++#: edit/editmenu.c:308
++msgid "Copy to &file... "
++msgstr "S&ao chép và o táºp tin... "
++
++#: edit/editmenu.c:319
++msgid "&Toggle Mark F3"
++msgstr "&Báºt/tắt bôi Äen F3"
++
++#: edit/editmenu.c:320
++msgid "&Mark Columns S-F3"
++msgstr "Bôi Äen &cá»t S-F3"
++
++#: edit/editmenu.c:322
++msgid "Toggle &ins/overw Ins"
++msgstr "Chế Äá» chèn/&thay thế Ins"
++
++#: edit/editmenu.c:324
++msgid "&Copy F5"
++msgstr "&Sao chép F5"
++
++#: edit/editmenu.c:325
++msgid "&Move F6"
++msgstr "&Di chuyá»n F6"
++
++#: edit/editmenu.c:326
++msgid "&Delete F8"
++msgstr "&Xóa F8"
++
++#: edit/editmenu.c:328
++msgid "&Undo C-u"
++msgstr "&Há»§y bưá»c C-u"
++
++#: edit/editmenu.c:330
++msgid "&Beginning C-PgUp"
++msgstr "Äầ&u táºp tin C-PgUp"
++
++#: edit/editmenu.c:331
++msgid "&End C-PgDn"
++msgstr "Cuá»&i táºp tin C-PgDn"
++
++#: edit/editmenu.c:338
++msgid "&Search... F7"
++msgstr "Tìm &kiếm... F7"
++
++#: edit/editmenu.c:339
++msgid "Search &again F17"
++msgstr "&Tìm kiếm lại lần nữa F17"
++
++#: edit/editmenu.c:340
++msgid "&Replace... F4"
++msgstr "Th&ay thế... F4"
++
++#: edit/editmenu.c:347 edit/editmenu.c:371
++msgid "&Go to line... M-l"
++msgstr "&Chuyá»n tá»i dòng... M-l"
++
++#: edit/editmenu.c:348 edit/editmenu.c:372
++msgid "Go to matching &bracket M-b"
++msgstr "Chuyá»n &tá»i dấu ngoặc tạo cặp M-b"
++
++#: edit/editmenu.c:350 edit/editmenu.c:374
++msgid "Insert &literal... C-q"
++msgstr "Chèn &vÄn bản thuần túy... C-q"
++
++#: edit/editmenu.c:352 edit/editmenu.c:376
++msgid "&Refresh screen C-l"
++msgstr "&Là m má»i mà n hình C-l"
++
++#: edit/editmenu.c:354 edit/editmenu.c:378
++msgid "&Start record macro C-r"
++msgstr "&Bắt Äầu ghi macro C-r"
++
++#: edit/editmenu.c:355 edit/editmenu.c:379
++msgid "&Finish record macro... C-r"
++msgstr "&Kết thúc ghi macro... C-r"
++
++#: edit/editmenu.c:356
++msgid "&Execute macro... C-a, KEY"
++msgstr "Chạy ¯o... C-a, KEY"
++
++#: edit/editmenu.c:357 edit/editmenu.c:381
++msgid "Delete macr&o... "
++msgstr "&Xóa macro... "
++
++#: edit/editmenu.c:359 edit/editmenu.c:383
++msgid "Insert &date/time "
++msgstr "Chèn &ngà y/giỠ"
++
++#: edit/editmenu.c:361 edit/editmenu.c:385
++msgid "Format p&aragraph M-p"
++msgstr "Äá»nh &dạng Äoạn vÄn M-p"
++
++#: edit/editmenu.c:362
++msgid "'ispell' s&pell check C-p"
++msgstr "Kiá»m tra chÃnh tả '&ispell' C-p"
++
++#: edit/editmenu.c:363 edit/editmenu.c:387
++msgid "Sor&t... M-t"
++msgstr "&Sắp xếp... M-t"
++
++#: edit/editmenu.c:364 edit/editmenu.c:388
++msgid "Paste o&utput of... M-u"
++msgstr "Dán &kết quả cá»§a lá»nh... M-u"
++
++#: edit/editmenu.c:365 edit/editmenu.c:389
++msgid "E&xternal Formatter F19"
++msgstr "T&rình Äá»nh dạng ngoà i F19"
++
++#: edit/editmenu.c:366 edit/editmenu.c:390
++msgid "&Mail... "
++msgstr "T&hư Äiá»n tá»... "
++
++#: edit/editmenu.c:380
++msgid "&Execute macro... C-x e, KEY"
++msgstr "Thá»±c hiá»n ¯o... C-x e, KEY"
++
++#: edit/editmenu.c:386
++msgid "'ispell' s&pell check M-$"
++msgstr "Kiá»m tra chÃnh tả '&ispell' M-$"
++
++#: edit/editmenu.c:395
++msgid "&General... "
++msgstr "Ch&ung... "
++
++#: edit/editmenu.c:396
++msgid "&Save mode..."
++msgstr "&Chế Äá» ghi nhá»..."
++
++#: edit/editmenu.c:397 src/main.c:909
++msgid "learn &Keys..."
++msgstr "&Tạo phÃm tắt... "
++
++#: edit/editmenu.c:408 edit/editmenu.c:422 src/chmod.c:146 src/chown.c:119
++msgid " File "
++msgstr " Táºp tin "
++
++#: edit/editmenu.c:410 edit/editmenu.c:424
++msgid " Edit "
++msgstr " Soạn thảo "
++
++#: edit/editmenu.c:412 edit/editmenu.c:426
++msgid " Sear/Repl "
++msgstr " Tìm kiếm/Thay thế "
++
++#: edit/editmenu.c:414 edit/editmenu.c:428
++msgid " Command "
++msgstr " Câu lá»nh "
++
++#: edit/editmenu.c:416 edit/editmenu.c:430
++msgid " Options "
++msgstr " Tùy chá»n "
++
++#: edit/editoptions.c:36
++msgid "Intuitive"
++msgstr "T&rực giác"
++
++#: edit/editoptions.c:36
++msgid "Emacs"
++msgstr "&Emacs"
++
++#: edit/editoptions.c:39
++msgid "None"
++msgstr "&Không"
++
++#: edit/editoptions.c:39
++msgid "Dynamic paragraphing"
++msgstr "Äá»nh &dạng Äoạn vÄn Äá»ng"
++
++#: edit/editoptions.c:39
++msgid "Type writer wrap"
++msgstr "Tá»± Äá»&ng chuyá»n dòng"
++
++#: edit/editoptions.c:75
++msgid "Word wrap line length: "
++msgstr "Vá» trà chuyá»n dòng: "
++
++#: edit/editoptions.c:81
++msgid "Tab spacing: "
++msgstr "Äá» rá»ng tab: "
++
++#: edit/editoptions.c:88
++msgid "Synta&x highlighting"
++msgstr "&Chiếu sáng cú pháp"
++
++#: edit/editoptions.c:91
++msgid "Save file &position"
++msgstr "&Ghi nhá» vá» trà trong táºp tin"
++
++#: edit/editoptions.c:94
++msgid "Confir&m before saving"
++msgstr "&Há»i lại trưá»c khi ghi nhá»"
++
++#: edit/editoptions.c:97
++msgid "Fill tabs with &spaces"
++msgstr "&Là m Äầy tab bằng khoảng trắng"
++
++#: edit/editoptions.c:100
++msgid "&Return does autoindent"
++msgstr "&Enter tá»± Äá»ng thụt dòng"
++
++#: edit/editoptions.c:103
++msgid "&Backspace through tabs"
++msgstr "&Backpace xóa hết tab"
++
++#: edit/editoptions.c:106
++msgid "&Fake half tabs"
++msgstr "&Tạo má»t ná»a tab"
++
++#: edit/editoptions.c:112
++msgid "Wrap mode"
++msgstr "Chế Äá» chuyá»n dòng"
++
++#: edit/editoptions.c:119
++msgid "Key emulation"
++msgstr "Giả tạo phÃm"
++
++#: edit/editoptions.c:124
++msgid " Editor options "
++msgstr " Cấu hình trình soạn thảo "
++
++#: edit/editwidget.c:287 src/help.c:793 src/help.c:814 src/main.c:1205
++#: src/screen.c:2184 src/tree.c:970 src/view.c:2213
++msgid "Help"
++msgstr "GiúpÄỡ"
++
++#: edit/editwidget.c:289
++msgid "Mark"
++msgstr "BôiÄen"
++
++#: edit/editwidget.c:290
++msgid "Replac"
++msgstr "Thayth"
++
++#: edit/editwidget.c:291 src/file.c:803 src/screen.c:2188 src/tree.c:975
++msgid "Copy"
++msgstr "Cópi "
++
++#: edit/editwidget.c:292
++msgid "Move"
++msgstr "Chuyá»n"
++
++#: edit/editwidget.c:294 src/screen.c:2191
++msgid "Delete"
++msgstr "Xóa "
++
++#: edit/editwidget.c:295 src/main.c:1207
++msgid "PullDn"
++msgstr "Gá»iTÄ "
++
++#: edit/syntax.c:1100 edit/syntax.c:1107
++msgid " Load syntax file "
++msgstr " Nạp táºp tin cú pháp "
++
++#: edit/syntax.c:1101 src/help.c:764 src/user.c:711
++#, c-format
++msgid ""
++" Cannot open file %s \n"
++" %s "
++msgstr ""
++" Không má» ÄÆ°á»£c táºp tin %s \n"
++" %s "
++
++#: edit/syntax.c:1108
++#, c-format
++msgid " Error in file %s on line %d "
++msgstr " Lá»i trong táºp tin %s trên dòng %d "
++
++#: src/achown.c:69 src/chmod.c:97 src/chown.c:73
++msgid "&Set"
++msgstr "Äá»&ng ý"
++
++#: src/achown.c:70
++msgid "S&kip"
++msgstr "&Bá» qua"
++
++#: src/achown.c:71 src/chmod.c:101 src/chown.c:76
++msgid "Set &all"
++msgstr "Äặt &tất cả"
++
++#: src/achown.c:250 src/achown.c:338 src/achown.c:345
++msgid "owner"
++msgstr "sỠhữu"
++
++#: src/achown.c:250 src/achown.c:340 src/achown.c:347
++msgid "group"
++msgstr "nhóm"
++
++#: src/achown.c:342
++msgid "other"
++msgstr "khác"
++
++#: src/achown.c:350
++msgid "On"
++msgstr "Trên"
++
++#: src/achown.c:352
++msgid "Flag"
++msgstr "Cá»"
++
++#: src/achown.c:354
++msgid "Mode"
++msgstr "ChếÄá»"
++
++#: src/achown.c:358
++#, c-format
++msgid "%6d of %d"
++msgstr "%6d cá»§a %d"
++
++#: src/achown.c:549
++msgid " Chown advanced command "
++msgstr " Câu lá»nh chown má» rá»ng"
++
++#: src/achown.c:607 src/achown.c:623 src/achown.c:669 src/chmod.c:241
++#: src/chmod.c:311
++#, c-format
++msgid ""
++" Cannot chmod \"%s\" \n"
++" %s "
++msgstr ""
++" Không chmod ÄÆ°á»£c \"%s\" \n"
++" %s "
++
++#: src/achown.c:612 src/achown.c:627 src/achown.c:673 src/chown.c:214
++#: src/chown.c:322
++#, c-format
++msgid ""
++" Cannot chown \"%s\" \n"
++" %s "
++msgstr ""
++" Không thay thế ÄÆ°á»£c chá»§ sá» hữu \"%s\" \n"
++" %s "
++
++#: src/background.c:205 src/file.c:2145
++msgid " Background process error "
++msgstr " Lá»i cá»§a tiến trình ná»n sau "
++
++#: src/background.c:211
++msgid " Unknown error in child "
++msgstr " Lá»i không rõ trong tiến trình con "
++
++#: src/background.c:219
++msgid " Child died unexpectedly "
++msgstr " Tiến trình con bất Äắc kỳ tá» "
++
++#: src/background.c:226
++msgid " Background protocol error "
++msgstr " Lá»i giao thức ná»n sau "
++
++#: src/background.c:227
++msgid ""
++" Background process sent us a request for more arguments \n"
++" than we can handle. \n"
++msgstr ""
++" Tiến trình ná»n sau yêu cầu nhiá»u tham sá» hÆ¡n, \n"
++" sá» chúng ta có thá» Äiá»u khiá»n. \n"
++
++#: src/boxes.c:75
++msgid "&Full file list"
++msgstr "&Danh sách Äầy Äá»§"
++
++#: src/boxes.c:76
++msgid "&Brief file list"
++msgstr "&Thu gá»n"
++
++#: src/boxes.c:77
++msgid "&Long file list"
++msgstr "&Má» rá»ng"
++
++#: src/boxes.c:78
++msgid "&User defined:"
++msgstr "&Ngưá»i dùng tá»± xác Äá»nh:"
++
++#: src/boxes.c:136
++msgid "Listing mode"
++msgstr "Dạng danh sách"
++
++#: src/boxes.c:138
++msgid "user &Mini status"
++msgstr "t&Rạng thái mini"
++
++#: src/boxes.c:278
++msgid "&Reverse"
++msgstr "&Ngược lại"
++
++#: src/boxes.c:279
++msgid "case sensi&tive"
++msgstr "tÃnh Äến kiá»&U chữ"
++
++#: src/boxes.c:280
++msgid "Sort order"
++msgstr "Thứ tự sắp xếp"
++
++#: src/boxes.c:375
++msgid " confirm &Exit "
++msgstr " trưá»c khi th&Oát "
++
++#: src/boxes.c:377
++msgid " confirm e&Xecute "
++msgstr " trưá»c &Khi thá»±c hiá»n "
++
++#: src/boxes.c:379
++msgid " confirm o&Verwrite "
++msgstr " &Trưá»c khi ghi chèn "
++
++#: src/boxes.c:381
++msgid " confirm &Delete "
++msgstr " há»i lại trưá»c khi &Xóa "
++
++#: src/boxes.c:387 src/cmd.c:194
++msgid " Confirmation "
++msgstr " Há»i xác nháºn "
++
++#: src/boxes.c:459
++msgid "Full 8 bits output"
++msgstr "Äầu ra 8 bit Äầy Äá»§"
++
++#: src/boxes.c:459
++msgid "ISO 8859-1"
++msgstr "ISO.8859-1"
++
++#: src/boxes.c:459
++msgid "7 bits"
++msgstr "7 bit"
++
++#: src/boxes.c:466 src/boxes.c:594
++msgid "F&ull 8 bits input"
++msgstr "Äầ&u và o 8 bit Äầy Äá»§"
++
++#: src/boxes.c:474 src/boxes.c:575
++msgid " Display bits "
++msgstr " Ký tá»± hiá»n thá» "
++
++#: src/boxes.c:556 src/boxes.c:581 src/selcodepage.c:70
++msgid "Other 8 bit"
++msgstr "8 bit khác"
++
++#: src/boxes.c:578
++msgid "Input / display codepage:"
++msgstr "Bảng mã Äầu và o / hiá»n thá»:"
++
++#: src/boxes.c:597
++msgid "&Select"
++msgstr "&Lá»±a chá»n"
++
++#: src/boxes.c:716
++msgid "Use &passive mode"
++msgstr "Sá» &dụng chế Äá» thụ Äá»ng"
++
++#: src/boxes.c:718
++msgid "&Use ~/.netrc"
++msgstr "&SỠdụng ~/.netrc"
++
++#: src/boxes.c:722
++msgid "&Always use ftp proxy"
++msgstr "&Luôn luôn sỠdụng ftp proxy"
++
++#: src/boxes.c:724
++msgid "sec"
++msgstr "giây"
++
++#: src/boxes.c:728
++msgid "ftpfs directory cache timeout:"
++msgstr "Thá»i gian chá» cá»§a cache thư mục ftp:"
++
++#: src/boxes.c:732
++msgid "ftp anonymous password:"
++msgstr "Máºt khẩu ftp nặc danh:"
++
++#: src/boxes.c:739
++msgid "Timeout for freeing VFSs:"
++msgstr "Thá»i gian chá» giải phóng VFS:"
++
++#: src/boxes.c:745
++msgid " Virtual File System Setting "
++msgstr " Thiết láºp há» thá»ng táºp tin ảo "
++
++#: src/boxes.c:799
++msgid "Quick cd"
++msgstr "cd nhanh"
++
++#: src/boxes.c:802
++msgid "cd"
++msgstr "cd"
++
++#: src/boxes.c:837
++msgid "Symbolic link filename:"
++msgstr "Tên cá»§a liên kết má»m:"
++
++#: src/boxes.c:841
++msgid "Existing filename (filename symlink will point to):"
++msgstr "Tên táºp tin Äã có (liên kết má»m sẽ chá» Äến):"
++
++#: src/boxes.c:848
++msgid "Symbolic link"
++msgstr "Liên kết má»m"
++
++#: src/boxes.c:881
++msgid "Running "
++msgstr "Äang chạy "
++
++#: src/boxes.c:882 src/find.c:721
++msgid "Stopped"
++msgstr "Äã dừng"
++
++#: src/boxes.c:942
++msgid "&Stop"
++msgstr "&Dừng"
++
++#: src/boxes.c:943
++msgid "&Resume"
++msgstr "&Phục há»i"
++
++#: src/boxes.c:944
++msgid "&Kill"
++msgstr "&Diá»t"
++
++#: src/boxes.c:981
++msgid "Background Jobs"
++msgstr " Công viá»c ná»n sau"
++
++#: src/boxes.c:1012
++msgid "Domain:"
++msgstr "Miá»n (domain):"
++
++#: src/boxes.c:1012
++msgid "Username:"
++msgstr "Tên ngưá»i dùng:"
++
++#: src/boxes.c:1012
++msgid "Password:"
++msgstr "Máºt khẩu:"
++
++#: src/boxes.c:1063
++#, c-format
++msgid "Password for \\\\%s\\%s"
++msgstr "Máºt khẩu cho \\\\%s\\%s"
++
++#: src/charsets.c:51 vfs/extfs.c:1260 vfs/sfs.c:318
++#, c-format
++msgid "Warning: file %s not found\n"
++msgstr "Cảnh báo: không tìm thấy táºp tin %s\n"
++
++#: src/charsets.c:198 src/charsets.c:212
++#, c-format
++msgid "Cannot translate from %s to %s"
++msgstr "Không chuyá»n ÄÆ°á»£c bảng mã từ %s thà nh %s"
++
++#: src/chmod.c:77
++msgid "execute/search by others"
++msgstr "ngưá»i khác có quyá»n chạy/tìm"
++
++#: src/chmod.c:78
++msgid "write by others"
++msgstr "ngưá»i khác có quyá»n ghi nhá»"
++
++#: src/chmod.c:79
++msgid "read by others"
++msgstr "ngưá»i khác có quyá»n Äá»c"
++
++#: src/chmod.c:80
++msgid "execute/search by group"
++msgstr "nhóm có quyá»n chạy/tìm kiếm"
++
++#: src/chmod.c:81
++msgid "write by group"
++msgstr "nhóm có quyá»n ghi nhá»"
++
++#: src/chmod.c:82
++msgid "read by group"
++msgstr "nhóm có quyá»n Äá»c"
++
++#: src/chmod.c:83
++msgid "execute/search by owner"
++msgstr "chá»§ sá» hữu có quyá»n chạy/tìm"
++
++#: src/chmod.c:84
++msgid "write by owner"
++msgstr "chá»§ sá» hữu có quyá»n ghi nhá»"
++
++#: src/chmod.c:85
++msgid "read by owner"
++msgstr "chá»§ sá» hữu có quyá»n Äá»c"
++
++#: src/chmod.c:86
++msgid "sticky bit"
++msgstr "bit dÃnh (sticky)"
++
++#: src/chmod.c:87
++msgid "set group ID on execution"
++msgstr "Äặt ID nhóm khi chạy"
++
++#: src/chmod.c:88
++msgid "set user ID on execution"
++msgstr "Äặt ID ngưá»i dùng khi chạy"
++
++#: src/chmod.c:98
++msgid "C&lear marked"
++msgstr "&Xóa Äánh dấu"
++
++#: src/chmod.c:99
++msgid "S&et marked"
++msgstr "Äá&nh dấu"
++
++#: src/chmod.c:100
++msgid "&Marked all"
++msgstr "Äánh &dấu tất cả"
++
++#: src/chmod.c:124 src/screen.c:405
++msgid "Name"
++msgstr "Tên"
++
++#: src/chmod.c:126
++msgid "Permissions (Octal)"
++msgstr "Quyá»n hạn (Há» tám)"
++
++#: src/chmod.c:128
++msgid "Owner name"
++msgstr "Tên chủ sỠhữu"
++
++#: src/chmod.c:130
++msgid "Group name"
++msgstr "Tên nhóm"
++
++#: src/chmod.c:133
++msgid "Use SPACE to change"
++msgstr "Dùng PHÃM TRẮNG Äá» thay Äá»i"
++
++#: src/chmod.c:135
++msgid "an option, ARROW KEYS"
++msgstr "tùy chá»n, PHÃM MŨI TÃN"
++
++#: src/chmod.c:137
++msgid "to move between options"
++msgstr "Äá» di chuyá»n giữa các tùy chá»n"
++
++#: src/chmod.c:139
++msgid "and T or INS to mark"
++msgstr "và T hoặc INS Äá» Äánh dấu"
++
++#: src/chmod.c:144 src/chown.c:111
++msgid " Permission "
++msgstr " Quyá»n truy cáºp "
++
++#: src/chmod.c:196
++msgid "Chmod command"
++msgstr " Câu lá»nh chmod "
++
++#: src/chown.c:74
++msgid "Set &users"
++msgstr "Äặt &ngưá»i dùng"
++
++#: src/chown.c:75
++msgid "Set &groups"
++msgstr "Äặt &nhóm"
++
++#: src/chown.c:103
++msgid " Name "
++msgstr " Tên "
++
++#: src/chown.c:105
++msgid " Owner name "
++msgstr " Tên chủ sỠhữu "
++
++#: src/chown.c:107 src/chown.c:117
++msgid " Group name "
++msgstr " Tên nhóm "
++
++#: src/chown.c:109
++msgid " Size "
++msgstr " KÃch thưá»c "
++
++#: src/chown.c:115
++msgid " User name "
++msgstr " Tên ngưá»i dùng "
++
++#: src/chown.c:158
++msgid " Chown command "
++msgstr " Câu lá»nh chown "
++
++#: src/chown.c:178
++msgid "<Unknown user>"
++msgstr "<không rõ ngưá»i dùng>"
++
++#: src/chown.c:179
++msgid "<Unknown group>"
++msgstr "<không rõ nhóm>"
++
++#: src/cmd.c:194
++msgid "Files tagged, want to cd?"
++msgstr "Äã Äánh dấu các táºp tin, chuyá»n thư mục?"
++
++#: src/cmd.c:200 src/cmd.c:670 src/cmd.c:727 src/main.c:681 src/screen.c:1933
++msgid "Cannot change directory"
++msgstr "Không thay Äá»i ÄÆ°á»£c thư mục"
++
++#: src/cmd.c:233
++msgid " View file "
++msgstr " Xem táºp tin "
++
++#: src/cmd.c:233
++msgid " Filename:"
++msgstr " Tên táºp tin:"
++
++#: src/cmd.c:255
++msgid " Filtered view "
++msgstr " Lá»c rá»i xem "
++
++#: src/cmd.c:256
++msgid " Filter command and arguments:"
++msgstr " Lá»nh lá»c và tham sá»:"
++
++#: src/cmd.c:355
++msgid "Create a new Directory"
++msgstr "Tạo thư mục má»i"
++
++#: src/cmd.c:356
++msgid " Enter directory name:"
++msgstr " Hãy nháºp tên thư mục:"
++
++#: src/cmd.c:428
++msgid " Filter "
++msgstr " Äầu lá»c "
++
++#: src/cmd.c:429
++msgid " Set expression for filtering filenames"
++msgstr " Äặt biá»u thức Äá» lá»c tên táºp tin (nhấn F1 Äá» xem trợ giúp)"
++
++#: src/cmd.c:482
++msgid " Select "
++msgstr " Chá»n "
++
++#: src/cmd.c:510 src/cmd.c:555 src/find.c:147
++msgid " Malformed regular expression "
++msgstr " Biá»u thức chÃnh quy không Äúng "
++
++#: src/cmd.c:528
++msgid " Unselect "
++msgstr " Bá» chá»n "
++
++#: src/cmd.c:596
++msgid "Extension file edit"
++msgstr "Soạn thảo phần má» rá»ng táºp tin"
++
++#: src/cmd.c:597
++msgid " Which extension file you want to edit? "
++msgstr " Soạn thảo phần má» rá»ng táºp tin nà o? "
++
++#: src/cmd.c:598 src/cmd.c:701
++msgid "&User"
++msgstr "&Ngưá»i dùng"
++
++#: src/cmd.c:598 src/cmd.c:627 src/cmd.c:701
++msgid "&System Wide"
++msgstr "&Há» thá»ng"
++
++#: src/cmd.c:624
++msgid " Menu edit "
++msgstr " Soạn thảo táºp tin trình ÄÆ¡n "
++
++#: src/cmd.c:625
++msgid " Which menu file do you want to edit? "
++msgstr " Soạn thảo táºp tin trình ÄÆ¡n nà o? "
++
++#: src/cmd.c:627
++msgid "&Local"
++msgstr "&Ná»i bá» máy"
++
++#: src/cmd.c:627
++msgid "&Home"
++msgstr "&Cá nhân"
++
++#: src/cmd.c:699
++msgid "Syntax file edit"
++msgstr "Soạn thảo táºp tin cú pháp"
++
++#: src/cmd.c:700
++msgid " Which syntax file you want to edit? "
++msgstr " Soạn thảo táºp tin cú pháp nà o? "
++
++#: src/cmd.c:854
++msgid " Compare directories "
++msgstr " So sánh thư mục "
++
++#: src/cmd.c:855
++msgid " Select compare method: "
++msgstr " Chá»n phương pháp so sánh: "
++
++#: src/cmd.c:855
++msgid "&Quick"
++msgstr "&Nhanh"
++
++#: src/cmd.c:856
++msgid "&Size only"
++msgstr "&Chá» theo kÃch thưá»c"
++
++#: src/cmd.c:856
++msgid "&Thorough"
++msgstr "&Theo từng byte"
++
++#: src/cmd.c:869
++msgid " Both panels should be in the listing mode to use this command "
++msgstr "Äá» thá»±c hiá»n câu lá»nh nà y cả hai bảng phải á» trong chế Äá» danh sách "
++
++#: src/cmd.c:885
++msgid " The command history is empty "
++msgstr " Lá»ch sá» dòng lá»nh rá»ng "
++
++#: src/cmd.c:889
++msgid " Command history "
++msgstr " Lá»ch sá» dòng lá»nh "
++
++#: src/cmd.c:925
++msgid ""
++" Not an xterm or Linux console; \n"
++" the panels cannot be toggled. "
++msgstr ""
++" Äây không phải là xterm hay kênh giao tác Linux; \n"
++" bảng sẽ không thỠbỠtắt. "
++
++#: src/cmd.c:939
++#, c-format
++msgid "Link %s to:"
++msgstr "Tạo liên kết tá»i %s:"
++
++#: src/cmd.c:940
++msgid " Link "
++msgstr " Liên kết "
++
++#: src/cmd.c:950
++#, c-format
++msgid " link: %s "
++msgstr " liên kết: %s "
++
++#: src/cmd.c:978
++#, c-format
++msgid " symlink: %s "
++msgstr " liên kết má»m: %s "
++
++#: src/cmd.c:1012
++#, c-format
++msgid " Symlink `%s' points to: "
++msgstr " Liên kết má»m %s chá» tá»i: "
++
++#: src/cmd.c:1017
++msgid " Edit symlink "
++msgstr " Sá»a liên kết má»m "
++
++#: src/cmd.c:1022
++#, c-format
++msgid " edit symlink, unable to remove %s: %s "
++msgstr " sá»a liên kết má»m, không thá» xóa %s: %s "
++
++#: src/cmd.c:1026
++#, c-format
++msgid " edit symlink: %s "
++msgstr " sá»a liên kết má»m: %s "
++
++#: src/cmd.c:1037
++#, c-format
++msgid "`%s' is not a symbolic link"
++msgstr "`%s' không phải là má»t liên kết má»m"
++
++#: src/cmd.c:1155
++#, c-format
++msgid " Cannot chdir to %s "
++msgstr " Không thỠchdir và o %s "
++
++#: src/cmd.c:1164
++msgid " Enter machine name (F1 for details): "
++msgstr " Hãy nháºp tên máy (nhấn F1 Äá» biết chi tiết): "
++
++#: src/cmd.c:1169 src/widget.c:1051
++msgid " Link to a remote machine "
++msgstr " Kiết ná»i tá»i máy á» xa "
++
++#: src/cmd.c:1176 src/widget.c:1052
++msgid " FTP to machine "
++msgstr " FTP tá»i máy á» xa "
++
++#: src/cmd.c:1182
++msgid " Shell link to machine "
++msgstr " Kết ná»i shell tá»i máy á» xa"
++
++#: src/cmd.c:1189 src/widget.c:1053
++msgid " SMB link to machine "
++msgstr " Kết ná»i SMB tá»i máy á» xa"
++
++#: src/cmd.c:1198
++msgid " Undelete files on an ext2 file system "
++msgstr " Phục há»i táºp tin trên há» thá»ng táºp tin ext2 sau khi xóa "
++
++#: src/cmd.c:1199
++msgid ""
++" Enter device (without /dev/) to undelete\n"
++" files on: (F1 for details)"
++msgstr ""
++" Nháºp tên thiết bá» (không có /dev/), Äá»\n"
++" phục há»i táºp tin cá»§a nó: (nhấn F1 Äá» biết chi tiết)"
++
++#: src/cmd.c:1249
++msgid " Setup saved to ~/"
++msgstr " Tham sá» ghi nhá» trong ~/"
++
++#: src/cmd.c:1251
++msgid " Setup "
++msgstr " Cấu hình "
++
++#: src/command.c:177 src/screen.c:2174 src/tree.c:823
++#, c-format
++msgid ""
++" Cannot chdir to \"%s\" \n"
++" %s "
++msgstr ""
++" Không chdir ÄÆ°á»£c tá»i \"%s\" \n"
++" %s "
++
++#: src/command.c:210 src/user.c:694
++msgid " Cannot execute commands on non-local filesystems"
++msgstr " Chá» có thá» thá»±c hiá»n câu lá»nh trên há» thá»ng táºp tin ná»i bá»"
++
++#: src/command.c:219 src/execute.c:183
++msgid " The shell is already running a command "
++msgstr " shell Äang chạy má»t câu lá»nh"
++
++#: src/dir.c:49
++msgid "&Unsorted"
++msgstr "không &Sắp xếp"
++
++#: src/dir.c:50
++msgid "&Name"
++msgstr "th&Eo tên"
++
++#: src/dir.c:51
++msgid "&Extension"
++msgstr "&Phần má» rá»ng"
++
++#: src/dir.c:52
++msgid "&Modify time"
++msgstr "&Thá»i gian sá»a Äá»i"
++
++#: src/dir.c:53
++msgid "&Access time"
++msgstr "thá»i &Gian truy cáºp"
++
++#: src/dir.c:54
++msgid "&Change time"
++msgstr "thá»i gi&An thay Äá»i"
++
++#: src/dir.c:55
++msgid "&Size"
++msgstr "&KÃch thưá»c"
++
++#: src/dir.c:56
++msgid "&Inode"
++msgstr "&ChỠmục inode"
++
++#: src/dir.c:59
++msgid "&Type"
++msgstr "&Loại"
++
++#: src/dir.c:60
++msgid "&Links"
++msgstr "&Liên kết"
++
++#: src/dir.c:61
++msgid "N&GID"
++msgstr "N&GID"
++
++#: src/dir.c:62
++msgid "N&UID"
++msgstr "N&UID"
++
++#: src/dir.c:63
++msgid "&Owner"
++msgstr "&Chủ sỠhữu"
++
++#: src/dir.c:64
++msgid "&Group"
++msgstr "&Nhóm"
++
++#: src/dir.c:475 src/dir.c:577
++msgid "Cannot read directory contents"
++msgstr "Không Äá»c ÄÆ°á»£c ná»i dung thư mục"
++
++#: src/execute.c:133 src/utilunix.c:380
++msgid "Press any key to continue..."
++msgstr "Äá» tiếp tục nhấn phÃm bất kỳ..."
++
++#: src/execute.c:235
++msgid "Type `exit' to return to the Midnight Commander"
++msgstr "Hãy gõ \"exit\" Äá» quay trá» lại Midnight Commander"
++
++#: src/execute.c:343
++#, c-format
++msgid " Cannot fetch a local copy of %s "
++msgstr " Không thá» lấy ÄÆ°á»£c bản sao ná»i bá» cá»§a %s "
++
++#: src/ext.c:106 src/user.c:566
++#, c-format
++msgid ""
++" Cannot create temporary command file \n"
++" %s "
++msgstr ""
++" Không tạo ÄÆ°á»£c táºp tin câu lá»nh tạm thá»i\n"
++" %s "
++
++#: src/ext.c:119 src/user.c:589
++msgid " Parameter "
++msgstr " Tham sá» "
++
++#: src/ext.c:462 src/ext.c:481
++msgid " file error "
++msgstr " lá»i táºp tin "
++
++#: src/ext.c:464 src/ext.c:483
++msgid "Format of the "
++msgstr "Äá»nh dạng cá»§a "
++
++#: src/ext.c:465
++msgid ""
++"mc.ext file has changed\n"
++"with version 3.0. It seems that installation\n"
++"failed. Please fetch a fresh new copy from the\n"
++"Midnight Commander package."
++msgstr ""
++"Táºp tin mc.ext Äã thay Äá»i\n"
++"từ phiên bản 3.0. Rất có thá» có sá»± cá» khi cà i Äặt.\n"
++"Xin hãy lấy bản sao má»i nhất từ gói \n"
++"Midnight Commander."
++
++#: src/ext.c:484
++msgid ""
++" file has changed\n"
++"with version 3.0. You may want either to\n"
++"copy it from "
++msgstr ""
++" táºp tin Äã thay Äá»i\n"
++"trong phiên bản 3.0. Có thỠnên sao\n"
++"chép nó từ "
++
++#: src/ext.c:487
++msgid ""
++"mc.ext or use that\n"
++"file as an example of how to write it.\n"
++msgstr ""
++"mc.ext, hoặc sá» dụng táºp tin nà y là m\n"
++"và dụ Äá» biết cách viết.\n"
++
++#: src/ext.c:490
++msgid "mc.ext will be used for this moment."
++msgstr "mc.ext sẽ ÄÆ°á»£c sá» dụng trong thá»i Äiá»m nà y."
++
++#: src/file.c:122 src/tree.c:593
++msgid " Copy "
++msgstr " Sao chép "
++
++#: src/file.c:123 src/tree.c:634
++msgid " Move "
++msgstr " Di chuyá»n "
++
++#: src/file.c:124 src/tree.c:708
++msgid " Delete "
++msgstr " Xóa "
++
++#: src/file.c:217
++msgid " Invalid target mask "
++msgstr " Dấu hiá»u ÄÃch Äến không Äúng "
++
++#: src/file.c:316
++msgid " Cannot make the hardlink "
++msgstr " Không thỠtạo liên kết cứng "
++
++#: src/file.c:359
++#, c-format
++msgid ""
++" Cannot read source link \"%s\" \n"
++" %s "
++msgstr ""
++" Không thá» Äá»c liên kết nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:370
++msgid ""
++" Cannot make stable symlinks across non-local filesystems: \n"
++"\n"
++" Option Stable Symlinks will be disabled "
++msgstr ""
++" Không tạo ÄÆ°á»£c liên kết má»m bá»n vững giữa các há» thá»ng táºp tin không phải ná»i bá»:\n"
++"\n"
++" Tùy chá»n \"Liên kết má»m Bá»n vững\" sẽ bá» tắt "
++
++#: src/file.c:419
++#, c-format
++msgid ""
++" Cannot create target symlink \"%s\" \n"
++" %s "
++msgstr ""
++" Khônt tạo ÄÆ°á»£c liên kết má»m ÄÃch \"%s\" \n"
++" %s "
++
++#: src/file.c:493
++#, c-format
++msgid ""
++" Cannot overwrite directory \"%s\" \n"
++" %s "
++msgstr ""
++" Không thỠghi chèn lên thư mục \"%s\" \n"
++" %s "
++
++#: src/file.c:504
++#, c-format
++msgid ""
++" Cannot stat source file \"%s\" \n"
++" %s "
++msgstr ""
++" Không lấy ÄÆ°á»£c tÃnh chất (stat) cá»§a táºp tin nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:514 src/file.c:1115
++#, c-format
++msgid " `%s' and `%s' are the same file "
++msgstr " `%s' và `%s' là má»t táºp tin "
++
++#: src/file.c:552
++#, c-format
++msgid ""
++" Cannot create special file \"%s\" \n"
++" %s "
++msgstr ""
++" Không tạo ÄÆ°á»£c táºp tin Äặc biá»t \"%s\" \n"
++" %s "
++
++#: src/file.c:564 src/file.c:813
++#, c-format
++msgid ""
++" Cannot chown target file \"%s\" \n"
++" %s "
++msgstr ""
++" Không thay Äá»i ÄÆ°á»£c chá»§ sá» hữu cá»§a táºp tin ÄÃch Äến \"%s\" \n"
++" %s "
++
++#: src/file.c:575 src/file.c:830
++#, c-format
++msgid ""
++" Cannot chmod target file \"%s\" \n"
++" %s "
++msgstr ""
++" Không thay Äá»i ÄÆ°á»£c quyá»n hạn (chmod) cá»§a táºp tin ÄÃch Äến \"%s\" \n"
++" %s "
++
++#: src/file.c:589
++#, c-format
++msgid ""
++" Cannot open source file \"%s\" \n"
++" %s "
++msgstr ""
++" Không má» ÄÆ°á»£c táºp tin nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:600
++msgid " Reget failed, about to overwrite file "
++msgstr " Lấy phần còn lại cá»§a táºp tin không thà nh công, táºp tin sẽ bá» ghi Äè "
++
++#: src/file.c:607
++#, c-format
++msgid ""
++" Cannot fstat source file \"%s\" \n"
++" %s "
++msgstr ""
++" Không lấy ÄÆ°á»£c tÃnh chất (fstat) táºp tin nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:631
++#, c-format
++msgid ""
++" Cannot create target file \"%s\" \n"
++" %s "
++msgstr ""
++" Không tạo ÄÆ°á»£c táºp tin ÄÃch \"%s\" \n"
++" %s "
++
++#: src/file.c:646
++#, c-format
++msgid ""
++" Cannot fstat target file \"%s\" \n"
++" %s "
++msgstr ""
++" Không lấy ÄÆ°á»£c tÃnh chất (fstat) táºp tin ÄÃch \"%s\" \n"
++" %s "
++
++#: src/file.c:680
++#, c-format
++msgid ""
++" Cannot read source file \"%s\" \n"
++" %s "
++msgstr ""
++" Không Äá»c ÄÆ°á»£c táºp tin nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:715
++#, c-format
++msgid ""
++" Cannot write target file \"%s\" \n"
++" %s "
++msgstr ""
++" Không ghi nhá» ÄÆ°á»£c táºp tin nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:733
++msgid "(stalled)"
++msgstr "(bá» nhá»t)"
++
++#: src/file.c:780
++#, c-format
++msgid ""
++" Cannot close source file \"%s\" \n"
++" %s "
++msgstr ""
++" Không Äóng ÄÆ°á»£c táºp tin nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:791
++#, c-format
++msgid ""
++" Cannot close target file \"%s\" \n"
++" %s "
++msgstr ""
++" Không Äóng ÄÆ°á»£c táºp tin ÄÃnh \"%s\" \n"
++" %s "
++
++#: src/file.c:804
++msgid "Incomplete file was retrieved. Keep it?"
++msgstr "Nháºn ÄÆ°á»£c táºp tin không Äầy Äá»§. Giữ táºp tin?"
++
++#: src/file.c:805
++msgid "&Delete"
++msgstr "&Xóa"
++
++#: src/file.c:805
++msgid "&Keep"
++msgstr "&Giữ"
++
++#: src/file.c:873
++#, c-format
++msgid ""
++" Cannot stat source directory \"%s\" \n"
++" %s "
++msgstr ""
++" Không lấy ÄÆ°á»£c thông tin (stat) thư mục nguá»n \"%s\" \n"
++" %s "
++
++#: src/file.c:900
++#, c-format
++msgid ""
++" Source directory \"%s\" is not a directory \n"
++" %s "
++msgstr ""
++" Thư mục nguá»n \"%s\" không phải là má»t thư mục \n"
++" %s "
++
++#: src/file.c:910
++#, c-format
++msgid ""
++" Cannot copy cyclic symbolic link \n"
++" `%s' "
++msgstr ""
++" Không sao chép ÄÆ°á»£c liên kết má»m vòng lặp \n"
++" `%s' "
++
++#: src/file.c:945 src/file.c:1985 src/tree.c:648
++#, c-format
++msgid ""
++" Destination \"%s\" must be a directory \n"
++" %s "
++msgstr ""
++" NÆ¡i Äến \"%s\" phải là má»t thư mục \n"
++" %s "
++
++#: src/file.c:975
++#, c-format
++msgid ""
++" Cannot create target directory \"%s\" \n"
++" %s "
++msgstr ""
++" Không tạo ÄÆ°á»£c thư mục ÄÃch Äến \"%s\" \n"
++" %s "
++
++#: src/file.c:994
++#, c-format
++msgid ""
++" Cannot chown target directory \"%s\" \n"
++" %s "
++msgstr ""
++" Không thay Äá»i ÄÆ°á»£c chá»§ sá» hữu (chown) cá»§a thư mục ÄÃch Äến \"%s\" \n"
++" %s "
++
++#: src/file.c:1096
++#, c-format
++msgid ""
++" Cannot stat file \"%s\" \n"
++" %s "
++msgstr ""
++" Không nháºn ÄÆ°á»£c tÃnh chất (stat) cá»§a táºp tin \"%s\" \n"
++" %s "
++
++#: src/file.c:1122
++#, c-format
++msgid " Cannot overwrite directory `%s' "
++msgstr " Không thá» ghi Äè lên thư mục `%s' "
++
++#: src/file.c:1157
++#, c-format
++msgid ""
++" Cannot move file \"%s\" to \"%s\" \n"
++" %s "
++msgstr ""
++" Không thá» di chuyá»n táºp tin \"%s\" và o \"%s\" \n"
++" %s "
++
++#: src/file.c:1181
++#, c-format
++msgid ""
++" Cannot remove file \"%s\" \n"
++" %s "
++msgstr ""
++" Không thá» xóa táºp tin \"%s\" \n"
++" %s "
++
++#: src/file.c:1233
++#, c-format
++msgid " `%s' and `%s' are the same directory "
++msgstr " %s và %s - là má»t thư mục "
++
++#: src/file.c:1252
++#, c-format
++msgid " Cannot overwrite directory \"%s\" %s "
++msgstr " Không thá» ghi Äè lên thư mục \"%s\" %s "
++
++#: src/file.c:1256
++#, c-format
++msgid " Cannot overwrite file \"%s\" %s "
++msgstr " Không thá» ghi Äè táºp tin \"%s\" %s "
++
++#: src/file.c:1282
++#, c-format
++msgid ""
++" Cannot move directory \"%s\" to \"%s\" \n"
++" %s "
++msgstr ""
++" Không thá» di chuyá»n thư mục \"%s\" và o \"%s\" \n"
++" %s "
++
++#: src/file.c:1352
++#, c-format
++msgid ""
++" Cannot delete file \"%s\" \n"
++" %s "
++msgstr ""
++" Không thá» xóa táºp tin \"%s\" \n"
++" %s "
++
++#: src/file.c:1412 src/file.c:1481 src/file.c:1509
++#, c-format
++msgid ""
++" Cannot remove directory \"%s\" \n"
++" %s "
++msgstr ""
++" Không thỠxóa thư mục \"%s\" \n"
++" %s "
++
++#: src/file.c:1657
++msgid "1Copy"
++msgstr "1Sao chép"
++
++#: src/file.c:1657
++msgid "1Move"
++msgstr "1Di chuyá»n"
++
++#: src/file.c:1657
++msgid "1Delete"
++msgstr "1Xóa"
++
++#: src/file.c:1672
++#, no-c-format
++msgid "%o %f \"%s\"%m"
++msgstr "%o %f \"%s\"%m"
++
++# msgfmt warnings/errors must be ignored. mc parse this pattern itself.
++#: src/file.c:1674
++#, no-c-format
++msgid "%o %d %f%m"
++msgstr "%o (%d cái) %f%m"
++
++#: src/file.c:1676 vfs/fish.c:561
++msgid "file"
++msgstr "táºp tin"
++
++#: src/file.c:1676
++msgid "files"
++msgstr "các táºp tin"
++
++#: src/file.c:1676
++msgid "directory"
++msgstr "thư mục"
++
++#: src/file.c:1676
++msgid "directories"
++msgstr "Các thư mục"
++
++#: src/file.c:1677
++msgid "files/directories"
++msgstr "táºp tin/thư mục"
++
++#: src/file.c:1677
++msgid " with source mask:"
++msgstr " vá»i nhãn ban Äầu:"
++
++#: src/file.c:1677
++msgid " to:"
++msgstr " và o:"
++
++#: src/file.c:1821
++msgid " Cannot operate on \"..\"! "
++msgstr " Không thỠthao tác trên \"..\"! "
++
++#: src/file.c:1877
++msgid " Sorry, I could not put the job in background "
++msgstr " Xin lá»i, không thá» Äặt công viá»c nà o và o chế Äá» ná»n sau "
++
++#: src/file.c:2147 src/view.c:441
++msgid "&Retry"
++msgstr "&ThỠlại"
++
++#: src/file.c:2148 src/file.c:2211 src/filegui.c:207 src/filegui.c:517
++msgid "&Abort"
++msgstr "&Dừng"
++
++#: src/file.c:2200
++msgid ""
++"\n"
++" Directory not empty. \n"
++" Delete it recursively? "
++msgstr ""
++"\n"
++" Thư mục không rá»ng. \n"
++" Xóa toà n bá» (Äá» quy)? "
++
++#: src/file.c:2202
++msgid ""
++"\n"
++" Background process: Directory not empty \n"
++" Delete it recursively? "
++msgstr ""
++"\n"
++" Tiến trình ná»n sau: Thư mục không rá»ng \n"
++" Xóa toà n bá» (Äá» quy)? "
++
++#: src/file.c:2204
++msgid " Delete: "
++msgstr " Xóa: "
++
++#: src/file.c:2210 src/filegui.c:519
++msgid "Non&e"
++msgstr "&Không"
++
++#: src/filegui.c:324
++#, c-format
++msgid "ETA %d:%02d.%02d"
++msgstr "Còn lại %d:%02d.%02d"
++
++#: src/filegui.c:347
++#, c-format
++msgid "%.2f MB/s"
++msgstr "%.2f ÐB/giây"
++
++#: src/filegui.c:350
++#, c-format
++msgid "%.2f KB/s"
++msgstr "%.2f KB/giây"
++
++#: src/filegui.c:353
++#, c-format
++msgid "%ld B/s"
++msgstr "%ld B/giây"
++
++#: src/filegui.c:376
++msgid "File"
++msgstr "Táºp tin"
++
++#: src/filegui.c:399
++msgid "Count"
++msgstr "Äếm"
++
++#: src/filegui.c:420
++msgid "Bytes"
++msgstr "Byte"
++
++#: src/filegui.c:453
++msgid "Source"
++msgstr "Nguá»n"
++
++#: src/filegui.c:476
++msgid "Target"
++msgstr "ÄÃch"
++
++#: src/filegui.c:498
++msgid "Deleting"
++msgstr "Äang xóa"
++
++#: src/filegui.c:516
++#, c-format
++msgid "Target file \"%s\" already exists!"
++msgstr "Táºp tin ÄÃch \"%s\" Äã tá»n tại!"
++
++#: src/filegui.c:518
++msgid "If &size differs"
++msgstr "&Nếu kÃch thưá»c khác nhau"
++
++#: src/filegui.c:520
++msgid "&Update"
++msgstr "&Cáºp nháºt"
++
++#: src/filegui.c:522
++msgid "Overwrite all targets?"
++msgstr "Khi Äè lên má»i táºp tin ÄÃch?"
++
++#: src/filegui.c:523
++msgid "&Reget"
++msgstr "&Lấy lại"
++
++#: src/filegui.c:524
++msgid "A&ppend"
++msgstr "&Thêm và o cuá»i"
++
++#: src/filegui.c:527
++msgid "Overwrite this target?"
++msgstr "Khi Äè lên táºp tin nà y?"
++
++#: src/filegui.c:528
++#, c-format
++msgid "Target date: %s, size %d"
++msgstr "Thá»i gian sá»a Äá»i cá»§a táºp tin ÄÃch: %s, kÃch thưá»c %d"
++
++#: src/filegui.c:529
++#, c-format
++msgid "Source date: %s, size %d"
++msgstr "Thá»i gian sá»a Äá»i cá»§a táºp tin nguá»n: %s, kÃch thưá»c %d"
++
++#: src/filegui.c:604
++msgid " File exists "
++msgstr " Táºp tin tá»n tại "
++
++#: src/filegui.c:606
++msgid " Background process: File exists "
++msgstr " Tiến trình ná»n sau: táºp tin tá»n tại "
++
++#: src/filegui.c:728
++msgid "preserve &Attributes"
++msgstr "&Ghi nhá» thuá»c tÃnh"
++
++#: src/filegui.c:730
++msgid "follow &Links"
++msgstr "Äi theo &Liên kết"
++
++#: src/filegui.c:732
++msgid "to:"
++msgstr "và o:"
++
++#: src/filegui.c:733
++msgid "&Using shell patterns"
++msgstr "&SỠdụng mẫu (pattern) của shell"
++
++#: src/filegui.c:754
++msgid "&Background"
++msgstr "&Trong ná»n sau"
++
++#: src/filegui.c:764
++msgid "&Stable Symlinks"
++msgstr "liên kết &Bá»n vững"
++
++#: src/filegui.c:766
++msgid "&Dive into subdir if exists"
++msgstr "&Và o thư mục con, nếu có"
++
++#: src/filegui.c:938
++#, c-format
++msgid ""
++"Invalid source pattern `%s' \n"
++" %s "
++msgstr ""
++"Mẫu không Äúng `%s' \n"
++" %s "
++
++#: src/find.c:99
++msgid "&Suspend"
++msgstr "&Hoãn"
++
++#: src/find.c:100
++msgid "Con&tinue"
++msgstr "&Tiếp tục"
++
++#: src/find.c:101
++msgid "&Chdir"
++msgstr "&Chuyá»n thư mục"
++
++#: src/find.c:102
++msgid "&Again"
++msgstr "&Lặp lại"
++
++#: src/find.c:103 src/subshell.c:323
++msgid "&Quit"
++msgstr "&Thoát"
++
++#: src/find.c:104 src/panelize.c:69
++msgid "Pane&lize"
++msgstr "&Bảng"
++
++#: src/find.c:105
++msgid "&View - F3"
++msgstr "X&em - F3"
++
++#: src/find.c:106
++msgid "&Edit - F4"
++msgstr "&Soạn thảo - F4"
++
++#: src/find.c:183
++msgid "Start at:"
++msgstr "Bắt Äầu từ:"
++
++#: src/find.c:183
++msgid "Filename:"
++msgstr "Tên táºp tin:"
++
++#: src/find.c:183
++msgid "Content: "
++msgstr "Ná»i dung: "
++
++#: src/find.c:184 src/main.c:795 src/main.c:819
++msgid "&Tree"
++msgstr "&Cây thư mục"
++
++#: src/find.c:232 src/find.c:792
++msgid "Find File"
++msgstr "Tìm táºp tin"
++
++#: src/find.c:464
++#, c-format
++msgid "Grepping in %s"
++msgstr "Tìm trong %s"
++
++#: src/find.c:538
++msgid "Finished"
++msgstr "Kết thúc"
++
++#: src/find.c:565 src/view.c:1594
++#, c-format
++msgid "Searching %s"
++msgstr "Tìm %s"
++
++#: src/find.c:721 src/find.c:818
++msgid "Searching"
++msgstr "Tìm"
++
++#: src/help.c:279
++msgid " Help file format error\n"
++msgstr " Lá»i Äá»nh dạng táºp tin trợ giúp\n"
++
++#: src/help.c:318
++msgid " Internal bug: Double start of link area "
++msgstr " Lá»i (bug) ná»i bá»: vùng liên kết có hai Äầu "
++
++#: src/help.c:554 src/help.c:778
++#, c-format
++msgid " Cannot find node %s in help file "
++msgstr " Không tìm thấy nút %s trong táºp tin trợ giúp "
++
++#: src/help.c:816
++msgid "Index"
++msgstr "ChỠmục"
++
++#: src/help.c:818
++msgid "Prev"
++msgstr "Quay lại"
++
++#: src/hotlist.c:115
++msgid "&Move"
++msgstr "&Di chuyá»n"
++
++#: src/hotlist.c:116 src/panelize.c:68
++msgid "&Remove"
++msgstr "&Xóa"
++
++#: src/hotlist.c:117 src/hotlist.c:834 src/hotlist.c:930
++msgid "&Append"
++msgstr "&Thêm và o"
++
++#: src/hotlist.c:118 src/hotlist.c:832 src/hotlist.c:928
++msgid "&Insert"
++msgstr "c&Hèn"
++
++#: src/hotlist.c:119
++msgid "New &Entry"
++msgstr "tạo &Mục má»i"
++
++#: src/hotlist.c:120
++msgid "New &Group"
++msgstr "&Nhóm má»i"
++
++#: src/hotlist.c:122
++msgid "&Up"
++msgstr "&Lên"
++
++#: src/hotlist.c:123
++msgid "&Add current"
++msgstr "&Thêm hiá»n thá»i"
++
++#: src/hotlist.c:125
++msgid "&Refresh"
++msgstr "&Là m má»i"
++
++#: src/hotlist.c:126
++msgid "Fr&ee VFSs now"
++msgstr "&Giải phóng"
++
++#: src/hotlist.c:128
++msgid "Change &To"
++msgstr "&Chuyá»n tá»i"
++
++#: src/hotlist.c:177
++msgid "Subgroup - press ENTER to see list"
++msgstr "Nhóm con - nhấn ENTER Äá» xem danh sách"
++
++#: src/hotlist.c:609
++msgid "Active VFS directories"
++msgstr "Thư mục VFS hoạt Äá»ng"
++
++#: src/hotlist.c:612
++msgid "Directory hotlist"
++msgstr "Danh sách thư mục thưá»ng dùng"
++
++#: src/hotlist.c:640
++msgid " Directory path "
++msgstr " ÄÆ°á»ng dẫn tá»i thư mục "
++
++#: src/hotlist.c:643 src/hotlist.c:692
++msgid " Directory label "
++msgstr " Nhãn thư mục"
++
++#: src/hotlist.c:668
++#, c-format
++msgid "Moving %s"
++msgstr "Di chuyá»n %s"
++
++#: src/hotlist.c:907
++msgid "New hotlist entry"
++msgstr " Thêm bản ghi và o tra cứu"
++
++#: src/hotlist.c:907
++msgid "Directory label"
++msgstr " Tên nhãn thư mục"
++
++#: src/hotlist.c:907
++msgid "Directory path"
++msgstr " ÄÆ°á»ng dẫn tá»i thư mục"
++
++#: src/hotlist.c:987
++msgid " New hotlist group "
++msgstr " Thêm nhóm và o tra cứu "
++
++#: src/hotlist.c:987
++msgid "Name of new group"
++msgstr " Tên nhóm má»i"
++
++#: src/hotlist.c:1002
++#, c-format
++msgid "Label for \"%s\":"
++msgstr " Tên nhãn cho \"%s\":"
++
++#: src/hotlist.c:1006
++msgid " Add to hotlist "
++msgstr " Thêm và o tra cứu "
++
++#: src/hotlist.c:1043
++msgid " Remove: "
++msgstr " Xóa: "
++
++#: src/hotlist.c:1047
++msgid ""
++"\n"
++" Group not empty.\n"
++" Remove it?"
++msgstr ""
++"\n"
++" Nhóm không rá»ng.\n"
++" Xóa nó?"
++
++#: src/hotlist.c:1391
++msgid " Top level group "
++msgstr "Nhóm cấp Äá» cao nhất "
++
++#: src/hotlist.c:1414
++msgid "MC was unable to write ~/"
++msgstr "MC không thỠghi nhỠ~/"
++
++#: src/hotlist.c:1415
++msgid " file, your old hotlist entries were not deleted"
++msgstr " táºp tin, tra cứu thư mục cÅ© chưa bá» xóa"
++
++#: src/hotlist.c:1417
++msgid " Hotlist Load "
++msgstr " Nạp tra cứu "
++
++#: src/info.c:74
++#, c-format
++msgid "Midnight Commander %s"
++msgstr "Midnight Commander %s"
++
++#: src/info.c:91
++#, c-format
++msgid "File: %s"
++msgstr "Táºp tin: %s"
++
++#: src/info.c:103
++#, c-format
++msgid "Free nodes: %d (%d%%) of %d"
++msgstr "Nút tá»± do: %d (%d%%) trong tá»ng sá» %d"
++
++#: src/info.c:109
++msgid "No node information"
++msgstr "Không có thông tin vỠnút (node)"
++
++#: src/info.c:117
++#, c-format
++msgid "Free space: %s (%d%%) of %s"
++msgstr "Chá» trá»ng: %s (%d%%) cá»§a %s"
++
++#: src/info.c:121
++msgid "No space information"
++msgstr "Không có thông tin vá» khoảng trá»ng"
++
++#: src/info.c:125
++#, c-format
++msgid "Type: %s "
++msgstr "Loại: %s "
++
++#: src/info.c:125
++msgid "non-local vfs"
++msgstr "không phải vfs cục bá»"
++
++#: src/info.c:131
++#, c-format
++msgid "Device: %s"
++msgstr "Thiết bá»: %s"
++
++#: src/info.c:135
++#, c-format
++msgid "Filesystem: %s"
++msgstr "Há» thá»ng táºp tin: %s"
++
++#: src/info.c:140
++#, c-format
++msgid "Accessed: %s"
++msgstr "Truy cáºp: %s"
++
++#: src/info.c:144
++#, c-format
++msgid "Modified: %s"
++msgstr "Sá»a Äá»i: %s"
++
++#: src/info.c:148
++#, c-format
++msgid "Created: %s"
++msgstr "Tạo ra: %s"
++
++#: src/info.c:163
++#, c-format
++msgid "Size: %s"
++msgstr "KÃch thưá»c: %s"
++
++#: src/info.c:166
++#, c-format
++msgid " (%d block)"
++msgstr " (%d khá»i)"
++
++#: src/info.c:166
++#, c-format
++msgid " (%d blocks)"
++msgstr " (%d khá»i)"
++
++#: src/info.c:172
++#, c-format
++msgid "Owner: %s/%s"
++msgstr "Chủ sỠhữu: %s/%s"
++
++#: src/info.c:177
++#, c-format
++msgid "Links: %d"
++msgstr "Liên kết: %d"
++
++#: src/info.c:181
++#, c-format
++msgid "Mode: %s (%04o)"
++msgstr "Quyá»n hạn: %s (%04o)"
++
++#: src/info.c:186
++#, c-format
++msgid "Location: %Xh:%Xh"
++msgstr "Vá» trÃ: %Xh:%Xh"
++
++#: src/info.c:196
++msgid "File: None"
++msgstr "Táºp tin: Không có"
++
++#: src/layout.c:151
++msgid "&Vertical"
++msgstr "&Thẳng Äứng"
++
++#: src/layout.c:152
++msgid "&Horizontal"
++msgstr "&Nằm ngang"
++
++#: src/layout.c:162
++msgid "&Xterm window title"
++msgstr "tiê&U Äá» cá»a sá» xterm"
++
++#: src/layout.c:163
++msgid "h&Intbar visible"
++msgstr "dòng &Gợi ý"
++
++#: src/layout.c:164
++msgid "&Keybar visible"
++msgstr "&Hiá»n thá» thanh phÃm tắt"
++
++#: src/layout.c:165
++msgid "command &Prompt"
++msgstr "&Dòng lá»nh"
++
++#: src/layout.c:166
++msgid "show &Mini status"
++msgstr "hiá»n trạng thái m&Ini"
++
++#: src/layout.c:167
++msgid "menu&Bar visible"
++msgstr "thAnh trình ÄÆ¡n"
++
++#: src/layout.c:168
++msgid "&Equal split"
++msgstr "&KÃch thưá»c bằng nhau"
++
++#: src/layout.c:169
++msgid "pe&Rmissions"
++msgstr "&Quyá»n truy cáºp"
++
++#: src/layout.c:170
++msgid "&File types"
++msgstr "&Loại táºp tin"
++
++#: src/layout.c:350 src/learn.c:59 src/learn.c:174 src/option.c:115
++msgid "&Save"
++msgstr "Ghi nhá» &+"
++
++#: src/layout.c:358
++msgid " Panel split "
++msgstr " Chia bảng "
++
++#: src/layout.c:359
++msgid " Highlight... "
++msgstr " Chiếu sáng... "
++
++#: src/layout.c:360 src/option.c:125
++msgid " Other options "
++msgstr " Cấu hình khác "
++
++#: src/layout.c:361
++msgid "output lines"
++msgstr "dòng kết quả"
++
++#: src/layout.c:423
++msgid "Layout"
++msgstr "Vẻ ngoà i"
++
++#: src/learn.c:73
++msgid "Learn keys"
++msgstr "Tạo phÃm tắt"
++
++#: src/learn.c:79
++msgid " Teach me a key "
++msgstr " Dạy tôi má»t phÃm "
++
++#: src/learn.c:80
++#, c-format
++msgid ""
++"Please press the %s\n"
++"and then wait until this message disappears.\n"
++"\n"
++"Then, press it again to see if OK appears\n"
++"next to its button.\n"
++"\n"
++"If you want to escape, press a single Escape key\n"
++"and wait as well."
++msgstr ""
++"Xin hãy nhấn lên %s\n"
++"và Äợi cho thông báo nà y biến mất.\n"
++"\n"
++"Sau Äó hãy nhấn má»t lần nữa Äá» chắc chắn là Ỡbên phải\n"
++"cá»§a tên xuất hiá»n \"OK\".\n"
++"\n"
++"Nếu bạn muá»n dừng viá»c dạy phÃm, thì hãy nhấn\n"
++"phÃm Esc và cÅ©ng cần Äợi má»t chút."
++
++#: src/learn.c:114
++msgid " Cannot accept this key "
++msgstr " Không thá» chấp nháºn phÃm nà y "
++
++#: src/learn.c:115
++#, c-format
++msgid " You have entered \"%s\""
++msgstr " Äã nháºp và o \"%s\""
++
++#. TRANSLATORS: This label appears near learned keys. Keep it short.
++#: src/learn.c:164
++msgid "OK"
++msgstr "OK"
++
++#: src/learn.c:172
++msgid ""
++"It seems that all your keys already\n"
++"work fine. That's great."
++msgstr ""
++"Có vẻ như tất cả các phÃm cá»§a bạn\n"
++"là m viá»c tá»t. Tháºt là tuyá»t."
++
++#: src/learn.c:174
++msgid "&Discard"
++msgstr "&Vứt bá»"
++
++#: src/learn.c:179
++msgid ""
++"Great! You have a complete terminal database!\n"
++"All your keys work well."
++msgstr ""
++"Tuyá»t! Chúng ta có má»t cÆ¡ sá» dữ liá»u mô tả terminal Äầy Äá»§!\n"
++"Tất cả các phÃm Äá»u là m viá»c tá»t."
++
++#: src/learn.c:287
++msgid "Press all the keys mentioned here. After you have done it, check"
++msgstr "Hãy nhấn tất cả những phÃm liá»t kê á» trên. Sau khi nhấn xong, hãy kiá»m tra"
++
++#: src/learn.c:291
++msgid "which keys are not marked with OK. Press space on the missing"
++msgstr "xem những phÃm nà o không có dấu hiá»u \"OK\". Nhấn phÃm space trên những"
++
++#: src/learn.c:295
++msgid "key, or click with the mouse to define it. Move around with Tab."
++msgstr "phÃm bá» thiếu, hoặc nhấn chuá»t Äá» xác Äá»nh. Di chuyá»n bằng Tab."
++
++#: src/main.c:425
++msgid ""
++" 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? "
++msgstr ""
++" MC không thá» chuyá»n và o thư mục, mà tiến trình shell \n"
++" con thông báo. Rất có thá», bạn Äã xóa thư mục là m viá»c \n"
++" hoặc thêm cho mình quyá»n truy cáºp má» rá»ng bằng câu \n"
++" lá»nh \"su\"? "
++
++#: src/main.c:469 src/screen.c:1951
++msgid " The Midnight Commander "
++msgstr " Midnight Commander "
++
++#: src/main.c:470
++msgid " Do you really want to quit the Midnight Commander? "
++msgstr " Thá»±c sá»± muá»n thoát Midnight Commander? "
++
++#: src/main.c:792 src/main.c:816
++msgid "&Listing mode..."
++msgstr "&Dạng danh sách..."
++
++#: src/main.c:793 src/main.c:817
++msgid "&Quick view C-x q"
++msgstr "&Xem nhanh C-x q"
++
++#: src/main.c:794 src/main.c:818
++msgid "&Info C-x i"
++msgstr "&Thông tin C-x i"
++
++#: src/main.c:797 src/main.c:821
++msgid "&Sort order..."
++msgstr "t&Hứ tự sắp xếp..."
++
++#: src/main.c:799 src/main.c:823
++msgid "&Filter..."
++msgstr "&Lá»c táºp tin..."
++
++#: src/main.c:803 src/main.c:827
++msgid "&Network link..."
++msgstr "&Kết ná»i mạng..."
++
++#: src/main.c:805 src/main.c:829
++msgid "FT&P link..."
++msgstr "kết ná»i &FTP..."
++
++#: src/main.c:806 src/main.c:830
++msgid "S&hell link..."
++msgstr "kết ná»i &Shell..."
++
++#: src/main.c:808 src/main.c:832
++msgid "SM&B link..."
++msgstr "kết ná»i SM&B..."
++
++#: src/main.c:812 src/main.c:836
++msgid "&Rescan C-r"
++msgstr "&Quét lại C-r"
++
++#: src/main.c:840
++msgid "&User menu F2"
++msgstr "&Trình ÄÆ¡n ngưá»i dùng F2"
++
++#: src/main.c:841
++msgid "&View F3"
++msgstr "&Xem F3"
++
++#: src/main.c:842
++msgid "Vie&w file... "
++msgstr "x&Em táºp tin... "
++
++#: src/main.c:843
++msgid "&Filtered view M-!"
++msgstr "xe&M Äã lá»c M-!"
++
++#: src/main.c:844
++msgid "&Edit F4"
++msgstr "&Soạn thảo F4"
++
++#: src/main.c:845
++msgid "&Copy F5"
++msgstr "sao &Chép F5"
++
++#: src/main.c:846
++msgid "c&Hmod C-x c"
++msgstr "c&Hmod C-x c"
++
++#: src/main.c:847
++msgid "&Link C-x l"
++msgstr "&Liên kết cứng C-x l"
++
++#: src/main.c:848
++msgid "&SymLink C-x s"
++msgstr "liên &Kết má»m C-x s"
++
++#: src/main.c:849
++msgid "edit s&Ymlink C-x C-s"
++msgstr "sá»&A liên kết má»m C-x C-s"
++
++#: src/main.c:850
++msgid "ch&Own C-x o"
++msgstr "cho&Wn C-x o"
++
++#: src/main.c:851
++msgid "&Advanced chown "
++msgstr "chown &Nâng cao "
++
++#: src/main.c:852
++msgid "&Rename/Move F6"
++msgstr "Äá»i tên/&Di chuyá»n F6"
++
++#: src/main.c:853
++msgid "&Mkdir F7"
++msgstr "mkdi&R F7"
++
++#: src/main.c:854
++msgid "&Delete F8"
++msgstr "xó&A F8"
++
++#: src/main.c:855
++msgid "&Quick cd M-c"
++msgstr "cd nhanh &> M-c"
++
++#: src/main.c:857
++msgid "select &Group M-+"
++msgstr "Chá»n Nhóm &+ M-+"
++
++#: src/main.c:858
++msgid "u&Nselect group M-\\"
++msgstr "&Bá» chá»n nhóm M-\\"
++
++#: src/main.c:859
++msgid "reverse selec&Tion M-*"
++msgstr "Chá»n ngược lạ&I M-*"
++
++#: src/main.c:861
++msgid "e&Xit F10"
++msgstr "Th&Oát F10"
++
++#: src/main.c:869
++msgid "&Directory tree"
++msgstr "cây thư &Mục"
++
++#: src/main.c:870
++msgid "&Find file M-?"
++msgstr "&Tìm táºp tin M-?"
++
++#: src/main.c:871
++msgid "s&Wap panels C-u"
++msgstr "Äá»i chá» h&Ai bảng C-u"
++
++#: src/main.c:872
++msgid "switch &Panels on/off C-o"
++msgstr "&Báºt/tắt bảng C-o"
++
++#: src/main.c:873
++msgid "&Compare directories C-x d"
++msgstr "&So sánh thư mục C-x d"
++
++#: src/main.c:874
++msgid "e&Xternal panelize C-x !"
++msgstr "bản&G ngoà i C-x !"
++
++#: src/main.c:875
++msgid "show directory s&Izes"
++msgstr "&Hiá»n thá» kÃch thưá»c thư mục"
++
++#: src/main.c:877
++msgid "command &History"
++msgstr "&Lá»ch sá» câu lá»nh"
++
++#: src/main.c:878
++msgid "di&Rectory hotlist C-\\"
++msgstr "Thư mục thưá»ng dùng &* C-\\"
++
++#: src/main.c:880
++msgid "&Active VFS list C-x a"
++msgstr "&Danh sách VFS hoạt Äá»ng C-x a"
++
++#: src/main.c:883
++msgid "&Background jobs C-x j"
++msgstr "&Công viá»c ná»n sau C-x j"
++
++#: src/main.c:887
++msgid "&Undelete files (ext2fs only)"
++msgstr "&Phục há»i táºp tin Äã xóa (chá» ext2fs)"
++
++#: src/main.c:890
++msgid "&Listing format edit"
++msgstr "&Soạn thảo Äá»nh dạng danh sách"
++
++#: src/main.c:895
++msgid "Edit &extension file"
++msgstr "soạn thảo táºp tin phần má» &Rá»ng"
++
++#: src/main.c:896
++msgid "Edit &menu file"
++msgstr "soạ&N thảo táºp tin trình ÄÆ¡n"
++
++#: src/main.c:898
++msgid "Edit edi&tor menu file"
++msgstr "sá»a trình ÄÆ¡n cá»§a trình s&Oạn thảo"
++
++#: src/main.c:899
++msgid "Edit &syntax file"
++msgstr "sá»a táºp tin cú &Pháp"
++
++#: src/main.c:905
++msgid "&Configuration..."
++msgstr "&Cấu hình..."
++
++#: src/main.c:906
++msgid "&Layout..."
++msgstr "&Vẻ ngoà i..."
++
++#: src/main.c:907
++msgid "c&Onfirmation..."
++msgstr "&Xác nháºn..."
++
++#: src/main.c:908
++msgid "&Display bits..."
++msgstr "bit &Hiá»n thá»..."
++
++#: src/main.c:911
++msgid "&Virtual FS..."
++msgstr "&FS ảo..."
++
++#: src/main.c:914
++msgid "&Save setup"
++msgstr "&Ghi nhỠcấu hình"
++
++#: src/main.c:925
++msgid " &Above "
++msgstr " Ỡ&trên "
++
++#: src/main.c:925
++msgid " &Left "
++msgstr " &Bảng trái "
++
++#: src/main.c:929
++msgid " &File "
++msgstr " &Táºp tin "
++
++#: src/main.c:932
++msgid " &Command "
++msgstr " &Câu lá»nh "
++
++#: src/main.c:935
++msgid " &Options "
++msgstr " &Cấu hình "
++
++#: src/main.c:938
++msgid " &Below "
++msgstr " á» &dưá»i "
++
++#: src/main.c:938
++msgid " &Right "
++msgstr " Bảng &phải "
++
++#: src/main.c:981
++msgid " Information "
++msgstr " Thông tin "
++
++#: src/main.c:983
++msgid ""
++" 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. "
++msgstr ""
++" Sá» dụng tùy chá»n nạp lại nhanh có thá» không phản ánh \n"
++" Äúng ná»i dung hiá»n thá»i cá»§a thư mục. Trong trưá»ng hợp \n"
++" nà y cần nạp lại thư mục má»t cách thá»§ công. Hãy xem \n"
++" trang hưá»ng dẫn sá» dụng man Äá» biết them chi tiết. "
++
++#: src/main.c:1206 src/screen.c:2185
++msgid "Menu"
++msgstr "TrÄÆ¡n "
++
++#: src/main.c:1340
++msgid "The TERM environment variable is unset!\n"
++msgstr "Biến môi trưá»n TERM chưa ÄÆ°á»£c xác Äá»nh!\n"
++
++#: src/main.c:1642 src/textconf.c:116
++#, c-format
++msgid "GNU Midnight Commander %s\n"
++msgstr "GNU Midnight Commander %s\n"
++
++#: src/main.c:1848
++msgid "[flags] [this_dir] [other_panel_dir]\n"
++msgstr "[cá»] [thư_mục_nà y] [thư_mục_bảng_còn_lại]\n"
++
++#: src/main.c:1852
++msgid "+number"
++msgstr "+sá»"
++
++#: src/main.c:1853
++msgid "Set initial line number for the internal editor"
++msgstr "Äặt sá» dòng ban Äầu cho trình soạn thảo ná»i bá»"
++
++#: src/main.c:1855
++msgid ""
++"\n"
++"Please send any bug reports (including the output of `mc -V')\n"
++"to mc-devel at gnome.org\n"
++msgstr ""
++"\n"
++"Xin hãy gá»i bất kỳ báo cáo lá»i (bug) nà o (gá»m cả kết quả cá»§a lá»nh `mc -V')\n"
++"tá»i mc-devel at gnome.org\n"
++
++#: src/main.c:1870
++msgid ""
++"--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\n"
++" File display: normal, selected, marked, markselect\n"
++" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus\n"
++" Menus: menu, menuhot, menusel, menuhotsel\n"
++" Help: helpnormal, helpitalic, 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"
++msgstr ""
++"--colors TỪ_KHÃA={VÄN BẢN},{Ná»N}\n"
++"\n"
++"có thá» bá» qua {VÄN BẢN} và {Ná»N}, và sá» dụng giá trá» theo mặc Äá»nh\n"
++"\n"
++"Từ khóa:\n"
++" Toà n cầu: errors, reverse, gauge, input\n"
++" Hiá»n thá» táºp tin: normal, selected, marked, markselect\n"
++" Há»p thoại: dnormal, dfocus, dhotnormal, dhotfocus\n"
++" Trình ÄÆ¡n: menu, menuhot, menusel, menuhotsel\n"
++" Trợ giúp: helpnormal, helpitalic, helplink, helpslink\n"
++" Dạng táºp tin: directory, executable, link, stalelink, device, special, core\n"
++"\n"
++"Mà u sắc:\n"
++" black, gray, red, brightred, green, brightgreen, brown,\n"
++" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
++" brightcyan, lightgray, white\n"
++"\n"
++
++#: src/main.c:1945
++msgid "Displays this help message"
++msgstr "Hiá»n thá» thông báo trợ giúp nà y"
++
++#: src/main.c:1947
++msgid "Displays the current version"
++msgstr "Hiá»n thá» sá» phiên bản hiá»n thá»i"
++
++#: src/main.c:1951
++msgid "Forces xterm features"
++msgstr "Bắt buá»c dùng tÃnh nÄng cá»§a xterm"
++
++#: src/main.c:1953
++msgid "Disable mouse support in text version"
++msgstr "Bá» há» trợ chuá»t trong phiên bản vÄn bản (text)"
++
++#: src/main.c:1956
++msgid "Tries to use termcap instead of terminfo"
++msgstr "ThỠsỠdụng termcap thay cho terminfo"
++
++#: src/main.c:1959
++msgid "Resets soft keys on HP terminals"
++msgstr "Äặt lại phÃm phần má»m trên các terminal HP"
++
++#: src/main.c:1961
++msgid "To run on slow terminals"
++msgstr "Äá» chạy trên các terminal cháºm"
++
++#: src/main.c:1963
++msgid "Use stickchars to draw"
++msgstr "Sá» dụng ký tá»± thẳng Äứng Äá» vẽ"
++
++#: src/main.c:1967
++msgid "Requests to run in black and white"
++msgstr "Yêu cầu chạy trong chế Äá» Äen trắng"
++
++#: src/main.c:1969
++msgid "Request to run in color mode"
++msgstr "Yêu cầu chạy trong chế Äá» mà u"
++
++#: src/main.c:1971
++msgid "Specifies a color configuration"
++msgstr "Xác Äá»nh cấu hình mà u sắc"
++
++#: src/main.c:1973
++msgid "Displays a help screen on how to change the color scheme"
++msgstr "Hiá»n thá» cá»a sá» trợ giúp cách thay Äá»i bá» phá»i hợp mà u"
++
++#: src/main.c:1978
++msgid "Log ftp dialog to specified file"
++msgstr "Ghi há»i thoại FTP và o má»t táºp tin"
++
++#: src/main.c:1981
++msgid "Set debug level"
++msgstr "Äặt mức Äá» tìm sá»a lá»i (debug)"
++
++#: src/main.c:1987
++msgid "Print data directory"
++msgstr "In ra tên thư mục dữ liá»u"
++
++#: src/main.c:1989
++msgid "Print last working directory to specified file"
++msgstr "Ghi thư mục là m viá»c cuá»i cùng và o táºp tin chá» ra"
++
++#: src/main.c:1994
++msgid "Enables subshell support (default)"
++msgstr "Báºt há» trợ shell con (mặc Äá»nh)"
++
++#: src/main.c:1996
++msgid "Disables subshell support"
++msgstr "Tắt hỠtrợ shell con"
++
++#: src/main.c:2001
++msgid "Launches the file viewer on a file"
++msgstr "Xem táºp tin"
++
++#: src/main.c:2004
++msgid "Edits one file"
++msgstr "Soạn thảo táºp tin"
++
++#: src/main.c:2218
++msgid " Notice "
++msgstr " Cảnh báo "
++
++#: src/main.c:2219
++msgid ""
++" The Midnight Commander configuration files \n"
++" are now stored in the ~/.mc directory, the \n"
++" files have been moved now\n"
++msgstr ""
++" Các táºp tin cấu hình Midnight Commander \n"
++" bây giá» Äặt trong thư mục ~/.mc, các \n"
++" táºp tin cÅ© bây giá» ÄÆ°á»£c chuyá»n tá»i Äó\n"
++
++#: src/option.c:56
++msgid "safe de&Lete"
++msgstr "Xóa má»t cách &An toà n"
++
++#: src/option.c:57
++msgid "cd follows lin&Ks"
++msgstr "cd th&Eo liên kết"
++
++#: src/option.c:58
++msgid "L&ynx-like motion"
++msgstr "di chuyá»n giá»ng trong l&Ynx"
++
++#: src/option.c:59
++msgid "rotatin&G dash"
++msgstr "cái chỠ&Quay"
++
++#: src/option.c:60
++msgid "co&Mplete: show all"
++msgstr "tá»± Äá»ng hoà n thà nh: hiá»n tất cả"
++
++#: src/option.c:61
++msgid "&Use internal view"
++msgstr "trình xem ná»i &Bá»"
++
++#: src/option.c:62
++msgid "use internal ed&It"
++msgstr "sá» dụng s&Oạn thảo ná»i bá»"
++
++#: src/option.c:63
++msgid "auto m&Enus"
++msgstr "t&Rình ÄÆ¡n tá»± Äá»ng"
++
++#: src/option.c:64
++msgid "&Auto save setup"
++msgstr "tá»± Äá»ng gh&I nhá» cấu hình"
++
++#: src/option.c:65
++msgid "shell &Patterns"
++msgstr "&Mẫu dạng shell"
++
++#: src/option.c:66
++msgid "Compute &Totals"
++msgstr "tÃnh tá»n&G kÃch thưá»c"
++
++#: src/option.c:67
++msgid "&Verbose operation"
++msgstr "thao tác vá»i thông báo &Dà i dòng"
++
++#: src/option.c:69
++msgid "&Fast dir reload"
++msgstr "nạ&P nhanh thư mục"
++
++#: src/option.c:70
++msgid "mi&X all files"
++msgstr "trá»n lẫn tất &Cả táºp tin"
++
++#: src/option.c:71
++msgid "&Drop down menus"
++msgstr "Äẩy &Xuá»ng trình ÄÆ¡n"
++
++#: src/option.c:72
++msgid "ma&Rk moves down"
++msgstr "&Nhãn di chuyá»n xuá»ng"
++
++#: src/option.c:73
++msgid "show &Hidden files"
++msgstr "&Hiá»n thá» táºp tin ẩn"
++
++#: src/option.c:74
++msgid "show &Backup files"
++msgstr "hiá»n thá» táºp tin sao &Lưu"
++
++#: src/option.c:85
++msgid "&Never"
++msgstr "&Không bao giá»"
++
++#: src/option.c:86
++msgid "on dumb &Terminals"
++msgstr "&Trên terminal ngu"
++
++#: src/option.c:87
++msgid "Alwa&ys"
++msgstr "&Luôn luôn"
++
++#: src/option.c:123
++msgid " Panel options "
++msgstr " Cấu hình bảng "
++
++#: src/option.c:124
++msgid " Pause after run... "
++msgstr " Tạm ngừng sau khi chạy... "
++
++#: src/option.c:170
++msgid "Configure options"
++msgstr "Tùy chá»n cấu hình"
++
++#: src/panelize.c:67
++msgid "&Add new"
++msgstr "&Thêm má»i"
++
++#: src/panelize.c:154 src/panelize.c:420
++msgid "External panelize"
++msgstr "Bảng ngoà i"
++
++#: src/panelize.c:169
++msgid "Command"
++msgstr "Câu lá»nh"
++
++#: src/panelize.c:185 src/panelize.c:242 src/panelize.c:313 src/panelize.c:334
++msgid "Other command"
++msgstr "Lá»nh khác"
++
++#: src/panelize.c:226
++msgid " Add to external panelize "
++msgstr " Thêm và o bảng ngoà i "
++
++#: src/panelize.c:227
++msgid " Enter command label: "
++msgstr " Nháºp tên câu lá»nh: "
++
++#: src/panelize.c:267
++msgid " Cannot run external panelize in a non-local directory "
++msgstr " Không thá» chạy câu lá»nh nà y trên má»t thư mục không phải ná»i bá» "
++
++#: src/panelize.c:316
++msgid "Find rejects after patching"
++msgstr "Tìm những loại bá» sau khi vá lá»i (patch)"
++
++#: src/panelize.c:317
++msgid "Find *.orig after patching"
++msgstr "Tìm *.orig) sau khi vá lá»i (patch)"
++
++#: src/panelize.c:318
++msgid "Find SUID and SGID programs"
++msgstr "Tìm chương trình có các bit SUID/SGID"
++
++#: src/panelize.c:369
++msgid "Cannot invoke command."
++msgstr "Không thá»±c hiá»n ÄÆ°á»£c câu lá»nh."
++
++#: src/panelize.c:420
++msgid "Pipe close failed"
++msgstr "Äóng ÄÆ°á»ng á»ng không thà nh công"
++
++#: src/popt.c:547
++msgid "missing argument"
++msgstr "thiếu tham sá»"
++
++#: src/popt.c:549
++msgid "unknown option"
++msgstr "tùy chá»n không rõ"
++
++#: src/popt.c:555
++msgid "invalid numeric value"
++msgstr "giá trá» sá» không thÃch hợp"
++
++#: src/popthelp.c:31
++msgid "Show this help message"
++msgstr "Hiá»n thá» thông báo trợ giúp nà y"
++
++#: src/popthelp.c:32
++msgid "Display brief usage message"
++msgstr "Hiá»n thá» chá» dẫn ngắn gá»n"
++
++#: src/popthelp.c:60
++msgid "ARG"
++msgstr "ARG"
++
++#: src/popthelp.c:179
++msgid "Usage:"
++msgstr "SỠdụng:"
++
++#: src/screen.c:201
++msgid "UP--DIR"
++msgstr "LÃNTRÃN"
++
++#: src/screen.c:222
++msgid "SYMLINK"
++msgstr "LIÃNKẾTMá»M"
++
++#: src/screen.c:226
++msgid "SUB-DIR"
++msgstr "THƯMỤCCON"
++
++#: src/screen.c:406 src/screen.c:407
++msgid "Size"
++msgstr "KÃch cỡ"
++
++#: src/screen.c:409
++msgid "MTime"
++msgstr "Thá»i gian sá»a"
++
++#: src/screen.c:410
++msgid "ATime"
++msgstr "Truy cáºp cuá»i cùng"
++
++#: src/screen.c:411
++msgid "CTime"
++msgstr "Thá»i gian thay Äá»i"
++
++#: src/screen.c:412
++msgid "Permission"
++msgstr "Quyá»n hạn"
++
++#: src/screen.c:413
++msgid "Perm"
++msgstr "Quyá»n"
++
++#: src/screen.c:414
++msgid "Nl"
++msgstr "Nl"
++
++#: src/screen.c:415
++msgid "Inode"
++msgstr "Nút"
++
++#: src/screen.c:416
++msgid "UID"
++msgstr "UID"
++
++#: src/screen.c:417
++msgid "GID"
++msgstr "GID"
++
++#: src/screen.c:418
++msgid "Owner"
++msgstr "Chủ sỠhữu"
++
++#: src/screen.c:419
++msgid "Group"
++msgstr "Nhóm"
++
++#: src/screen.c:655
++#, c-format
++msgid "%s bytes in %d file"
++msgstr "%s byte trong %d táºp tin"
++
++#: src/screen.c:655
++#, c-format
++msgid "%s bytes in %d files"
++msgstr "%s byte trong %d táºp tin"
++
++#: src/screen.c:681
++msgid "<readlink failed>"
++msgstr "<Äá»c liên kết không thà nh công>"
++
++#: src/screen.c:1289
++msgid "Unknown tag on display format: "
++msgstr "Thẻ ghi không rõ trong Äá»nh dạng hiá»n thá»: "
++
++#: src/screen.c:1415
++msgid "User supplied format looks invalid, reverting to default."
++msgstr "Äá»nh dạng ngưá»i dùng ÄÆ°a ra có vẻ không thÃch hợp, chuyá»n lại thà nh mặc Äá»nh."
++
++#: src/screen.c:1952
++msgid " Do you really want to execute? "
++msgstr " Thá»±c sá»± muá»n thá»±c hiá»n? "
++
++#: src/screen.c:2186
++msgid "View"
++msgstr "Xem "
++
++#: src/screen.c:2187 src/view.c:2231
++msgid "Edit"
++msgstr "Soạn "
++
++#: src/screen.c:2189 src/tree.c:977
++msgid "RenMov"
++msgstr "Chuyá»n"
++
++#: src/screen.c:2190 src/tree.c:981
++msgid "Mkdir"
++msgstr "Tạotm "
++
++#: src/selcodepage.c:54
++msgid " Choose input codepage "
++msgstr " Chá»n bảng mã dữ liá»u và o "
++
++#: src/selcodepage.c:58
++msgid "- < No translation >"
++msgstr "- < Không có dá»ch >"
++
++#: src/selcodepage.c:106
++msgid ""
++"To use this feature select your codepage in\n"
++"Setup / Display Bits dialog!\n"
++"Do not forget to save options."
++msgstr ""
++"Äá» sá» dụng tÃnh nÄng nà y, hãy chá»n bảng mã trong\n"
++"trình ÄÆ¡n Cấu hình / há»p thoại Bit hiá»n thá»!\n"
++"Äừng quên ghi nhá» lại cấu hình."
++
++#: src/slint.c:188
++#, c-format
++msgid ""
++"Screen size %dx%d is not supported.\n"
++"Check the TERM environment variable.\n"
++msgstr ""
++"KÃch thưá»c mà n hình %dx%d không ÄÆ°á»£c há» trợ.\n"
++"Hãy kiá»m tra biến môi trưá»ng TERM.\n"
++
++#: src/subshell.c:320
++msgid ""
++"GNU Midnight Commander is already\n"
++"running on this terminal.\n"
++"Subshell support will be disabled."
++msgstr ""
++"Má»t GNU Midnight Commander Äã là m viá»c\n"
++"trên terminal nà y. Sẽ không có hỠtrợ\n"
++"shell con."
++
++#: src/subshell.c:425
++#, c-format
++msgid "Cannot open named pipe %s\n"
++msgstr "Không má» ÄÆ°á»£c ÄÆ°á»ng á»ng tên (named pipe) %s\n"
++
++#: src/subshell.c:653
++msgid " The shell is still active. Quit anyway? "
++msgstr " Shell vẫn còn hoạt Äá»ng. Vẫn thoát? "
++
++#: src/subshell.c:790
++#, c-format
++msgid "Warning: Cannot change to %s.\n"
++msgstr "Cảnh báo: Không chuyá»n ÄÆ°á»£c và o %s.\n"
++
++#: src/textconf.c:50
++msgid "With builtin Editor\n"
++msgstr "Vá»i Trình soạn thảo ná»i trú\n"
++
++#: src/textconf.c:56
++msgid "Using system-installed S-Lang library"
++msgstr "Sá» dụng thư viá»c cá»§a S-Lang há» thá»ng"
++
++#: src/textconf.c:58
++msgid "Using included S-Lang library"
++msgstr "Sá» dụng thư viá»c S-Lang bao gá»m"
++
++#: src/textconf.c:64
++msgid "with termcap database"
++msgstr "vá»i cÆ¡ sá» dữ liá»u termcap"
++
++#: src/textconf.c:66
++msgid "with terminfo database"
++msgstr "vá»i cÆ¡ sá» dữ liá»u terminfo"
++
++#: src/textconf.c:70
++msgid "Using the ncurses library"
++msgstr "Dùng thư viá»n ncurses"
++
++#: src/textconf.c:79
++msgid "With optional subshell support"
++msgstr "Vá»i há» trợ shell con không bắt buá»c"
++
++#: src/textconf.c:81
++msgid "With subshell support as default"
++msgstr "Vá»i há» trợ shell con mặc Äá»nh"
++
++#: src/textconf.c:87
++msgid "With support for background operations\n"
++msgstr "Vá»i há» trợ thao tác ná»n sau\n"
++
++#: src/textconf.c:91
++msgid "With mouse support on xterm and Linux console\n"
++msgstr "Vá»i há» trợ chuá»t trong xterm và kênh giao tác Linux\n"
++
++#: src/textconf.c:93
++msgid "With mouse support on xterm\n"
++msgstr "Vá»i há» trợ chuá»t trong xterm\n"
++
++#: src/textconf.c:97
++msgid "With support for X11 events\n"
++msgstr "Vá»i há» trợ sá»± kiá»n X11\n"
++
++#: src/textconf.c:101
++msgid "With internationalization support\n"
++msgstr "Vá»i há» trợ các ngôn ngữ khác\n"
++
++#: src/textconf.c:105
++msgid "With multiple codepages support\n"
++msgstr "Vá»i há» trợ nhiá»u bảng mã\n"
++
++#: src/textconf.c:121
++msgid "Virtual File System:"
++msgstr "Há» thá»ng táºp tin ảo:"
++
++#: src/tree.c:147
++#, c-format
++msgid ""
++"Cannot open the %s file for writing:\n"
++"%s\n"
++msgstr ""
++"Không má» ÄÆ°á»£c táºp tin %s Äá» ghi nhá»:\n"
++"%s\n"
++
++#: src/tree.c:591
++#, c-format
++msgid "Copy \"%s\" directory to:"
++msgstr " Sao chép thư mục \"%s\" và o:"
++
++#: src/tree.c:632
++#, c-format
++msgid "Move \"%s\" directory to:"
++msgstr " Di chuyá»n thư mục \"%s\" và o:"
++
++#: src/tree.c:642
++#, c-format
++msgid ""
++" Cannot stat the destination \n"
++" %s "
++msgstr ""
++" Không lấy (stat) ÄÆ°á»£c thuá»c tÃnh cá»§a ÄÃch Äến \n"
++" %s "
++
++#: src/tree.c:705
++#, c-format
++msgid " Delete %s? "
++msgstr " Xóa %s? "
++
++#: src/tree.c:735
++msgid "Static"
++msgstr "Tĩnh"
++
++#: src/tree.c:735
++msgid "Dynamc"
++msgstr "Äá»ng"
++
++#: src/tree.c:971
++msgid "Rescan"
++msgstr "Quét lại"
++
++#: src/tree.c:973
++msgid "Forget"
++msgstr "Quên"
++
++#: src/tree.c:986
++msgid "Rmdir"
++msgstr "Xóa thư mục"
++
++#: src/treestore.c:343
++#, c-format
++msgid ""
++"Cannot write to the %s file:\n"
++"%s\n"
++msgstr ""
++"Không ghi nhá» ÄÆ°á»£c và o táºp tin %s:\n"
++"%s\n"
++
++#: src/user.c:133
++msgid " Format error on file Extensions File "
++msgstr " Lá»i Äá»nh dạng táºp tin \"Phần má» rá»ng cá»§a táºp tin\" "
++
++#: src/user.c:134
++#, c-format
++msgid " The %%var macro has no default "
++msgstr " Macro %%var không có giá trá» mặc Äá»nh "
++
++#: src/user.c:135
++#, c-format
++msgid " The %%var macro has no variable "
++msgstr " Macro %%var không có giá trỠbiến "
++
++#: src/user.c:447
++msgid " Debug "
++msgstr " Sá»a lá»i "
++
++#: src/user.c:456
++msgid " ERROR: "
++msgstr " Lá»I: "
++
++#: src/user.c:460
++msgid " True: "
++msgstr " Äúng: "
++
++#: src/user.c:462
++msgid " False: "
++msgstr " Sai: "
++
++#: src/user.c:669
++msgid " Warning -- ignoring file "
++msgstr " Cảnh báo - táºp tin bá» lá» Äi "
++
++#: src/user.c:670
++#, c-format
++msgid ""
++"File %s is not owned by root or you or is world writable.\n"
++"Using it may compromise your security"
++msgstr ""
++"Táºp tin %s không thuá»c quyá»n sá» hữu cá»§a root, hay cá»§a bạn,\n"
++"hoặc ai cÅ©ng có thá» ghi. Sá» dụng táºp tin nà y có thá» không an toà n"
++
++#: src/user.c:792
++#, c-format
++msgid " No suitable entries found in %s "
++msgstr " Không tìm thấy mục thÃch hợp trong %s"
++
++#: src/user.c:798
++msgid " User menu "
++msgstr " Trình ÄÆ¡n ngưá»i dùng "
++
++#: src/util.c:671 src/util.c:697
++msgid "%b %e %H:%M"
++msgstr "%b %e %H:%M"
++
++#: src/util.c:672 src/util.c:695
++msgid "%b %e %Y"
++msgstr "%b %e %Y"
++
++#: src/utilunix.c:333
++#, c-format
++msgid "%s is not a directory\n"
++msgstr "%s không phải là má»t thư mục\n"
++
++#: src/utilunix.c:335
++#, c-format
++msgid "Directory %s is not owned by you\n"
++msgstr "Bạn không sỠhữu thư mục %s\n"
++
++#: src/utilunix.c:338
++#, c-format
++msgid "Cannot set correct permissions for directory %s\n"
++msgstr "Không Äặt ÄÆ°á»£c quyá»n hạn Äúng cho thư mục %s\n"
++
++#: src/utilunix.c:343
++#, c-format
++msgid "Cannot create temporary directory %s: %s\n"
++msgstr "Không tạo ÄÆ°á»£c thư mục tạm thá»i %s: %s\n"
++
++#: src/utilunix.c:373
++#, c-format
++msgid "Temporary files will be created in %s\n"
++msgstr "Táºp tin tạm thá»i sẽ ÄÆ°á»£c tạo trong thư mục %s\n"
++
++#: src/utilunix.c:376
++msgid "Temporary files will not be created\n"
++msgstr "Táºp tin tạm thá»i sẽ không ÄÆ°á»£c tạo ra\n"
++
++#: src/utilunix.c:401
++msgid " Pipe failed "
++msgstr " Lá»i ÄÆ°á»ng á»ng "
++
++#: src/utilunix.c:405
++msgid " Dup failed "
++msgstr " Lá»i lặp lại "
++
++#: src/view.c:502
++msgid " Cannot spawn child program "
++msgstr " Không sinh ra ÄÆ°á»£c tiến trình con "
++
++#: src/view.c:513
++msgid "Empty output from child filter"
++msgstr "Bá» lá»c con trả lại kết quả rá»ng"
++
++#: src/view.c:519
++msgid " Cannot open file "
++msgstr " Không má» ÄÆ°á»£c táºp tin "
++
++#: src/view.c:618
++#, c-format
++msgid ""
++" Cannot open \"%s\"\n"
++" %s "
++msgstr ""
++" Không má» ÄÆ°á»£c \"%s\"\n"
++" %s "
++
++#: src/view.c:627
++#, c-format
++msgid ""
++" Cannot stat \"%s\"\n"
++" %s "
++msgstr ""
++" Không lấy (stat) ÄÆ°á»£c thuá»c tÃnh \"%s\"\n"
++" %s "
++
++#: src/view.c:636
++msgid " Cannot view: not a regular file "
++msgstr " Không xem ÄÆ°á»£c vì lý do: không\n"
++" phải táºp tin thông thưá»ng "
++
++#: src/view.c:775
++#, c-format
++msgid "File: %s"
++msgstr "Táºp tin: %s"
++
++#: src/view.c:790
++#, c-format
++msgid "Offset 0x%08lx"
++msgstr "Bá» offset 0x%08lx"
++
++#: src/view.c:792
++#, c-format
++msgid "Col %d"
++msgstr "Cá»t %d"
++
++#: src/view.c:796
++#, c-format
++msgid "%s bytes"
++msgstr "%s byte"
++
++#: src/view.c:801
++msgid " [grow]"
++msgstr " [lá»n lên]"
++
++#: src/view.c:1826
++msgid "Invalid hex search expression"
++msgstr "Biá»u thức tìm kiếm hex không Äúng"
++
++#: src/view.c:1880
++msgid " Invalid regular expression "
++msgstr " Biá»u thức chÃnh quy không Äúng"
++
++#: src/view.c:2003
++#, c-format
++msgid ""
++" The current line number is %d.\n"
++" Enter the new line number:"
++msgstr ""
++" Sá» thứ tá»± dòng hiá»n thá»i %d.\n"
++" Hãy nháºp sá» thứ tá»± dòng muá»n chuyá»n Äến:"
++
++#: src/view.c:2026
++#, c-format
++msgid ""
++" The current address is 0x%lx.\n"
++" Enter the new address:"
++msgstr ""
++" Äá»a chá» hiá»n thá»i - 0x%lx.\n"
++" Hãy nháºp Äá»a chá» má»i:"
++
++#: src/view.c:2028
++msgid " Goto Address "
++msgstr " Äi tá»i Äá»a chá» "
++
++#: src/view.c:2060
++msgid " Enter regexp:"
++msgstr " Nháºp biá»u thức chÃnh quy:"
++
++#: src/view.c:2216
++msgid "Ascii"
++msgstr "Ascii"
++
++#: src/view.c:2216
++msgid "Hex"
++msgstr "Hex"
++
++#: src/view.c:2218
++msgid "Goto"
++msgstr "ÄiTá»i"
++
++#: src/view.c:2218
++msgid "Line"
++msgstr "Dòng"
++
++#: src/view.c:2220
++msgid "RxSrch"
++msgstr "TìmRx"
++
++#: src/view.c:2225
++msgid "EdHex"
++msgstr "SoạnHex"
++
++#: src/view.c:2225
++msgid "EdText"
++msgstr "SoạnVb"
++
++#: src/view.c:2233
++msgid "UnWrap"
++msgstr "Bá»Wrap"
++
++#: src/view.c:2233
++msgid "Wrap"
++msgstr "CóWrap"
++
++#: src/view.c:2236
++msgid "HxSrch"
++msgstr "TìmHx"
++
++#: src/view.c:2239
++msgid "Raw"
++msgstr "Thô"
++
++#: src/view.c:2239
++msgid "Parse"
++msgstr "PhtÃch"
++
++#: src/view.c:2244
++msgid "Unform"
++msgstr "K0dạng"
++
++#: src/view.c:2244
++msgid "Format"
++msgstr "CóDạng"
++
++#: src/widget.c:911
++msgid " History "
++msgstr " Lá»ch sá»"
++
++#: src/win.c:159
++msgid "Function key 1"
++msgstr "PhÃm chức nÄng 1"
++
++#: src/win.c:160
++msgid "Function key 2"
++msgstr "PhÃm chức nÄng 2"
++
++#: src/win.c:161
++msgid "Function key 3"
++msgstr "PhÃm chức nÄng 3"
++
++#: src/win.c:162
++msgid "Function key 4"
++msgstr "PhÃm chức nÄng 4"
++
++#: src/win.c:163
++msgid "Function key 5"
++msgstr "PhÃm chức nÄng 5"
++
++#: src/win.c:164
++msgid "Function key 6"
++msgstr "PhÃm chức nÄng 6"
++
++#: src/win.c:165
++msgid "Function key 7"
++msgstr "PhÃm chức nÄng 7"
++
++#: src/win.c:166
++msgid "Function key 8"
++msgstr "PhÃm chức nÄng 8"
++
++#: src/win.c:167
++msgid "Function key 9"
++msgstr "PhÃm chức nÄng 9"
++
++#: src/win.c:168
++msgid "Function key 10"
++msgstr "PhÃm chức nÄng 10"
++
++#: src/win.c:169
++msgid "Function key 11"
++msgstr "PhÃm chức nÄng 11"
++
++#: src/win.c:170
++msgid "Function key 12"
++msgstr "PhÃm chức nÄng 12"
++
++#: src/win.c:171
++msgid "Function key 13"
++msgstr "PhÃm chức nÄng 13"
++
++#: src/win.c:172
++msgid "Function key 14"
++msgstr "PhÃm chức nÄng 14"
++
++#: src/win.c:173
++msgid "Function key 15"
++msgstr "PhÃm chức nÄng 15"
++
++#: src/win.c:174
++msgid "Function key 16"
++msgstr "PhÃm chức nÄng 16"
++
++#: src/win.c:175
++msgid "Function key 17"
++msgstr "PhÃm chức nÄng 17"
++
++#: src/win.c:176
++msgid "Function key 18"
++msgstr "PhÃm chức nÄng 18"
++
++#: src/win.c:177
++msgid "Function key 19"
++msgstr "PhÃm chức nÄng 19"
++
++#: src/win.c:178
++msgid "Function key 20"
++msgstr "PhÃm chức nÄng 20"
++
++#: src/win.c:179
++msgid "Backspace key"
++msgstr "PhÃm Backspace"
++
++#: src/win.c:180
++msgid "End key"
++msgstr "PhÃm End"
++
++#: src/win.c:181
++msgid "Up arrow key"
++msgstr "PhÃm mÅ©i tên lên"
++
++#: src/win.c:182
++msgid "Down arrow key"
++msgstr "PhÃm mÅ©i tên xuá»ng"
++
++#: src/win.c:183
++msgid "Left arrow key"
++msgstr "PhÃm mÅ©i tên sang trái"
++
++#: src/win.c:184
++msgid "Right arrow key"
++msgstr "PhÃm mÅ©i tên sang phải"
++
++#: src/win.c:185
++msgid "Home key"
++msgstr "PhÃm Home"
++
++#: src/win.c:186
++msgid "Page Down key"
++msgstr "PhÃm Page Down"
++
++#: src/win.c:187
++msgid "Page Up key"
++msgstr "PhÃm Page Up"
++
++#: src/win.c:188
++msgid "Insert key"
++msgstr "PhÃm Insert"
++
++#: src/win.c:189
++msgid "Delete key"
++msgstr "PhÃm Delete"
++
++#: src/win.c:190
++msgid "Completion/M-tab"
++msgstr "Hoà n thà nh/M-Tab"
++
++#: src/win.c:191
++msgid "+ on keypad"
++msgstr "+ trên phần keypad"
++
++#: src/win.c:192
++msgid "- on keypad"
++msgstr "- trên phần keypad"
++
++#: src/win.c:193
++msgid "* on keypad"
++msgstr "* trên phần keypad"
++
++#: src/win.c:195
++msgid "Left arrow keypad"
++msgstr "Mũi tên sang trái trên phần keypad"
++
++#: src/win.c:196
++msgid "Right arrow keypad"
++msgstr "Mũi tên sang phải trên phần keypad"
++
++#: src/win.c:197
++msgid "Up arrow keypad"
++msgstr "Mũi tên lên trên của phần keypad"
++
++#: src/win.c:198
++msgid "Down arrow keypad"
++msgstr "MÅ©i tên xuá»ng dưá»i cá»§a phần keypad"
++
++#: src/win.c:199
++msgid "Home on keypad"
++msgstr "Home trên keypad"
++
++#: src/win.c:200
++msgid "End on keypad"
++msgstr "End trên keypad"
++
++#: src/win.c:201
++msgid "Page Down keypad"
++msgstr "Page Down trên keypad"
++
++#: src/win.c:202
++msgid "Page Up keypad"
++msgstr "Page Up trên keypad"
++
++#: src/win.c:203
++msgid "Insert on keypad"
++msgstr "Insert trên keypad"
++
++#: src/win.c:204
++msgid "Delete on keypad"
++msgstr "Delete trên keypad"
++
++#: src/win.c:205
++msgid "Enter on keypad"
++msgstr "Enter trên keypad"
++
++#: src/win.c:206
++msgid "Slash on keypad"
++msgstr "Slash trên keypad"
++
++#: src/win.c:207
++msgid "NumLock on keypad"
++msgstr "NumLock trên keypad"
++
++#: src/wtools.c:256
++msgid "Background process:"
++msgstr "Tiến trình ná»n sau:"
++
++#: vfs/cpio.c:142 vfs/cpio.c:158
++#, c-format
++msgid ""
++"Cannot open cpio archive\n"
++"%s"
++msgstr ""
++"Không má» ÄÆ°á»£c táºp tin nén cpio\n"
++"%s"
++
++#: vfs/cpio.c:223
++#, c-format
++msgid ""
++"Premature end of cpio archive\n"
++"%s"
++msgstr ""
++"Phần cuá»i cá»§a táºp tin nén cpio bá» há»ng\n"
++"%s"
++
++#: vfs/cpio.c:309 vfs/cpio.c:359
++#, c-format
++msgid ""
++"Corrupted cpio header encountered in\n"
++"%s"
++msgstr ""
++"Lá»i phần Äầu cpio phát hiá»n trong\n"
++"%s"
++
++#: vfs/cpio.c:432
++#, c-format
++msgid ""
++"Inconsistent hardlinks of\n"
++"%s\n"
++"in cpio archive\n"
++"%s"
++msgstr ""
++"Liên kết cứng không thÃch hợp \n"
++"%s\n"
++"trong táºp tin nén cpio\n"
++"%s"
++
++#: vfs/cpio.c:457
++#, c-format
++msgid "%s contains duplicate entries! Skipping!"
++msgstr "%s chứa mục lặp lại! Nhảy qua!"
++
++#: vfs/cpio.c:526
++#, c-format
++msgid ""
++"Unexpected end of file\n"
++"%s"
++msgstr ""
++"Kết thúc táºp tin không mong Äợi\n"
++"%s"
++
++#: vfs/direntry.c:326
++#, c-format
++msgid "Directory cache expired for %s"
++msgstr "Cache thư mục hết hạn cho %s"
++
++#: vfs/direntry.c:749
++msgid "Starting linear transfer..."
++msgstr "Chạy truyá»n tải theo ÄÆ°á»ng thẳng..."
++
++#: vfs/direntry.c:886
++#, c-format
++msgid "%s: %s: %s %3d%% (%lu bytes transferred)"
++msgstr "%s: %s: %s %3d%% (Äã truyá»n tải %lu byte)"
++
++#: vfs/direntry.c:887
++#, c-format
++msgid "%s: %s: %s %lu bytes transferred"
++msgstr "%s: %s: %s Äã truyá»n tải %lu byte"
++
++#: vfs/direntry.c:933
++msgid "Getting file"
++msgstr "Nháºn táºp tin"
++
++#: vfs/extfs.c:303
++#, c-format
++msgid ""
++"Cannot open %s archive\n"
++"%s"
++msgstr ""
++"Không má» ÄÆ°á»£c táºp tin nén %s\n"
++"%s"
++
++#: vfs/extfs.c:343 vfs/extfs.c:365 vfs/extfs.c:415
++msgid "Inconsistent extfs archive"
++msgstr "Táºp tin nén extfs không thÃch hợp"
++
++#: vfs/fish.c:157
++#, c-format
++msgid "fish: Disconnecting from %s"
++msgstr "fish: Ngừng kết ná»i từ %s"
++
++#: vfs/fish.c:232
++msgid "fish: Waiting for initial line..."
++msgstr "fish: Äang chá»i dòng Äầu tiên..."
++
++#: vfs/fish.c:244
++msgid "Sorry, we cannot do password authenticated connections for now."
++msgstr "Xin lá»i, bây giá» không thá» tạo kết ná»i xác thá»±c theo máºt khẩu."
++
++#: vfs/fish.c:249
++msgid " fish: Password required for "
++msgstr "fish: yêu cầu máºt khẩu cho "
++
++#: vfs/fish.c:258
++msgid "fish: Sending password..."
++msgstr "fish: Äang gá»i máºt khẩu..."
++
++#: vfs/fish.c:264
++msgid "fish: Sending initial line..."
++msgstr "fish: Äang gá»i dòng Äầu tiên..."
++
++#: vfs/fish.c:275
++msgid "fish: Handshaking version..."
++msgstr "fish: Äang xác nháºn phiên bản..."
++
++#: vfs/fish.c:289
++msgid "fish: Setting up current directory..."
++msgstr "fish: Äang Äặt thư mục hiá»n thá»i..."
++
++#: vfs/fish.c:291
++#, c-format
++msgid "fish: Connected, home %s."
++msgstr "fish: Kết ná»i thà nh công, thư mục cá nhân %s."
++
++#: vfs/fish.c:375
++#, c-format
++msgid "fish: Reading directory %s..."
++msgstr "fish: Äá»c thư mục %s..."
++
++#: vfs/fish.c:477 vfs/ftpfs.c:1277 vfs/undelfs.c:343
++#, c-format
++msgid "%s: done."
++msgstr "%s: xong."
++
++#: vfs/fish.c:482 vfs/ftpfs.c:1247 vfs/undelfs.c:346
++#, c-format
++msgid "%s: failure"
++msgstr "%s: lá»i"
++
++#: vfs/fish.c:507
++#, c-format
++msgid "fish: store %s: sending command..."
++msgstr "fish: bản ghi %s: Äang gá»i câu lá»nh..."
++
++#: vfs/fish.c:548
++msgid "fish: Local read failed, sending zeros"
++msgstr "fish: Lá»i Äá»c ná»i bá», Äang gá»i các sá» không"
++
++#: vfs/fish.c:560
++#, c-format
++msgid "fish: storing %s %d (%lu)"
++msgstr "fish: ghi %s %d (%lu)"
++
++#: vfs/fish.c:561
++msgid "zeros"
++msgstr "các sỠkhông"
++
++#: vfs/fish.c:613
++msgid "Aborting transfer..."
++msgstr "Dừng truyá»n tải..."
++
++#: vfs/fish.c:622
++msgid "Error reported after abort."
++msgstr "Có lá»i báo cáo sau khi dừng."
++
++#: vfs/fish.c:624
++msgid "Aborted transfer would be successful."
++msgstr "Dừng truyá»n tải thà nh công."
++
++#: vfs/ftpfs.c:378
++#, c-format
++msgid "ftpfs: Disconnecting from %s"
++msgstr "ftpfs: Ngắt kết ná»i từ %s"
++
++#: vfs/ftpfs.c:433
++msgid " FTP: Password required for "
++msgstr " FTP: Cần máºt khẩu cho "
++
++#: vfs/ftpfs.c:469
++msgid "ftpfs: sending login name"
++msgstr "ftpfs: Äang gá»i tên ÄÄng nháºp"
++
++#: vfs/ftpfs.c:473
++msgid "ftpfs: sending user password"
++msgstr "ftpfs: Äang gá»i máºt khẩu ngưá»i dùng"
++
++#: vfs/ftpfs.c:479
++#, c-format
++msgid "FTP: Account required for user %s"
++msgstr "FTP: Yêu cầu tà i khoản cho ngưá»i dùng %s"
++
++#: vfs/ftpfs.c:481
++msgid "Account:"
++msgstr "Tà i khoản:"
++
++#: vfs/ftpfs.c:485
++msgid "ftpfs: sending user account"
++msgstr "ftpfs: Äang gá»i tà i khoản ngưá»i dùng"
++
++#: vfs/ftpfs.c:495
++msgid "ftpfs: logged in"
++msgstr "ftpfs: Äã ÄÄng nháºp"
++
++#: vfs/ftpfs.c:509
++#, c-format
++msgid "ftpfs: Login incorrect for user %s "
++msgstr "ftpfs: lá»i ÄÄng nháºp cho ngưá»i dùng %s "
++
++#: vfs/ftpfs.c:633
++msgid "ftpfs: Invalid host name."
++msgstr "ftpfs: Tên máy không Äúng."
++
++#: vfs/ftpfs.c:651
++msgid "ftpfs: Invalid host address."
++msgstr "ftpfs: Äá»a chá» không Äúng."
++
++#: vfs/ftpfs.c:673
++#, c-format
++msgid "ftpfs: making connection to %s"
++msgstr "ftpfs: Thá»±c hiá»n kết ná»i vá»i %s"
++
++#: vfs/ftpfs.c:683
++msgid "ftpfs: connection interrupted by user"
++msgstr "ftpfs: ngưá»i dùng dừng kết ná»i giữa chừng"
++
++#: vfs/ftpfs.c:685
++#, c-format
++msgid "ftpfs: connection to server failed: %s"
++msgstr "ftpfs: kết ná»i tá»i máy chá»§ không thà nh công: %s"
++
++#: vfs/ftpfs.c:726
++#, c-format
++msgid "Waiting to retry... %d (Control-C to cancel)"
++msgstr "Chá» thá» lại... %d (Control-C Äá» há»§y bá»)"
++
++#: vfs/ftpfs.c:906
++msgid "ftpfs: could not setup passive mode"
++msgstr "ftpfs: không Äặt ÄÆ°á»£c chế Äá» bá» Äá»ng (passive)"
++
++#: vfs/ftpfs.c:985
++msgid "ftpfs: aborting transfer."
++msgstr "ftpfs: dừng truyá»n tải."
++
++#: vfs/ftpfs.c:987
++#, c-format
++msgid "ftpfs: abort error: %s"
++msgstr "ftpfs: lá»i thoát: %s"
++
++#: vfs/ftpfs.c:995
++msgid "ftpfs: abort failed"
++msgstr "ftpfs: sự cỠthoát"
++
++#: vfs/ftpfs.c:1099 vfs/ftpfs.c:1203
++msgid "ftpfs: CWD failed."
++msgstr "ftpfs: CWD (thay Äá»i thư mục) không thà nh công."
++
++#: vfs/ftpfs.c:1109 vfs/ftpfs.c:1116
++msgid "ftpfs: couldn't resolve symlink"
++msgstr "ftpfs: không tìm ÄÆ°á»£c liên kết má»m"
++
++#: vfs/ftpfs.c:1167
++msgid "Resolving symlink..."
++msgstr "Äang tìm liên kết má»m..."
++
++#: vfs/ftpfs.c:1189
++#, c-format
++msgid "ftpfs: Reading FTP directory %s... %s%s"
++msgstr "ftpfs: Äá»c thư mục FTP %s... %s%s"
++
++#: vfs/ftpfs.c:1192
++msgid "(strict rfc959)"
++msgstr "(hạn chế rfc959)"
++
++#: vfs/ftpfs.c:1193
++msgid "(chdir first)"
++msgstr "(Äầu tiên chdir)"
++
++#: vfs/ftpfs.c:1290
++msgid "ftpfs: failed; nowhere to fallback to"
++msgstr "ftpfs: lá»i; không có nÆ¡i nà o Äá» quay lại vá»"
++
++#: vfs/ftpfs.c:1355
++#, c-format
++msgid "ftpfs: storing file %lu (%lu)"
++msgstr "ftpfs: ghi táºp tin %lu (%lu)"
++
++#: vfs/ftpfs.c:1740
++msgid ""
++"~/.netrc file has incorrect mode.\n"
++"Remove password or correct mode."
++msgstr ""
++"Táºp tin ~/.netrc có chế Äá» truy cáºp/sá» hữu không Äúng.\n"
++"Hãy xóa máºt khẩu hoặc sá»a lại chế Äá» cho Äúng."
++
++#: vfs/mcfs.c:122 vfs/mcfs.c:167
++msgid " MCFS "
++msgstr " MCFS "
++
++#: vfs/mcfs.c:123
++msgid " The server does not support this version "
++msgstr " Máy chủ không hỠtrợ phiên bản nà y "
++
++#: vfs/mcfs.c:140
++msgid ""
++" The remote server is not running on a system port \n"
++" you need a password to log in, but the information may \n"
++" not be safe on the remote side. Continue? \n"
++msgstr ""
++" Máy chá»§ á» xa không chạy trên má»t cá»ng há» thá»ng. Cần \n"
++" máºt khẩu Äá» ÄÄng nháºp và o, nhưng Äiá»u nà y có thá» \n"
++" không an toà n cho thông tin phÃa á» xa. Tiếp tục?\n"
++
++#: vfs/mcfs.c:153
++msgid " MCFS Password required "
++msgstr " Yêu cầu máºt khẩu MCFS "
++
++#: vfs/mcfs.c:167
++msgid " Invalid password "
++msgstr " Máºt khẩu không Äúng "
++
++#: vfs/mcfs.c:227
++#, c-format
++msgid " Cannot locate hostname: %s "
++msgstr " Không xác Äá»nh ÄÆ°á»£c tên máy á» xa: %s"
++
++#: vfs/mcfs.c:246
++#, c-format
++msgid " Cannot create socket: %s "
++msgstr " Không tạo ÄÆ°á»£c socket: %s "
++
++#: vfs/mcfs.c:252
++#, c-format
++msgid " Cannot connect to server: %s "
++msgstr " Không kết ná»i ÄÆ°á»£c tá»i máy chá»§: %s "
++
++#: vfs/mcfs.c:322
++msgid " Too many open connections "
++msgstr " Quá nhiá»u kết ná»i má» "
++
++#: vfs/sfs.c:346
++#, c-format
++msgid ""
++"Warning: Invalid line in %s:\n"
++"%s\n"
++msgstr ""
++"Cảnh báo: dòng không Äúng trong %s:\n"
++"%s\n"
++
++#: vfs/sfs.c:358
++#, c-format
++msgid ""
++"Warning: Invalid flag %c in %s:\n"
++"%s\n"
++msgstr ""
++"Cảnh báo: Cá» không Äúng %c trong %s:\n"
++"%s\n"
++
++#: vfs/smbfs.c:576
++#, c-format
++msgid ""
++" smbfs_reconnect to %s failed\n"
++" "
++msgstr ""
++" smbfs_reconnect (kết ná»i lại) tá»i %s không thà nh công\n"
++" "
++
++#: vfs/smbfs.c:1120
++msgid " Authentication failed "
++msgstr " Xác thực không thà nh công "
++
++#: vfs/smbfs.c:1632
++#, c-format
++msgid " Error %s creating directory %s "
++msgstr " Lá»i %s khi tạo thư mục %s "
++
++#: vfs/smbfs.c:1655
++#, c-format
++msgid " Error %s removing directory %s "
++msgstr " Lá»i %s khi xóa thư mục %s "
++
++#: vfs/smbfs.c:1744
++#, c-format
++msgid " %s opening remote file %s "
++msgstr " %s khi má» táºp tin á» xa %s "
++
++#: vfs/smbfs.c:1817
++#, c-format
++msgid " %s removing remote file %s "
++msgstr " %s khi xoá táºp tin á» xa %s "
++
++#: vfs/smbfs.c:1855
++#, c-format
++msgid " %s renaming files\n"
++msgstr " %s khi Äá»i tên các táºp tin\n"
++
++#: vfs/tar.c:212 vfs/tar.c:229
++#, c-format
++msgid ""
++"Cannot open tar archive\n"
++"%s"
++msgstr ""
++"Không má» ÄÆ°á»£c táºp tin nén tar\n"
++"%s"
++
++#: vfs/tar.c:424
++msgid "Unexpected EOF on archive file"
++msgstr "Kết thúc táºp tin EOF nén không mong Äợi"
++
++#: vfs/tar.c:476 vfs/tar.c:483
++msgid "Inconsistent tar archive"
++msgstr "Táºp tin tar không thÃch hợp"
++
++#: vfs/tar.c:561
++#, c-format
++msgid ""
++"Hmm,...\n"
++"%s\n"
++"doesn't look like a tar archive."
++msgstr ""
++"Hừm,...\n"
++"%s\n"
++"không giá»ng táºp tin tar."
++
++#: vfs/undelfs.c:82
++msgid " undelfs: error "
++msgstr " undelfs: lá»i "
++
++#: vfs/undelfs.c:189
++msgid " not enough memory "
++msgstr " không Äá»§ bá» nhá» "
++
++#: vfs/undelfs.c:194
++msgid " while allocating block buffer "
++msgstr " khi phân phá»i bá» Äá»m khá»i "
++
++#: vfs/undelfs.c:198
++#, c-format
++msgid " open_inode_scan: %d "
++msgstr " open_inode_scan: %d "
++
++#: vfs/undelfs.c:202
++#, c-format
++msgid " while starting inode scan %d "
++msgstr " khi bắt Äầu quét chá» mục nút inode %d "
++
++#: vfs/undelfs.c:211
++#, c-format
++msgid "undelfs: loading deleted files information %d inodes"
++msgstr "undelfs: nạp thông tin vá» những táºp tin bá» xóa %d inode"
++
++#: vfs/undelfs.c:229
++#, c-format
++msgid " while calling ext2_block_iterate %d "
++msgstr " khi gá»i ext2_block_iterate %d "
++
++#: vfs/undelfs.c:241
++msgid " no more memory while reallocating array "
++msgstr " không Äá»§ bá» nhá» khi phân phá»i lại chuá»i "
++
++#: vfs/undelfs.c:262
++#, c-format
++msgid " while doing inode scan %d "
++msgstr " khi quét chỠmục nút inode %d "
++
++#: vfs/undelfs.c:297
++msgid " Ext2lib error "
++msgstr " Lá»i Ext2lib "
++
++#: vfs/undelfs.c:325 vfs/undelfs.c:644
++#, c-format
++msgid " Cannot open file %s "
++msgstr " Không má» ÄÆ°á»£c táºp tin %s "
++
++#: vfs/undelfs.c:328
++msgid "undelfs: reading inode bitmap..."
++msgstr "undelfs: Äá»c sÆ¡ Äá» bit cá»§a nút inode..."
++
++#: vfs/undelfs.c:331
++#, c-format
++msgid ""
++" Cannot load inode bitmap from: \n"
++" %s \n"
++msgstr ""
++" Không nạp ÄÆ°á»£c sÆ¡ Äá» bit cá»§a nút inode từ:\n"
++" %s \n"
++
++#: vfs/undelfs.c:334
++msgid "undelfs: reading block bitmap..."
++msgstr "undelfs: Äá»c sÆ¡ Äá» bit cá»§a khá»i..."
++
++#: vfs/undelfs.c:337
++#, c-format
++msgid ""
++" Cannot load block bitmap from: \n"
++" %s \n"
++msgstr ""
++" Không nạp ÄÆ°á»£c sÆ¡ Äá» bit cá»§a khá»i từ:\n"
++" %s \n"
++
++#: vfs/undelfs.c:360
++msgid " vfs_info is not fs! "
++msgstr " vfs_info không phải là há» thá»ng táºp tin! "
++
++#: vfs/undelfs.c:416 vfs/undelfs.c:600
++msgid " You have to chdir to extract files first "
++msgstr " Äầu tiên bạn phải chdir Äá» chuyá»n tá»i thư mục chứa táºp tin cần giản nén "
++
++#: vfs/undelfs.c:539
++msgid " while iterating over blocks "
++msgstr " khi lặp lại khá»i "
++
++#: vfs/vfs.c:880
++msgid "Changes to file lost"
++msgstr "Thay Äá»i tá»i táºp tin bá» mất"
++
Added: trunk/debian/patches/28_mc-ctype.patch
===================================================================
--- trunk/debian/patches/28_mc-ctype.patch (rev 0)
+++ trunk/debian/patches/28_mc-ctype.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,10 @@
+--- edit/editcmd.c 2005-03-17 22:18:23.000000000 +0100
++++ edit/editcmd.c 2005-03-30 10:05:48.983156480 +0200
+@@ -24,7 +24,6 @@
+ /* #define PIPE_BLOCKS_SO_READ_BYTE_BY_BYTE */
+
+ #include <config.h>
+-#include <ctype.h>
+
+ #include <stdio.h>
+ #include <stdarg.h>
Added: trunk/debian/patches/28_mc-dontrewrite.patch
===================================================================
--- trunk/debian/patches/28_mc-dontrewrite.patch (rev 0)
+++ trunk/debian/patches/28_mc-dontrewrite.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,11 @@
+--- edit/editcmd.c 2005-03-17 22:18:23.000000000 +0100
++++ edit/editcmd.c 2005-03-30 09:28:25.076282176 +0200
+@@ -240,7 +240,7 @@ edit_save_file (WEdit *edit, const char
+ }
+
+ if (!vfs_file_is_local (filename) ||
+- (fd = mc_open (filename, O_WRONLY | O_BINARY)) == -1) {
++ (fd = mc_open (filename, O_RDONLY | O_BINARY)) == -1) {
+ /*
+ * The file does not exists yet, so no safe save or
+ * backup are necessary.
Added: trunk/debian/patches/32_c-vs-cxx.patch
===================================================================
--- trunk/debian/patches/32_c-vs-cxx.patch (rev 0)
+++ trunk/debian/patches/32_c-vs-cxx.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,57 @@
+--- syntax/Makefile.am 6 Dec 2004 23:14:43 -0000 1.22
++++ syntax/Makefile.am 20 Feb 2005 09:42:01 -0000
+@@ -4,4 +4,5 @@
+ aspx.syntax \
+ c.syntax \
++ cxx.syntax \
+ cs.syntax \
+ changelog.syntax \
+--- syntax/Syntax 3 Nov 2004 20:16:48 -0000 1.27
++++ syntax/Syntax 20 Feb 2005 09:42:01 -0000
+@@ -69,7 +69,10 @@
+ include texinfo.syntax
+
+-file ..\*\\.([chC]|CC|cxx|cc|cpp|CPP|CXX|hxx|h\.in)$ C/C\+\+\sProgram
++file ..\*\\.c$ C\sProgram
+ include c.syntax
+
++file ..\*\\.([hC]|CC|cxx|cc|cpp|CPP|CXX|hxx|h\.in)$ C/C\+\+\sProgram
++include cxx.syntax
++
+ file ..\*\\.[fF]$ Fortran\sProgram
+ include fortran.syntax
+--- syntax/c.syntax 15 Mar 2003 04:41:20 -0000 1.15
++++ syntax/c.syntax 20 Feb 2005 09:42:01 -0000
+@@ -33,32 +33,5 @@
+ keyword whole while yellow
+ keyword whole asm yellow
+- keyword whole catch yellow
+- keyword whole class yellow
+- keyword whole friend yellow
+- keyword whole delete yellow
+ keyword whole inline yellow
+- keyword whole new yellow
+- keyword whole operator yellow
+- keyword whole private yellow
+- keyword whole protected yellow
+- keyword whole public yellow
+- keyword whole this yellow
+- keyword whole throw yellow
+- keyword whole template yellow
+- keyword whole try yellow
+- keyword whole virtual yellow
+- keyword whole bool yellow
+- keyword whole const_cast yellow
+- keyword whole dynamic_cast yellow
+- keyword whole explicit yellow
+- keyword whole false yellow
+- keyword whole mutable yellow
+- keyword whole namespace yellow
+- keyword whole reinterpret_cast yellow
+- keyword whole static_cast yellow
+- keyword whole true yellow
+- keyword whole typeid yellow
+- keyword whole typename yellow
+- keyword whole using yellow
+ keyword whole wchar_t yellow
+ keyword whole ... yellow
Added: trunk/debian/patches/36_developer_mode.patch
===================================================================
--- trunk/debian/patches/36_developer_mode.patch (rev 0)
+++ trunk/debian/patches/36_developer_mode.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,42 @@
+--- configure.ac 2005-04-19 23:12:27.000000000 +0200
++++ configure.ac 2005-04-19 23:14:32.000000000 +0200
+@@ -556,15 +556,7 @@
+ AC_DEFINE(USE_INCLUDED_SLANG, 1, [Use the S-Lang included here])
+ fi
+
+-if test x"$USE_MAINTAINER_MODE" = x"yes"; then
+- if test x"${enable_gcc_warnings+set}" != x"set"; then
+- if test x"${GCC}" = x"yes"; then
+- CFLAGS="-Wall $CFLAGS"
+- fi
+- fi
+-fi
+-
+-ri_GCC_WARNINGS
++MC_ARG_ENABLE_DEVELOPER_MODE()
+
+ AC_SUBST(CFLAGS)
+ AC_SUBST(CPPFLAGS)
+--- acinclude.m4 2005-01-11 10:15:33.000000000 +0100
++++ acinclude.m4 2005-04-19 23:12:27.000000000 +0200
+@@ -898,3 +898,20 @@
+ [Define if functions cannot be renamed by asm labels])
+ fi
+ ])
++
++AC_DEFUN([MC_ARG_ENABLE_DEVELOPER_MODE],
++[AC_ARG_ENABLE([developer-mode],
++ AS_HELP_STRING([--enable-developer-mode], [Enable debugging help]))
++AM_CONDITIONAL([DEVELOPER], [test x"$enable_developer_mode" = x"yes"])
++if test x"$enable_developer_mode" = x"yes"; then
++ AC_DEFINE([MC_ENABLE_DEBUGGING_CODE], [1], [Enable debugging code])
++ if test x"$GCC" = x"yes"; then
++dnl Developers get some useful warnings and debugging support.
++dnl This will make the backtrace output more readable.
++ CFLAGS="-W -Wall -ggdb ${CFLAGS}"
++ fi
++elif test x"$GCC" = x"yes"; then
++dnl Some warnings cannot hurt at all
++ CFLAGS="-Wall"
++fi
++])
Added: trunk/debian/patches/37_mcedit-segv.patch
===================================================================
--- trunk/debian/patches/37_mcedit-segv.patch (rev 0)
+++ trunk/debian/patches/37_mcedit-segv.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,50 @@
+--- edit/edit-widget.h 3 Dec 2004 17:09:27 -0000 1.24
++++ edit/edit-widget.h 15 Apr 2005 21:33:35 -0000
+@@ -93,6 +93,7 @@ struct WEdit {
+ /* syntax higlighting */
+ struct _syntax_marker *syntax_marker;
+ struct context_rule **rules;
++ size_t rules_count; /* number of rules that are defined */
+ long last_get_rule;
+ struct syntax_rule rule;
+ char *syntax_type; /* description of syntax highlighting type being used */
+--- edit/syntax.c 22 Feb 2005 17:00:38 -0000 1.73
++++ edit/syntax.c 15 Apr 2005 21:33:35 -0000
+@@ -678,6 +678,7 @@ edit_read_syntax_rules (WEdit *edit, FIL
+ strcpy (whole_right, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890");
+
+ r = edit->rules = g_malloc (alloc_contexts * sizeof (struct context_rule *));
++ edit->rules_count = 0;
+
+ if (!edit->defines)
+ edit->defines = g_tree_new ((GCompareFunc) strcmp);
+@@ -908,6 +909,7 @@ edit_read_syntax_rules (WEdit *edit, FIL
+ if (num_contexts == -1) {
+ return line;
+ }
++ edit->rules_count = num_contexts;
+
+ {
+ char *first_chars, *p;
+@@ -932,17 +934,18 @@ edit_read_syntax_rules (WEdit *edit, FIL
+
+ void edit_free_syntax_rules (WEdit * edit)
+ {
+- int i, j;
++ size_t i, j;
+ if (!edit)
+ return;
+ if (edit->defines)
+ destroy_defines (&edit->defines);
+ if (!edit->rules)
+ return;
+- edit_get_rule (edit, -1);
++ if (edit->rules_count > 0)
++ edit_get_rule (edit, -1);
+ syntax_g_free (edit->syntax_type);
+ edit->syntax_type = 0;
+- for (i = 0; edit->rules[i]; i++) {
++ for (i = 0; i < edit->rules_count; i++) {
+ if (edit->rules[i]->keyword) {
+ for (j = 0; edit->rules[i]->keyword[j]; j++) {
+ syntax_g_free (edit->rules[i]->keyword[j]->keyword);
Added: trunk/debian/patches/40_view.c.patch
===================================================================
--- trunk/debian/patches/40_view.c.patch (rev 0)
+++ trunk/debian/patches/40_view.c.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,16 @@
+--- src/view.c 2005-04-27 23:34:30.000000000 +0200
++++ src/view.c 2005-04-27 23:36:20.000000000 +0200
+@@ -1239,7 +1239,12 @@
+ if (lines != -1 && line >= lines)
+ return p;
+
+- c = get_byte (view, p);
++ if ((c = get_byte (view, p)) == -1) {
++ if (upto)
++ return line;
++ else
++ return p;
++ }
+
+ if (view->wrap_mode) {
+ if (c == '\r')
Added: trunk/debian/patches/45_ftpfs_symlink1.patch
===================================================================
--- trunk/debian/patches/45_ftpfs_symlink1.patch (rev 0)
+++ trunk/debian/patches/45_ftpfs_symlink1.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,11 @@
+--- vfs/ftpfs.c 22 Feb 2005 18:35:23 -0000 1.176
++++ vfs/ftpfs.c 5 Apr 2005 18:13:23 -0000
+@@ -117,7 +117,7 @@ int ftpfs_use_passive_connections = 1;
+ int ftpfs_use_unix_list_options = 1;
+
+ /* First "CWD <path>", then "LIST -la ." */
+-int ftpfs_first_cd_then_ls;
++int ftpfs_first_cd_then_ls = 1;
+
+ /* Use the ~/.netrc */
+ int use_netrc = 1;
Added: trunk/debian/patches/45_ftpfs_symlink2.patch
===================================================================
--- trunk/debian/patches/45_ftpfs_symlink2.patch (rev 0)
+++ trunk/debian/patches/45_ftpfs_symlink2.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,32 @@
+--- vfs/direntry.c 22 Feb 2005 18:35:23 -0000 1.116
++++ vfs/direntry.c 6 Apr 2005 14:04:54 -0000
+@@ -251,7 +251,13 @@ vfs_s_find_entry_tree (struct vfs_class
+ char * const pathref = g_strdup (a_path);
+ char *path = pathref;
+
+- canonicalize_pathname (path);
++ if (strncmp(me->name, "ftpfs", 5) != 0)
++ canonicalize_pathname (path);
++ else {
++ char *p = path + strlen (path) - 1;
++ while (p > path && *p == PATH_SEP)
++ *p-- = 0;
++ }
+
+ while (root) {
+ while (*path == PATH_SEP) /* Strip leading '/' */
+@@ -324,7 +330,13 @@ vfs_s_find_entry_linear (struct vfs_clas
+ if (root->super->root != root)
+ vfs_die ("We have to use _real_ root. Always. Sorry.");
+
+- canonicalize_pathname (path);
++ if (strncmp (me->name, "ftpfs", 5) != 0)
++ canonicalize_pathname (path);
++ else {
++ char *p = path + strlen (path) - 1;
++ while (p > path && *p == PATH_SEP)
++ *p-- = 0;
++ }
+
+ if (!(flags & FL_DIR)) {
+ char *dirname, *name, *save;
Added: trunk/debian/patches/47_mc.menu.patch
===================================================================
--- trunk/debian/patches/47_mc.menu.patch (rev 0)
+++ trunk/debian/patches/47_mc.menu.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,30 @@
+--- lib/mc.menu 2005-05-02 18:08:11.000000000 +0200
++++ lib/mc.menu 2005-05-02 18:08:37.000000000 +0200
+@@ -15,7 +15,7 @@ shell_patterns=0
+
+ 0 Edit a bug report and send it to root
+ I=`mktemp ${MC_TMPDIR:-/tmp}/mail.XXXXXX` || exit 1
+- ${EDITOR-vi} $I
++ ${EDITOR-editor} $I
+ test -r $I && mail root < $I
+ rm -f $I
+
+@@ -330,3 +330,7 @@
+ o Open next a free console
+ open -s -- sh
+
++=+ f \.dsc$ & t r
++x Extract the contents of a Debian source package
++ dpkg-source -x %f
++
+--- src/util.h 2006-06-13 04:39:20.000000000 +0300
++++ src/util.h 2006-06-13 04:39:53.000000000 +0300
+@@ -217,7 +217,7 @@ void save_file_position (const char *fil
+ #define PATH_ENV_SEP ':'
+ #define TMPDIR_DEFAULT "/tmp"
+ #define SCRIPT_SUFFIX ""
+-#define get_default_editor() "vi"
++#define get_default_editor() "editor"
+ #define OS_SORT_CASE_SENSITIVE_DEFAULT 1
+ #define STRCOMP strcmp
+ #define STRNCOMP strncmp
Added: trunk/debian/patches/48_utf8-slang2.patch
===================================================================
--- trunk/debian/patches/48_utf8-slang2.patch (rev 0)
+++ trunk/debian/patches/48_utf8-slang2.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,5119 @@
+diff -Naur mc-4.6.1-old/edit/edit.c mc-4.6.1/edit/edit.c
+--- mc-4.6.1-old/edit/edit.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/edit/edit.c 2005-10-28 10:08:07.736247264 +0200
+@@ -93,7 +93,7 @@
+
+ #ifndef NO_INLINE_GETBYTE
+
+-int edit_get_byte (WEdit * edit, long byte_index)
++mc_wchar_t edit_get_byte (WEdit * edit, long byte_index)
+ {
+ unsigned long p;
+ if (byte_index >= (edit->curs1 + edit->curs2) || byte_index < 0)
+@@ -125,7 +125,7 @@
+
+ edit->curs1 = 0;
+ edit->curs2 = 0;
+- edit->buffers2[0] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[0] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ }
+
+ /*
+@@ -152,7 +152,7 @@
+ }
+
+ if (!edit->buffers2[buf2])
+- edit->buffers2[buf2] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[buf2] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+
+ mc_read (file,
+ (char *) edit->buffers2[buf2] + EDIT_BUF_SIZE -
+@@ -162,7 +162,7 @@
+ for (buf = buf2 - 1; buf >= 0; buf--) {
+ /* edit->buffers2[0] is already allocated */
+ if (!edit->buffers2[buf])
+- edit->buffers2[buf] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[buf] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ mc_read (file, (char *) edit->buffers2[buf], EDIT_BUF_SIZE);
+ }
+
+@@ -242,9 +242,44 @@
+ {
+ int c;
+ long i = 0;
+- while ((c = fgetc (f)) >= 0) {
++#ifndef UTF8
++ while ((c = fgetc (f)) != EOF) {
+ edit_insert (edit, c);
+ i++;
++#else /* UTF8 */
++ unsigned char buf[MB_LEN_MAX];
++ int charpos = 0;
++ mbstate_t mbs;
++
++ while ((c = fgetc (f)) != EOF) {
++ mc_wchar_t wc;
++ int size;
++ int j;
++
++ buf[charpos++] = c;
++
++ memset (&mbs, 0, sizeof (mbs));
++ size = mbrtowc(&wc, (char *)buf, charpos, &mbs);
++
++ if (size == -2)
++ continue; /* incomplete */
++
++ else if (size >= 0) {
++ edit_insert (edit, wc);
++ i++;
++ charpos = 0;
++ continue;
++ }
++ else {
++
++ /* invalid */
++#ifdef __STDC_ISO_10646__
++ for (j=0; j<charpos; j++)
++ edit_insert (edit, BINARY_CHAR_OFFSET + (mc_wchar_t)buf[j]);
++#endif
++ charpos = 0;
++ }
++#endif /* UTF8 */
+ }
+ return i;
+ }
+@@ -252,9 +287,32 @@
+ long edit_write_stream (WEdit * edit, FILE * f)
+ {
+ long i;
++#ifndef UTF8
+ for (i = 0; i < edit->last_byte; i++)
+ if (fputc (edit_get_byte (edit, i), f) < 0)
+ break;
++#else /* UTF8 */
++ for (i = 0; i < edit->last_byte; i++) {
++ mc_wchar_t wc = edit_get_byte (edit, i);
++ int res;
++ char tmpbuf[MB_LEN_MAX];
++ mbstate_t mbs;
++
++ memset (&mbs, 0, sizeof (mbs));
++
++#ifdef __STDC_ISO_10646__
++ if (wc >= BINARY_CHAR_OFFSET && wc < (BINARY_CHAR_OFFSET + 256)) {
++ res = 1;
++ tmpbuf[0] = (char) (wc - BINARY_CHAR_OFFSET);
++ } else
++#endif
++ res = wcrtomb(tmpbuf, wc, &mbs);
++ if (res > 0) {
++ if (fwrite(tmpbuf, res, 1, f) != 1)
++ break;
++ }
++ }
++#endif /* UTF8 */
+ return i;
+ }
+
+@@ -294,12 +352,46 @@
+ int i, file, blocklen;
+ long current = edit->curs1;
+ unsigned char *buf;
++#ifdef UTF8
++ mbstate_t mbs;
++ int bufstart = 0;
++
++ memset (&mbs, 0, sizeof (mbs));
++#endif /* UTF8 */
+ if ((file = mc_open (filename, O_RDONLY | O_BINARY)) == -1)
+ return 0;
+ buf = g_malloc (TEMP_BUF_LEN);
++#ifndef UTF8
+ while ((blocklen = mc_read (file, (char *) buf, TEMP_BUF_LEN)) > 0) {
+ for (i = 0; i < blocklen; i++)
+ edit_insert (edit, buf[i]);
++#else /* UTF8 */
++ while ((blocklen = mc_read (file, (char *) buf + bufstart, TEMP_BUF_LEN - bufstart)) > 0) {
++ blocklen += bufstart;
++ bufstart = 0;
++ for (i = 0; i < blocklen; ) {
++ mc_wchar_t wc;
++ int j;
++ int size = mbrtowc(&wc, (char *)buf + i, blocklen - i, &mbs);
++ if (size == -2) { /*incomplete char*/
++ bufstart = blocklen - i;
++ memcpy(buf, buf+i, bufstart);
++ i = blocklen;
++ memset (&mbs, 0, sizeof (mbs));
++ }
++ else if (size <= 0) {
++#ifdef __STDC_ISO_10646__
++ edit_insert (edit, BINARY_CHAR_OFFSET + (mc_wchar_t)buf[i]);
++#endif
++ memset (&mbs, 0, sizeof (mbs));
++ i++; /* skip broken char */
++ }
++ else {
++ edit_insert (edit, wc);
++ i+=size;
++ }
++ }
++#endif /* UTF8 */
+ }
+ edit_cursor_move (edit, current - edit->curs1);
+ g_free (buf);
+@@ -393,7 +485,11 @@
+ static int
+ edit_load_file (WEdit *edit)
+ {
++#ifndef UTF8
+ int fast_load = 1;
++#else /* UTF8 */
++ int fast_load = 0; /* can't be used with multibyte characters */
++#endif /* UTF8 */
+
+ /* Cannot do fast load if a filter is used */
+ if (edit_find_filter (edit->filename) >= 0)
+@@ -540,7 +636,7 @@
+ edit_set_filename (edit, filename);
+ edit->stack_size = START_STACK_SIZE;
+ edit->stack_size_mask = START_STACK_SIZE - 1;
+- edit->undo_stack = g_malloc ((edit->stack_size + 10) * sizeof (long));
++ edit->undo_stack = g_malloc ((edit->stack_size + 10) * sizeof (struct action));
+ if (edit_load_file (edit)) {
+ /* edit_load_file already gives an error message */
+ if (to_free)
+@@ -565,7 +661,9 @@
+ edit_move_display (edit, line - 1);
+ edit_move_to_line (edit, line - 1);
+ }
+-
++#ifdef UTF8
++ edit->charpoint = 0;
++#endif
+ return edit;
+ }
+
+@@ -693,13 +789,23 @@
+ {
+ unsigned long sp = edit->stack_pointer;
+ unsigned long spm1;
+- long *t;
++
++ struct action *t;
++ mc_wchar_t ch = 0;
++
++ if (c == CHAR_INSERT || c == CHAR_INSERT_AHEAD) {
++ va_list ap;
++ va_start (ap, c);
++ ch = va_arg (ap, mc_wint_t);
++ va_end (ap);
++ }
++
+ /* first enlarge the stack if necessary */
+ if (sp > edit->stack_size - 10) { /* say */
+ if (option_max_undo < 256)
+ option_max_undo = 256;
+ if (edit->stack_size < (unsigned long) option_max_undo) {
+- t = g_realloc (edit->undo_stack, (edit->stack_size * 2 + 10) * sizeof (long));
++ t = g_realloc (edit->undo_stack, (edit->stack_size * 2 + 10) * sizeof (struct action));
+ if (t) {
+ edit->undo_stack = t;
+ edit->stack_size <<= 1;
+@@ -714,7 +820,7 @@
+ #ifdef FAST_MOVE_CURSOR
+ if (c == CURS_LEFT_LOTS || c == CURS_RIGHT_LOTS) {
+ va_list ap;
+- edit->undo_stack[sp] = c == CURS_LEFT_LOTS ? CURS_LEFT : CURS_RIGHT;
++ edit->undo_stack[sp].flags = c == CURS_LEFT_LOTS ? CURS_LEFT : CURS_RIGHT;
+ edit->stack_pointer = (edit->stack_pointer + 1) & edit->stack_size_mask;
+ va_start (ap, c);
+ c = -(va_arg (ap, int));
+@@ -725,12 +831,14 @@
+ && spm1 != edit->stack_bottom
+ && ((sp - 2) & edit->stack_size_mask) != edit->stack_bottom) {
+ int d;
+- if (edit->undo_stack[spm1] < 0) {
+- d = edit->undo_stack[(sp - 2) & edit->stack_size_mask];
+- if (d == c) {
+- if (edit->undo_stack[spm1] > -1000000000) {
++ mc_wchar_t d_ch;
++ if (edit->undo_stack[spm1].flags < 0) {
++ d = edit->undo_stack[(sp - 2) & edit->stack_size_mask].flags;
++ d_ch = edit->undo_stack[(sp - 2) & edit->stack_size_mask].ch;
++ if (d == c && d_ch == ch) {
++ if (edit->undo_stack[spm1].flags > -1000000000) {
+ if (c < KEY_PRESS) /* --> no need to push multiple do-nothings */
+- edit->undo_stack[spm1]--;
++ edit->undo_stack[spm1].flags--;
+ return;
+ }
+ }
+@@ -738,19 +846,20 @@
+ #ifndef NO_STACK_CURSMOVE_ANIHILATION
+ else if ((c == CURS_LEFT && d == CURS_RIGHT)
+ || (c == CURS_RIGHT && d == CURS_LEFT)) { /* a left then a right anihilate each other */
+- if (edit->undo_stack[spm1] == -2)
++ if (edit->undo_stack[spm1].flags == -2)
+ edit->stack_pointer = spm1;
+ else
+- edit->undo_stack[spm1]++;
++ edit->undo_stack[spm1].flags++;
+ return;
+ }
+ #endif
+ } else {
+- d = edit->undo_stack[spm1];
+- if (d == c) {
++ d = edit->undo_stack[spm1].flags;
++ d_ch = edit->undo_stack[spm1].ch;
++ if (d == c && d_ch == ch) {
+ if (c >= KEY_PRESS)
+ return; /* --> no need to push multiple do-nothings */
+- edit->undo_stack[sp] = -2;
++ edit->undo_stack[sp].flags = -2;
+ goto check_bottom;
+ }
+ #ifndef NO_STACK_CURSMOVE_ANIHILATION
+@@ -762,7 +871,9 @@
+ #endif
+ }
+ }
+- edit->undo_stack[sp] = c;
++ edit->undo_stack[sp].flags = c;
++ edit->undo_stack[sp].ch = ch;
++
+ check_bottom:
+
+ edit->stack_pointer = (edit->stack_pointer + 1) & edit->stack_size_mask;
+@@ -775,10 +886,10 @@
+ (((unsigned long) c + 1) & edit->stack_size_mask) == edit->stack_bottom)
+ do {
+ edit->stack_bottom = (edit->stack_bottom + 1) & edit->stack_size_mask;
+- } while (edit->undo_stack[edit->stack_bottom] < KEY_PRESS && edit->stack_bottom != edit->stack_pointer);
++ } while (edit->undo_stack[edit->stack_bottom].flags < KEY_PRESS && edit->stack_bottom != edit->stack_pointer);
+
+ /*If a single key produced enough pushes to wrap all the way round then we would notice that the [stack_bottom] does not contain KEY_PRESS. The stack is then initialised: */
+- if (edit->stack_pointer != edit->stack_bottom && edit->undo_stack[edit->stack_bottom] < KEY_PRESS)
++ if (edit->stack_pointer != edit->stack_bottom && edit->undo_stack[edit->stack_bottom].flags < KEY_PRESS)
+ edit->stack_bottom = edit->stack_pointer = 0;
+ }
+
+@@ -787,30 +898,30 @@
+ then the file should be as it was when he loaded up. Then set edit->modified to 0.
+ */
+ static long
+-pop_action (WEdit * edit)
++pop_action (WEdit * edit, struct action *c)
+ {
+- long c;
+ unsigned long sp = edit->stack_pointer;
+ if (sp == edit->stack_bottom) {
+- return STACK_BOTTOM;
++ c->flags = STACK_BOTTOM;
++ return c->flags;
+ }
+ sp = (sp - 1) & edit->stack_size_mask;
+- if ((c = edit->undo_stack[sp]) >= 0) {
+-/* edit->undo_stack[sp] = '@'; */
++ *c = edit->undo_stack[sp];
++ if (edit->undo_stack[sp].flags >= 0) {
+ edit->stack_pointer = (edit->stack_pointer - 1) & edit->stack_size_mask;
+- return c;
++ return c->flags;
+ }
+ if (sp == edit->stack_bottom) {
+ return STACK_BOTTOM;
+ }
+- c = edit->undo_stack[(sp - 1) & edit->stack_size_mask];
+- if (edit->undo_stack[sp] == -2) {
+-/* edit->undo_stack[sp] = '@'; */
++ *c = edit->undo_stack[(sp - 1) & edit->stack_size_mask];
++
++ if (edit->undo_stack[sp].flags == -2) {
+ edit->stack_pointer = sp;
+ } else
+- edit->undo_stack[sp]++;
++ edit->undo_stack[sp].flags++;
+
+- return c;
++ return c->flags;
+ }
+
+ /* is called whenever a modification is made by one of the four routines below */
+@@ -831,7 +942,7 @@
+ */
+
+ void
+-edit_insert (WEdit *edit, int c)
++edit_insert (WEdit *edit, mc_wchar_t c)
+ {
+ /* check if file has grown to large */
+ if (edit->last_byte >= SIZE_LIMIT)
+@@ -869,12 +980,11 @@
+ /* add a new buffer if we've reached the end of the last one */
+ if (!(edit->curs1 & M_EDIT_BUF_SIZE))
+ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] =
+- g_malloc (EDIT_BUF_SIZE);
++ g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+
+ /* perform the insertion */
+- edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE][edit->
+- curs1 & M_EDIT_BUF_SIZE]
+- = (unsigned char) c;
++ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE]
++ [edit->curs1 & M_EDIT_BUF_SIZE] = c;
+
+ /* update file length */
+ edit->last_byte++;
+@@ -885,7 +995,7 @@
+
+
+ /* same as edit_insert and move left */
+-void edit_insert_ahead (WEdit * edit, int c)
++void edit_insert_ahead (WEdit * edit, mc_wchar_t c)
+ {
+ if (edit->last_byte >= SIZE_LIMIT)
+ return;
+@@ -908,7 +1018,7 @@
+ edit->last_get_rule += (edit->last_get_rule >= edit->curs1);
+
+ if (!((edit->curs2 + 1) & M_EDIT_BUF_SIZE))
+- edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE) - 1] = c;
+
+ edit->last_byte++;
+@@ -918,7 +1028,7 @@
+
+ int edit_delete (WEdit * edit)
+ {
+- int p;
++ mc_wint_t p;
+ if (!edit->curs2)
+ return 0;
+
+@@ -942,7 +1052,7 @@
+ edit->total_lines--;
+ edit->force |= REDRAW_AFTER_CURSOR;
+ }
+- edit_push_action (edit, p + 256);
++ edit_push_action (edit, CHAR_INSERT_AHEAD, p);
+ if (edit->curs1 < edit->start_display) {
+ edit->start_display--;
+ if (p == '\n')
+@@ -956,7 +1066,7 @@
+ static int
+ edit_backspace (WEdit * edit)
+ {
+- int p;
++ mc_wint_t p;
+ if (!edit->curs1)
+ return 0;
+
+@@ -980,7 +1090,7 @@
+ edit->total_lines--;
+ edit->force |= REDRAW_AFTER_CURSOR;
+ }
+- edit_push_action (edit, p);
++ edit_push_action (edit, CHAR_INSERT, p);
+
+ if (edit->curs1 < edit->start_display) {
+ edit->start_display--;
+@@ -993,10 +1103,18 @@
+
+ #ifdef FAST_MOVE_CURSOR
+
+-static void memqcpy (WEdit * edit, unsigned char *dest, unsigned char *src, int n)
++static void memqcpy (WEdit * edit, mc_wchar_t *dest, mc_wchar_t *src, int n)
+ {
+ unsigned long next;
++#ifndef UTF8
+ while ((next = (unsigned long) memccpy (dest, src, '\n', n))) {
++#else /* UTF8 */
++ while (n) {
++ next = 0;
++ while (next < n && src[next]!='\n') next++;
++ if (next < n) next++;
++ wmemcpy (dest, src, next)
++#endif /* UTF8 */
+ edit->curs_line--;
+ next -= (unsigned long) dest;
+ n -= next;
+@@ -1009,7 +1127,7 @@
+ edit_move_backward_lots (WEdit *edit, long increment)
+ {
+ int r, s, t;
+- unsigned char *p;
++ mc_wchar_t *p;
+
+ if (increment > edit->curs1)
+ increment = edit->curs1;
+@@ -1049,7 +1167,7 @@
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = p;
+ else
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] =
+- g_malloc (EDIT_BUF_SIZE);
++ g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ } else {
+ g_free (p);
+ }
+@@ -1087,7 +1205,7 @@
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] = p;
+ else
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE] =
+- g_malloc (EDIT_BUF_SIZE);
++ g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ } else {
+ g_free (p);
+ }
+@@ -1119,7 +1237,7 @@
+
+ c = edit_get_byte (edit, edit->curs1 - 1);
+ if (!((edit->curs2 + 1) & M_EDIT_BUF_SIZE))
+- edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers2[(edit->curs2 + 1) >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ edit->buffers2[edit->curs2 >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (edit->curs2 & M_EDIT_BUF_SIZE) - 1] = c;
+ edit->curs2++;
+ c = edit->buffers1[(edit->curs1 - 1) >> S_EDIT_BUF_SIZE][(edit->curs1 - 1) & M_EDIT_BUF_SIZE];
+@@ -1144,7 +1262,7 @@
+
+ c = edit_get_byte (edit, edit->curs1);
+ if (!(edit->curs1 & M_EDIT_BUF_SIZE))
+- edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE);
++ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE] = g_malloc (EDIT_BUF_SIZE * sizeof(mc_wchar_t));
+ edit->buffers1[edit->curs1 >> S_EDIT_BUF_SIZE][edit->curs1 & M_EDIT_BUF_SIZE] = c;
+ edit->curs1++;
+ c = edit->buffers2[(edit->curs2 - 1) >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - ((edit->curs2 - 1) & M_EDIT_BUF_SIZE) - 1];
+@@ -1251,7 +1369,7 @@
+ q = edit->last_byte + 2;
+
+ for (col = 0, p = current; p < q; p++) {
+- int c;
++ mc_wchar_t c;
+ if (cols != -10) {
+ if (col == cols)
+ return p;
+@@ -1269,7 +1387,7 @@
+ } else if (c < 32 || c == 127)
+ col += 2; /* Caret notation for control characters */
+ else
+- col++;
++ col += wcwidth(c);
+ }
+ return col;
+ }
+@@ -1402,7 +1520,7 @@
+ is_blank (WEdit *edit, long offset)
+ {
+ long s, f;
+- int c;
++ mc_wchar_t c;
+ s = edit_bol (edit, offset);
+ f = edit_eol (edit, offset) - 1;
+ while (s <= f) {
+@@ -1774,13 +1892,13 @@
+ static void
+ edit_do_undo (WEdit * edit)
+ {
+- long ac;
++ struct action ac;
+ long count = 0;
+
+ edit->stack_disable = 1; /* don't record undo's onto undo stack! */
+
+- while ((ac = pop_action (edit)) < KEY_PRESS) {
+- switch ((int) ac) {
++ while (pop_action (edit, &ac) < KEY_PRESS) {
++ switch ((int) ac.flags) {
+ case STACK_BOTTOM:
+ goto done_undo;
+ case CURS_RIGHT:
+@@ -1801,31 +1919,33 @@
+ case COLUMN_OFF:
+ column_highlighting = 0;
+ break;
++ case CHAR_INSERT:
++ edit_insert (edit, ac.ch);
++ break;
++ case CHAR_INSERT_AHEAD:
++ edit_insert_ahead (edit, ac.ch);
++ break;
+ }
+- if (ac >= 256 && ac < 512)
+- edit_insert_ahead (edit, ac - 256);
+- if (ac >= 0 && ac < 256)
+- edit_insert (edit, ac);
+
+- if (ac >= MARK_1 - 2 && ac < MARK_2 - 2) {
+- edit->mark1 = ac - MARK_1;
++ if (ac.flags >= MARK_1 - 2 && ac.flags < MARK_2 - 2) {
++ edit->mark1 = ac.flags - MARK_1;
+ edit->column1 = edit_move_forward3 (edit, edit_bol (edit, edit->mark1), 0, edit->mark1);
+- } else if (ac >= MARK_2 - 2 && ac < KEY_PRESS) {
+- edit->mark2 = ac - MARK_2;
++ } else if (ac.flags >= MARK_2 - 2 && ac.flags < KEY_PRESS) {
++ edit->mark2 = ac.flags - MARK_2;
+ edit->column2 = edit_move_forward3 (edit, edit_bol (edit, edit->mark2), 0, edit->mark2);
+ }
+ if (count++)
+ edit->force |= REDRAW_PAGE; /* more than one pop usually means something big */
+ }
+
+- if (edit->start_display > ac - KEY_PRESS) {
+- edit->start_line -= edit_count_lines (edit, ac - KEY_PRESS, edit->start_display);
++ if (edit->start_display > ac.flags - KEY_PRESS) {
++ edit->start_line -= edit_count_lines (edit, ac.flags - KEY_PRESS, edit->start_display);
+ edit->force |= REDRAW_PAGE;
+- } else if (edit->start_display < ac - KEY_PRESS) {
+- edit->start_line += edit_count_lines (edit, edit->start_display, ac - KEY_PRESS);
++ } else if (edit->start_display < ac.flags - KEY_PRESS) {
++ edit->start_line += edit_count_lines (edit, edit->start_display, ac.flags - KEY_PRESS);
+ edit->force |= REDRAW_PAGE;
+ }
+- edit->start_display = ac - KEY_PRESS; /* see push and pop above */
++ edit->start_display = ac.flags - KEY_PRESS; /* see push and pop above */
+ edit_update_curs_row (edit);
+
+ done_undo:;
+@@ -2102,7 +2222,7 @@
+ * passed as -1. Commands are executed, and char_for_insertion is
+ * inserted at the cursor.
+ */
+-void edit_execute_key_command (WEdit *edit, int command, int char_for_insertion)
++void edit_execute_key_command (WEdit *edit, int command, mc_wint_t char_for_insertion)
+ {
+ if (command == CK_Begin_Record_Macro) {
+ edit->macro_i = 0;
+@@ -2137,7 +2257,7 @@
+ all of them. It also does not check for the Undo command.
+ */
+ void
+-edit_execute_cmd (WEdit *edit, int command, int char_for_insertion)
++edit_execute_cmd (WEdit *edit, int command, mc_wint_t char_for_insertion)
+ {
+ edit->force |= REDRAW_LINE;
+
+@@ -2170,7 +2290,7 @@
+ }
+
+ /* An ordinary key press */
+- if (char_for_insertion >= 0) {
++ if (char_for_insertion != (mc_wint_t) -1) {
+ if (edit->overwrite) {
+ if (edit_get_byte (edit, edit->curs1) != '\n')
+ edit_delete (edit);
+diff -Naur mc-4.6.1-old/edit/editcmd.c mc-4.6.1/edit/editcmd.c
+--- mc-4.6.1-old/edit/editcmd.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/edit/editcmd.c 2005-10-28 10:08:07.687254712 +0200
+@@ -46,7 +46,7 @@
+ #define edit_get_save_file(f,h) input_expand_dialog (h, _(" Enter file name: "), f)
+
+ struct selection {
+- unsigned char * text;
++ mc_wchar_t *text;
+ int len;
+ };
+
+@@ -69,12 +69,16 @@
+ #define MAX_REPL_LEN 1024
+
+ static int edit_save_cmd (WEdit *edit);
+-static unsigned char *edit_get_block (WEdit *edit, long start,
++static mc_wchar_t *edit_get_block (WEdit *edit, long start,
+ long finish, int *l);
+
+-static inline int my_lower_case (int c)
++static inline mc_wchar_t my_lower_case (mc_wchar_t c)
+ {
++#ifndef UTF8
+ return tolower(c & 0xFF);
++#else
++ return towlower(c);
++#endif
+ }
+
+ static const char *strcasechr (const unsigned char *s, int c)
+@@ -108,11 +112,11 @@
+ #endif /* !HAVE_MEMMOVE */
+
+ /* #define itoa MY_itoa <---- this line is now in edit.h */
+-static char *
++static mc_wchar_t *
+ MY_itoa (int i)
+ {
+- static char t[14];
+- char *s = t + 13;
++ static mc_wchar_t t[14];
++ mc_wchar_t *s = t + 13;
+ int j = i;
+ *s-- = 0;
+ do {
+@@ -196,6 +200,48 @@
+ doupdate();
+ }
+
++#ifdef UTF8
++
++static size_t
++wchar_write(int fd, mc_wchar_t *buf, size_t len)
++{
++ char *tmpbuf = g_malloc(len + MB_LEN_MAX);
++ mbstate_t mbs;
++ size_t i;
++ size_t outlen = 0;
++ size_t res;
++
++ for (i = 0; i < len; i++) {
++ if (outlen >= len) {
++ if ((res = mc_write(fd, tmpbuf, outlen)) != outlen) {
++ g_free(tmpbuf);
++ return -1;
++ }
++ outlen = 0;
++ }
++ memset (&mbs, 0, sizeof (mbs));
++#ifdef __STDC_ISO_10646__
++ if (buf[i] >= BINARY_CHAR_OFFSET && buf[i] < (BINARY_CHAR_OFFSET + 256)) {
++ res = 1;
++ tmpbuf[outlen] = (char) (buf[i] - BINARY_CHAR_OFFSET);
++
++ } else
++#endif
++ res = wcrtomb(tmpbuf + outlen, buf[i], &mbs);
++ if (res > 0) {
++ outlen += res;
++ }
++ }
++ if ((res = mc_write(fd, tmpbuf, outlen)) != outlen) {
++ g_free(tmpbuf);
++ return -1;
++ }
++ g_free(tmpbuf);
++ return len;
++}
++
++#endif /* UTF8 */
++
+ /* If 0 (quick save) then a) create/truncate <filename> file,
+ b) save to <filename>;
+ if 1 (safe save) then a) save to <tempnam>,
+@@ -303,32 +349,48 @@
+ buf = 0;
+ filelen = edit->last_byte;
+ while (buf <= (edit->curs1 >> S_EDIT_BUF_SIZE) - 1) {
++#ifndef UTF8
+ if (mc_write (fd, (char *) edit->buffers1[buf], EDIT_BUF_SIZE)
++#else /* UTF8 */
++ if (wchar_write (fd, edit->buffers1[buf], EDIT_BUF_SIZE)
++#endif /* UTF8 */
+ != EDIT_BUF_SIZE) {
+ mc_close (fd);
+ goto error_save;
+ }
+ buf++;
+ }
++#ifndef UTF8
+ if (mc_write
+ (fd, (char *) edit->buffers1[buf],
++#else /* UTF8 */
++ if (wchar_write
++ (fd, edit->buffers1[buf],
++#endif /* UTF8 */
+ edit->curs1 & M_EDIT_BUF_SIZE) !=
+ (edit->curs1 & M_EDIT_BUF_SIZE)) {
+ filelen = -1;
+ } else if (edit->curs2) {
+ edit->curs2--;
+ buf = (edit->curs2 >> S_EDIT_BUF_SIZE);
+- if (mc_write
+- (fd,
+- (char *) edit->buffers2[buf] + EDIT_BUF_SIZE -
++#ifndef UTF8
++ if (mc_write(fd, (char *) edit->buffers2[buf] + EDIT_BUF_SIZE -
++#else /* UTF8 */
++ if (wchar_write(fd, edit->buffers2[buf] + EDIT_BUF_SIZE -
++#endif /* UTF8 */
+ (edit->curs2 & M_EDIT_BUF_SIZE) - 1,
+ 1 + (edit->curs2 & M_EDIT_BUF_SIZE)) !=
+ 1 + (edit->curs2 & M_EDIT_BUF_SIZE)) {
+ filelen = -1;
+ } else {
+ while (--buf >= 0) {
++#ifndef UTF8
+ if (mc_write
+ (fd, (char *) edit->buffers2[buf],
++#else /* UTF8 */
++ if (wchar_write
++ (fd, edit->buffers2[buf],
++#endif /* UTF8 */
+ EDIT_BUF_SIZE) != EDIT_BUF_SIZE) {
+ filelen = -1;
+ break;
+@@ -643,13 +705,21 @@
+ if (!n || n == EOF)
+ break;
+ n = 0;
++#ifndef UTF8
+ while (fscanf (f, "%hd %hd, ", ¯o[n].command, ¯o[n].ch))
++#else /* UTF8 */
++ while (fscanf (f, "%hd %lu, ", ¯o[n].command, ¯o[n].ch))
++#endif /* UTF8 */
+ n++;
+ fscanf (f, ";\n");
+ if (s != k) {
+ fprintf (g, ("key '%d 0': "), s);
+ for (i = 0; i < n; i++)
++#ifndef UTF8
+ fprintf (g, "%hd %hd, ", macro[i].command, macro[i].ch);
++#else /* UTF8 */
++ fprintf (g, "%hd %lu, ", macro[i].command, macro[i].ch);
++#endif /* UTF8 */
+ fprintf (g, ";\n");
+ }
+ }
+@@ -685,7 +755,11 @@
+ if (f) {
+ fprintf (f, ("key '%d 0': "), s);
+ for (i = 0; i < n; i++)
++#ifndef UTF8
+ fprintf (f, "%hd %hd, ", macro[i].command, macro[i].ch);
++#else /* UTF8 */
++ fprintf (f, "%hd %lu, ", macro[i].command, macro[i].ch);
++#endif /* UTF8 */
+ fprintf (f, ";\n");
+ fclose (f);
+ if (saved_macros_loaded) {
+@@ -734,10 +808,18 @@
+ saved_macro[i++] = s;
+ if (!found) {
+ *n = 0;
++#ifndef UTF8
+ while (*n < MAX_MACRO_LENGTH && 2 == fscanf (f, "%hd %hd, ", ¯o[*n].command, ¯o[*n].ch))
++#else /* UTF8 */
++ while (*n < MAX_MACRO_LENGTH && 2 == fscanf (f, "%hd %lu, ", ¯o[*n].command, ¯o[*n].ch))
++#endif /* UTF8 */
+ (*n)++;
+ } else {
++#ifndef UTF8
+ while (2 == fscanf (f, "%hd %hd, ", &dummy.command, &dummy.ch));
++#else /* UTF8 */
++ while (2 == fscanf (f, "%hd %lu, ", &dummy.command, &dummy.ch));
++#endif /* UTF8 */
+ }
+ fscanf (f, ";\n");
+ if (s == k)
+@@ -886,7 +968,7 @@
+ #define space_width 1
+
+ static void
+-edit_insert_column_of_text (WEdit * edit, unsigned char *data, int size, int width)
++edit_insert_column_of_text (WEdit * edit, mc_wchar_t *data, int size, int width)
+ {
+ long cursor;
+ int i, col;
+@@ -934,7 +1016,7 @@
+ {
+ long start_mark, end_mark, current = edit->curs1;
+ int size, x;
+- unsigned char *copy_buf;
++ mc_wchar_t *copy_buf;
+
+ edit_update_curs_col (edit);
+ x = edit->curs_col;
+@@ -979,7 +1061,7 @@
+ {
+ long count;
+ long current;
+- unsigned char *copy_buf;
++ mc_wchar_t *copy_buf;
+ long start_mark, end_mark;
+ int deleted = 0;
+ int x = 0;
+@@ -1040,7 +1122,7 @@
+ edit_push_action (edit, COLUMN_ON);
+ column_highlighting = 0;
+ } else {
+- copy_buf = g_malloc (end_mark - start_mark);
++ copy_buf = g_malloc ((end_mark - start_mark) * sizeof(mc_wchar_t));
+ edit_cursor_move (edit, start_mark - edit->curs1);
+ edit_scroll_screen_over_cursor (edit);
+ count = start_mark;
+@@ -1371,7 +1453,11 @@
+ /* This function is a modification of mc-3.2.10/src/view.c:regexp_view_search() */
+ /* returns -3 on error in pattern, -1 on not found, found_len = 0 if either */
+ static int
++#ifndef UTF8
+ string_regexp_search (char *pattern, char *string, int len, int match_type,
++#else /* UTF8 */
++string_regexp_search (char *pattern, mc_wchar_t *wstring, int match_type,
++#endif /* UTF8 */
+ int match_bol, int icase, int *found_len, void *d)
+ {
+ static regex_t r;
+@@ -1380,6 +1466,11 @@
+ regmatch_t *pmatch;
+ static regmatch_t s[1];
+
++#ifdef UTF8
++ char *string;
++ int i;
++#endif /* UTF8 */
++
+ pmatch = (regmatch_t *) d;
+ if (!pmatch)
+ pmatch = s;
+@@ -1399,13 +1490,51 @@
+ old_type = match_type;
+ old_icase = icase;
+ }
++
++#ifdef UTF8
++ string = wchar_to_mbstr(wstring);
++ if (string == NULL)
++ return -1;
++#endif /* UTF8 */
++
+ if (regexec
+ (&r, string, d ? NUM_REPL_ARGS : 1, pmatch,
+ ((match_bol
+ || match_type != match_normal) ? 0 : REG_NOTBOL)) != 0) {
+ *found_len = 0;
++
++#ifdef UTF8
++ g_free(string);
++#endif /* UTF8 */
++
+ return -1;
+ }
++
++#ifdef UTF8
++ for (i = 0; i < (d ? NUM_REPL_ARGS : 1); i++) {
++ char tmp;
++ int new_o;
++
++ if (pmatch[i].rm_so < 0)
++ continue;
++ tmp = string[pmatch[i].rm_so];
++ string[pmatch[i].rm_so] = 0;
++ new_o = mbstrlen(string);
++ string[pmatch[i].rm_so] = tmp;
++ pmatch[i].rm_so = new_o;
++
++ if (pmatch[i].rm_eo < 0)
++ continue;
++ tmp = string[pmatch[i].rm_eo];
++ string[pmatch[i].rm_eo] = 0;
++ new_o = mbstrlen(string);
++ string[pmatch[i].rm_eo] = tmp;
++ pmatch[i].rm_eo = new_o;
++ }
++
++ g_free(string);
++#endif /* UTF8 */
++
+ *found_len = pmatch[0].rm_eo - pmatch[0].rm_so;
+ return (pmatch[0].rm_so);
+ }
+@@ -1413,13 +1542,29 @@
+ /* thanks to Liviu Daia <daia at stoilow.imar.ro> for getting this
+ (and the above) routines to work properly - paul */
+
++#ifndef UTF8
+ typedef int (*edit_getbyte_fn) (WEdit *, long);
++#else /* UTF8 */
++typedef mc_wchar_t (*edit_getbyte_fn) (WEdit *, long);
++#endif /* UTF8 */
+
+ static long
++#ifndef UTF8
+ edit_find_string (long start, unsigned char *exp, int *len, long last_byte, edit_getbyte_fn get_byte, void *data, int once_only, void *d)
++#else /* UTF8 */
++edit_find_string (long start, unsigned char *exp_mb, int *len, long last_byte, edit_getbyte_fn get_byte, void *data, int once_only, void *d)
++#endif /* UTF8 */
+ {
+ long p, q = 0;
+- long l = strlen ((char *) exp), f = 0;
++ long f = 0;
++
++#ifndef UTF8
++ long l = strlen ((char *) exp);
++#else /* UTF8 */
++ mc_wchar_t *exp = mbstr_to_wchar((char *)exp_mb);
++ mc_wchar_t *exp_backup = exp;
++ long l = wcslen(exp);
++#endif /* UTF8 */
+ int n = 0;
+
+ for (p = 0; p < l; p++) /* count conversions... */
+@@ -1428,19 +1573,22 @@
+ n++;
+
+ if (replace_scanf || replace_regexp) {
+- int c;
+- unsigned char *buf;
+- unsigned char mbuf[MAX_REPL_LEN * 2 + 3];
++ mc_wint_t c;
++ mc_wchar_t *buf;
++ mc_wchar_t mbuf[MAX_REPL_LEN * 2 + 3];
+
+ replace_scanf = (!replace_regexp); /* can't have both */
+
+ buf = mbuf;
+
+ if (replace_scanf) {
+- unsigned char e[MAX_REPL_LEN];
+- if (n >= NUM_REPL_ARGS)
+- return -3;
+-
++ mc_wchar_t e[MAX_REPL_LEN];
++ if (n >= NUM_REPL_ARGS) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
++ return -3;
++ }
+ if (replace_case) {
+ for (p = start; p < last_byte && p < start + MAX_REPL_LEN; p++)
+ buf[p - start] = (*get_byte) (data, p);
+@@ -1454,20 +1602,36 @@
+ }
+
+ buf[(q = p - start)] = 0;
++#ifndef UTF8
+ strcpy ((char *) e, (char *) exp);
+ strcat ((char *) e, "%n");
++#else /* UTF8 */
++ wcscpy (e, exp);
++ wcscat (e, L"%n");
++#endif /* UTF8 */
+ exp = e;
+
+ while (q) {
+ *((int *) sargs[n]) = 0; /* --> here was the problem - now fixed: good */
++#ifndef UTF8
+ if (n == sscanf ((char *) buf, (char *) exp, SCANF_ARGS)) {
++#else /* UTF8 */
++ if (n == swscanf (buf, exp, SCANF_ARGS)) {
++#endif /* UTF8 */
+ if (*((int *) sargs[n])) {
+ *len = *((int *) sargs[n]);
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return start;
+ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+ if (q + start < last_byte) {
+ if (replace_case) {
+ buf[q] = (*get_byte) (data, q + start);
+@@ -1481,7 +1645,11 @@
+ start++;
+ buf++; /* move the window along */
+ if (buf == mbuf + MAX_REPL_LEN) { /* the window is about to go past the end of array, so... */
++#ifndef UTF8
+ memmove (mbuf, buf, strlen ((char *) buf) + 1); /* reset it */
++#else /* UTF8 */
++ wmemmove (mbuf, buf, (wcslen (buf) + 1)); /* reset it */
++#endif /* UTF8 */
+ buf = mbuf;
+ }
+ q--;
+@@ -1507,10 +1675,17 @@
+
+ buf = mbuf;
+ while (q) {
++#ifndef UTF8
+ found_start = string_regexp_search ((char *) exp, (char *) buf, q, match_normal, match_bol, !replace_case, len, d);
++#else /* UTF8 */
++ found_start = string_regexp_search ((char *) exp_mb, buf, match_normal, match_bol, !replace_case, len, d);
++#endif /* UTF8 */
+
+ if (found_start <= -2) { /* regcomp/regexec error */
+ *len = 0;
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return -3;
+ }
+ else if (found_start == -1) /* not found: try next line */
+@@ -1521,15 +1696,27 @@
+ match_bol = 0;
+ continue;
+ }
+- else /* found */
++ else { /* found */
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return (start + offset - q + found_start);
++ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+
+ if (buf[q - 1] != '\n') { /* incomplete line: try to recover */
+ buf = mbuf + MAX_REPL_LEN / 2;
++#ifndef UTF8
+ q = strlen ((const char *) buf);
++#else /* UTF8 */
++ q = wcslen (buf);
++#endif /* UTF8 */
+ memmove (mbuf, buf, q);
+ p = start + q;
+ move_win = 1;
+@@ -1539,36 +1726,59 @@
+ }
+ }
+ } else {
++#ifndef UTF8
+ *len = strlen ((const char *) exp);
++#else /* UTF8 */
++ *len = wcslen (exp);
++#endif /* UTF8 */
+ if (replace_case) {
+ for (p = start; p <= last_byte - l; p++) {
+- if ((*get_byte) (data, p) == (unsigned char)exp[0]) { /* check if first char matches */
++ if ((*get_byte) (data, p) == exp[0]) { /* check if first char matches */
+ for (f = 0, q = 0; q < l && f < 1; q++)
+- if ((*get_byte) (data, q + p) != (unsigned char)exp[q])
++ if ((*get_byte) (data, q + p) != exp[q])
+ f = 1;
+- if (f == 0)
++ if (f == 0) {
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return p;
++ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free(exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+ }
+ } else {
+ for (p = 0; exp[p] != 0; p++)
+ exp[p] = my_lower_case (exp[p]);
+
+ for (p = start; p <= last_byte - l; p++) {
+- if (my_lower_case ((*get_byte) (data, p)) == (unsigned char)exp[0]) {
++ if (my_lower_case ((*get_byte) (data, p)) == exp[0]) {
+ for (f = 0, q = 0; q < l && f < 1; q++)
+- if (my_lower_case ((*get_byte) (data, q + p)) != (unsigned char)exp[q])
++ if (my_lower_case ((*get_byte) (data, q + p)) != exp[q])
+ f = 1;
+- if (f == 0)
++ if (f == 0) {
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return p;
++ }
+ }
+- if (once_only)
++ if (once_only) {
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return -2;
++ }
+ }
+ }
+ }
++#ifdef UTF8
++ g_free (exp_backup);
++#endif /* UTF8 */
+ return -2;
+ }
+
+@@ -1582,9 +1792,14 @@
+
+ while ((p = edit_find_string (p, exp, len, last_byte, get_byte, data, once_only, d)) >= 0) {
+ if (replace_whole) {
++#ifndef UTF8
+ /*If the bordering chars are not in option_whole_chars_search then word is whole */
+ if (!strcasechr (option_whole_chars_search, (*get_byte) (data, p - 1))
+ && !strcasechr (option_whole_chars_search, (*get_byte) (data, p + *len)))
++#else /* UTF8 */
++ if (!iswalnum((*get_byte) (data, p - 1))
++ && !iswalnum((*get_byte) (data, p + *len)))
++#endif /* UTF8 */
+ return p;
+ if (once_only)
+ return -2;
+@@ -1616,6 +1831,7 @@
+
+ #define is_digit(x) ((x) >= '0' && (x) <= '9')
+
++#ifndef UTF8
+ #define snprint(v) { \
+ *p1++ = *p++; \
+ *p1 = '\0'; \
+@@ -1623,33 +1839,48 @@
+ if (n >= (size_t) (e - s)) goto nospc; \
+ s += n; \
+ }
++#else /* UTF8 */
++#define snprint(v) { \
++ *p1++ = *p++; \
++ *p1 = '\0'; \
++ n = swprintf(s, e-s, q1,v); \
++ if (n >= (size_t) (e - s)) goto nospc; \
++ s += n; \
++ }
++#endif /* UTF8 */
+
+ /* this function uses the sprintf command to do a vprintf */
+ /* it takes pointers to arguments instead of the arguments themselves */
+ /* The return value is the number of bytes written excluding '\0'
+ if successfull, -1 if the resulting string would be too long and
+ -2 if the format string is errorneous. */
+-static int snprintf_p (char *str, size_t size, const char *fmt,...)
+- __attribute__ ((format (printf, 3, 4)));
+-
+-static int snprintf_p (char *str, size_t size, const char *fmt,...)
++static int snprintf_p (mc_wchar_t *str, size_t size, const mc_wchar_t *fmt,...)
+ {
+ va_list ap;
+ size_t n;
+- const char *q, *p;
+- char *s = str, *e = str + size;
+- char q1[40];
+- char *p1;
++ const mc_wchar_t *q, *p;
++ mc_wchar_t *s = str, *e = str + size;
++ mc_wchar_t q1[40];
++
++ mc_wchar_t *p1;
+ int nargs = 0;
+
+ va_start (ap, fmt);
+ p = q = fmt;
+
++#ifndef UTF8
+ while ((p = strchr (p, '%'))) {
++#else /* UTF8 */
++ while ((p = wcschr (p, L'%'))) {
++#endif /* UTF8 */
+ n = p - q;
+ if (n >= (size_t) (e - s))
+ goto nospc;
++#ifndef UTF8
+ memcpy (s, q, n); /* copy stuff between format specifiers */
++#else /* UTF8 */
++ wmemcpy (s, q, n); /* copy stuff between format specifiers */
++#endif /* UTF8 */
+ s += n;
+ q = p;
+ p1 = q1;
+@@ -1677,45 +1908,78 @@
+ *p1++ = *p++;
+ if (*p == '*') {
+ p++;
++#ifndef UTF8
+ strcpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace field width with a number */
+ p1 += strlen (p1);
++#else /* UTF8 */
++ wcscpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace field width with a number */
++ p1 += wcslen (p1);
++#endif /* UTF8 */
+ } else {
+- while (is_digit (*p) && p1 < q1 + 20)
++#ifndef UTF8
++ while (is_digit (*p)
++#else /* UTF8 */
++ while (iswdigit (*p)
++#endif /* UTF8 */
++ && p1 < q1 + 20)
+ *p1++ = *p++;
+- if (is_digit (*p))
++#ifndef UTF8
++ if (is_digit (*p))
++#else /* UTF8 */
++ if (iswdigit (*p))
++#endif /* UTF8 */
+ goto err;
+ }
+ if (*p == '.')
+ *p1++ = *p++;
+ if (*p == '*') {
+ p++;
++#ifndef UTF8
+ strcpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace precision with a number */
+ p1 += strlen (p1);
++#else /* UTF8 */
++ wcscpy (p1, MY_itoa (*va_arg (ap, int *))); /* replace precision with a number */
++ p1 += wcslen (p1);
++#endif /* UTF8 */
+ } else {
+- while (is_digit (*p) && p1 < q1 + 32)
++#ifndef UTF8
++ while (is_digit (*p)
++#else /* UTF8 */
++ while (iswdigit (*p)
++#endif /* UTF8 */
++ && p1 < q1 + 32)
+ *p1++ = *p++;
+- if (is_digit (*p))
++#ifndef UTF8
++ if (is_digit (*p))
++#else /* UTF8 */
++ if (iswdigit (*p))
++#endif /* UTF8 */
+ goto err;
+ }
+ /* flags done, now get argument */
+ if (*p == 's') {
++#ifndef UTF8
+ snprint (va_arg (ap, char *));
++#else /* UTF8 */
++ *p1++ = 'l';
++ snprint (va_arg (ap, mc_wchar_t *));
++#endif /* UTF8 */
+ } else if (*p == 'h') {
+- if (strchr ("diouxX", *p))
++ if (*p < 128 && strchr ("diouxX", *p))
+ snprint (*va_arg (ap, short *));
+ } else if (*p == 'l') {
+ *p1++ = *p++;
+- if (strchr ("diouxX", *p))
++ if (*p < 128 && strchr ("diouxX", *p))
+ snprint (*va_arg (ap, long *));
+- } else if (strchr ("cdiouxX", *p)) {
++ } else if (*p < 128 && strchr ("cdiouxX", *p)) {
+ snprint (*va_arg (ap, int *));
+ } else if (*p == 'L') {
+ *p1++ = *p++;
+- if (strchr ("EefgG", *p))
++ if (*p < 128 && strchr ("EefgG", *p))
+ snprint (*va_arg (ap, double *)); /* should be long double */
+- } else if (strchr ("EefgG", *p)) {
++ } else if (*p < 128 && strchr ("EefgG", *p)) {
+ snprint (*va_arg (ap, double *));
+- } else if (strchr ("DOU", *p)) {
++ } else if (*p < 128 && strchr ("DOU", *p)) {
+ snprint (*va_arg (ap, long *));
+ } else if (*p == 'p') {
+ snprint (*va_arg (ap, void **));
+@@ -1724,10 +1988,17 @@
+ q = p;
+ }
+ va_end (ap);
++#ifndef UTF8
+ n = strlen (q);
+ if (n >= (size_t) (e - s))
+ return -1;
+ memcpy (s, q, n + 1);
++#else /* UTF8 */
++ n = wcslen (q);
++ if (n >= (size_t) (e - s))
++ return -1;
++ wmemcpy (s, q, n + 1);
++#endif /* UTF8 */
+ return s + n - str;
+ nospc:
+ va_end (ap);
+@@ -1902,8 +2173,11 @@
+ }
+ }
+ if (replace_yes) { /* delete then insert new */
++#ifdef UTF8
++ mc_wchar_t *winput2 = mbstr_to_wchar(exp2);
++#endif /* UTF8 */
+ if (replace_scanf || replace_regexp) {
+- char repl_str[MAX_REPL_LEN + 2];
++ mc_wchar_t repl_str[MAX_REPL_LEN + 2];
+ int ret = 0;
+
+ /* we need to fill in sargs just like with scanf */
+@@ -1912,17 +2186,25 @@
+ for (k = 1;
+ k < NUM_REPL_ARGS && pmatch[k].rm_eo >= 0;
+ k++) {
++#ifndef UTF8
+ unsigned char *t;
++#else /* UTF8 */
++ mc_wchar_t *t;
++#endif
+
+ if (pmatch[k].rm_eo - pmatch[k].rm_so > 255) {
+ ret = -1;
+ break;
+ }
++#ifndef UTF8
+ t = (unsigned char *) &sargs[k - 1][0];
++#else /* UTF8 */
++ t = (mc_wchar_t *) &sargs[k - 1][0];
++#endif /* UTF8 */
+ for (j = 0;
+ j < pmatch[k].rm_eo - pmatch[k].rm_so
+ && j < 255; j++, t++)
+- *t = (unsigned char) edit_get_byte (edit,
++ *t = edit_get_byte (edit,
+ edit->
+ search_start
+ -
+@@ -1939,13 +2221,22 @@
+ sargs[k - 1][0] = 0;
+ }
+ if (!ret)
++#ifndef UTF8
+ ret = snprintf_p (repl_str, MAX_REPL_LEN + 2, exp2, PRINTF_ARGS);
++#else /* UTF8 */
++ ret = snprintf_p (repl_str, MAX_REPL_LEN + 2, winput2, PRINTF_ARGS);
++#endif /* UTF8 */
+ if (ret >= 0) {
+ times_replaced++;
+ while (i--)
+ edit_delete (edit);
++#ifndef UTF8
+ while (repl_str[++i])
+ edit_insert (edit, repl_str[i]);
++#else /* UTF8 */
++ while (winput2[++i])
++ edit_insert (edit, winput2[i]);
++#endif /* UTF8 */
+ } else {
+ edit_error_dialog (_(" Replace "),
+ ret == -2
+@@ -1957,10 +2248,18 @@
+ times_replaced++;
+ while (i--)
+ edit_delete (edit);
++#ifndef UTF8
+ while (exp2[++i])
+ edit_insert (edit, exp2[i]);
++#else /* UTF8 */
++ while (winput2[++i])
++ edit_insert (edit, winput2[i]);
++#endif
+ }
+ edit->found_len = i;
++#ifdef UTF8
++ g_free (winput2);
++#endif /* UTF8 */
+ }
+ /* so that we don't find the same string again */
+ if (replace_backwards) {
+@@ -2132,16 +2431,17 @@
+ #define TEMP_BUF_LEN 1024
+
+ /* Return a null terminated length of text. Result must be g_free'd */
+-static unsigned char *
++static mc_wchar_t *
+ edit_get_block (WEdit *edit, long start, long finish, int *l)
+ {
+- unsigned char *s, *r;
+- r = s = g_malloc (finish - start + 1);
++ mc_wchar_t *s, *r;
++ r = s = g_malloc ((finish - start + 1) * sizeof(mc_wchar_t));
+ if (column_highlighting) {
+ *l = 0;
+ /* copy from buffer, excluding chars that are out of the column 'margins' */
+ while (start < finish) {
+- int c, x;
++ mc_wchar_t c;
++ int x;
+ x = edit_move_forward3 (edit, edit_bol (edit, start), 0,
+ start);
+ c = edit_get_byte (edit, start);
+@@ -2174,11 +2474,15 @@
+ return 0;
+
+ if (column_highlighting) {
+- unsigned char *block, *p;
++ mc_wchar_t *block, *p;
+ int r;
+ p = block = edit_get_block (edit, start, finish, &len);
+ while (len) {
++#ifndef UTF8
+ r = mc_write (file, p, len);
++#else /* UTF8 */
++ r = wchar_write (file, p, len);
++#endif /* UTF8 */
+ if (r < 0)
+ break;
+ p += r;
+@@ -2186,15 +2490,19 @@
+ }
+ g_free (block);
+ } else {
+- unsigned char *buf;
++ mc_wchar_t *buf;
+ int i = start, end;
+ len = finish - start;
+- buf = g_malloc (TEMP_BUF_LEN);
++ buf = g_malloc (TEMP_BUF_LEN * sizeof(mc_wchar_t));
+ while (start != finish) {
+ end = min (finish, start + TEMP_BUF_LEN);
+ for (; i < end; i++)
+ buf[i - start] = edit_get_byte (edit, i);
++#ifndef UTF8
+ len -= mc_write (file, (char *) buf, end - start);
++#else /* UTF8 */
++ len -= wchar_write (file, buf, end - start);
++#endif /* UTF8 */
+ start = end;
+ }
+ g_free (buf);
+@@ -2531,17 +2839,20 @@
+
+ /* prints at the cursor */
+ /* returns the number of chars printed */
++#ifndef UTF8
+ int edit_print_string (WEdit * e, const char *s)
++#else /* UTF8 */
++int edit_print_wstring (WEdit * e, mc_wchar_t *s)
++#endif /* UTF8 */
+ {
+ int i = 0;
+ while (s[i])
+- edit_execute_cmd (e, -1, (unsigned char) s[i++]);
++ edit_execute_cmd (e, -1, s[i++]);
+ e->force |= REDRAW_COMPLETELY;
+ edit_update_screen (e);
+ return i;
+ }
+
+-
+ static void pipe_mail (WEdit *edit, char *to, char *subject, char *cc)
+ {
+ FILE *p = 0;
+@@ -2635,15 +2946,20 @@
+ /* find first character of current word */
+ static int edit_find_word_start (WEdit *edit, long *word_start, int *word_len)
+ {
+- int i, c, last;
++ int i;
++ mc_wint_t c, last;
+
+ /* return if at begin of file */
+ if (edit->curs1 <= 0)
+ return 0;
+
+- c = (unsigned char) edit_get_byte (edit, edit->curs1 - 1);
++ c = edit_get_byte (edit, edit->curs1 - 1);
+ /* return if not at end or in word */
++#ifndef UTF8
+ if (isspace (c) || !(isalnum (c) || c == '_'))
++#else /* UTF8 */
++ if (iswspace (c) || !(iswalnum (c) || c == '_'))
++#endif /* UTF8 */
+ return 0;
+
+ /* search start of word to be completed */
+@@ -2653,11 +2969,19 @@
+ return 0;
+
+ last = c;
+- c = (unsigned char) edit_get_byte (edit, edit->curs1 - i);
++ c = edit_get_byte (edit, edit->curs1 - i);
+
++#ifndef UTF8
+ if (!(isalnum (c) || c == '_')) {
++#else /* UTF8 */
++ if (!(iswalnum (c) || c == '_')) {
++#endif /* UTF8 */
+ /* return if word starts with digit */
++#ifndef UTF8
+ if (isdigit (last))
++#else /* UTF8 */
++ if (iswdigit (last))
++#endif /* UTF8 */
+ return 0;
+
+ *word_start = edit->curs1 - (i - 1); /* start found */
+@@ -2690,7 +3014,7 @@
+ int *num)
+ {
+ int len, max_len = 0, i, skip;
+- char *bufpos;
++ mc_wchar_t *bufpos;
+
+ /* collect max MAX_WORD_COMPLETIONS completions */
+ while (*num < MAX_WORD_COMPLETIONS) {
+@@ -2711,9 +3035,16 @@
+ buffers1[start >> S_EDIT_BUF_SIZE][start & M_EDIT_BUF_SIZE];
+ skip = 0;
+ for (i = 0; i < *num; i++) {
++#ifndef UTF8
+ if (strncmp
+ (&compl[i].text[word_len], &bufpos[word_len],
+- max (len, compl[i].len) - word_len) == 0) {
++ max (len,
++#else /* UTF8 */
++ if (wcsncmp
++ ((wchar_t *) &compl[i].text[word_len],
++ (wchar_t *) &bufpos[word_len], max (len,
++#endif /* UTF8 */
++ compl[i].len) - word_len) == 0) {
+ skip = 1;
+ break; /* skip it, already added */
+ }
+@@ -2721,7 +3052,7 @@
+ if (skip)
+ continue;
+
+- compl[*num].text = g_malloc (len + 1);
++ compl[*num].text = g_malloc ((len + 1) * sizeof(mc_wchar_t));
+ compl[*num].len = len;
+ for (i = 0; i < len; i++)
+ compl[*num].text[i] = *(bufpos + i);
+@@ -2735,6 +3066,18 @@
+ return max_len;
+ }
+
++#ifdef UTF8
++int edit_print_string (WEdit * e, const char *s)
++{
++ int i;
++ mc_wchar_t *ws = mbstr_to_wchar(s);
++ i = edit_print_wstring (e, ws);
++ g_free(ws);
++ return i;
++}
++
++#endif /* UTF8 */
++
+
+ /* let the user select its preferred completion */
+ static void
+@@ -2747,6 +3090,10 @@
+ WListbox *compl_list;
+ int compl_dlg_h; /* completion dialog height */
+ int compl_dlg_w; /* completion dialog width */
++#ifdef UTF8
++ char *mbtext;
++#endif /* UTF8 */
++
+
+ /* calculate the dialog metrics */
+ compl_dlg_h = num_compl + 2;
+@@ -2782,8 +3129,16 @@
+ add_widget (compl_dlg, compl_list);
+
+ /* fill the listbox with the completions */
++#ifndef UTF8
+ for (i = 0; i < num_compl; i++)
+ listbox_add_item (compl_list, 0, 0, compl[i].text, NULL);
++#else /* UTF8 */
++ for (i = 0; i < num_compl; i++) {
++ mbtext = wchar_to_mbstr(compl[i].text);
++ listbox_add_item (compl_list, 0, 0, mbtext, NULL);
++ g_free(mbtext);
++ }
++#endif /* UTF8 */
+
+ /* pop up the dialog */
+ run_dlg (compl_dlg);
+@@ -2791,9 +3146,17 @@
+ /* apply the choosen completion */
+ if (compl_dlg->ret_value == B_ENTER) {
+ listbox_get_current (compl_list, &curr, NULL);
+- if (curr)
++ if (curr){
++#ifndef UTF8
+ for (curr += word_len; *curr; curr++)
+ edit_insert (edit, *curr);
++#else /* UTF8 */
++ mc_wchar_t *wc, *wccurr = mbstr_to_wchar(curr);
++ for (wc = wccurr + word_len; *wc; wc++)
++ edit_insert (edit, *wc);
++ g_free(wccurr);
++#endif /* UTF8 */
++ }
+ }
+
+ /* destroy dialog before return */
+@@ -2810,8 +3173,9 @@
+ {
+ int word_len = 0, i, num_compl = 0, max_len;
+ long word_start = 0;
+- char *bufpos;
+- char *match_expr;
++ mc_wchar_t *bufpos;
++ mc_wchar_t *match_expr;
++ char *mbmatch_expr;
+ struct selection compl[MAX_WORD_COMPLETIONS]; /* completions */
+
+ /* don't want to disturb another search */
+@@ -2828,16 +3192,32 @@
+ /* prepare match expression */
+ bufpos = &edit->buffers1[word_start >> S_EDIT_BUF_SIZE]
+ [word_start & M_EDIT_BUF_SIZE];
++
++ match_expr = g_malloc((word_len + 14) * sizeof(mc_wchar_t));
++#ifndef UTF8
+ match_expr = g_strdup_printf ("%.*s[a-zA-Z_0-9]+", word_len, bufpos);
++#else /* UTF8 */
++ wcsncpy (match_expr, bufpos, word_len);
++ match_expr[word_len] = '\0';
++ wcscat (match_expr, L"[a-zA-Z_0-9]+");
++#endif /* UTF8 */
+
+ /* init search: backward, regexp, whole word, case sensitive */
+ edit_set_search_parameters (0, 1, 1, 1, 1);
+
+ /* collect the possible completions */
+ /* start search from curs1 down to begin of file */
++#ifndef UTF8
+ max_len =
+ edit_collect_completions (edit, word_start, word_len, match_expr,
+ (struct selection *) &compl, &num_compl);
++#else /* UTF8 */
++ mbmatch_expr = wchar_to_mbstr(match_expr);
++ max_len =
++ edit_collect_completions (edit, word_start, word_len, mbmatch_expr,
++ (struct selection *) &compl, &num_compl);
++ g_free(mbmatch_expr);
++#endif /* UTF8 */
+
+ if (num_compl > 0) {
+ /* insert completed word if there is only one match */
+diff -Naur mc-4.6.1-old/edit/editdraw.c mc-4.6.1/edit/editdraw.c
+--- mc-4.6.1-old/edit/editdraw.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/edit/editdraw.c 2005-10-28 10:08:07.657259272 +0200
+@@ -48,7 +48,7 @@
+
+ static void status_string (WEdit * edit, char *s, int w)
+ {
+- char byte_str[16];
++ char byte_str[32];
+
+ /*
+ * If we are at the end of file, print <EOF>,
+@@ -56,11 +56,16 @@
+ * as decimal and as hex.
+ */
+ if (edit->curs1 < edit->last_byte) {
+- unsigned char cur_byte = edit_get_byte (edit, edit->curs1);
++ mc_wchar_t cur_byte = edit_get_byte (edit, edit->curs1);
++#ifndef UTF8
+ g_snprintf (byte_str, sizeof (byte_str), "%c %3d 0x%02X",
+ is_printable (cur_byte) ? cur_byte : '.',
+- (int) cur_byte,
+- (unsigned) cur_byte);
++#else /* UTF8 */
++ g_snprintf (byte_str, sizeof(byte_str), "%lc %3d 0x%02X",
++ iswprint(cur_byte) ? cur_byte : '.',
++#endif /* UTF8 */
++ (int) cur_byte,
++ (unsigned) cur_byte);
+ } else {
+ strcpy (byte_str, "<EOF>");
+ }
+@@ -183,11 +188,16 @@
+ #define lowlevel_set_color(x) attrset(MY_COLOR_PAIR(color))
+ #endif
+
++struct line_s {
++ mc_wchar_t ch;
++ unsigned int style;
++};
++
+ static void
+ print_to_widget (WEdit *edit, long row, int start_col, int start_col_real,
+- long end_col, unsigned int line[])
++ long end_col, struct line_s line[])
+ {
+- unsigned int *p;
++ struct line_s *p;
+
+ int x = start_col_real + EDIT_TEXT_HORIZONTAL_OFFSET;
+ int x1 = start_col + EDIT_TEXT_HORIZONTAL_OFFSET;
+@@ -201,9 +211,9 @@
+ edit_move (x1 + FONT_OFFSET_X, y + FONT_OFFSET_Y);
+ p = line;
+
+- while (*p) {
++ while (p->ch) {
+ int style;
+- int textchar;
++ mc_wchar_t textchar;
+ int color;
+
+ if (cols_to_skip) {
+@@ -212,9 +222,9 @@
+ continue;
+ }
+
+- style = *p & 0xFF00;
+- textchar = *p & 0xFF;
+- color = *p >> 16;
++ style = p->style & 0xFF00;
++ textchar = p->ch;
++ color = p->style >> 16;
+
+ if (style & MOD_ABNORMAL) {
+ /* Non-printable - use black background */
+@@ -228,8 +238,11 @@
+ } else {
+ lowlevel_set_color (color);
+ }
+-
++#ifdef UTF8
++ SLsmg_write_char(textchar);
++#else
+ addch (textchar);
++#endif
+ p++;
+ }
+ }
+@@ -239,11 +252,11 @@
+ edit_draw_this_line (WEdit *edit, long b, long row, long start_col,
+ long end_col)
+ {
+- static unsigned int line[MAX_LINE_LEN];
+- unsigned int *p = line;
++ struct line_s line[MAX_LINE_LEN];
++ struct line_s *p = line;
+ long m1 = 0, m2 = 0, q, c1, c2;
+ int col, start_col_real;
+- unsigned int c;
++ mc_wint_t c;
+ int color;
+ int i, book_mark = -1;
+
+@@ -265,66 +278,96 @@
+
+ if (row <= edit->total_lines - edit->start_line) {
+ while (col <= end_col - edit->start_col) {
+- *p = 0;
++ p->ch = 0;
++ p->style = 0;
+ if (q == edit->curs1)
+- *p |= MOD_CURSOR;
++ p->style |= MOD_CURSOR;
+ if (q >= m1 && q < m2) {
+ if (column_highlighting) {
+ int x;
+ x = edit_move_forward3 (edit, b, 0, q);
+ if (x >= c1 && x < c2)
+- *p |= MOD_MARKED;
++ p->style |= MOD_MARKED;
+ } else
+- *p |= MOD_MARKED;
++ p->style |= MOD_MARKED;
+ }
+ if (q == edit->bracket)
+- *p |= MOD_BOLD;
++ p->style |= MOD_BOLD;
+ if (q >= edit->found_start
+ && q < edit->found_start + edit->found_len)
+- *p |= MOD_BOLD;
++ p->style |= MOD_BOLD;
+ c = edit_get_byte (edit, q);
+ /* we don't use bg for mc - fg contains both */
+ if (book_mark == -1) {
+ edit_get_syntax_color (edit, q, &color);
+- *p |= color << 16;
++ p->style |= color << 16;
+ } else {
+- *p |= book_mark << 16;
++ p->style |= book_mark << 16;
+ }
+ q++;
+ switch (c) {
+ case '\n':
+ col = end_col - edit->start_col + 1; /* quit */
+- *(p++) |= ' ';
++ p->ch = ' ';
++ p++;
+ break;
+ case '\t':
+ i = TAB_SIZE - ((int) col % TAB_SIZE);
+- *p |= ' ';
+- c = *(p++) & ~MOD_CURSOR;
++ p->ch = ' ';
++ c = p->style & ~MOD_CURSOR;
++ p++;
+ col += i;
+- while (--i)
+- *(p++) = c;
++ while (--i) {
++ p->ch = ' '; p->style = c;
++ p++;
++ }
+ break;
+ default:
+ c = convert_to_display_c (c);
+
+ /* Caret notation for control characters */
+ if (c < 32) {
+- *(p++) = '^' | MOD_ABNORMAL;
+- *(p++) = (c + 0x40) | MOD_ABNORMAL;
++ p->ch = '^';
++ p->style = MOD_ABNORMAL;
++ p++;
++ p->ch = c + 0x40;
++ p->style = MOD_ABNORMAL;
+ col += 2;
+ break;
+ }
+ if (c == 127) {
+- *(p++) = '^' | MOD_ABNORMAL;
+- *(p++) = '?' | MOD_ABNORMAL;
++ p->ch = '^';
++ p->style = MOD_ABNORMAL;
++ p++;
++ p->ch = '?';
++ p->style = MOD_ABNORMAL;
++ p++;
+ col += 2;
+ break;
+ }
+
+- if (is_printable (c)) {
+- *(p++) |= c;
++#ifndef UTF8
++ if (is_printable (c)
++#else /* UTF8 */
++ if (iswprint (c)
++#ifdef __STDC_ISO_10646__
++ && (c < BINARY_CHAR_OFFSET || c >= (BINARY_CHAR_OFFSET + 256))
++#endif
++#endif /* UTF8 */
++ ) {
++ p->ch = c;
++ p++;
++
++#ifdef UTF8
++ i = wcwidth(c);
++ if (i > 1) {
++ col += i - 1;
++ }
++#endif /* UTF8 */
+ } else {
+- *(p++) = '.' | MOD_ABNORMAL;
++ p->ch = '.';
++ p->style = MOD_ABNORMAL;
++ p++;
+ }
+ col++;
+ break;
+@@ -334,7 +377,7 @@
+ } else {
+ start_col_real = start_col = 0;
+ }
+- *p = 0;
++ p->ch = 0;
+
+ print_to_widget (edit, row, start_col, start_col_real, end_col, line);
+ }
+diff -Naur mc-4.6.1-old/edit/edit.h mc-4.6.1/edit/edit.h
+--- mc-4.6.1-old/edit/edit.h 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/edit/edit.h 2005-10-28 10:08:07.768242400 +0200
+@@ -39,6 +39,27 @@
+
+ #include "../src/global.h"
+
++#include "src/tty.h"
++
++#ifdef UTF8
++#include <wchar.h>
++#include <wctype.h>
++
++#define mc_wchar_t wchar_t
++#define mc_wint_t wint_t
++
++#else
++
++#define mc_wchar_t unsigned char
++#define mc_wint_t int
++
++#endif
++
++
++/* unicode private use area */
++#define BINARY_CHAR_OFFSET 0xFFE00
++
++
+ #define N_menus 5
+
+ #define SEARCH_DIALOG_OPTION_NO_SCANF 1
+@@ -99,6 +120,8 @@
+ #define START_STACK_SIZE 32
+
+ /* Some codes that may be pushed onto or returned from the undo stack */
++#define CHAR_INSERT 65
++#define CHAR_INSERT_AHEAD 66
+ #define CURS_LEFT 601
+ #define CURS_RIGHT 602
+ #define DELCHAR 603
+@@ -118,7 +141,7 @@
+
+ struct macro {
+ short command;
+- short ch;
++ mc_wchar_t ch;
+ };
+
+ struct WEdit;
+@@ -132,26 +155,8 @@
+ void menu_save_mode_cmd (void);
+ int edit_raw_key_query (const char *heading, const char *query, int cancel);
+ int edit_file (const char *_file, int line);
+-int edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch);
+-
+-#ifndef NO_INLINE_GETBYTE
+-int edit_get_byte (WEdit * edit, long byte_index);
+-#else
+-static inline int edit_get_byte (WEdit * edit, long byte_index)
+-{
+- unsigned long p;
+- if (byte_index >= (edit->curs1 + edit->curs2) || byte_index < 0)
+- return '\n';
+-
+- if (byte_index >= edit->curs1) {
+- p = edit->curs1 + edit->curs2 - byte_index - 1;
+- return edit->buffers2[p >> S_EDIT_BUF_SIZE][EDIT_BUF_SIZE - (p & M_EDIT_BUF_SIZE) - 1];
+- } else {
+- return edit->buffers1[byte_index >> S_EDIT_BUF_SIZE][byte_index & M_EDIT_BUF_SIZE];
+- }
+-}
+-#endif
+-
++int edit_translate_key (WEdit *edit, long x_key, int *cmd, mc_wint_t *ch);
++mc_wchar_t edit_get_byte (WEdit * edit, long byte_index);
+ int edit_count_lines (WEdit * edit, long current, int upto);
+ long edit_move_forward (WEdit * edit, long current, int lines, long upto);
+ long edit_move_forward3 (WEdit * edit, long current, int cols, long upto);
+@@ -176,11 +181,11 @@
+ void edit_delete_line (WEdit * edit);
+
+ int edit_delete (WEdit * edit);
+-void edit_insert (WEdit * edit, int c);
++void edit_insert (WEdit * edit, mc_wchar_t c);
+ int edit_cursor_move (WEdit * edit, long increment);
+ void edit_push_action (WEdit * edit, long c, ...);
+ void edit_push_key_press (WEdit * edit);
+-void edit_insert_ahead (WEdit * edit, int c);
++void edit_insert_ahead (WEdit * edit, mc_wchar_t c);
+ long edit_write_stream (WEdit * edit, FILE * f);
+ char *edit_get_write_filter (const char *writename, const char *filename);
+ int edit_save_confirm_cmd (WEdit * edit);
+@@ -212,7 +217,7 @@
+ int eval_marks (WEdit * edit, long *start_mark, long *end_mark);
+ void edit_status (WEdit * edit);
+ void edit_execute_key_command (WEdit *edit, int command,
+- int char_for_insertion);
++ mc_wint_t char_for_insertion);
+ void edit_update_screen (WEdit * edit);
+ int edit_print_string (WEdit * e, const char *s);
+ void edit_move_to_line (WEdit * e, long line);
+@@ -256,7 +261,7 @@
+ void format_paragraph (WEdit *edit, int force);
+
+ /* either command or char_for_insertion must be passed as -1 */
+-void edit_execute_cmd (WEdit *edit, int command, int char_for_insertion);
++void edit_execute_cmd (WEdit *edit, int command, mc_wint_t char_for_insertion);
+
+ #define get_sys_error(s) (s)
+
+diff -Naur mc-4.6.1-old/edit/editkeys.c mc-4.6.1/edit/editkeys.c
+--- mc-4.6.1-old/edit/editkeys.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/edit/editkeys.c 2005-10-28 10:08:07.659258968 +0200
+@@ -162,10 +162,10 @@
+ * 'command' is one of the editor commands from editcmddef.h.
+ */
+ int
+-edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch)
++edit_translate_key (WEdit *edit, long x_key, int *cmd, mc_wint_t *ch)
+ {
+ int command = CK_Insert_Char;
+- int char_for_insertion = -1;
++ mc_wint_t char_for_insertion = -1;
+ int i = 0;
+ static const long *key_map;
+
+@@ -242,9 +242,30 @@
+ /* an ordinary insertable character */
+ if (x_key < 256) {
+ int c = convert_from_input_c (x_key);
+-
++#ifdef UTF8
++ mbstate_t mbs;
++ int res;
++ mc_wchar_t wc;
++
++ memset (&mbs, 0, sizeof (mbs));
++
++ if (edit->charpoint >= MB_CUR_MAX) edit->charpoint = 0;
++
++ edit->charbuf[edit->charpoint++] = c;
++
++ res = mbrtowc(&wc, (char *)edit->charbuf, edit->charpoint, &mbs);
++ if (res < 0) {
++ if (res != -2) edit->charpoint = 0; /* broken multibyte char, skip */
++ return 0;
++ }
++ edit->charpoint = 0;
++
++ if (iswprint (wc)) {
++ char_for_insertion = wc;
++#else
+ if (is_printable (c)) {
+ char_for_insertion = c;
++#endif /* UTF8 */
+ goto fin;
+ }
+ }
+@@ -285,7 +306,7 @@
+ *cmd = command;
+ *ch = char_for_insertion;
+
+- if (command == CK_Insert_Char && char_for_insertion == -1) {
++ if (command == CK_Insert_Char && char_for_insertion == (mc_wint_t)-1) {
+ /* unchanged, key has no function here */
+ return 0;
+ }
+diff -Naur mc-4.6.1-old/edit/editwidget.c mc-4.6.1/edit/editwidget.c
+--- mc-4.6.1-old/edit/editwidget.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/edit/editwidget.c 2005-10-28 10:08:07.664258208 +0200
+@@ -337,7 +337,8 @@
+
+ case WIDGET_KEY:
+ {
+- int cmd, ch;
++ int cmd;
++ mc_wint_t ch;
+
+ /* first check alt-f, alt-e, alt-s, etc for drop menus */
+ if (edit_drop_hotkey_menu (e, parm))
+diff -Naur mc-4.6.1-old/edit/edit-widget.h mc-4.6.1/edit/edit-widget.h
+--- mc-4.6.1-old/edit/edit-widget.h 2003-10-29 09:54:47.000000000 +0100
++++ mc-4.6.1/edit/edit-widget.h 2005-10-28 10:08:07.750245136 +0200
+@@ -24,6 +24,11 @@
+ unsigned char border;
+ };
+
++struct action {
++ mc_wchar_t ch;
++ long flags;
++};
++
+ struct WEdit {
+ Widget widget;
+
+@@ -36,8 +41,17 @@
+ /* dynamic buffers and cursor position for editor: */
+ long curs1; /* position of the cursor from the beginning of the file. */
+ long curs2; /* position from the end of the file */
++#ifndef UTF8
+ unsigned char *buffers1[MAXBUFF + 1]; /* all data up to curs1 */
+ unsigned char *buffers2[MAXBUFF + 1]; /* all data from end of file down to curs2 */
++#else /* UTF8 */
++ mc_wchar_t *buffers1[MAXBUFF + 1]; /* all data up to curs1 */
++ mc_wchar_t *buffers2[MAXBUFF + 1]; /* all data from end of file down to curs2 */
++
++ unsigned char charbuf[MB_LEN_MAX];
++ int charpoint;
++#endif /* UTF8 */
++
+
+ /* search variables */
+ long search_start; /* First character to start searching from */
+@@ -81,7 +95,7 @@
+
+ /* undo stack and pointers */
+ unsigned long stack_pointer;
+- long *undo_stack;
++ struct action *undo_stack;
+ unsigned long stack_size;
+ unsigned long stack_size_mask;
+ unsigned long stack_bottom;
+diff -Naur mc-4.6.1-old/edit/wordproc.c mc-4.6.1/edit/wordproc.c
+--- mc-4.6.1-old/edit/wordproc.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/edit/wordproc.c 2005-10-28 10:08:07.668257600 +0200
+@@ -24,7 +24,12 @@
+
+ #define tab_width option_tab_spacing
+
++#ifndef UTF8
+ #define NO_FORMAT_CHARS_START "-+*\\,.;:&>"
++#else /* UTF8 */
++#define NO_FORMAT_CHARS_START L"-+*\\,.;:&>"
++#endif /* UTF8 */
++
+ #define FONT_MEAN_WIDTH 1
+
+ static long
+@@ -41,14 +46,21 @@
+ p = edit_move_forward (edit, p, line - l, 0);
+
+ p = edit_bol (edit, p);
++
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
++
+ p++;
+ return p;
+ }
+
+ static int bad_line_start (WEdit * edit, long p)
+ {
+- int c;
++ mc_wint_t c;
++
+ c = edit_get_byte (edit, p);
+ if (c == '.') { /* `...' is acceptable */
+ if (edit_get_byte (edit, p + 1) == '.')
+@@ -62,7 +74,13 @@
+ return 0; /* `---' is acceptable */
+ return 1;
+ }
++
++#ifndef UTF8
+ if (strchr (NO_FORMAT_CHARS_START, c))
++#else /* UTF8 */
++ if (wcschr (NO_FORMAT_CHARS_START, c))
++#endif /* UTF8 */
++
+ return 1;
+ return 0;
+ }
+@@ -115,33 +133,37 @@
+ i - edit->curs_line, 0));
+ }
+
+-static unsigned char *
++static mc_wchar_t *
+ get_paragraph (WEdit *edit, long p, long q, int indent, int *size)
+ {
+- unsigned char *s, *t;
++ mc_wchar_t *s, *t;
+ #if 0
+- t = g_malloc ((q - p) + 2 * (q - p) / option_word_wrap_line_length +
+- 10);
++ t = g_malloc (((q - p) + 2 * (q - p) / option_word_wrap_line_length +
++ 10) * sizeof(mc_wchar_t));
+ #else
+- t = g_malloc (2 * (q - p) + 100);
++ t = g_malloc ((2 * (q - p) + 100) * sizeof(mc_wchar_t));
+ #endif
+ if (!t)
+ return 0;
+ for (s = t; p < q; p++, s++) {
+ if (indent)
+ if (edit_get_byte (edit, p - 1) == '\n')
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
+ p++;
+ *s = edit_get_byte (edit, p);
+ }
+- *size = (unsigned long) s - (unsigned long) t;
++ *size = s - t;
+ t[*size] = '\n';
+ return t;
+ }
+
+-static void strip_newlines (unsigned char *t, int size)
++static void strip_newlines (mc_wchar_t *t, int size)
+ {
+- unsigned char *p = t;
++ mc_wchar_t *p = t;
+ while (size--) {
+ *p = *p == '\n' ? ' ' : *p;
+ p++;
+@@ -158,7 +180,7 @@
+ {
+ return x += tab_width - x % tab_width;
+ }
+-static int line_pixel_length (unsigned char *t, long b, int l)
++static int line_pixel_length (mc_wchar_t *t, long b, int l)
+ {
+ int x = 0, c, xn = 0;
+ for (;;) {
+@@ -182,7 +204,7 @@
+ }
+
+ /* find the start of a word */
+-static int next_word_start (unsigned char *t, int q, int size)
++static int next_word_start (mc_wchar_t *t, int q, int size)
+ {
+ int i;
+ for (i = q;; i++) {
+@@ -203,7 +225,7 @@
+ }
+
+ /* find the start of a word */
+-static int word_start (unsigned char *t, int q, int size)
++static int word_start (mc_wchar_t *t, int q, int size)
+ {
+ int i = q;
+ if (t[q] == ' ' || t[q] == '\t')
+@@ -222,7 +244,7 @@
+ }
+
+ /* replaces ' ' with '\n' to properly format a paragraph */
+-static void format_this (unsigned char *t, int size, int indent)
++static void format_this (mc_wchar_t *t, int size, int indent)
+ {
+ int q = 0, ww;
+ strip_newlines (t, size);
+@@ -250,7 +272,7 @@
+ }
+ }
+
+-static void replace_at (WEdit * edit, long q, int c)
++static void replace_at (WEdit * edit, long q, mc_wint_t c)
+ {
+ edit_cursor_move (edit, q - edit->curs1);
+ edit_delete (edit);
+@@ -258,18 +280,27 @@
+ }
+
+ /* replaces a block of text */
+-static void put_paragraph (WEdit * edit, unsigned char *t, long p, long q, int indent, int size)
++static void put_paragraph (WEdit * edit, mc_wchar_t *t, long p, long q, int indent, int size)
+ {
+ long cursor;
+- int i, c = 0;
++ int i;
++ mc_wchar_t c = 0;
+ cursor = edit->curs1;
+ if (indent)
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
+ p++;
+ for (i = 0; i < size; i++, p++) {
+ if (i && indent) {
+ if (t[i - 1] == '\n' && c == '\n') {
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p)))
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p)))
++#endif /* UTF8 */
+ p++;
+ } else if (t[i - 1] == '\n') {
+ long curs;
+@@ -281,7 +312,11 @@
+ p = edit->curs1;
+ } else if (c == '\n') {
+ edit_cursor_move (edit, p - edit->curs1);
++#ifndef UTF8
+ while (strchr ("\t ", edit_get_byte (edit, p))) {
++#else /* UTF8 */
++ while (wcschr (L"\t ", edit_get_byte (edit, p))) {
++#endif /* UTF8 */
+ edit_delete (edit);
+ if (cursor > edit->curs1)
+ cursor--;
+@@ -314,7 +349,7 @@
+ {
+ long p, q;
+ int size;
+- unsigned char *t;
++ mc_wchar_t *t;
+ int indent = 0;
+ if (option_word_wrap_line_length < 2)
+ return;
+@@ -324,17 +359,25 @@
+ q = end_paragraph (edit, force);
+ indent = test_indent (edit, p, q);
+ t = get_paragraph (edit, p, q, indent, &size);
+- if (!t)
++ if (!t)
+ return;
+ if (!force) {
+ int i;
++#ifndef UTF8
+ if (strchr (NO_FORMAT_CHARS_START, *t)) {
++#else /* UTF8 */
++ if (wcschr (NO_FORMAT_CHARS_START, *t)) {
++#endif /* UTF8 */
+ g_free (t);
+ return;
+ }
+ for (i = 0; i < size - 1; i++) {
+ if (t[i] == '\n') {
++#ifndef UTF8
+ if (strchr (NO_FORMAT_CHARS_START "\t ", t[i + 1])) {
++#else /* UTF8 */
++ if (wcschr (NO_FORMAT_CHARS_START "\t", t[i + 1])) {
++#endif /* UTF8 */
+ g_free (t);
+ return;
+ }
+diff -Naur mc-4.6.1-old/src/achown.c mc-4.6.1/src/achown.c
+--- mc-4.6.1-old/src/achown.c 2005-07-23 18:52:02.000000000 +0200
++++ mc-4.6.1/src/achown.c 2005-10-28 10:08:08.094192848 +0200
+@@ -583,6 +583,12 @@
+ b_att[2] = button_new (XTRACT (6));
+ b_user = button_new (XTRACT (5));
+ b_group = button_new (XTRACT (4));
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ b_user->text = g_realloc (b_user->text, MB_CUR_MAX * 15 + 1);
++ b_group->text = g_realloc (b_group->text, MB_CUR_MAX * 15 + 1);
++ }
++#endif
+
+ add_widget (ch_dlg, b_group);
+ add_widget (ch_dlg, b_user);
+diff -Naur mc-4.6.1-old/src/boxes.c mc-4.6.1/src/boxes.c
+--- mc-4.6.1-old/src/boxes.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/boxes.c 2005-10-28 10:08:08.079195128 +0200
+@@ -150,23 +150,23 @@
+ display_title = _(display_title);
+ for (i = 0; i < LIST_TYPES; i++) {
+ displays[i] = _(displays[i]);
+- if ((l = strlen (displays[i])) > maxlen)
++ if ((l = mbstrlen (displays[i])) > maxlen)
+ maxlen = l;
+ }
+
+- i = strlen (ok_button) + 5;
+- l = strlen (cancel_button) + 3;
++ i = mbstrlen (ok_button) + 5;
++ l = mbstrlen (cancel_button) + 3;
+ l = max (i, l);
+
+ i = maxlen + l + 16;
+ if (i > DISPLAY_X)
+ DISPLAY_X = i;
+
+- i = strlen (user_mini_status) + 13;
++ i = mbstrlen (user_mini_status) + 13;
+ if (i > DISPLAY_X)
+ DISPLAY_X = i;
+
+- i = strlen (display_title) + 10;
++ i = mbstrlen (display_title) + 10;
+ if (i > DISPLAY_X)
+ DISPLAY_X = i;
+
+@@ -285,20 +285,20 @@
+ int maxlen = 0;
+ for (i = SORT_TYPES - 1; i >= 0; i--) {
+ sort_orders_names[i] = _(sort_orders[i].sort_name);
+- r = strlen (sort_orders_names[i]);
++ r = mbstrlen (sort_orders_names[i]);
+ if (r > maxlen)
+ maxlen = r;
+ }
+
+ check_pos = maxlen + 9;
+
+- r = strlen (reverse_label) + 4;
+- i = strlen (case_label) + 4;
++ r = mbstrlen (reverse_label) + 4;
++ i = mbstrlen (case_label) + 4;
+ if (i > r)
+ r = i;
+
+- l = strlen (ok_button) + 6;
+- i = strlen (cancel_button) + 4;
++ l = mbstrlen (ok_button) + 6;
++ i = mbstrlen (cancel_button) + 4;
+ if (i > l)
+ l = i;
+
+@@ -307,7 +307,7 @@
+ if (i > SORT_X)
+ SORT_X = i;
+
+- i = strlen (sort_title) + 6;
++ i = mbstrlen (sort_title) + 6;
+ if (i > SORT_X)
+ SORT_X = i;
+
+@@ -402,7 +402,7 @@
+ while (i--)
+ {
+ conf_widgets [i].text = _(conf_widgets [i].text);
+- l1 = strlen (conf_widgets [i].text) + 3;
++ l1 = mbstrlen (conf_widgets [i].text) + 3;
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+@@ -417,8 +417,8 @@
+ * And this for the case when buttons with some space to the right
+ * do not fit within 2/6
+ */
+- l1 = strlen (conf_widgets [0].text) + 3;
+- i = strlen (conf_widgets [1].text) + 5;
++ l1 = mbstrlen (conf_widgets [0].text) + 3;
++ i = mbstrlen (conf_widgets [1].text) + 5;
+ if (i > l1)
+ l1 = i;
+
+@@ -489,11 +489,11 @@
+ {
+ display_widgets [i].text = _(display_widgets[i].text);
+ display_bits_str [i] = _(display_bits_str [i]);
+- l1 = strlen (display_bits_str [i]);
++ l1 = mbstrlen (display_bits_str [i]);
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+- l1 = strlen (display_widgets [2].text);
++ l1 = mbstrlen (display_widgets [2].text);
+ if (l1 > maxlen)
+ maxlen = l1;
+
+@@ -501,8 +501,8 @@
+ display_bits.xlen = (maxlen + 5) * 6 / 4;
+
+ /* See above confirm_box */
+- l1 = strlen (display_widgets [0].text) + 3;
+- i = strlen (display_widgets [1].text) + 5;
++ l1 = mbstrlen (display_widgets [0].text) + 3;
++ i = mbstrlen (display_widgets [1].text) + 5;
+ if (i > l1)
+ l1 = i;
+
+@@ -597,7 +597,7 @@
+
+ cpname = _("&Select");
+ add_widget (dbits_dlg,
+- button_new (4, DISPX - 8 - strlen (cpname), B_USER,
++ button_new (4, DISPX - 8 - mbstrlen (cpname), B_USER,
+ NORMAL_BUTTON, cpname, sel_charset_button));
+
+ return dbits_dlg;
+@@ -803,7 +803,7 @@
+ quick_widgets [1].y_divisions =
+ quick_widgets [0].y_divisions = Quick_input.ylen = 5;
+
+- len = strlen (quick_widgets [1].text);
++ len = mbstrlen (quick_widgets [1].text);
+
+ quick_widgets [0].relative_x =
+ quick_widgets [1].relative_x + len + 1;
+@@ -962,7 +962,7 @@
+ {
+ job_buttons [i].name = _(job_buttons [i].name);
+
+- len = strlen (job_buttons [i].name) + 4;
++ len = mbstrlen (job_buttons [i].name) + 4;
+ JOBS_X = max (JOBS_X, startx + len + 3);
+
+ job_buttons [i].xpos = startx;
+@@ -971,7 +971,7 @@
+
+ /* Last button - Ok a.k.a. Cancel :) */
+ job_buttons [n_buttons - 1].xpos =
+- JOBS_X - strlen (job_buttons [n_buttons - 1].name) - 7;
++ JOBS_X - mbstrlen (job_buttons [n_buttons - 1].name) - 7;
+
+ i18n_flag = 1;
+ }
+@@ -1029,7 +1029,7 @@
+
+ while (i--)
+ {
+- l1 = strlen (labs [i] = _(labs [i]));
++ l1 = mbstrlen (labs [i] = _(labs [i]));
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+@@ -1039,7 +1039,7 @@
+
+ for (i = sizeof(buts)/sizeof(buts[0]), l1 = 0; i--; )
+ {
+- l1 += strlen (buts [i] = _(buts [i]));
++ l1 += mbstrlen (buts [i] = _(buts [i]));
+ }
+ l1 += 15;
+ if (l1 > dialog_x)
+@@ -1048,7 +1048,7 @@
+ ilen = dialog_x - 7 - maxlen; /* for the case of very long buttons :) */
+ istart = dialog_x - 3 - ilen;
+
+- b2 = dialog_x - (strlen(buts[1]) + 6);
++ b2 = dialog_x - (mbstrlen(buts[1]) + 6);
+
+ i18n_flag = 1;
+ }
+diff -Naur mc-4.6.1-old/src/dialog.c mc-4.6.1/src/dialog.c
+--- mc-4.6.1-old/src/dialog.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/dialog.c 2005-10-28 10:08:07.891223704 +0200
+@@ -162,7 +162,7 @@
+
+ if (h->title) {
+ attrset (HOT_NORMALC);
+- dlg_move (h, space, (h->cols - strlen (h->title)) / 2);
++ dlg_move (h, space, (h->cols - mbstrlen (h->title)) / 2);
+ addstr (h->title);
+ }
+ }
+diff -Naur mc-4.6.1-old/src/file.c mc-4.6.1/src/file.c
+--- mc-4.6.1-old/src/file.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/file.c 2005-10-28 10:08:08.002206832 +0200
+@@ -165,15 +165,20 @@
+ do_transform_source (FileOpContext *ctx, const unsigned char *source)
+ {
+ size_t j, k, l, len;
+- unsigned const char *fnsource = x_basename (source);
++ unsigned const char *fnsource = g_strdup (x_basename (source));
+ int next_reg;
+ enum CaseConvs case_conv = NO_CONV;
+ static unsigned char fntarget[MC_MAXPATHLEN];
+
++#ifdef UTF8
++ fix_utf8(fnsource);
++#endif
++
+ len = strlen (fnsource);
+ j = re_match (&ctx->rx, fnsource, len, 0, &ctx->regs);
+ if (j != len) {
+ transform_error = FILE_SKIP;
++ g_free(fnsource);
+ return NULL;
+ }
+ for (next_reg = 1, j = 0, k = 0; j < strlen (ctx->dest_mask); j++) {
+@@ -217,6 +222,7 @@
+ || ctx->regs.start[next_reg] < 0) {
+ message (1, MSG_ERROR, _(" Invalid target mask "));
+ transform_error = FILE_ABORT;
++ g_free(fnsource);
+ return NULL;
+ }
+ for (l = (size_t) ctx->regs.start[next_reg];
+@@ -231,6 +237,7 @@
+ }
+ }
+ fntarget[k] = 0;
++ g_free(fnsource);
+ return fntarget;
+ }
+
+diff -Naur mc-4.6.1-old/src/filegui.c mc-4.6.1/src/filegui.c
+--- mc-4.6.1-old/src/filegui.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/filegui.c 2005-10-28 10:08:08.140185856 +0200
+@@ -69,6 +69,7 @@
+ #include "filegui.h"
+ #include "key.h" /* get_event */
+ #include "util.h" /* strip_password() */
++#include "tty.h"
+
+ /* }}} */
+
+@@ -564,8 +565,8 @@
+ * longest of "Overwrite..." labels
+ * (assume "Target date..." are short enough)
+ */
+- l1 = max (strlen (rd_widgets[6].text),
+- strlen (rd_widgets[11].text));
++ l1 = max (mbstrlen (rd_widgets[6].text),
++ mbstrlen (rd_widgets[11].text));
+
+ /* longest of button rows */
+ i = sizeof (rd_widgets) / sizeof (rd_widgets[0]);
+@@ -576,7 +577,7 @@
+ l2 = max (l2, l);
+ l = 0;
+ }
+- l += strlen (rd_widgets[i].text) + 4;
++ l += mbstrlen (rd_widgets[i].text) + 4;
+ }
+ }
+ l2 = max (l2, l); /* last row */
+@@ -594,12 +595,12 @@
+ l = l1;
+ }
+ rd_widgets[i].xpos = l;
+- l += strlen (rd_widgets[i].text) + 4;
++ l += mbstrlen (rd_widgets[i].text) + 4;
+ }
+ }
+ /* Abort button is centered */
+ rd_widgets[1].xpos =
+- (rd_xlen - strlen (rd_widgets[1].text) - 3) / 2;
++ (rd_xlen - mbstrlen (rd_widgets[1].text) - 3) / 2;
+ }
+ #endif /* ENABLE_NLS */
+
+@@ -618,7 +619,7 @@
+
+ ADD_RD_LABEL (ui, 0,
+ name_trunc (ui->replace_filename,
+- rd_trunc - strlen (rd_widgets[0].text)), 0);
++ rd_trunc - mbstrlen (rd_widgets[0].text)), 0);
+ ADD_RD_BUTTON (1);
+
+ ADD_RD_BUTTON (2);
+@@ -805,36 +806,36 @@
+ if (fmd_widgets[i].text[0] != '\0')
+ fmd_widgets[i].text = _(fmd_widgets[i].text);
+
+- len = strlen (fmd_widgets[FMCB11].text)
+- + strlen (fmd_widgets[FMCB21].text) + 15;
++ len = mbstrlen (fmd_widgets[FMCB11].text)
++ + mbstrlen (fmd_widgets[FMCB21].text) + 15;
+ fmd_xlen = max (fmd_xlen, len);
+
+- len = strlen (fmd_widgets[FMCB12].text)
+- + strlen (fmd_widgets[FMCB22].text) + 15;
++ len = mbstrlen (fmd_widgets[FMCB12].text)
++ + mbstrlen (fmd_widgets[FMCB22].text) + 15;
+ fmd_xlen = max (fmd_xlen, len);
+
+- len = strlen (fmd_widgets[FMBRGT].text)
+- + strlen (fmd_widgets[FMBLFT].text) + 11;
++ len = mbstrlen (fmd_widgets[FMBRGT].text)
++ + mbstrlen (fmd_widgets[FMBLFT].text) + 11;
+
+ #ifdef FMBMID
+- len += strlen (fmd_widgets[FMBMID].text) + 6;
++ len += mbstrlen (fmd_widgets[FMBMID].text) + 6;
+ #endif
+
+ fmd_xlen = max (fmd_xlen, len + 4);
+
+ len = (fmd_xlen - (len + 6)) / 2;
+ i = fmd_widgets[FMBLFT].relative_x = len + 3;
+- i += strlen (fmd_widgets[FMBLFT].text) + 8;
++ i += mbstrlen (fmd_widgets[FMBLFT].text) + 8;
+
+ #ifdef FMBMID
+ fmd_widgets[FMBMID].relative_x = i;
+- i += strlen (fmd_widgets[FMBMID].text) + 6;
++ i += mbstrlen (fmd_widgets[FMBMID].text) + 6;
+ #endif
+
+ fmd_widgets[FMBRGT].relative_x = i;
+
+ #define chkbox_xpos(i) \
+- fmd_widgets [i].relative_x = fmd_xlen - strlen (fmd_widgets [i].text) - 6
++ fmd_widgets [i].relative_x = fmd_xlen - mbstrlen (fmd_widgets [i].text) - 6
+
+ chkbox_xpos (FMCB0);
+ chkbox_xpos (FMCB21);
+@@ -856,7 +857,7 @@
+
+ char *
+ file_mask_dialog (FileOpContext *ctx, FileOperation operation, const char *text,
+- const char *def_text, int only_one, int *do_background)
++ const char *def_text_orig, int only_one, int *do_background)
+ {
+ int source_easy_patterns = easy_patterns;
+ char *source_mask, *orig_mask, *dest_dir, *tmpdest;
+@@ -865,12 +866,20 @@
+ struct stat buf;
+ int val;
+ QuickDialog Quick_input;
+-
++ char *def_text;
+ g_return_val_if_fail (ctx != NULL, NULL);
++
++ def_text = g_strdup(def_text_orig);
++
+ #if 0
+ message (1, __FUNCTION__, "text = `%s' \n def_text = `%s'", text,
+ def_text);
+ #endif
++
++#ifdef UTF8
++ fix_utf8(def_text);
++#endif
++
+ fmd_init_i18n (FALSE);
+
+ /* Set up the result pointers */
+@@ -929,6 +938,7 @@
+ orig_mask = source_mask;
+ if (!dest_dir || !*dest_dir) {
+ g_free (source_mask);
++ g_free(def_text);
+ return dest_dir;
+ }
+ if (source_easy_patterns) {
+@@ -982,5 +992,6 @@
+ }
+ if (val == B_USER)
+ *do_background = 1;
++ g_free(def_text);
+ return dest_dir;
+ }
+diff -Naur mc-4.6.1-old/src/find.c mc-4.6.1/src/find.c
+--- mc-4.6.1-old/src/find.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/find.c 2005-10-28 10:08:08.049199688 +0200
+@@ -205,7 +205,7 @@
+ int l1, maxlen = 0;
+
+ while (i--) {
+- l1 = strlen (labs[i] = _(labs[i]));
++ l1 = mbstrlen (labs[i] = _(labs[i]));
+ if (l1 > maxlen)
+ maxlen = l1;
+ }
+@@ -214,7 +214,7 @@
+ FIND_X = i;
+
+ for (i = sizeof (buts) / sizeof (buts[0]), l1 = 0; i--;) {
+- l1 += strlen (buts[i] = _(buts[i]));
++ l1 += mbstrlen (buts[i] = _(buts[i]));
+ }
+ l1 += 21;
+ if (l1 > FIND_X)
+@@ -223,8 +223,8 @@
+ ilen = FIND_X - 7 - maxlen; /* for the case of very long buttons :) */
+ istart = FIND_X - 3 - ilen;
+
+- b1 = b0 + strlen (buts[0]) + 7;
+- b2 = FIND_X - (strlen (buts[2]) + 6);
++ b1 = b0 + mbstrlen (buts[0]) + 7;
++ b2 = FIND_X - (mbstrlen (buts[2]) + 6);
+
+ i18n_flag = 1;
+ case_label = _(case_label);
+@@ -813,7 +813,7 @@
+ if (!i18n_flag) {
+ register int i = sizeof (fbuts) / sizeof (fbuts[0]);
+ while (i--)
+- fbuts[i].len = strlen (fbuts[i].text = _(fbuts[i].text)) + 3;
++ fbuts[i].len = mbstrlen (fbuts[i].text = _(fbuts[i].text)) + 3;
+ fbuts[2].len += 2; /* DEFPUSH_BUTTON */
+ i18n_flag = 1;
+ }
+diff -Naur mc-4.6.1-old/src/global.h mc-4.6.1/src/global.h
+--- mc-4.6.1-old/src/global.h 2004-09-25 15:46:23.000000000 +0200
++++ mc-4.6.1/src/global.h 2005-10-28 10:11:08.071832088 +0200
+@@ -146,6 +146,13 @@
+ # define N_(String) (String)
+ #endif /* !ENABLE_NLS */
+
++#include <slang.h>
++#if SLANG_VERSION >= 20000
++#define UTF8 1
++#define SLsmg_Is_Unicode SLsmg_is_utf8_mode()
++void SLsmg_write_nwchars(wchar_t *s, size_t n);
++#endif
++
+ #include "fs.h"
+ #include "util.h"
+
+diff -Naur mc-4.6.1-old/src/help.c mc-4.6.1/src/help.c
+--- mc-4.6.1-old/src/help.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/help.c 2005-10-28 10:09:53.961098632 +0200
+@@ -445,10 +445,28 @@
+ #ifndef HAVE_SLANG
+ addch (acs_map [c]);
+ #else
++#if defined(UTF8) && SLANG_VERSION < 20000
++ SLsmg_draw_object (h->y + line + 2, h->x + col + 2, acs_map [c]);
++#else
+ SLsmg_draw_object (h->y + line + 2, h->x + col + 2, c);
++#endif /* UTF8 */
+ #endif
++ } else {
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ int len;
++ mbstate_t mbs;
++ wchar_t wc;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrtowc(&wc, p, MB_CUR_MAX, &mbs);
++ if (len <= 0) len = 1; /* skip broken multibyte chars */
++
++ SLsmg_write_char(wc);
++ p += len - 1;
+ } else
++#endif
+ addch (c);
++ }
+ col++;
+ break;
+ }
+@@ -771,6 +789,12 @@
+ message (1, MSG_ERROR, _(" Cannot open file %s \n %s "), filename ? filename : hlpfile,
+ unix_error_string (errno));
+ }
++ else
++ {
++ char *conv = utf8_to_local(data);
++ g_free(data);
++ data = conv;
++ }
+
+ if (!filename)
+ g_free (hlpfile);
+diff -Naur mc-4.6.1-old/src/hotlist.c mc-4.6.1/src/hotlist.c
+--- mc-4.6.1-old/src/hotlist.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/hotlist.c 2005-10-28 10:08:07.918219600 +0200
+@@ -555,7 +555,7 @@
+
+ row = hotlist_but [i].y;
+ ++count [row];
+- len [row] += strlen (hotlist_but [i].text) + 5;
++ len [row] += mbstrlen (hotlist_but [i].text) + 5;
+ if (hotlist_but [i].flags == DEFPUSH_BUTTON)
+ len [row] += 2;
+ }
+@@ -580,12 +580,12 @@
+ /* not first int the row */
+ if (!strcmp (hotlist_but [i].text, cancel_but))
+ hotlist_but [i].x =
+- cols - strlen (hotlist_but [i].text) - 13;
++ cols - mbstrlen (hotlist_but [i].text) - 13;
+ else
+ hotlist_but [i].x = cur_x [row];
+ }
+
+- cur_x [row] += strlen (hotlist_but [i].text) + 2
++ cur_x [row] += mbstrlen (hotlist_but [i].text) + 2
+ + (hotlist_but [i].flags == DEFPUSH_BUTTON ? 5 : 3);
+ }
+ }
+@@ -814,7 +814,7 @@
+ for (i = 0; i < 3; i++)
+ {
+ qw [i].text = _(qw [i].text);
+- l[i] = strlen (qw [i].text) + 3;
++ l[i] = mbstrlen (qw [i].text) + 3;
+ }
+ space = (len - 4 - l[0] - l[1] - l[2]) / 4;
+
+@@ -860,7 +860,7 @@
+ static int i18n_flag = 0;
+ #endif /* ENABLE_NLS */
+
+- len = max (strlen (header), (size_t) msglen (text1, &lines1));
++ len = max ((int) mbstrlen (header), (size_t) msglen (text1, &lines1));
+ len = max (len, (size_t) msglen (text2, &lines2)) + 4;
+ len = max (len, 64);
+
+@@ -955,7 +955,7 @@
+ static int i18n_flag = 0;
+ #endif /* ENABLE_NLS */
+
+- len = max (strlen (header), (size_t) msglen (label, &lines)) + 4;
++ len = max ((int) mbstrlen (header), (size_t) msglen (label, &lines)) + 4;
+ len = max (len, 64);
+
+ #ifdef ENABLE_NLS
+@@ -1011,7 +1011,7 @@
+ {
+ char *prompt, *label;
+ const char *cp = _("Label for \"%s\":");
+- int l = strlen (cp);
++ int l = mbstrlen (cp);
+ char *label_string = g_strdup (current_panel->cwd);
+
+ strip_password (label_string, 1);
+diff -Naur mc-4.6.1-old/src/layout.c mc-4.6.1/src/layout.c
+--- mc-4.6.1-old/src/layout.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/layout.c 2005-10-28 10:08:07.947215192 +0200
+@@ -362,36 +362,36 @@
+
+ while (i--) {
+ s_split_direction[i] = _(s_split_direction[i]);
+- l1 = strlen (s_split_direction[i]) + 7;
++ l1 = mbstrlen (s_split_direction[i]) + 7;
+ if (l1 > first_width)
+ first_width = l1;
+ }
+
+ for (i = 0; i <= 8; i++) {
+ check_options[i].text = _(check_options[i].text);
+- l1 = strlen (check_options[i].text) + 7;
++ l1 = mbstrlen (check_options[i].text) + 7;
+ if (l1 > first_width)
+ first_width = l1;
+ }
+
+- l1 = strlen (title1) + 1;
++ l1 = mbstrlen (title1) + 1;
+ if (l1 > first_width)
+ first_width = l1;
+
+- l1 = strlen (title2) + 1;
++ l1 = mbstrlen (title2) + 1;
+ if (l1 > first_width)
+ first_width = l1;
+
+
+- second_width = strlen (title3) + 1;
++ second_width = mbstrlen (title3) + 1;
+ for (i = 0; i < 6; i++) {
+ check_options[i].text = _(check_options[i].text);
+- l1 = strlen (check_options[i].text) + 7;
++ l1 = mbstrlen (check_options[i].text) + 7;
+ if (l1 > second_width)
+ second_width = l1;
+ }
+ if (console_flag) {
+- l1 = strlen (output_lines_label) + 13;
++ l1 = mbstrlen (output_lines_label) + 13;
+ if (l1 > second_width)
+ second_width = l1;
+ }
+@@ -405,14 +405,14 @@
+ *
+ * Now the last thing to do - properly space buttons...
+ */
+- l1 = 11 + strlen (ok_button) /* 14 - all brackets and inner space */
+- +strlen (save_button) /* notice: it is 3 char less because */
+- +strlen (cancel_button); /* of '&' char in button text */
++ l1 = 11 + mbstrlen (ok_button) /* 14 - all brackets and inner space */
++ +mbstrlen (save_button) /* notice: it is 3 char less because */
++ +mbstrlen (cancel_button); /* of '&' char in button text */
+
+ i = (first_width + second_width - l1) / 4;
+ b1 = 5 + i;
+- b2 = b1 + strlen (ok_button) + i + 6;
+- b3 = b2 + strlen (save_button) + i + 4;
++ b2 = b1 + mbstrlen (ok_button) + i + 6;
++ b3 = b2 + mbstrlen (save_button) + i + 4;
+
+ i18n_layt_flag = 1;
+ }
+@@ -684,7 +684,7 @@
+ panel_do_cols (0);
+ panel_do_cols (1);
+
+- promptl = strlen (prompt);
++ promptl = mbstrlen (prompt);
+
+ widget_set_size (&the_menubar->widget, 0, 0, 1, COLS);
+
+diff -Naur mc-4.6.1-old/src/learn.c mc-4.6.1/src/learn.c
+--- mc-4.6.1-old/src/learn.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/learn.c 2005-10-28 10:08:07.787239512 +0200
+@@ -236,7 +236,7 @@
+ learn_but[0].x = 78 / 2 + 4;
+
+ learn_but[1].text = _(learn_but[1].text);
+- learn_but[1].x = 78 / 2 - (strlen (learn_but[1].text) + 9);
++ learn_but[1].x = 78 / 2 - (mbstrlen (learn_but[1].text) + 9);
+
+ learn_title = _(learn_title);
+ i18n_flag = 1;
+diff -Naur mc-4.6.1-old/src/main.c mc-4.6.1/src/main.c
+--- mc-4.6.1-old/src/main.c 2005-07-23 18:52:02.000000000 +0200
++++ mc-4.6.1/src/main.c 2005-10-28 10:08:07.816235104 +0200
+@@ -1609,7 +1609,11 @@
+ if (xterm_flag && xterm_title) {
+ p = s = g_strdup (strip_home_and_password (current_panel->cwd));
+ do {
++#ifndef UTF8
+ if (!is_printable (*s))
++#else /* UTF8 */
++ if (*s < ' ')
++#endif /* UTF8 */
+ *s = '?';
+ } while (*++s);
+ fprintf (stdout, "\33]0;mc - %s\7", p);
+diff -Naur mc-4.6.1-old/src/menu.c mc-4.6.1/src/menu.c
+--- mc-4.6.1-old/src/menu.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/menu.c 2005-10-28 10:08:08.110190416 +0200
+@@ -20,6 +20,8 @@
+ #include <stdarg.h>
+ #include <sys/types.h>
+ #include <ctype.h>
++#include <wchar.h>
++
+ #include "global.h"
+ #include "tty.h"
+ #include "menu.h"
+@@ -50,33 +52,96 @@
+ {
+ Menu *menu;
+ const char *cp;
++ int wlen = 0;
++ mbstate_t s;
+
+ menu = (Menu *) g_malloc (sizeof (*menu));
+ menu->count = count;
+ menu->max_entry_len = 20;
+ menu->entries = entries;
++ menu->name = g_strdup (name);
++ menu_scan_hotkey (menu);
++#ifdef UTF8
++ menu->wentries = NULL;
++ menu->wname = NULL;
++ if (SLsmg_Is_Unicode) {
++ const char *str = menu->name;
++ memset (&s, 0, sizeof (s));
++ wlen = mbsrtowcs (NULL, &str, -1, &s);
++ if (wlen > 0)
++ ++wlen;
++ else {
++ wlen = 0;
++ memset (&s, 0, sizeof (s));
++ }
++ }
++#endif
+
+ if (entries != (menu_entry*) NULL) {
+ register menu_entry* mp;
+ for (mp = entries; count--; mp++) {
+ if (mp->text[0] != '\0') {
++ int len;
+ #ifdef ENABLE_NLS
+ mp->text = _(mp->text);
+ #endif /* ENABLE_NLS */
+ cp = strchr (mp->text,'&');
+
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ len = mbstrlen(mp->text) + 1;
++ wlen += len;
++ menu->max_entry_len = max (len - 1, menu->max_entry_len);
++ } else
++#endif
++ len = strlen (mp->text);
++
+ if (cp != NULL && *(cp+1) != '\0') {
+ mp->hot_key = tolower (*(cp+1));
+- menu->max_entry_len = max ((int) (strlen (mp->text) - 1),
+- menu->max_entry_len);
++ menu->max_entry_len = max (len - 1, menu->max_entry_len);
+ } else {
+- menu->max_entry_len = max ((int) strlen (mp->text),
+- menu->max_entry_len);
++ menu->max_entry_len = max (len, menu->max_entry_len);
+ }
+ }
+ }
+ }
+
++#ifdef UTF8
++ if (wlen) {
++ wchar_t *wp;
++ const char *str;
++ int len;
++
++ menu->wentries = (wchar_t **)
++ g_malloc (sizeof (wchar_t *) * menu->count
++ + wlen * sizeof (wchar_t));
++ wp = (wchar_t *) (menu->wentries + menu->count);
++ str = menu->name;
++ len = mbsrtowcs (wp, &str, wlen, &s);
++ if (len > 0) {
++ menu->wname = wp;
++ wlen -= len + 1;
++ wp += len + 1;
++ } else
++ memset (&s, 0, sizeof (s));
++ if (menu->entries != NULL)
++ for (count = 0; count < menu->count; ++count)
++ if (menu->entries[count].text[0] != '\0') {
++ str = menu->entries[count].text;
++ menu->wentries[count] = wp;
++ len = mbsrtowcs (wp, &str, wlen, &s);
++ if (len > 0) {
++ wlen -= len + 1;
++ wp += len + 1;
++ } else {
++ memset (&s, 0, sizeof (s));
++ *wp++ = L'\0';
++ --wlen;
++ }
++ }
++ }
++#endif
++
+ menu->name = g_strdup (name);
+ menu_scan_hotkey(menu);
+ menu->start_x = 0;
+@@ -109,8 +174,26 @@
+ const unsigned char *text;
+
+ addch((unsigned char)menu->entries [idx].first_letter);
+- for (text = menu->entries [idx].text; *text; text++)
+- {
++#ifdef UTF8
++ if (menu->wentries) {
++ wchar_t *wtext, *wp;
++
++ for (wtext = wp = menu->wentries [idx]; *wtext; wtext++) {
++ if (*wtext == L'&') {
++ if (wtext > wp)
++ SLsmg_write_nwchars (wp, wtext - wp);
++ attrset (color == MENU_SELECTED_COLOR ?
++ MENU_HOTSEL_COLOR : MENU_HOT_COLOR);
++ SLsmg_write_nwchars (++wtext, 1);
++ attrset (color);
++ wp = wtext + 1;
++ }
++ }
++ if (wtext > wp)
++ SLsmg_write_nwchars (wp, wtext - wp);
++ } else
++#endif
++ for (text = menu->entries [idx].text; *text; text++) {
+ if (*text != '&')
+ addch(*text);
+ else {
+@@ -119,7 +202,7 @@
+ addch(*(++text));
+ attrset(color);
+ }
+- }
++ }
+ }
+ widget_move (&menubar->widget, y, x + 1);
+ }
+@@ -167,7 +250,13 @@
+ if (menubar->active)
+ attrset(i == menubar->selected?MENU_SELECTED_COLOR:SELECTED_COLOR);
+ widget_move (&menubar->widget, 0, menubar->menu [i]->start_x);
+- printw ("%s", menubar->menu [i]->name);
++#ifdef UTF8
++ if (menubar->menu [i]->wname)
++ SLsmg_write_nwchars (menubar->menu [i]->wname,
++ wcslen (menubar->menu [i]->wname));
++ else
++#endif
++ printw ("%s", menubar->menu [i]->name);
+ }
+
+ if (menubar->dropped)
+@@ -489,7 +578,13 @@
+
+ for (i = 0; i < items; i++)
+ {
+- int len = strlen(menubar->menu[i]->name);
++ int len;
++#ifdef UTF8
++ if (menubar->menu[i]->wname)
++ len = wcslen (menubar->menu[i]->wname);
++ else
++#endif
++ len = strlen(menubar->menu[i]->name);
+ menubar->menu[i]->start_x = start_x;
+ start_x += len + gap;
+ }
+@@ -502,7 +597,13 @@
+ for (i = 0; i < items; i++)
+ {
+ /* preserve length here, to be used below */
+- gap -= (menubar->menu[i]->start_x = strlen(menubar->menu[i]->name));
++#ifdef UTF8
++ if (menubar->menu[i]->wname)
++ menubar->menu[i]->start_x = wcslen (menubar->menu[i]->wname);
++ else
++#endif
++ menubar->menu[i]->start_x = strlen (menubar->menu[i]->name);
++ gap -= menubar->menu[i]->start_x;
+ }
+
+ gap /= (items - 1);
+@@ -526,6 +627,9 @@
+ void
+ destroy_menu (Menu *menu)
+ {
++#ifdef UTF8
++ g_free (menu->wentries);
++#endif
+ g_free (menu->name);
+ g_free (menu->help_node);
+ g_free (menu);
+diff -Naur mc-4.6.1-old/src/menu.h mc-4.6.1/src/menu.h
+--- mc-4.6.1-old/src/menu.h 2004-09-18 16:30:59.000000000 +0200
++++ mc-4.6.1/src/menu.h 2005-10-28 10:08:07.949214888 +0200
+@@ -21,6 +21,8 @@
+ menu_entry *entries;
+ int start_x; /* position relative to menubar start */
+ char *help_node;
++ wchar_t **wentries;
++ wchar_t *wname;
+ } Menu;
+
+ extern int menubar_visible;
+diff -Naur mc-4.6.1-old/src/myslang.h mc-4.6.1/src/myslang.h
+--- mc-4.6.1-old/src/myslang.h 2004-10-12 06:32:04.000000000 +0200
++++ mc-4.6.1/src/myslang.h 2005-10-28 10:08:07.831232824 +0200
+@@ -11,6 +11,10 @@
+ #endif /* HAVE_SLANG_SLANG_H */
+ #endif
+
++#ifdef UTF8
++# include <wchar.h>
++#endif
++
+ enum {
+ KEY_BACKSPACE = 400,
+ KEY_END, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT,
+diff -Naur mc-4.6.1-old/src/option.c mc-4.6.1/src/option.c
+--- mc-4.6.1-old/src/option.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/option.c 2005-10-28 10:08:08.121188744 +0200
+@@ -124,12 +124,12 @@
+ title2 = _(" Pause after run... ");
+ title3 = _(" Other options ");
+
+- first_width = strlen (title1) + 1;
+- second_width = strlen (title3) + 1;
++ first_width = mbstrlen (title1) + 1;
++ second_width = mbstrlen (title3) + 1;
+
+ for (i = 0; check_options[i].text; i++) {
+ check_options[i].text = _(check_options[i].text);
+- l1 = strlen (check_options[i].text) + 7;
++ l1 = mbstrlen (check_options[i].text) + 7;
+ if (i >= OTHER_OPTIONS) {
+ if (l1 > first_width)
+ first_width = l1;
+@@ -142,23 +142,23 @@
+ i = PAUSE_OPTIONS;
+ while (i--) {
+ pause_options[i] = _(pause_options[i]);
+- l1 = strlen (pause_options[i]) + 7;
++ l1 = mbstrlen (pause_options[i]) + 7;
+ if (l1 > first_width)
+ first_width = l1;
+ }
+
+- l1 = strlen (title2) + 1;
++ l1 = mbstrlen (title2) + 1;
+ if (l1 > first_width)
+ first_width = l1;
+
+- l1 = 11 + strlen (ok_button)
+- + strlen (save_button)
+- + strlen (cancel_button);
++ l1 = 11 + mbstrlen (ok_button)
++ + mbstrlen (save_button)
++ + mbstrlen (cancel_button);
+
+ i = (first_width + second_width - l1) / 4;
+ b1 = 5 + i;
+- b2 = b1 + strlen (ok_button) + i + 6;
+- b3 = b2 + strlen (save_button) + i + 4;
++ b2 = b1 + mbstrlen (ok_button) + i + 6;
++ b3 = b2 + mbstrlen (save_button) + i + 4;
+
+ i18n_config_flag = 1;
+ }
+diff -Naur mc-4.6.1-old/src/panelize.c mc-4.6.1/src/panelize.c
+--- mc-4.6.1-old/src/panelize.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/panelize.c 2005-10-28 10:08:07.933217320 +0200
+@@ -127,7 +127,7 @@
+ i = sizeof (panelize_but) / sizeof (panelize_but[0]);
+ while (i--) {
+ panelize_but[i].text = _(panelize_but[i].text);
+- maxlen += strlen (panelize_but[i].text) + 5;
++ maxlen += mbstrlen (panelize_but[i].text) + 5;
+ }
+ maxlen += 10;
+
+@@ -136,11 +136,11 @@
+ panelize_cols = max (panelize_cols, maxlen);
+
+ panelize_but[2].x =
+- panelize_but[3].x + strlen (panelize_but[3].text) + 7;
++ panelize_but[3].x + mbstrlen (panelize_but[3].text) + 7;
+ panelize_but[1].x =
+- panelize_but[2].x + strlen (panelize_but[2].text) + 5;
++ panelize_but[2].x + mbstrlen (panelize_but[2].text) + 5;
+ panelize_but[0].x =
+- panelize_cols - strlen (panelize_but[0].text) - 8 - BX;
++ panelize_cols - mbstrlen (panelize_but[0].text) - 8 - BX;
+
+ #endif /* ENABLE_NLS */
+
+diff -Naur mc-4.6.1-old/src/screen.c mc-4.6.1/src/screen.c
+--- mc-4.6.1-old/src/screen.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/screen.c 2005-10-28 10:08:07.987209112 +0200
+@@ -169,22 +169,59 @@
+ static const char *
+ string_file_name (file_entry *fe, int len)
+ {
+- static char buffer [BUF_SMALL];
+ size_t i;
++#ifdef UTF8
++ static char buffer [BUF_SMALL * 4];
++ mbstate_t s;
++ int mbmax = MB_CUR_MAX;
++ const char *str = fe->fname;
+
+- for (i = 0; i < sizeof(buffer) - 1; i++) {
+- char c;
++ memset (&s, 0, sizeof (s));
++#else
++ static char buffer [BUF_SMALL];
++#endif
+
+- c = fe->fname[i];
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ for (i = 0; i < sizeof (buffer) - 1; i++) {
++ wchar_t wc;
++ int len;
+
+- if (!c)
+- break;
++ len = mbrtowc (&wc, str, mbmax, &s);
++ if (!len)
++ break;
++ if (len < 0) {
++ memset (&s, 0, sizeof (s));
++ buffer[i] = '?';
++ str++;
++ continue;
++ }
++ if (!is_printable (wc)) {
++ buffer[i] = '?';
++ str++;
++ continue;
++ }
++ if (i >= sizeof (buffer) - len)
++ break;
++ memcpy (buffer + i, str, len);
++ i += len - 1;
++ str += len;
++ }
++ else
++#endif
++ for (i = 0; i < sizeof(buffer) - 1; i++) {
++ char c;
+
+- if (!is_printable(c))
+- c = '?';
++ c = fe->fname[i];
+
+- buffer[i] = c;
+- }
++ if (!c)
++ break;
++
++ if (!is_printable(c))
++ c = '?';
++
++ buffer[i] = c;
++ }
+
+ buffer[i] = 0;
+ return buffer;
+@@ -425,42 +462,6 @@
+ { "dot", 1, 0, J_RIGHT, " ", 0, string_dot, NULL },
+ };
+
+-static char *
+-to_buffer (char *dest, int just_mode, int len, const char *txt)
+-{
+- int txtlen = strlen (txt);
+- int still, over;
+-
+- /* Fill buffer with spaces */
+- memset (dest, ' ', len);
+-
+- still = (over=(txtlen > len)) ? (txtlen - len) : (len - txtlen);
+-
+- switch (HIDE_FIT(just_mode)){
+- case J_LEFT:
+- still = 0;
+- break;
+- case J_CENTER:
+- still /= 2;
+- break;
+- case J_RIGHT:
+- default:
+- break;
+- }
+-
+- if (over){
+- if (IS_FIT(just_mode))
+- strcpy (dest, name_trunc(txt, len));
+- else
+- strncpy (dest, txt+still, len);
+- } else
+- strncpy (dest+still, txt, txtlen);
+-
+- dest[len] = '\0';
+-
+- return (dest + len);
+-}
+-
+ static int
+ file_compute_color (int attr, file_entry *fe)
+ {
+@@ -514,14 +515,18 @@
+
+ /* Formats the file number file_index of panel in the buffer dest */
+ static void
+-format_file (char *dest, int limit, WPanel *panel, int file_index, int width, int attr, int isstatus)
++format_file (WPanel *panel, int file_index, int width, int attr, int isstatus)
+ {
+ int color, length, empty_line;
+ const char *txt;
+- char *old_pos;
+- char *cdest = dest;
+ format_e *format, *home;
+ file_entry *fe;
++#ifdef UTF8
++ char buffer[BUF_MEDIUM * sizeof (wchar_t)];
++#else
++ char buffer[BUF_MEDIUM];
++#endif
++ int txtwidth;
+
+ length = 0;
+ empty_line = (file_index >= panel->count);
+@@ -539,34 +544,137 @@
+ break;
+
+ if (format->string_fn){
+- int len;
++ int len, still, over, perm, txtlen, wide;
+
+ if (empty_line)
+ txt = " ";
+ else
+ txt = (*format->string_fn)(fe, format->field_len);
+
+- old_pos = cdest;
+-
+ len = format->field_len;
+ if (len + length > width)
+ len = width - length;
+- if (len + (cdest - dest) > limit)
+- len = limit - (cdest - dest);
++ if (len >= BUF_MEDIUM)
++ len = BUF_MEDIUM - 1;
+ if (len <= 0)
+ break;
+- cdest = to_buffer (cdest, format->just_mode, len, txt);
+- length += len;
+
+- attrset (color);
++ perm = 0;
++ if (permission_mode) {
++ if (!strcmp(format->id, "perm"))
++ perm = 1;
++ else if (!strcmp(format->id, "mode"))
++ perm = 2;
++ }
++
++ wide = 0;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode && !empty_line && !perm) {
++ mbstate_t s;
++ const char *str = txt;
++
++ memset (&s, 0, sizeof (s));
++ txtlen = mbsrtowcs ((wchar_t *) buffer, &str,
++ sizeof (buffer) / sizeof (wchar_t), &s);
++ if (txtlen < 0) {
++ txt = " ";
++ txtlen = 1;
++ } else {
++ wide = 1;
++ txtwidth = wcswidth((wchar_t*)buffer, txtlen);
++ }
++ } else
++#endif
++ {
++ txtlen = strlen (txt);
++ txtwidth = txtlen;
++ }
++
++ over = txtwidth > len;
++ still = over ? txtlen - len : len - txtlen;
+
+- if (permission_mode && !strcmp(format->id, "perm"))
+- add_permission_string (old_pos, format->field_len, fe, attr, color, 0);
+- else if (permission_mode && !strcmp(format->id, "mode"))
+- add_permission_string (old_pos, format->field_len, fe, attr, color, 1);
+- else
+- addstr (old_pos);
++ switch (HIDE_FIT(format->just_mode)) {
++ case J_LEFT:
++ still = 0;
++ break;
++ case J_CENTER:
++ still /= 2;
++ break;
++ case J_RIGHT:
++ default:
++ break;
++ }
++
++ attrset (color);
++
++ if (wide) {
++#ifdef UTF8
++ if (over) {
++ if (IS_FIT (format->just_mode)) {
++ int n1 = 0;
++ int width1 = 0;
++ int n2 = 0;
++ int width2 = 0;
++ int len1 = len / 2;
++ int len2;
++
++ while (1) {
++ int w = wcwidth(((wchar_t *) buffer)[n1]);
++ if (width1 + w <= len1) {
++ width1 += w;
++ n1++;
++ }
++ else
++ break;
++ }
++ len2 = len - width1 - 1;
++
++ while (1) {
++ int w = wcwidth(((wchar_t *) buffer)[txtlen - n2 - 1]);
++ if (width2 + w <= len2) {
++ width2 += w;
++ n2++;
++ }
++ else
++ break;
++ }
++
++
++ SLsmg_write_nwchars ((wchar_t *) buffer, n1);
++ SLsmg_write_nwchars (L"~", 1);
++ printw ("%*s", len - width1 - width2 - 1, "");
++ SLsmg_write_nwchars (((wchar_t *) buffer)
++ + txtlen - n2, n2);
++ } else
++ SLsmg_write_nwchars ((wchar_t *) buffer, len);
++ } else {
++ printw ("%*s", still, "");
++ SLsmg_write_nwchars ((wchar_t *) buffer, txtlen);
++ printw ("%*s", len - txtwidth - still, "");
++ }
++#endif
++ } else {
++ if (over) {
++ if (IS_FIT (format->just_mode))
++ strcpy (buffer, name_trunc(txt, len));
++ else
++ memcpy (buffer, txt + still, len);
++ } else {
++ memset (buffer, ' ', still);
++ memcpy (buffer + still, txt, txtlen);
++ memset (buffer + still + txtlen, ' ',
++ len - txtlen - still);
++ }
++ buffer[len] = '\0';
+
++ if (perm)
++ add_permission_string (buffer, format->field_len, fe,
++ attr, color, perm - 1);
++ else
++ addstr (buffer);
++ }
++
++ length += len;
+ } else {
+ if (attr == SELECTED || attr == MARKED_SELECTED)
+ attrset (SELECTED_COLOR);
+@@ -589,7 +697,6 @@
+ {
+ int second_column = 0;
+ int width, offset;
+- char buffer [BUF_MEDIUM];
+
+ offset = 0;
+ if (!isstatus && panel->split){
+@@ -618,7 +725,7 @@
+ widget_move (&panel->widget, file_index - panel->top_file + 2, 1);
+ }
+
+- format_file (buffer, sizeof(buffer), panel, file_index, width, attr, isstatus);
++ format_file (panel, file_index, width, attr, isstatus);
+
+ if (!isstatus && panel->split){
+ if (second_column)
+@@ -1068,6 +1175,12 @@
+ int side, width;
+
+ const char *txt;
++#ifdef UTF8
++ char buffer[30 * sizeof (wchar_t)];
++ mbstate_t s;
++
++ memset (&s, 0, sizeof (s));
++#endif
+ if (!panel->split)
+ adjust_top_file (panel);
+
+@@ -1092,16 +1205,37 @@
+ if (format->string_fn){
+ txt = format->title;
+
++ attrset (MARKED_COLOR);
++ width -= format->field_len;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ const char *str = txt;
++ header_len = mbsrtowcs ((wchar_t *) buffer, &str,
++ sizeof (buffer) / sizeof (wchar_t),
++ &s);
++ if (header_len < 0) {
++ memset (&s, 0, sizeof (s));
++ printw ("%*s", format->field_len, "");
++ continue;
++ }
++ if (header_len > format->field_len)
++ header_len = format->field_len;
++ spaces = (format->field_len - header_len) / 2;
++ extra = (format->field_len - header_len) % 2;
++ printw ("%*s", spaces, "");
++ SLsmg_write_nwchars ((wchar_t *) buffer, header_len);
++ printw ("%*s", spaces + extra, "");
++ continue;
++ }
++#endif
+ header_len = strlen (txt);
+ if (header_len > format->field_len)
+ header_len = format->field_len;
+
+- attrset (MARKED_COLOR);
+ spaces = (format->field_len - header_len) / 2;
+ extra = (format->field_len - header_len) % 2;
+ printw ("%*s%.*s%*s", spaces, "",
+ header_len, txt, spaces+extra, "");
+- width -= 2 * spaces + extra + header_len;
+ } else {
+ attrset (NORMAL_COLOR);
+ one_vline ();
+diff -Naur mc-4.6.1-old/src/slint.c mc-4.6.1/src/slint.c
+--- mc-4.6.1-old/src/slint.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/slint.c 2005-10-28 10:08:35.422038384 +0200
+@@ -180,6 +180,9 @@
+ struct sigaction act, oact;
+
+ SLtt_get_terminfo ();
++#if SLANG_VERSION >= 20000
++ SLutf8_enable (-1);
++#endif
+
+ /*
+ * If the terminal in not in terminfo but begins with a well-known
+diff -Naur mc-4.6.1-old/src/util.c mc-4.6.1/src/util.c
+--- mc-4.6.1-old/src/util.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/util.c 2005-10-28 10:19:11.683311968 +0200
+@@ -32,7 +32,11 @@
+ #include <stdarg.h>
+ #include <string.h>
+ #include <ctype.h>
++#include <iconv.h>
++#include <langinfo.h>
++#include <errno.h>
+
++#include "tty.h"
+ #include "global.h"
+ #include "profile.h"
+ #include "main.h" /* mc_home */
+@@ -44,9 +48,22 @@
+ #include "charsets.h"
+ #endif
+
++#ifdef UTF8
++#include <wctype.h>
++#include <wchar.h>
++#endif
++
+ static const char app_text [] = "Midnight-Commander";
+ int easy_patterns = 1;
+
++#if SLANG_VERSION >= 20000
++void SLsmg_write_nwchars(wchar_t *s, size_t n)
++{
++ while(n--)
++ SLsmg_write_char(*s++);
++}
++#endif
++
+ extern void str_replace(char *s, char from, char to)
+ {
+ for (; *s != '\0'; s++) {
+@@ -77,9 +94,106 @@
+ return (c > 31 && c != 127 && c != 155);
+ }
+
++size_t
++mbstrlen (const char *str)
++{
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ size_t width = 0;
++
++ for (; *str; str++) {
++ wchar_t c;
++ size_t len;
++
++ len = mbrtowc (&c, str, MB_CUR_MAX, NULL);
++
++ if (len == (size_t)(-1) || len == (size_t)(-2)) break;
++
++ if (len > 0) {
++ int wcsize = wcwidth(c);
++ width += wcsize > 0 ? wcsize : 0;
++ str += len-1;
++ }
++ }
++
++ return width;
++ } else
++#endif
++ return strlen (str);
++}
++
++#ifdef UTF8
++
++void
++fix_utf8(char *str)
++{
++ mbstate_t mbs;
++
++ char *p = str;
++
++ while (*p) {
++ int len;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrlen(p, MB_CUR_MAX, &mbs);
++ if (len == -1) {
++ *p = '?';
++ p++;
++ } else if (len > 0) {
++ p += len;
++ } else {
++ p++;
++ }
++ }
++}
++#endif
++
++
++
++#ifdef UTF8
++wchar_t *
++mbstr_to_wchar (const char *str)
++{
++ int len = mbstrlen(str);
++ wchar_t *buf = g_malloc((len+1) * sizeof(wchar_t));
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ mbsrtowcs (buf, &str, len, &mbs);
++ buf[len] = 0;
++ return buf;
++}
++
++char *
++wchar_to_mbstr (const wchar_t *wstr)
++{
++ mbstate_t mbs;
++ const wchar_t *wstr2;
++ char * string;
++ int len;
++
++ memset (&mbs, 0, sizeof (mbs));
++ wstr2 = wstr;
++ len = wcsrtombs(NULL, &wstr2, 0, &mbs);
++ if (len <= 0)
++ return NULL;
++
++ string = g_malloc(len + 1);
++
++ wstr2 = wstr;
++ wcsrtombs(string, &wstr2, len, &mbs);
++ string[len] = 0;
++ return string;
++}
++#endif
++
++
++
+ int
+ is_printable (int c)
+ {
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ return iswprint (c);
++#endif
+ c &= 0xff;
+
+ #ifdef HAVE_CHARSET
+@@ -97,7 +211,7 @@
+ #endif /* !HAVE_CHARSET */
+ }
+
+-/* Returns the message dimensions (lines and columns) */
++/* Returns the message dimensions columns */
+ int msglen (const char *text, int *lines)
+ {
+ int max = 0;
+@@ -108,8 +222,18 @@
+ line_len = 0;
+ (*lines)++;
+ } else {
+- line_len++;
+- if (line_len > max)
++#ifdef UTF8
++ size_t len;
++ wchar_t c;
++
++ len = mbrtowc (&c, text, MB_CUR_MAX, NULL);
++ if (len > 0 && len != (size_t)(-1) && len != (size_t)(-2)) {
++ int wcsize = wcwidth(c);
++ line_len += wcsize > 0 ? wcsize-1 : -1;
++ text += len-1;
++ }
++#endif
++ if (++line_len > max)
+ max = line_len;
+ }
+ }
+@@ -201,7 +325,24 @@
+ *d++ = '\\';
+ break;
+ }
++#ifndef UTF8
+ *d = *s;
++#else /* UTF8 */
++ {
++ mbstate_t mbs;
++ int len;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrlen(s, MB_CUR_MAX, &mbs);
++ if (len > 0) {
++ while (len-- > 1)
++ *d++ = *s++;
++ *d = *s;
++ } else {
++ *d = '?';
++ }
++
++ }
++#endif /* UTF8 */
+ }
+ *d = '\0';
+ return ret;
+@@ -222,25 +363,90 @@
+ name_trunc (const char *txt, int trunc_len)
+ {
+ static char x[MC_MAXPATHLEN + MC_MAXPATHLEN];
+- int txt_len;
++ int txt_len, first, skip;
+ char *p;
++ const char *str;
+
+ if ((size_t) trunc_len > sizeof (x) - 1) {
+ trunc_len = sizeof (x) - 1;
+ }
+- txt_len = strlen (txt);
+- if (txt_len <= trunc_len) {
+- strcpy (x, txt);
+- } else {
+- int y = (trunc_len / 2) + (trunc_len % 2);
+- strncpy (x, txt, y);
+- strncpy (x + y, txt + txt_len - (trunc_len / 2), trunc_len / 2);
+- x[y] = '~';
+- }
+- x[trunc_len] = 0;
+- for (p = x; *p; p++)
+- if (!is_printable (*p))
+- *p = '?';
++ txt_len = mbstrlen (txt);
++ first = 0;
++ skip = 0;
++ if (txt_len > trunc_len) {
++ first = trunc_len / 2;
++ skip = txt_len - trunc_len + 1;
++ }
++
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ mbstate_t s;
++ int mbmax;
++
++ str = txt;
++ memset (&s, 0, sizeof (s));
++ mbmax = MB_CUR_MAX;
++ p = x;
++ while (p < x + sizeof (x) - 1 && trunc_len) {
++ wchar_t wc;
++ int len;
++
++ len = mbrtowc (&wc, str, mbmax, &s);
++ if (!len)
++ break;
++ if (len < 0) {
++ memset (&s, 0, sizeof (s));
++ *p = '?';
++ len = 1;
++ str++;
++ } else if (!is_printable (wc)) {
++ *p = '?';
++ str += len;
++ len = 1;
++ } else if (p >= x + sizeof (x) - len)
++ break;
++ else {
++ memcpy (p, str, len);
++ str += len;
++ }
++ if (first) {
++ --trunc_len;
++ --first;
++ p += len;
++ if (!first && p < x + sizeof (x) - 1 && trunc_len) {
++ *p++ = '~';
++ --trunc_len;
++ }
++ } else if (skip)
++ --skip;
++ else {
++ --trunc_len;
++ p += len;
++ }
++ }
++ } else
++#endif
++ {
++ str = txt;
++ p = x;
++ while (p < x + sizeof (x) - 1) {
++ if (*str == '\0')
++ break;
++ else if (!is_printable (*str))
++ *p++ = '?';
++ else
++ *p++ = *str;
++ ++str;
++ if (first) {
++ --first;
++ if (!first) {
++ *p++ = '~';
++ str += skip;
++ }
++ }
++ }
++ }
++ *p = '\0';
+ return x;
+ }
+
+@@ -650,11 +856,66 @@
+ }
+
+ char *
++utf8_to_local(char *str)
++{
++ iconv_t cd;
++ size_t buflen;
++ char *output;
++ int retry = 1;
++
++ if (str == NULL)
++ return NULL;
++ else
++ buflen = strlen(str);
++
++ cd = iconv_open (nl_langinfo(CODESET), "UTF-8");
++ if (cd == (iconv_t) -1) {
++ return g_strdup(str);
++ }
++
++ output = g_malloc(buflen + 1);
++
++ while (retry)
++ {
++ char *wrptr = output;
++ char *inptr = str;
++ size_t insize = buflen;
++ size_t avail = buflen;
++ size_t nconv;
++
++ nconv = iconv (cd, &inptr, &insize, &wrptr, &avail);
++ if (nconv == (size_t) -1)
++ {
++ if (errno == E2BIG)
++ {
++ buflen *= 2;
++ g_free(output);
++ output = g_malloc(buflen + 1);
++ }
++ else
++ {
++ g_free(output);
++ return g_strdup(str);
++ }
++ }
++ else {
++ retry = 0;
++ *wrptr = 0;
++ }
++ }
++
++ iconv_close (cd);
++
++ return output;
++}
++
++char *
+ load_mc_home_file (const char *filename, char **allocated_filename)
+ {
+ char *hintfile_base, *hintfile;
+ char *lang;
+ char *data;
++ char *conv_data;
+
+ hintfile_base = concat_dir_and_file (mc_home, filename);
+ lang = guess_message_value ();
+@@ -687,7 +948,10 @@
+ else
+ g_free (hintfile);
+
+- return data;
++ conv_data = utf8_to_local(data);
++ g_free(data);
++
++ return conv_data;
+ }
+
+ /* Check strftime() results. Some systems (i.e. Solaris) have different
+@@ -695,12 +959,14 @@
+ size_t i18n_checktimelength (void)
+ {
+ size_t length, a, b;
+- char buf [MAX_I18NTIMELENGTH + 1];
++ char buf [4 * MAX_I18NTIMELENGTH + 1];
+ time_t testtime = time (NULL);
+
+- a = strftime (buf, sizeof(buf)-1, _("%b %e %H:%M"), localtime(&testtime));
+- b = strftime (buf, sizeof(buf)-1, _("%b %e %Y"), localtime(&testtime));
+-
++ strftime (buf, sizeof(buf)-1, _("%b %e %H:%M"), localtime(&testtime));
++ a = mbstrlen (buf);
++ strftime (buf, sizeof(buf)-1, _("%b %e %Y"), localtime(&testtime));
++ b = mbstrlen (buf);
++
+ length = max (a, b);
+
+ /* Don't handle big differences. Use standard value (email bug, please) */
+@@ -712,15 +978,12 @@
+
+ const char *file_date (time_t when)
+ {
+- static char timebuf [MAX_I18NTIMELENGTH + 1];
++ static char timebuf [4 * MAX_I18NTIMELENGTH + 1];
+ time_t current_time = time ((time_t) 0);
+- static size_t i18n_timelength = 0;
+ static const char *fmtyear, *fmttime;
+ const char *fmt;
+
+- if (i18n_timelength == 0){
+- i18n_timelength = i18n_checktimelength() + 1;
+-
++ if (fmtyear == NULL) {
+ /* strftime() format string for old dates */
+ fmtyear = _("%b %e %Y");
+ /* strftime() format string for recent dates */
+@@ -740,7 +1003,7 @@
+ else
+ fmt = fmttime;
+
+- strftime (timebuf, i18n_timelength, fmt, localtime(&when));
++ strftime (timebuf, sizeof (timebuf) - 1, fmt, localtime(&when));
+ return timebuf;
+ }
+
+@@ -863,10 +1126,27 @@
+ r++;
+ continue;
+ }
+-
++#ifndef UTF8
+ if (is_printable(*r))
+ *w++ = *r;
+ ++r;
++#else /* UTF8 */
++ {
++ mbstate_t mbs;
++ int len;
++ memset (&mbs, 0, sizeof (mbs));
++ len = mbrlen(r, MB_CUR_MAX, &mbs);
++
++ if (len > 0 && (unsigned char)*r >= ' ')
++ while (len--)
++ *w++ = *r++;
++ else {
++ if (len == -1)
++ *w++ = '?';
++ r++;
++ }
++ }
++#endif /* UTF8 */
+ }
+ *w = 0;
+ return s;
+diff -Naur mc-4.6.1-old/src/util.h mc-4.6.1/src/util.h
+--- mc-4.6.1-old/src/util.h 2005-01-13 20:20:47.000000000 +0100
++++ mc-4.6.1/src/util.h 2005-10-28 10:08:07.852229632 +0200
+@@ -93,6 +93,13 @@
+ char *get_group (int);
+ char *get_owner (int);
+
++void fix_utf8(char *str);
++size_t mbstrlen (const char *);
++wchar_t *mbstr_to_wchar (const char *);
++char *wchar_to_mbstr (const wchar_t *);
++char *utf8_to_local(char *str);
++
++
+ #define MAX_I18NTIMELENGTH 14
+ #define MIN_I18NTIMELENGTH 10
+ #define STD_I18NTIMELENGTH 12
+diff -Naur mc-4.6.1-old/src/view.c mc-4.6.1/src/view.c
+--- mc-4.6.1-old/src/view.c 2005-05-27 16:19:18.000000000 +0200
++++ mc-4.6.1/src/view.c 2005-10-28 10:08:08.023203640 +0200
+@@ -36,6 +36,10 @@
+ #include <errno.h>
+ #include <limits.h>
+
++#ifdef UTF8
++#include <wctype.h>
++#endif /* UTF8 */
++
+ #include "global.h"
+ #include "tty.h"
+ #include "cmd.h" /* For view_other_cmd */
+@@ -793,7 +797,7 @@
+
+ if (!i18n_adjust) {
+ file_label = _("File: %s");
+- i18n_adjust = strlen (file_label) - 2;
++ i18n_adjust = mbstrlen (file_label) - 2;
+ }
+
+ if (w < i18n_adjust + 6)
+@@ -849,7 +853,11 @@
+ widget_erase ((Widget *) view);
+ }
+
++#ifndef UTF8
+ #define view_add_character(view,c) addch (c)
++#else /* UTF8 */
++#define view_add_character(view,c) SLsmg_write_char(c)
++#endif /* UTF8 */
+ #define view_add_one_vline() one_vline()
+ #define view_add_string(view,s) addstr (s)
+ #define view_gotoyx(v,r,c) widget_move (v,r,c)
+@@ -1071,6 +1079,12 @@
+ if (view->growing_buffer && from == view->last_byte)
+ get_byte (view, from);
+ for (; row < height && from < view->last_byte; from++) {
++#ifdef UTF8
++ mbstate_t mbs;
++ char mbbuf[MB_LEN_MAX];
++ int mblen;
++ wchar_t wc;
++#endif /* UTF8 */
+ c = get_byte (view, from);
+ if ((c == '\n') || (col >= width && view->wrap_mode)) {
+ col = frame_shift;
+@@ -1084,7 +1098,37 @@
+ col = ((col - frame_shift) / 8) * 8 + 8 + frame_shift;
+ continue;
+ }
++#ifndef UTF8
+ if (view->viewer_nroff_flag && c == '\b') {
++#else /* UTF8 */
++ mblen = 1;
++ mbbuf[0] = convert_to_display_c (c);
++
++ while (mblen < MB_LEN_MAX) {
++ int res;
++ memset (&mbs, 0, sizeof (mbs));
++ res = mbrtowc (&wc, mbbuf, mblen, &mbs);
++ if (res <= 0 && res != -2) {
++ wc = '.';
++ mblen = 1;
++ break;
++ }
++ if (res == mblen)
++ break;
++
++ mbbuf[mblen] = convert_to_display_c (get_byte (view, from + mblen));
++ mblen++;
++ }
++
++ if (mblen == MB_LEN_MAX) {
++ wc = '.';
++ mblen = 1;
++ }
++
++ from += mblen - 1;
++
++ if (view->viewer_nroff_flag && wc == '\b') {
++#endif /* UTF8 */
+ int c_prev;
+ int c_next;
+
+@@ -1122,12 +1166,23 @@
+ && col < width - view->start_col) {
+ view_gotoyx (view, row, col + view->start_col);
+
++#ifndef UTF8
+ c = convert_to_display_c (c);
+-
+ if (!is_printable (c))
+ c = '.';
+-
+ view_add_character (view, c);
++#else /* UTF8 */
++ if (!iswprint (wc))
++ wc = '.';
++ view_add_character (view, wc);
++
++ {
++ int cw = wcwidth(wc);
++ if (cw > 1)
++ col+= cw - 1;
++ }
++#endif /* UTF8 */
++
+ }
+ col++;
+ if (boldflag != MARK_NORMAL) {
+diff -Naur mc-4.6.1-old/src/widget.c mc-4.6.1/src/widget.c
+--- mc-4.6.1-old/src/widget.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1/src/widget.c 2005-10-28 10:08:07.888224160 +0200
+@@ -33,6 +33,9 @@
+ #include <ctype.h>
+ #include "global.h"
+ #include "tty.h"
++#ifdef UTF8
++#include <wctype.h>
++#endif /* UTF8 */
+ #include "color.h"
+ #include "mouse.h"
+ #include "dialog.h"
+@@ -148,6 +151,11 @@
+ if (b->hotpos >= 0) {
+ attrset ((b->selected) ? HOT_FOCUSC : HOT_NORMALC);
+ widget_move (&b->widget, 0, b->hotpos + off);
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ SLsmg_write_nwchars (&b->hotwc, 1);
++ else
++#endif
+ addch ((unsigned char) b->text[b->hotpos]);
+ }
+ return MSG_HANDLED;
+@@ -179,7 +187,7 @@
+ static int
+ button_len (const char *text, unsigned int flags)
+ {
+- int ret = strlen (text);
++ int ret = mbstrlen (text);
+ switch (flags){
+ case DEFPUSH_BUTTON:
+ ret += 6;
+@@ -202,14 +210,36 @@
+ * the button text is g_malloc()ed, we can safely change and shorten it.
+ */
+ static void
+-button_scan_hotkey (WButton *b)
++scan_hotkey (char *text, int *hotposp, int *hotkeyp, wchar_t *hotwcp)
+ {
+- char *cp = strchr (b->text, '&');
++ char *cp = strchr (text, '&');
+
+ if (cp != NULL && cp[1] != '\0') {
+- g_strlcpy (cp, cp + 1, strlen (cp));
+- b->hotkey = tolower (*cp);
+- b->hotpos = cp - b->text;
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ mbstate_t s;
++ int len;
++
++ *cp = '\0';
++ memset (&s, 0, sizeof (s));
++ len = mbrtowc (hotwcp, cp + 1, MB_CUR_MAX, &s);
++ if (len > 0) {
++ *hotposp = mbstrlen (text);
++ if (*hotposp < 0) {
++ *hotposp = -1;
++ } else {
++ /* FIXME */
++ *hotkeyp = tolower (*hotwcp);
++ }
++ }
++ } else
++#endif
++ {
++ *hotkeyp = tolower (cp[1]);
++ *hotposp = cp - text;
++ }
++
++ memmove (cp, cp + 1, strlen (cp + 1) + 1);
+ }
+ }
+
+@@ -231,22 +261,23 @@
+ widget_want_hotkey (b->widget, 1);
+ b->hotkey = 0;
+ b->hotpos = -1;
++ b->hotwc = L'\0';
+
+- button_scan_hotkey(b);
++ scan_hotkey(b->text, &b->hotpos, &b->hotkey, &b->hotwc);
+ return b;
+ }
+
+ void
+ button_set_text (WButton *b, const char *text)
+ {
+- g_free (b->text);
++ g_free (b->text);
+ b->text = g_strdup (text);
+ b->widget.cols = button_len (text, b->flags);
+- button_scan_hotkey(b);
++ scan_hotkey(b->text, &b->hotpos, &b->hotkey, &b->hotwc);
+ dlg_redraw (b->widget.parent);
+ }
+
+-
++
+ /* Radio button widget */
+ static int radio_event (Gpm_Event *event, WRadio *r);
+
+@@ -320,16 +351,37 @@
+ widget_move (&r->widget, i, 0);
+
+ printw ("(%c) ", (r->sel == i) ? '*' : ' ');
+- for (cp = r->texts[i]; *cp; cp++) {
+- if (*cp == '&') {
+- attrset ((i == r->pos && msg == WIDGET_FOCUS)
+- ? HOT_FOCUSC : HOT_NORMALC);
+- addch (*++cp);
+- attrset ((i == r->pos
+- && msg == WIDGET_FOCUS) ? FOCUSC : NORMALC);
++ cp = strchr (r->texts[i], '&');
++ if (cp != NULL) {
++#ifdef UTF8
++ mbstate_t s;
++ wchar_t wc;
++ int len;
++#endif
++ printw ("%.*s", (int) ((char *) cp - r->texts[i]),
++ r->texts[i]);
++ attrset ((i == r->pos && msg == WIDGET_FOCUS)
++ ? HOT_FOCUSC : HOT_NORMALC);
++#ifdef UTF8
++ if (SLsmg_Is_Unicode) {
++ memset (&s, 0, sizeof (s));
++ len = mbrtowc (&wc, cp + 1, MB_CUR_MAX, &s);
++ ++cp;
++ if (len > 0) {
++ printw ("%.*s", len, cp);
++ cp += len;
++ }
+ } else
+- addch (*cp);
+- }
++#endif
++ {
++ addch (*++cp);
++ ++cp;
++ }
++ attrset ((i == r->pos && msg == WIDGET_FOCUS)
++ ? FOCUSC : NORMALC);
++ } else
++ cp = r->texts[i];
++ addstr ((char *) cp);
+ }
+ return MSG_HANDLED;
+
+@@ -365,7 +417,7 @@
+ /* Compute the longest string */
+ max = 0;
+ for (i = 0; i < count; i++){
+- m = strlen (texts [i]);
++ m = mbstrlen (texts [i]);
+ if (m > max)
+ max = m;
+ }
+@@ -426,6 +478,11 @@
+ if (c->hotpos >= 0) {
+ attrset ((msg == WIDGET_FOCUS) ? HOT_FOCUSC : HOT_NORMALC);
+ widget_move (&c->widget, 0, +c->hotpos + 4);
++#ifdef UTF8
++ if (SLsmg_Is_Unicode)
++ SLsmg_write_nwchars (&c->hotwc, 1);
++ else
++#endif
+ addch ((unsigned char) c->text[c->hotpos]);
+ }
+ return MSG_HANDLED;
+@@ -460,32 +517,18 @@
+ check_new (int y, int x, int state, const char *text)
+ {
+ WCheck *c = g_new (WCheck, 1);
+- const char *s;
+- char *t;
+
+- init_widget (&c->widget, y, x, 1, strlen (text),
++ init_widget (&c->widget, y, x, 1, mbstrlen (text),
+ (callback_fn)check_callback,
+ (mouse_h) check_event);
+ c->state = state ? C_BOOL : 0;
+ c->text = g_strdup (text);
+ c->hotkey = 0;
+ c->hotpos = -1;
++ c->hotwc = L'\0';
+ widget_want_hotkey (c->widget, 1);
+
+- /* Scan for the hotkey */
+- for (s = text, t = c->text; *s; s++, t++){
+- if (*s != '&'){
+- *t = *s;
+- continue;
+- }
+- s++;
+- if (*s){
+- c->hotkey = tolower (*s);
+- c->hotpos = t - c->text;
+- }
+- *t = *s;
+- }
+- *t = 0;
++ scan_hotkey (c->text, &c->hotpos, &c->hotkey, &c->hotwc);
+ return c;
+ }
+
+@@ -527,7 +570,7 @@
+ }
+ widget_move (&l->widget, y, 0);
+ printw ("%s", p);
+- xlen = l->widget.cols - strlen (p);
++ xlen = l->widget.cols - mbstrlen (p);
+ if (xlen > 0)
+ printw ("%*s", xlen, " ");
+ if (!q)
+@@ -561,7 +604,7 @@
+ if (text){
+ label->text = g_strdup (text);
+ if (label->auto_adjust_cols) {
+- newcols = strlen (text);
++ newcols = mbstrlen (text);
+ if (newcols > label->widget.cols)
+ label->widget.cols = newcols;
+ }
+@@ -585,7 +628,7 @@
+ if (!text || strchr(text, '\n'))
+ width = 1;
+ else
+- width = strlen (text);
++ width = mbstrlen (text);
+
+ l = g_new (WLabel, 1);
+ init_widget (&l->widget, y, x, 1, width,
+@@ -734,13 +777,69 @@
+ /* Pointer to killed data */
+ static char *kill_buffer = 0;
+
++#ifdef UTF8
++static int
++charpos(WInput *in, int idx)
++{
++ int i, pos, l, len;
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ i = 0;
++ pos = 0;
++ len = strlen(in->buffer);
++
++ while (in->buffer[pos]) {
++ if (i == idx)
++ return pos;
++ l = mbrlen(in->buffer + pos, len - pos, &mbs);
++ if (l <= 0)
++ return pos;
++ pos+=l;
++ i++;
++ };
++ return pos;
++}
++
++static int
++charcolumn(WInput *in, int idx)
++{
++ int i, pos, l, width, len;
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ i = 0;
++ pos = 0; width = 0;
++ len = strlen(in->buffer);
++
++ while (in->buffer[pos]) {
++ wchar_t wc;
++ if (i == idx)
++ return width;
++ l = mbrtowc(&wc, in->buffer + pos, len - pos, &mbs);
++ if (l <= 0)
++ return width;
++ pos += l; width += wcwidth(wc);
++ i++;
++ };
++ return width;
++}
++#else
++#define charpos(in, idx) (idx)
++#define charcolumn(in, idx) (idx)
++#endif /* UTF8 */
++
+ void
+ update_input (WInput *in, int clear_first)
+ {
+ int has_history = 0;
+ int i, j;
+- unsigned char c;
+- int buf_len = strlen (in->buffer);
++ int buf_len = mbstrlen (in->buffer);
++#ifndef UTF8
++ unsigned char c;
++#else /* UTF8 */
++ wchar_t c;
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++#endif /* UTF8 */
+
+ if (should_show_history_button (in))
+ has_history = HISTORY_BUTTON_WIDTH;
+@@ -750,7 +849,7 @@
+
+ /* Make the point visible */
+ if ((in->point < in->first_shown) ||
+- (in->point >= in->first_shown+in->field_len - has_history)){
++ (charcolumn(in, in->point) >= charcolumn(in, in->first_shown) + in->field_len - has_history)){
+ in->first_shown = in->point - (in->field_len / 3);
+ if (in->first_shown < 0)
+ in->first_shown = 0;
+@@ -770,14 +869,29 @@
+ addch (' ');
+ widget_move (&in->widget, 0, 0);
+
++#ifndef UTF8
+ for (i = 0, j = in->first_shown; i < in->field_len - has_history && in->buffer [j]; i++){
+ c = in->buffer [j++];
+ c = is_printable (c) ? c : '.';
+- if (in->is_password)
++#else /* UTF8 */
++ for (i = 0, j = in->first_shown; (i < in->field_len - has_history) && (j < buf_len); i++,j++){
++ char * chp = in->buffer + charpos(in,j);
++ size_t res = mbrtowc(&c, chp, strlen(chp), &mbs);
++ c = (res && iswprint (c)) ? 0 : '.';
++#endif /* UTF8 */
++ if (in->is_password)
+ c = '*';
++#ifndef UTF8
+ addch (c);
++#else /* UTF8 */
++ if (c) {
++ addch (c);
++ }
++ else
++ SLsmg_write_nchars (chp, res);
++#endif /* UTF8 */
+ }
+- widget_move (&in->widget, 0, in->point - in->first_shown);
++ widget_move (&in->widget, 0, charcolumn(in, in->point) - charcolumn(in, in->first_shown));
+
+ if (clear_first)
+ in->first = 0;
+@@ -919,7 +1033,7 @@
+ show_hist (GList *history, int widget_x, int widget_y)
+ {
+ GList *hi, *z;
+- size_t maxlen = strlen (i18n_htitle ()), i, count = 0;
++ size_t maxlen = mbstrlen (i18n_htitle ()), i, count = 0;
+ int x, y, w, h;
+ char *q, *r = 0;
+ Dlg_head *query_dlg;
+@@ -932,7 +1046,7 @@
+ z = g_list_first (history);
+ hi = z;
+ while (hi) {
+- if ((i = strlen ((char *) hi->data)) > maxlen)
++ if ((i = mbstrlen ((char *) hi->data)) > maxlen)
+ maxlen = i;
+ count++;
+ hi = g_list_next (hi);
+@@ -1104,35 +1218,83 @@
+ in->need_push = 1;
+ in->buffer [0] = 0;
+ in->point = 0;
++ in->charpoint = 0;
+ in->mark = 0;
+ free_completions (in);
+ update_input (in, 0);
+ }
+
++static void
++move_buffer_backward (WInput *in, int point)
++{
++ int i, pos, len;
++ int str_len = mbstrlen (in->buffer);
++ if (point >= str_len) return;
++
++ pos = charpos(in,point);
++ len = charpos(in,point + 1) - pos;
++
++ for (i = pos; in->buffer [i + len - 1]; i++)
++ in->buffer [i] = in->buffer [i + len];
++}
++
+ static cb_ret_t
+ insert_char (WInput *in, int c_code)
+ {
+ size_t i;
++#ifdef UTF8
++ mbstate_t mbs;
++ int res;
++
++ memset (&mbs, 0, sizeof (mbs));
++#else
++ in->charpoint = 0;
++#endif /* UTF8 */
+
+ if (c_code == -1)
+ return MSG_NOT_HANDLED;
+
++#ifdef UTF8
++ if (in->charpoint >= MB_CUR_MAX) return 1;
++
++ in->charbuf[in->charpoint++] = c_code;
++
++ res = mbrlen((char *)in->charbuf, in->charpoint, &mbs);
++ if (res < 0) {
++ if (res != -2) in->charpoint = 0; /* broken multibyte char, skip */
++ return 1;
++ }
++
++#endif /* UTF8 */
+ in->need_push = 1;
+- if (strlen (in->buffer)+1 == (size_t) in->current_max_len){
++ if (strlen (in->buffer) + 1 + in->charpoint >= (size_t) in->current_max_len){
+ /* Expand the buffer */
+- char *narea = g_realloc (in->buffer, in->current_max_len + in->field_len);
++ char *narea = g_realloc (in->buffer, in->current_max_len + in->field_len + in->charpoint);
+ if (narea){
+ in->buffer = narea;
+- in->current_max_len += in->field_len;
++ in->current_max_len += in->field_len + in->charpoint;
+ }
+ }
++#ifndef UTF8
+ if (strlen (in->buffer)+1 < (size_t) in->current_max_len){
+ size_t l = strlen (&in->buffer [in->point]);
+ for (i = l+1; i > 0; i--)
+ in->buffer [in->point+i] = in->buffer [in->point+i-1];
+ in->buffer [in->point] = c_code;
++#else /* UTF8 */
++ if (strlen (in->buffer) + in->charpoint < in->current_max_len){
++ size_t ins_point = charpos(in,in->point); /* bytes from begin */
++ /* move chars */
++ size_t rest_bytes = strlen (in->buffer + ins_point);
++
++ for (i = rest_bytes + 1; i > 0; i--)
++ in->buffer [ins_point + i + in->charpoint - 1] = in->buffer [ins_point + i - 1];
++
++ memcpy(in->buffer + ins_point, in->charbuf, in->charpoint);
++#endif /* UTF8 */
+ in->point++;
+ }
++ in->charpoint = 0;
+ return MSG_HANDLED;
+ }
+
+@@ -1140,12 +1302,14 @@
+ beginning_of_line (WInput *in)
+ {
+ in->point = 0;
++ in->charpoint = 0;
+ }
+
+ static void
+ end_of_line (WInput *in)
+ {
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
++ in->charpoint = 0;
+ }
+
+ static void
+@@ -1153,18 +1317,21 @@
+ {
+ if (in->point)
+ in->point--;
++ in->charpoint = 0;
+ }
+
+ static void
+ forward_char (WInput *in)
+ {
+- if (in->buffer [in->point])
++ if (in->buffer [charpos(in,in->point)])
+ in->point++;
++ in->charpoint = 0;
+ }
+
+ static void
+ forward_word (WInput *in)
+ {
++#ifndef UTF8
+ unsigned char *p = in->buffer+in->point;
+
+ while (*p && (isspace (*p) || ispunct (*p)))
+@@ -1172,11 +1339,39 @@
+ while (*p && isalnum (*p))
+ p++;
+ in->point = p - in->buffer;
++#else /* UTF8 */
++ mbstate_t mbs;
++ int len = mbstrlen (in->buffer);
++ memset (&mbs, 0, sizeof (mbs));
++
++ while (in->point < len) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (res <= 0 || !(iswspace (c) || iswpunct (c)))
++ break;
++ in->point++;
++ }
++
++ memset (&mbs, 0, sizeof (mbs));
++
++ while (in->point < len) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (res <= 0 || !iswalnum (c))
++ break;
++ in->point++;
++ }
++
++ in->charpoint = 0;
++#endif /* UTF8 */
+ }
+
+ static void
+ backward_word (WInput *in)
+ {
++#ifndef UTF8
+ unsigned char *p = in->buffer+in->point;
+
+ while (p-1 > in->buffer-1 && (isspace (*(p-1)) || ispunct (*(p-1))))
+@@ -1184,6 +1379,32 @@
+ while (p-1 > in->buffer-1 && isalnum (*(p-1)))
+ p--;
+ in->point = p - in->buffer;
++#else /* UTF8 */
++ mbstate_t mbs;
++
++ memset (&mbs, 0, sizeof (mbs));
++ while (in->point > 0) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (*p && (res <= 0 || !(iswspace (c) || iswpunct (c))))
++ break;
++ in->point--;
++ }
++
++ memset (&mbs, 0, sizeof (mbs));
++
++ while (in->point > 0) {
++ wchar_t c;
++ char *p = in->buffer + charpos(in,in->point);
++ size_t res = mbrtowc(&c, p, strlen(p), &mbs);
++ if (*p && (res <= 0 || !iswalnum (c)))
++ break;
++ in->point--;
++ }
++
++ in->charpoint = 0;
++#endif /* UTF8 */
+ }
+
+ static void
+@@ -1216,8 +1437,9 @@
+
+ if (!in->point)
+ return;
+- for (i = in->point; in->buffer [i-1]; i++)
+- in->buffer [i-1] = in->buffer [i];
++
++ move_buffer_backward(in, in->point - 1);
++ in->charpoint = 0;
+ in->need_push = 1;
+ in->point--;
+ }
+@@ -1225,10 +1447,8 @@
+ static void
+ delete_char (WInput *in)
+ {
+- int i;
+-
+- for (i = in->point; in->buffer [i]; i++)
+- in->buffer [i] = in->buffer [i+1];
++ move_buffer_backward(in, in->point);
++ in->charpoint = 0;
+ in->need_push = 1;
+ }
+
+@@ -1243,6 +1463,9 @@
+
+ g_free (kill_buffer);
+
++ first=charpos(in,first);
++ last=charpos(in,last);
++
+ kill_buffer = g_strndup(in->buffer+first,last-first);
+ }
+
+@@ -1251,11 +1474,13 @@
+ {
+ int first = min (x_first, x_last);
+ int last = max (x_first, x_last);
+- size_t len = strlen (&in->buffer [last]) + 1;
++ size_t len;
+
+ in->point = first;
+ in->mark = first;
+- memmove (&in->buffer [first], &in->buffer [last], len);
++ len = strlen (&in->buffer [charpos(in,last)]) + 1;
++ memmove (&in->buffer [charpos(in,first)], &in->buffer [charpos(in,last)], len);
++ in->charpoint = 0;
+ in->need_push = 1;
+ }
+
+@@ -1272,6 +1497,8 @@
+ copy_region (in, old_point, new_point);
+ delete_region (in, old_point, new_point);
+ in->need_push = 1;
++ in->charpoint = 0;
++ in->charpoint = 0;
+ }
+
+ static void
+@@ -1315,16 +1542,20 @@
+
+ if (!kill_buffer)
+ return;
++ in->charpoint = 0;
+ for (p = kill_buffer; *p; p++)
+ insert_char (in, *p);
++ in->charpoint = 0;
+ }
+
+ static void
+ kill_line (WInput *in)
+ {
++ int chp = charpos(in,in->point);
+ g_free (kill_buffer);
+- kill_buffer = g_strdup (&in->buffer [in->point]);
+- in->buffer [in->point] = 0;
++ kill_buffer = g_strdup (&in->buffer [chp]);
++ in->buffer [chp] = 0;
++ in->charpoint = 0;
+ }
+
+ void
+@@ -1334,9 +1565,10 @@
+ g_free (in->buffer);
+ in->buffer = g_strdup (text); /* was in->buffer->text */
+ in->current_max_len = strlen (in->buffer) + 1;
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
+ in->mark = 0;
+ in->need_push = 1;
++ in->charpoint = 0;
+ }
+
+ static void
+@@ -1461,6 +1693,7 @@
+ *in->buffer = 0;
+ in->point = 0;
+ in->first = 0;
++ in->charpoint = 0;
+ }
+
+ cb_ret_t
+@@ -1489,7 +1722,11 @@
+ }
+ }
+ if (!input_map [i].fn){
++#ifndef UTF8
+ if (c_code > 255 || !is_printable (c_code))
++#else /* UTF8 */
++ if (c_code > 255)
++#endif /* UTF8 */
+ return MSG_NOT_HANDLED;
+ if (in->first){
+ port_region_marked_for_delete (in);
+@@ -1523,6 +1760,9 @@
+ if (pos != in->point)
+ free_completions (in);
+ in->point = pos;
++#ifdef UTF8
++ in->charpoint = 0;
++#endif /* UTF8 */
+ update_input (in, 1);
+ }
+
+@@ -1562,7 +1802,7 @@
+ return MSG_HANDLED;
+
+ case WIDGET_CURSOR:
+- widget_move (&in->widget, 0, in->point - in->first_shown);
++ widget_move (&in->widget, 0, charcolumn(in, in->point) - charcolumn(in, in->first_shown));
+ return MSG_HANDLED;
+
+ case WIDGET_DESTROY:
+@@ -1584,7 +1824,7 @@
+ && should_show_history_button (in)) {
+ do_show_hist (in);
+ } else {
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
+ if (event->x - in->first_shown - 1 < in->point)
+ in->point = event->x - in->first_shown - 1;
+ if (in->point < 0)
+@@ -1642,7 +1882,8 @@
+ in->is_password = 0;
+
+ strcpy (in->buffer, def_text);
+- in->point = strlen (in->buffer);
++ in->point = mbstrlen (in->buffer);
++ in->charpoint = 0;
+ return in;
+ }
+
+diff -Naur mc-4.6.1-old/src/widget.h mc-4.6.1/src/widget.h
+--- mc-4.6.1-old/src/widget.h 2004-08-29 20:46:16.000000000 +0200
++++ mc-4.6.1/src/widget.h 2005-10-28 10:08:08.064197408 +0200
+@@ -25,6 +25,7 @@
+ char *text; /* text of button */
+ int hotkey; /* hot KEY */
+ int hotpos; /* offset hot KEY char in text */
++ wchar_t hotwc;
+ bcback callback; /* Callback function */
+ } WButton;
+
+@@ -43,6 +44,7 @@
+ char *text; /* text of check button */
+ int hotkey; /* hot KEY */
+ int hotpos; /* offset hot KEY char in text */
++ wchar_t hotwc;
+ } WCheck;
+
+ typedef struct WGauge {
+@@ -58,16 +60,20 @@
+
+ typedef struct {
+ Widget widget;
+- int point; /* cursor position in the input line */
+- int mark; /* The mark position */
+- int first_shown; /* Index of the first shown character */
+- int current_max_len; /* Maximum length of input line */
+- int field_len; /* Length of the editing field */
++ int point; /* cursor position in the input line (mb chars) */
++ int mark; /* The mark position (mb chars) */
++ int first_shown; /* Index of the first shown character (mb chars) */
++ int current_max_len; /* Maximum length of input line (bytes) */
++ int field_len; /* Length of the editing field (mb chars) */
+ int color; /* color used */
+ int first; /* Is first keystroke? */
+ int disable_update; /* Do we want to skip updates? */
+ int is_password; /* Is this a password input line? */
+ unsigned char *buffer; /* pointer to editing buffer */
++#ifdef UTF8
++ unsigned char charbuf[MB_LEN_MAX];
++#endif /* UTF8 */
++ int charpoint;
+ GList *history; /* The history */
+ int need_push; /* need to push the current Input on hist? */
+ char **completions; /* Possible completions array */
+diff -Naur mc-4.6.1-old/src/wtools.c mc-4.6.1/src/wtools.c
+--- mc-4.6.1-old/src/wtools.c 2005-05-27 16:19:19.000000000 +0200
++++ mc-4.6.1/src/wtools.c 2005-10-28 10:08:08.036201664 +0200
+@@ -48,11 +48,11 @@
+ /* Adjust sizes */
+ lines = (lines > LINES - 6) ? LINES - 6 : lines;
+
+- if (title && (cols < (len = strlen (title) + 2)))
++ if (title && (cols < (len = mbstrlen (title) + 2)))
+ cols = len;
+
+ /* no &, but 4 spaces around button for brackets and such */
+- if (cols < (len = strlen (cancel_string) + 3))
++ if (cols < (len = mbstrlen (cancel_string) + 3))
+ cols = len;
+
+ cols = cols > COLS - 6 ? COLS - 6 : cols;
+@@ -123,7 +123,7 @@
+ va_start (ap, count);
+ for (i = 0; i < count; i++) {
+ char *cp = va_arg (ap, char *);
+- win_len += strlen (cp) + 6;
++ win_len += mbstrlen (cp) + 6;
+ if (strchr (cp, '&') != NULL)
+ win_len--;
+ }
+@@ -131,7 +131,7 @@
+ }
+
+ /* count coordinates */
+- cols = 6 + max (win_len, max ((int) strlen (header), msglen (text, &lines)));
++ cols = 6 + max (win_len, max ((int) mbstrlen (header), msglen (text, &lines)));
+ lines += 4 + (count > 0 ? 2 : 0);
+ xpos = COLS / 2 - cols / 2;
+ ypos = LINES / 3 - (lines - 3) / 2;
+@@ -146,7 +146,7 @@
+ va_start (ap, count);
+ for (i = 0; i < count; i++) {
+ cur_name = va_arg (ap, char *);
+- xpos = strlen (cur_name) + 6;
++ xpos = mbstrlen (cur_name) + 6;
+ if (strchr (cur_name, '&') != NULL)
+ xpos--;
+
+@@ -457,7 +457,7 @@
+ g_strlcpy (histname + 3, header, 61);
+ quick_widgets[2].histname = histname;
+
+- len = max ((int) strlen (header), msglen (text, &lines)) + 4;
++ len = max ((int) mbstrlen (header), msglen (text, &lines)) + 4;
+ len = max (len, 64);
+
+ /* The special value of def_text is used to identify password boxes
+@@ -477,7 +477,7 @@
+ */
+ quick_widgets[0].relative_x = len / 2 + 4;
+ quick_widgets[1].relative_x =
+- len / 2 - (strlen (_(quick_widgets[1].text)) + 9);
++ len / 2 - (mbstrlen (_(quick_widgets[1].text)) + 9);
+ quick_widgets[0].x_divisions = quick_widgets[1].x_divisions = len;
+ #endif /* ENABLE_NLS */
+
Added: trunk/debian/patches/49_64bit.patch
===================================================================
--- trunk/debian/patches/49_64bit.patch (rev 0)
+++ trunk/debian/patches/49_64bit.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,54 @@
+--- mc-4.6.1a/src/mountlist.c.64bit 2005-02-08 23:33:52.000000000 +0100
++++ mc-4.6.1a/src/mountlist.c 2005-05-10 17:09:24.122853504 +0200
+@@ -131,11 +131,19 @@ struct mount_entry
+
+ struct fs_usage
+ {
++#ifndef HAVE_SYS_STATVFS_H
+ long fsu_blocks; /* Total blocks. */
+ long fsu_bfree; /* Free blocks available to superuser. */
+ long fsu_bavail; /* Free blocks available to non-superuser. */
+ long fsu_files; /* Total file nodes. */
+ long fsu_ffree; /* Free file nodes. */
++#else /* We have sys/statvfs.h, use proper data types when _FILE_OFFSET_BITS=64 */
++ fsblkcnt_t fsu_blocks;
++ fsblkcnt_t fsu_bfree;
++ fsblkcnt_t fsu_bavail;
++ fsblkcnt_t fsu_files;
++ fsblkcnt_t fsu_ffree;
++#endif /* HAVE_SYS_STATVFS_H */
+ };
+
+ static int get_fs_usage (char *path, struct fs_usage *fsp);
+@@ -665,6 +673,7 @@ my_statfs (struct my_statfs *myfs_stats,
+ BLOCKS FROMSIZE-byte blocks, rounding away from zero.
+ TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */
+
++#if !defined(HAVE_SYS_STATFS_H) || !defined(STAT_STATVFS)
+ static long
+ fs_adjust_blocks (long blocks, int fromsize, int tosize)
+ {
+@@ -672,13 +681,21 @@ fs_adjust_blocks (long blocks, int froms
+ abort ();
+ if (fromsize <= 0)
+ return -1;
+-
++#else
++static fsblkcnt_t
++fs_adjust_blocks (fsblkcnt_t blocks, unsigned long fromsize, unsigned long tosize)
++{
++ if (!tosize)
++ abort ();
++ if (!fromsize)
++ return -1;
++#endif
+ if (fromsize == tosize) /* E.g., from 512 to 512. */
+ return blocks;
+ else if (fromsize > tosize) /* E.g., from 2048 to 512. */
+ return blocks * (fromsize / tosize);
+ else /* E.g., from 256 to 512. */
+- return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize);
++ return (blocks + 1) / (tosize / fromsize);
+ }
+
+ #if defined(_AIX) && defined(_I386)
Added: trunk/debian/patches/50_utf8-more.patch
===================================================================
--- trunk/debian/patches/50_utf8-more.patch (rev 0)
+++ trunk/debian/patches/50_utf8-more.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,48 @@
+## Small patch for a problem in the status
+## line with UTF-8 locales. Closes: #360427
+--- mc-4.6.1.orig/src/screen.c.orig 2006-06-22 17:50:36.000000000 +0200
++++ mc-4.6.1/src/screen.c 2006-06-22 17:51:39.000000000 +0200
+@@ -658,7 +658,7 @@
+ g_snprintf (buffer, sizeof (buffer), (panel->marked == 1) ?
+ _("%s bytes in %d file") : _("%s bytes in %d files"),
+ size_trunc_sep (panel->total), panel->marked);
+- if ((int) strlen (buffer) > cols-2){
++ if ((int) mbstrlen (buffer) > cols-2){
+ buffer [cols] = 0;
+ p += 2;
+ } else
+# Shift-Enter fix.
+--- mc-4.6.1.orig/src/util.c 2006-08-03 14:09:22.000000000 +0200
++++ mc-4.6.1/src/util.c 2006-08-03 14:17:11.000000000 +0200
+@@ -102,7 +102,7 @@ mbstrlen (const char *str)
+
+ if (len > 0) {
+ int wcsize = wcwidth(c);
+- width += wcsize > 0 ? wcsize : 0;
++ width += wcsize >= 0 ? wcsize : 1;
+ str += len-1;
+ }
+ }
+--- mc-4.6.1.orig/src/widget.c 2006-08-03 13:46:47.000000000 +0200
++++ mc-4.6.1/src/widget.c 2006-08-03 14:17:04.000000000 +0200
+@@ -817,7 +817,7 @@ charcolumn(WInput *in, int idx)
+ l = mbrtowc(&wc, in->buffer + pos, len - pos, &mbs);
+ if (l <= 0)
+ return width;
+- pos += l; width += wcwidth(wc);
++ pos += l; width += (wcwidth(wc) >= 0 ? wcwidth(wc) : 1);
+ i++;
+ };
+ return width;
+# Wrong mode display patch
+--- mc-4.6.1.orig/src/screen.c 2007-03-18 03:00:48.000000000 +0200
++++ mc-4.6.1/src/screen.c 2007-03-18 02:58:32.000000000 +0200
+@@ -648,7 +648,7 @@
+ SLsmg_write_nwchars (((wchar_t *) buffer)
+ + txtlen - n2, n2);
+ } else
+- SLsmg_write_nwchars ((wchar_t *) buffer, len);
++ SLsmg_write_nwchars (((wchar_t *) buffer + still), len);
+ } else {
+ printw ("%*s", still, "");
+ SLsmg_write_nwchars ((wchar_t *) buffer, txtlen);
Added: trunk/debian/patches/52_utf8-8bits-slang2.patch
===================================================================
--- trunk/debian/patches/52_utf8-8bits-slang2.patch (rev 0)
+++ trunk/debian/patches/52_utf8-8bits-slang2.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,68 @@
+diff -ruN mc-4.6.1.orig/edit/editdraw.c mc-4.6.1/edit/editdraw.c
+--- mc-4.6.1.orig/edit/editdraw.c 2006-06-25 20:34:28.000000000 +0700
++++ mc-4.6.1/edit/editdraw.c 2006-06-25 20:35:35.475890000 +0700
+@@ -239,7 +239,7 @@
+ lowlevel_set_color (color);
+ }
+ #ifdef UTF8
+- SLsmg_write_char(textchar);
++ SLsmg_write_nwchars(&textchar, 1);
+ #else
+ addch (textchar);
+ #endif
+diff -ruN mc-4.6.1.orig/src/help.c mc-4.6.1/src/help.c
+--- mc-4.6.1.orig/src/help.c 2006-06-25 20:34:28.000000000 +0700
++++ mc-4.6.1/src/help.c 2006-06-25 20:36:13.406260500 +0700
+@@ -461,7 +461,7 @@
+ len = mbrtowc(&wc, p, MB_CUR_MAX, &mbs);
+ if (len <= 0) len = 1; /* skip broken multibyte chars */
+
+- SLsmg_write_char(wc);
++ SLsmg_write_nwchars(&wc, 1);
+ p += len - 1;
+ } else
+ #endif
+diff -ruN mc-4.6.1.orig/src/util.c mc-4.6.1/src/util.c
+--- mc-4.6.1.orig/src/util.c 2006-06-25 20:34:28.000000000 +0700
++++ mc-4.6.1/src/util.c 2006-06-25 20:37:52.592459250 +0700
+@@ -59,8 +59,26 @@
+ #if SLANG_VERSION >= 20000
+ void SLsmg_write_nwchars(wchar_t *s, size_t n)
+ {
+- while(n--)
+- SLsmg_write_char(*s++);
++ if (SLsmg_is_utf8_mode()) { /* slang can handle it directly */
++ while(n-- && *s)
++ SLsmg_write_char(*s++);
++ }
++ else { /* convert wchars back to 8bit encoding */
++ mbstate_t mbs;
++ memset (&mbs, 0, sizeof (mbs));
++ while (n-- && *s) {
++ char buf[MB_LEN_MAX + 1]; /* should use 1 char, but to be sure */
++ if (*s < 0x80) {
++ SLsmg_write_char(*s++); /* ASCII */
++ }
++ else {
++ if (wcrtomb(buf, *s++, &mbs) == 1)
++ SLsmg_write_char((wchar_t)(buf[0]));
++ else
++ SLsmg_write_char('?'); /* should not happen */
++ }
++ }
++ }
+ }
+ #endif
+
+diff -ruN mc-4.6.1.orig/src/view.c mc-4.6.1/src/view.c
+--- mc-4.6.1.orig/src/view.c 2006-06-25 20:34:28.000000000 +0700
++++ mc-4.6.1/src/view.c 2006-06-25 20:38:50.788096250 +0700
+@@ -856,7 +856,7 @@
+ #ifndef UTF8
+ #define view_add_character(view,c) addch (c)
+ #else /* UTF8 */
+-#define view_add_character(view,c) SLsmg_write_char(c)
++#define view_add_character(view,c) {wchar_t tmp=c; SLsmg_write_nwchars(&tmp, 1);}
+ #endif /* UTF8 */
+ #define view_add_one_vline() one_vline()
+ #define view_add_string(view,s) addstr (s)
Added: trunk/debian/patches/55_mc-utf8-look-and-feel.patch
===================================================================
--- trunk/debian/patches/55_mc-utf8-look-and-feel.patch (rev 0)
+++ trunk/debian/patches/55_mc-utf8-look-and-feel.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,204 @@
+--- mc-4.6.1/src/main.c.laf 2005-11-24 16:55:06.000000000 +0100
++++ mc-4.6.1/src/main.c 2005-11-24 16:56:27.000000000 +0100
+@@ -274,6 +274,9 @@
+ /* The user's shell */
+ const char *shell = NULL;
+
++/* Is the LANG UTF-8 ? */
++gboolean is_utf8 = FALSE;
++
+ /* mc_home: The home of MC */
+ char *mc_home = 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);
+--- mc-4.6.1a/src/main.h.laf 2005-11-24 16:55:06.000000000 +0100
++++ mc-4.6.1a/src/main.h 2005-11-24 16:55:06.000000000 +0100
+@@ -64,6 +64,7 @@
+ extern int only_leading_plus_minus;
+ extern int output_starts_shell;
+ extern int midnight_shutdown;
++extern gboolean is_utf8;
+ extern char cmd_buf [512];
+ extern const char *shell;
+
+--- mc-4.6.1a/src/widget.c.laf 2005-11-24 16:55:06.000000000 +0100
++++ mc-4.6.1a/src/widget.c 2005-11-24 16:55:06.000000000 +0100
+@@ -1948,52 +1948,86 @@ input_new (int y, int x, int color, int
+ return in;
+ }
+
+-
+-/* Listbox widget */
+-
+-/* Should draw the scrollbar, but currently draws only
+- * indications that there is more information
+- */
+-static int listbox_cdiff (WLEntry *s, WLEntry *e);
++/* Vertical scrollbar widget */
+
+-static void
+-listbox_drawscroll (WListbox *l)
++void
++vscrollbar (Widget widget, int height, int width, int tpad, int bpad,
++ int selected, int count, gboolean color)
+ {
+ int line;
+- int i, top;
+- int max_line = l->height-1;
+-
++ int i;
++
+ /* Are we at the top? */
+- widget_move (&l->widget, 0, l->width);
+- if (l->list == l->top)
+- one_vline ();
++ widget_move (&widget, tpad, width);
++#ifndef UTF8
++ if (!selected)
++ one_vline ();
+ else
+- addch ('^');
++ addch ('^');
++#else
++ if (color) attrset (MARKED_COLOR);
++ if (is_utf8)
++ SLsmg_write_string("â²");
++ else
++ addch ('^');
++ if (color) attrset (NORMAL_COLOR);
++#endif
+
+ /* Are we at the bottom? */
+- widget_move (&l->widget, max_line, l->width);
+- top = listbox_cdiff (l->list, l->top);
+- if ((top + l->height == l->count) || l->height >= l->count)
+- one_vline ();
++ widget_move (&widget, height-1-bpad, width);
++#ifndef UTF8
++ if (selected == count-1)
++ one_vline ();
++ else
++ addch ('v');
++#else
++ if (color) attrset (MARKED_COLOR);
++ if (is_utf8)
++ SLsmg_write_string("â¼");
+ else
+- addch ('v');
++ addch('v');
++ if (color) attrset (NORMAL_COLOR);
++#endif
+
+ /* Now draw the nice relative pointer */
+- if (l->count)
+- line = 1+ ((l->pos * (l->height-2)) / l->count);
++ if (count > 1)
++ line = tpad + 1 + ((selected * (height-3-tpad-bpad)) / (count-1));
+ else
+- line = 0;
+-
+- for (i = 1; i < max_line; i++){
+- widget_move (&l->widget, i, l->width);
+- if (i != line)
+- one_vline ();
+- else
+- addch ('*');
++ line = 0;
++
++ for (i = tpad + 1; i < height-1-bpad; i++){
++ widget_move (&widget, i, width);
++ if (i != line)
++#ifndef UTF8
++ one_vline ();
++ else
++ addch ('*');
++#else
++ if (is_utf8)
++ SLsmg_write_string("â");
++ else
++ one_vline();
++ else {
++ if (color) attrset (MARKED_COLOR);
++ if (is_utf8)
++ SLsmg_write_string("â");
++ else
++ addch('*');
++ if (color) attrset (NORMAL_COLOR);
++ }
++#endif
+ }
+ }
+-
+-static void
++
++
++/* Listbox widget */
++
++/* Should draw the scrollbar, but currently draws only
++ * indications that there is more information
++ */
++static int listbox_cdiff (WLEntry *s, WLEntry *e);
++
++void
+ listbox_draw (WListbox *l, int focused)
+ {
+ WLEntry *e;
+@@ -2034,7 +2068,7 @@ listbox_draw (WListbox *l, int focused)
+ if (!l->scrollbar)
+ return;
+ attrset (normalc);
+- listbox_drawscroll (l);
++ vscrollbar (l->widget, l->height, l->width, 0, 0, l->pos, l->count, FALSE);
+ }
+
+ /* Returns the number of items between s and e,
+--- mc-4.6.1a/src/screen.c.laf 2005-11-24 16:55:06.000000000 +0100
++++ mc-4.6.1a/src/screen.c 2005-11-24 16:55:06.000000000 +0100
+@@ -888,6 +888,9 @@ show_dir (WPanel *panel)
+ }
+ #endif /* HAVE_SLANG */
+
++ vscrollbar (panel->widget, panel->widget.lines, panel->widget.cols-1, 2, 2,
++ panel->selected, panel->count, TRUE);
++
+ if (panel->active)
+ attrset (REVERSE_COLOR);
+
+@@ -1504,7 +1507,7 @@ use_display_format (WPanel *panel, const
+ panel->dirty = 1;
+
+ /* Status needn't to be split */
+- usable_columns = ((panel->widget.cols-2)/((isstatus)
++ usable_columns = ((panel->widget.cols-3)/((isstatus)
+ ? 1
+ : (panel->split+1))) - (!isstatus && panel->split);
+
+--- mc-4.6.1a/src/widget.h.laf 2005-11-24 16:55:06.000000000 +0100
++++ mc-4.6.1a/src/widget.h 2005-11-24 16:55:06.000000000 +0100
+@@ -170,6 +170,10 @@ void button_set_text (WButton *b, const
+ /* Listbox manager */
+ WLEntry *listbox_get_data (WListbox *l, int pos);
+
++/* Vertical scrollbar */
++void vscrollbar (Widget widget, int height, int width, int tpad, int bpad,
++ int selected, int count, gboolean color);
++
+ /* search text int listbox entries */
+ WLEntry *listbox_search_text (WListbox *l, const char *text);
+ void listbox_select_entry (WListbox *l, WLEntry *dest);
Added: trunk/debian/patches/60_recode.patch
===================================================================
--- trunk/debian/patches/60_recode.patch (rev 0)
+++ trunk/debian/patches/60_recode.patch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,1550 @@
+diff -urN mc-4.6.1-orig/edit/editkeys.c mc-4.6.1/edit/editkeys.c
+--- mc-4.6.1-orig/edit/editkeys.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/edit/editkeys.c 2005-07-30 23:13:14.000000000 +0700
+@@ -205,7 +205,7 @@
+
+ #ifdef HAVE_CHARSET
+ if (x_key == XCTRL ('t')) {
+- do_select_codepage ();
++ do_select_codepage (_(" Choose codepage "));
+
+ edit->force = REDRAW_COMPLETELY;
+ command = CK_Refresh;
+ä×ÏÉÞÎÙÅ ÆÁÊÌÙ mc-4.6.1-orig/po/ru.gmo É mc-4.6.1/po/ru.gmo ÒÁÚÌÉÞÁÀÔÓÑ
+diff -urN mc-4.6.1-orig/po/ru.po mc-4.6.1/po/ru.po
+--- mc-4.6.1-orig/po/ru.po 2005-07-23 23:53:30.000000000 +0700
++++ mc-4.6.1/po/ru.po 2005-07-30 23:17:02.000000000 +0700
+@@ -4503,3 +4503,32 @@
+ #: vfs/vfs.c:894
+ msgid "Changes to file lost"
+ msgstr "éÚÍÅÎÅÎÉÑ ÄÌÑ ÆÁÊÌÁ ÐÏÔÅÒÑÎÙ"
++
++#: messages for recode patch
++msgid "Panel &codepage"
++msgstr "ëÏÄÉÒÏ×ËÁ ÐÁÎÅÌÉ"
++
++msgid " Choose codepage "
++msgstr " ÷ÙÂÅÒÉÔÅ ËÏÄÉÒÏ×ËÕ"
++
++msgid " Choose panel codepage "
++msgstr " ÷ÙÂÅÒÉÔÅ ËÏÄÉÒÏ×ËÕ ÐÁÎÅÌÉ "
++
++msgid " Choose default FTP codepage "
++msgstr " ÷ÙÂÅÒÉÔÅ ËÏÄÉÒÏ×ËÕ FTP ÐÏ ÕÍÏÌÞÁÎÉÀ "
++
++msgid "FTP default codepage:"
++msgstr "ëÏÄÉÒÏ×ËÁ FTP ÐÏ ÕÍÏÌÞÁÎÉÀ:"
++
++msgid "Recode file names:"
++msgstr "ðÅÒÅËÏÄÉÒÏ×ÁÔØ ÉÍÅÎÁ:"
++
++msgid "Recoding works only with COPY/MOVE operation"
++msgstr "ðÅÒÅËÏÄÉÒÏ×ËÁ ÒÁÂÏÔÁÅÔ ÔÏÌØËÏ ÄÌÑ ÏÐÅÒÁÃÉÊ ËÏÐÉÒÏ×ÁÎÉÑ/ÐÅÒÅÍÅÝÅÎÉÑ"
++
++msgid " Choose \"FROM\" codepage for COPY/MOVE operaion "
++msgstr" ÷ÙÂÅÒÉÔÅ ÎÁÞÁÌØÎÕÀ ËÏÄÉÒÏ×ËÕ ÄÌÑ ÏÐÅÒÁÃÉÉ ËÏÐÉÒÏ×ÁÎÉÑ/ÐÅÒÅÍÅÝÅÎÉÑ "
++
++msgid " Choose \"TO\" codepage for COPY/MOVE operaion "
++msgstr" ÷ÙÂÅÒÉÔÅ ËÏÎÅÞÎÕÀ ËÏÄÉÒÏ×ËÕ ÄÌÑ ÏÐÅÒÁÃÉÉ ËÏÐÉÒÏ×ÁÎÉÑ/ÐÅÒÅÍÅÝÅÎÉÑ "
++
+diff -urN mc-4.6.1-orig/src/boxes.c mc-4.6.1/src/boxes.c
+--- mc-4.6.1-orig/src/boxes.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/src/boxes.c 2005-07-31 01:20:52.000000000 +0700
+@@ -49,6 +49,7 @@
+ #ifdef HAVE_CHARSET
+ #include "charsets.h"
+ #include "selcodepage.h"
++#include "recode.h"
+ #endif
+
+ #ifdef USE_NETCODE
+@@ -446,8 +447,8 @@
+ }
+ }
+
+-#define DISPY 11
+-#define DISPX 46
++#define DISPY 13
++#define DISPX 35
+
+
+ #ifndef HAVE_CHARSET
+@@ -543,26 +544,61 @@
+
+
+ static int new_display_codepage;
++static int new_ftp_codepage;
+
+-static WLabel *cplabel;
+ static WCheck *inpcheck;
+
++static WButton *cpbutton;
++static WButton *cpbutton_ftp;
++
+ static int
+ sel_charset_button (int action)
+ {
+ const char *cpname;
+ char buf[64];
+- new_display_codepage = select_charset (new_display_codepage, 1);
++ new_display_codepage = select_charset (new_display_codepage, 1, _(" Choose input codepage "));
+ cpname = (new_display_codepage < 0)
+ ? _("Other 8 bit")
+ : codepages[new_display_codepage].name;
+
+ /* avoid strange bug with label repainting */
+- g_snprintf (buf, sizeof (buf), "%-27s", cpname);
+- label_set_text (cplabel, buf);
++ sprintf( buf, "%s", cpname );
++ button_set_text (cpbutton, buf);
++
++ if(new_display_codepage<0) new_ftp_codepage=-1;
++ cpname = (new_ftp_codepage < 0)
++ ? _("Other 8 bit")
++ : codepages[ new_ftp_codepage ].name;
++ sprintf( buf, "%s", cpname );
++ button_set_text (cpbutton_ftp, buf);
++
+ return 0;
+ }
+
++static int sel_charset_button_ftp(int action) {
++ char *cpname, buf[64];
++ if(new_display_codepage>0) {
++ new_ftp_codepage = select_charset(new_ftp_codepage, 0, _(" Choose default FTP codepage "));
++ cpname = (new_display_codepage < 0)
++ ? _("Other 8 bit")
++ : codepages[ new_display_codepage ].name;
++ sprintf( buf, "%s", cpname );
++ button_set_text( cpbutton, buf );
++ cpname = (new_ftp_codepage < 0)
++ ? _("Other 8 bit")
++ : codepages[ new_ftp_codepage ].name;
++ sprintf( buf, "%s", cpname );
++ button_set_text( cpbutton_ftp, buf );
++ }
++ else {
++ message( 1, _(" Warning "),
++ _("To use this feature select your codepage in\n"
++ "Setup / Display Bits dialog!\n"
++ "Do not forget to save options." ));
++ }
++ return 0;
++}
++
+ static Dlg_head *
+ init_disp_bits_box (void)
+ {
+@@ -581,9 +617,6 @@
+ cpname = (new_display_codepage < 0)
+ ? _("Other 8 bit")
+ : codepages[new_display_codepage].name;
+- cplabel = label_new (4, 4, cpname);
+- add_widget (dbits_dlg, cplabel);
+-
+ add_widget (dbits_dlg,
+ button_new (DISPY - 3, DISPX / 2 + 3, B_CANCEL,
+ NORMAL_BUTTON, _("&Cancel"), 0));
+@@ -592,13 +625,30 @@
+ 0));
+
+ inpcheck =
+- check_new (6, 4, !use_8th_bit_as_meta, _("F&ull 8 bits input"));
++ check_new (8, 4, !use_8th_bit_as_meta, _("F&ull 8 bits input"));
+ add_widget (dbits_dlg, inpcheck);
+
+- cpname = _("&Select");
+- add_widget (dbits_dlg,
+- button_new (4, DISPX - 8 - mbstrlen (cpname), B_USER,
+- NORMAL_BUTTON, cpname, sel_charset_button));
++
++ add_widget( dbits_dlg, label_new( 5, 4, _("FTP default codepage:")));
++ if(n_codepages>0) {
++ cpname = (new_display_codepage < 0)
++ ? _("Other 8 bit")
++ : codepages[ new_display_codepage ].name;
++ }
++ else cpname= _("Other 8 bit");
++ cpbutton=button_new(4, 5, B_USER,
++ NORMAL_BUTTON, cpname, sel_charset_button);
++
++ if(n_codepages>0) {
++ cpname = (new_ftp_codepage < 0)
++ ? _("Other 8 bit")
++ : codepages[ new_ftp_codepage ].name;
++ }
++ else cpname= _("Other 8 bit");
++ cpbutton_ftp=button_new(6, 5, B_USER,
++ NORMAL_BUTTON, cpname, sel_charset_button_ftp);
++ add_widget( dbits_dlg, cpbutton_ftp);
++ add_widget (dbits_dlg, cpbutton);
+
+ return dbits_dlg;
+ }
+@@ -608,6 +658,7 @@
+ {
+ Dlg_head *dbits_dlg;
+ new_display_codepage = display_codepage;
++ new_ftp_codepage = ftp_codepage;
+
+ application_keypad_mode ();
+ dbits_dlg = init_disp_bits_box ();
+@@ -628,6 +679,17 @@
+ && display_codepage != 1) ? 128 : 160;
+ #endif
+ use_8th_bit_as_meta = !(inpcheck->state & C_BOOL);
++
++ ftp_codepage=new_ftp_codepage;
++ if(display_codepage<=0) {
++ panel_reset_codepage(left_panel);
++ paint_dir(left_panel);
++ display_mini_info(left_panel);
++ panel_reset_codepage(right_panel);
++ paint_dir(right_panel);
++ display_mini_info(right_panel);
++ }
++
+ }
+ destroy_dlg (dbits_dlg);
+ repaint_screen ();
+diff -urN mc-4.6.1-orig/src/charsets.c mc-4.6.1/src/charsets.c
+--- mc-4.6.1-orig/src/charsets.c 2005-07-23 23:52:02.000000000 +0700
++++ mc-4.6.1/src/charsets.c 2005-07-30 23:31:28.000000000 +0700
+@@ -119,8 +119,6 @@
+ }
+ }
+
+-#define OTHER_8BIT "Other_8_bit"
+-
+ const char *
+ get_codepage_id (int n)
+ {
+@@ -139,7 +137,7 @@
+ return -1;
+ }
+
+-static char
++char
+ translate_character (iconv_t cd, char c)
+ {
+ char outbuf[4], *obuf;
+diff -urN mc-4.6.1-orig/src/charsets.h mc-4.6.1/src/charsets.h
+--- mc-4.6.1-orig/src/charsets.h 2004-08-30 17:38:00.000000000 +0700
++++ mc-4.6.1/src/charsets.h 2005-07-30 23:32:37.000000000 +0700
+@@ -6,6 +6,7 @@
+ #define UNKNCHAR '\001'
+
+ #define CHARSETS_INDEX "mc.charsets"
++#define OTHER_8BIT "Other_8_bit"
+
+ extern int n_codepages;
+
+@@ -19,6 +20,10 @@
+
+ extern struct codepage_desc *codepages;
+
++#include <iconv.h>
++extern char translate_character(iconv_t cd, char c);
++extern char errbuf[255];
++
+ const char *get_codepage_id (int n);
+ int get_codepage_index (const char *id);
+ int load_codepages_list (void);
+diff -urN mc-4.6.1-orig/src/cmd.c mc-4.6.1/src/cmd.c
+--- mc-4.6.1-orig/src/cmd.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/src/cmd.c 2005-07-30 23:41:23.000000000 +0700
+@@ -74,6 +74,10 @@
+ # include "../edit/edit.h"
+ #endif
+
++#ifdef HAVE_CHARSET
++#include "recode.h"
++#endif
++
+ /* If set and you don't have subshell support,then C-o will give you a shell */
+ int output_starts_shell = 0;
+
+@@ -350,6 +354,9 @@
+ {
+ char *tempdir;
+ char *dir;
++#ifdef HAVE_CHARSET
++ char *recoded_dir;
++#endif
+
+ dir =
+ input_expand_dialog (_("Create a new Directory"),
+@@ -360,8 +367,17 @@
+
+ if (dir[0] == '/' || dir[0] == '~')
+ tempdir = g_strdup (dir);
+- else
+- tempdir = concat_dir_and_file (current_panel->cwd, dir);
++ else {
++#ifdef HAVE_CHARSET
++ recoded_dir=g_strdup(dir);
++ my_translate_string(dir,strlen(dir), recoded_dir,current_panel->tr_table_input);
++ tempdir = concat_dir_and_file (current_panel->cwd, recoded_dir);
++ g_free(recoded_dir);
++#else
++ tempdir = concat_dir_and_file (current_panel->cwd, dir);
++#endif
++ }
++
+ g_free (dir);
+
+ save_cwds_stat ();
+diff -urN mc-4.6.1-orig/src/file.c mc-4.6.1/src/file.c
+--- mc-4.6.1-orig/src/file.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/src/file.c 2005-07-30 23:55:00.000000000 +0700
+@@ -77,6 +77,9 @@
+ #include "../vfs/vfs-impl.h"
+
+ /* }}} */
++#ifdef HAVE_CHARSET
++#include "recode.h"
++#endif
+
+ int verbose = 1;
+
+@@ -914,7 +917,11 @@
+ }
+ /* Dive into subdir if exists */
+ if (toplevel && ctx->dive_into_subdirs) {
+- dest_dir = concat_dir_and_file (d, x_basename (s));
++#ifdef HAVE_CHARSET
++ dest_dir = concat_dir_and_recoded_fname(d, x_basename (s), ctx);
++#else
++ dest_dir = concat_dir_and_file (d, x_basename (s));
++#endif
+ } else {
+ dest_dir = g_strdup (d);
+ goto dont_mkdir;
+@@ -964,7 +971,11 @@
+
+ (*ctx->stat_func) (path, &buf);
+ if (S_ISDIR (buf.st_mode)) {
+- mdpath = concat_dir_and_file (dest_dir, next->d_name);
++#ifdef HAVE_CHARSET
++ mdpath = concat_dir_and_recoded_fname(dest_dir, next->d_name, ctx);
++#else
++ mdpath = concat_dir_and_file (dest_dir, next->d_name);
++#endif
+ /*
+ * From here, we just intend to recursively copy subdirs, not
+ * the double functionality of copying different when the target
+@@ -975,7 +986,11 @@
+ parent_dirs, progress_count, progress_bytes);
+ g_free (mdpath);
+ } else {
+- dest_file = concat_dir_and_file (dest_dir, x_basename (path));
++#ifdef HAVE_CHARSET
++ dest_file=concat_dir_and_recoded_fname(dest_dir, x_basename(path),ctx);
++#else
++ dest_file = concat_dir_and_file (dest_dir, x_basename (path));
++#endif
+ return_status = copy_file_file (ctx, path, dest_file, 1,
+ progress_count, progress_bytes, 0);
+ g_free (dest_file);
+@@ -1159,7 +1174,12 @@
+ destdir = g_strdup (d);
+ move_over = 1;
+ } else
+- destdir = concat_dir_and_file (d, x_basename (s));
++#ifdef HAVE_CHARSET
++ destdir = concat_dir_and_recoded_fname(d, x_basename (s), ctx);
++#else
++ destdir = concat_dir_and_file (d, x_basename (s));
++#endif
++
+
+ if (sbuf.st_dev == dbuf.st_dev && sbuf.st_ino == dbuf.st_ino) {
+ int msize = COLS - 36;
+@@ -1875,7 +1895,12 @@
+ if (temp == NULL) {
+ value = transform_error;
+ } else {
+- char *temp2 = concat_dir_and_file (dest, temp);
++#ifdef HAVE_CHARSET
++ char *temp2 = concat_dir_and_recoded_fname (dest, temp, ctx);
++#else
++ char *temp2 = concat_dir_and_file (dest, temp);
++#endif
++
+ g_free (dest);
+ dest = temp2;
+ temp = NULL;
+@@ -1969,7 +1994,12 @@
+ if (temp == NULL)
+ value = transform_error;
+ else {
+- char *temp2 = concat_dir_and_file (dest, temp);
++#ifdef HAVE_CHARSET
++ char *temp2 = concat_dir_and_recoded_fname(dest, temp, ctx);
++#else
++ char *temp2 = concat_dir_and_file (dest, temp);
++#endif
++
+
+ switch (operation) {
+ case OP_COPY:
+diff -urN mc-4.6.1-orig/src/filegui.c mc-4.6.1/src/filegui.c
+--- mc-4.6.1-orig/src/filegui.c 2006-06-13 00:53:19.000000000 +0700
++++ mc-4.6.1/src/filegui.c 2006-06-13 01:18:24.000000000 +0700
+@@ -71,6 +71,10 @@
+ #include "util.h" /* strip_password() */
+ #include "tty.h"
+
++#ifdef HAVE_CHARSET
++#include "recode.h"
++#endif
++
+ /* }}} */
+
+ /* This structure describes the UI and internal data required by a file
+@@ -722,57 +726,79 @@
+ }
+ }
+
++#ifdef HAVE_CHARSET
++#define FMDY 15
++#else
+ #define FMDY 13
++#endif
++
+ #define FMD_XLEN 64
+ extern int fmd_xlen;
+ static QuickWidget fmd_widgets[] = {
+
+-#define FMCB0 FMDC
+-#define FMCB12 0
+-#define FMCB11 1
+- /* follow symlinks and preserve Attributes must be the first */
+- {quick_checkbox, 3, 64, 8, FMDY, N_("preserve &Attributes"), 9, 0,
+- 0 /* &op_preserve */ , 0, "preserve"},
+- {quick_checkbox, 3, 64, 7, FMDY, N_("follow &Links"), 7, 0,
+- 0 /* &file_mask_op_follow_links */ , 0, "follow"},
+- {quick_label, 3, 64, 5, FMDY, N_("to:"), 0, 0, 0, 0, "to"},
+- {quick_checkbox, 37, 64, 4, FMDY, N_("&Using shell patterns"), 0, 0,
+- 0 /* &source_easy_patterns */ , 0, "using-shell"},
+- {quick_input, 3, 64, 3, FMDY, "", 58,
+- 0, 0, 0, "input-def"},
+-#define FMDI1 4
+-#define FMDI2 5
+-#define FMDC 3
+- {quick_input, 3, 64, 6, FMDY, "", 58, 0,
+- 0, 0, "input2"},
+-#define FMDI0 6
+- {quick_label, 3, 64, 2, FMDY, "", 0, 0, 0, 0, "ql"},
+-#define FMBRGT 7
+- {quick_button, 42, 64, 9, FMDY, N_("&Cancel"), 0, B_CANCEL, 0, 0,
+- "cancel"},
+-#undef SKIP
++#ifdef HAVE_CHARSET
++ #define Y_OK 12
++#else
++ #define Y_OK 9
++#endif
++
+ #ifdef WITH_BACKGROUND
+-# define SKIP 5
+-# define FMCB21 11
+-# define FMCB22 10
+-# define FMBLFT 9
+-# define FMBMID 8
+- {quick_button, 25, 64, 9, FMDY, N_("&Background"), 0, B_USER, 0, 0,
+- "back"},
+-#else /* WITH_BACKGROUND */
+-# define SKIP 4
+-# define FMCB21 10
+-# define FMCB22 9
+-# define FMBLFT 8
+-# undef FMBMID
+-#endif
+- {quick_button, 14, 64, 9, FMDY, N_("&OK"), 0, B_ENTER, 0, 0, "ok"},
+- {quick_checkbox, 42, 64, 8, FMDY, N_("&Stable Symlinks"), 0, 0,
+- 0 /* &file_mask_stable_symlinks */ , 0, "stab-sym"},
+- {quick_checkbox, 31, 64, 7, FMDY, N_("&Dive into subdir if exists"), 0,
+- 0,
+- 0 /* &dive_into_subdirs */ , 0, "dive"},
+- NULL_QuickWidget
++ #define ADD 0
++#else
++ #define ADD -1
++#endif
++
++ #define FM_STAB_SYM 0
++ #define FM_DIVE_INTO_SUBDIR 1
++ #define FM_PRES_ATTR 2
++ #define FM_FOLLOW_LINKS 3
++ #define FM_DST_INPUT 4
++ #define FM_DST_TITLE 5
++ #define FM_USING_SHELL_PATT 6
++ #define FM_SRC_INPUT 7
++ #define FM_SRC_TITLE 8
++ #define FM_CANCEL 9
++#ifdef WITH_BACKGROUND
++ #define FM_BKGND 10
++#endif
++ #define FM_OK 11+ADD
++#ifdef HAVE_CHARSET
++ #define FM_TO_CODEPAGE 12+ADD
++ #define FM_FROM_CODEPAGE 13+ADD
++ #define FM_RECODE_TITLE 14+ADD
++ #define FM_RECODE_ARROW 15+ADD
++#endif // HAVE_CHARSET
++
++
++#ifdef HAVE_CHARSET
++ #define SKIP 10
++ #define B_FROM B_USER+1
++ #define B_TO B_USER+2
++#else
++ #define SKIP 10
++#endif
++
++ {quick_checkbox, 42,64, 8, FMDY, N_("&Stable Symlinks"),0,0,0,0,"stab-sym"},
++ {quick_checkbox, 31,64, 7, FMDY, N_("&Dive into subdir if exists"),0,0,0,0,"dive"},
++ {quick_checkbox, 3, 64, 8, FMDY, N_("preserve &Attributes"),9,0,0,0,"preserve"},
++ {quick_checkbox, 3, 64, 7, FMDY, N_("follow &Links"),7,0,0,0,"follow"},
++ {quick_input, 3, 64, 6, FMDY, "", 58, 0, 0, 0, "input2"},
++ {quick_label, 3, 64, 5, FMDY, N_("to:"), 0, 0, 0, 0, "to"},
++ {quick_checkbox, 37,64, 4, FMDY, N_("&Using shell patterns"),0,0, 0,0,"us-sh"},
++ {quick_input, 3, 64, 3, FMDY, "", 58, 0, 0, 0, "input-def"},
++ {quick_label, 3, 64, 2, FMDY, "", 0, 0, 0, 0, "ql"},
++ {quick_button, 42,64, Y_OK, FMDY, N_("&Cancel"), 0, B_CANCEL, 0,0, "cancel"},
++#ifdef WITH_BACKGROUND
++ {quick_button, 25,64, Y_OK, FMDY, N_("&Background"), 0, B_USER, 0,0, "back"},
++#endif
++ {quick_button, 14,64, Y_OK, FMDY, N_("&OK"), 0, B_ENTER, 0, 0, "ok"},
++#ifdef HAVE_CHARSET
++ {quick_button, 46,64, 10, FMDY,"to codepage", 0, B_TO, 0, 0, "ql"},
++ {quick_button, 25,64, 10, FMDY, "from codepage", 0, B_FROM, 0, 0, "ql"},
++ {quick_label, 3, 64, 10, FMDY, N_("Recode file names:"), 0, 0, 0, 0, "ql"},
++ {quick_label, 42,64, 10, FMDY, "->", 0, 0, 0, 0, "ql"},
++#endif
++ {0}
+ };
+
+ static int
+@@ -806,48 +832,48 @@
+ if (fmd_widgets[i].text[0] != '\0')
+ fmd_widgets[i].text = _(fmd_widgets[i].text);
+
+- len = mbstrlen (fmd_widgets[FMCB11].text)
+- + mbstrlen (fmd_widgets[FMCB21].text) + 15;
++ len = mbstrlen (fmd_widgets[FM_FOLLOW_LINKS].text)
++ + mbstrlen (fmd_widgets[FM_DIVE_INTO_SUBDIR].text) + 15;
+ fmd_xlen = max (fmd_xlen, len);
+
+- len = mbstrlen (fmd_widgets[FMCB12].text)
+- + mbstrlen (fmd_widgets[FMCB22].text) + 15;
++ len = mbstrlen (fmd_widgets[FM_PRES_ATTR].text)
++ + mbstrlen (fmd_widgets[FM_STAB_SYM].text) + 15;
+ fmd_xlen = max (fmd_xlen, len);
+
+- len = mbstrlen (fmd_widgets[FMBRGT].text)
+- + mbstrlen (fmd_widgets[FMBLFT].text) + 11;
++ len = mbstrlen (fmd_widgets[FM_CANCEL].text)
++ + mbstrlen (fmd_widgets[FM_OK].text) + 11;
+
+-#ifdef FMBMID
+- len += mbstrlen (fmd_widgets[FMBMID].text) + 6;
++#ifdef FM_BKGND
++ len += mbstrlen (fmd_widgets[FM_BKGND].text) + 6;
+ #endif
+
+ fmd_xlen = max (fmd_xlen, len + 4);
+
+ len = (fmd_xlen - (len + 6)) / 2;
+- i = fmd_widgets[FMBLFT].relative_x = len + 3;
+- i += mbstrlen (fmd_widgets[FMBLFT].text) + 8;
++ i = fmd_widgets[FM_OK].relative_x = len + 3;
++ i += mbstrlen (fmd_widgets[FM_OK].text) + 8;
+
+-#ifdef FMBMID
+- fmd_widgets[FMBMID].relative_x = i;
+- i += mbstrlen (fmd_widgets[FMBMID].text) + 6;
++#ifdef FM_BKGND
++ fmd_widgets[FM_BKGND].relative_x = i;
++ i += mbstrlen (fmd_widgets[FM_BKGND].text) + 6;
+ #endif
+
+- fmd_widgets[FMBRGT].relative_x = i;
++ fmd_widgets[FM_CANCEL].relative_x = i;
+
+ #define chkbox_xpos(i) \
+ fmd_widgets [i].relative_x = fmd_xlen - mbstrlen (fmd_widgets [i].text) - 6
+
+- chkbox_xpos (FMCB0);
+- chkbox_xpos (FMCB21);
+- chkbox_xpos (FMCB22);
++ chkbox_xpos (FM_USING_SHELL_PATT);
++ chkbox_xpos (FM_DIVE_INTO_SUBDIR);
++ chkbox_xpos (FM_STAB_SYM);
+
+ if (fmd_xlen != FMD_XLEN) {
+ i = sizeof (fmd_widgets) / sizeof (fmd_widgets[0]) - 1;
+ while (i--)
+ fmd_widgets[i].x_divisions = fmd_xlen;
+
+- fmd_widgets[FMDI1].hotkey_pos =
+- fmd_widgets[FMDI2].hotkey_pos = fmd_xlen - 6;
++ fmd_widgets[FM_SRC_INPUT].hotkey_pos =
++ fmd_widgets[FM_DST_INPUT].hotkey_pos = fmd_xlen - 6;
+ }
+ #undef chkbox_xpos
+
+@@ -867,6 +893,9 @@
+ int val;
+ QuickDialog Quick_input;
+ char *def_text;
++#ifdef HAVE_CHARSET
++ char *errmsg;
++#endif
+ g_return_val_if_fail (ctx != NULL, NULL);
+
+ def_text = g_strdup(def_text_orig);
+@@ -884,10 +913,11 @@
+
+ /* Set up the result pointers */
+
+- fmd_widgets[FMCB12].result = &ctx->op_preserve;
+- fmd_widgets[FMCB11].result = &ctx->follow_links;
+- fmd_widgets[FMCB22].result = &ctx->stable_symlinks;
+- fmd_widgets[FMCB21].result = &ctx->dive_into_subdirs;
++ fmd_widgets[FM_PRES_ATTR].result = &ctx->op_preserve;
++ fmd_widgets[FM_FOLLOW_LINKS].result = &ctx->follow_links;
++ fmd_widgets[FM_STAB_SYM].result = &ctx->stable_symlinks;
++ fmd_widgets[FM_DIVE_INTO_SUBDIR].result = &ctx->dive_into_subdirs;
++
+
+ /* filter out a possible password from def_text */
+ def_text_secure = strip_password (g_strdup (def_text), 1);
+@@ -895,8 +925,9 @@
+ /* Create the dialog */
+
+ ctx->stable_symlinks = 0;
+- fmd_widgets[FMDC].result = &source_easy_patterns;
+- fmd_widgets[FMDI1].text = easy_patterns ? "*" : "^\\(.*\\)$";
++ fmd_widgets[FM_USING_SHELL_PATT].result = &source_easy_patterns;
++ fmd_widgets[FM_SRC_INPUT].text = easy_patterns ? "*" : "^\\(.*\\)$";
++
+ Quick_input.xlen = fmd_xlen;
+ Quick_input.xpos = -1;
+ Quick_input.title = op_names[operation];
+@@ -904,19 +935,37 @@
+ Quick_input.ylen = FMDY;
+ Quick_input.i18n = 1;
+ Quick_input.widgets = fmd_widgets;
+- fmd_widgets[FMDI0].text = text;
+- fmd_widgets[FMDI2].text = def_text_secure;
+- fmd_widgets[FMDI2].str_result = &dest_dir;
+- fmd_widgets[FMDI1].str_result = &source_mask;
++ fmd_widgets[FM_SRC_TITLE].text = text;
++ fmd_widgets[FM_DST_INPUT].text = def_text_secure;
++ fmd_widgets[FM_DST_INPUT].str_result = &dest_dir;
++ fmd_widgets[FM_SRC_INPUT].str_result = &source_mask;
+
+ *do_background = 0;
++
++#ifdef HAVE_CHARSET
++ ctx->from_codepage=current_panel->src_codepage;
++ ctx->to_codepage=left_panel->src_codepage;
++ if (left_panel) {
++ ctx->to_codepage=left_panel->src_codepage;
++ if( (current_panel==left_panel) && right_panel ) ctx->to_codepage=right_panel->src_codepage;
++ }
++#endif
++
+ ask_file_mask:
+
++#ifdef HAVE_CHARSET
++ if(operation!=OP_COPY && operation!=OP_MOVE) {
++ ctx->from_codepage=-1;
++ ctx->to_codepage=-1;
++ }
++ fmd_widgets[FM_FROM_CODEPAGE].text=get_codepage_id(ctx->from_codepage);
++ fmd_widgets[FM_TO_CODEPAGE].text=get_codepage_id(ctx->to_codepage);
++#endif
++
+ if ((val = quick_dialog_skip (&Quick_input, SKIP)) == B_CANCEL) {
+ g_free (def_text_secure);
+ return 0;
+ }
+- g_free (def_text_secure);
+
+ if (ctx->follow_links)
+ ctx->stat_func = (mc_stat_fn) mc_stat;
+@@ -938,6 +984,7 @@
+ orig_mask = source_mask;
+ if (!dest_dir || !*dest_dir) {
+ g_free (source_mask);
++ g_free (def_text_secure);
+ g_free(def_text);
+ return dest_dir;
+ }
+@@ -992,6 +1039,48 @@
+ }
+ if (val == B_USER)
+ *do_background = 1;
++#ifdef HAVE_CHARSET
++ if(val == B_FROM) {
++ if(operation==OP_COPY || operation==OP_MOVE) {
++ if(display_codepage<=0) {
++ message( 1, _(" Warning "),
++ _("To use this feature select your codepage in\n"
++ "Setup / Display Bits dialog!\n"
++ "Do not forget to save options." ));
++ goto ask_file_mask;
++ }
++ ctx->from_codepage=select_charset(ctx->from_codepage,0,
++ _(" Choose \"FROM\" codepage for COPY/MOVE operaion "));
++ }
++ else
++ message(1,"Warning",_("Recoding works only with COPY or MOVE operation"));
++ goto ask_file_mask;
++ }
++ if(val == B_TO) {
++ if(operation==OP_COPY || operation==OP_MOVE) {
++ if(display_codepage<=0) {
++ message( 1, _(" Warning "),
++ _("To use this feature select your codepage in\n"
++ "Setup / Display Bits dialog!\n"
++ "Do not forget to save options." ));
++ goto ask_file_mask;
++ }
++ ctx->to_codepage=select_charset(ctx->to_codepage,0,
++ _(" Choose \"TO\" codepage for COPY/MOVE operaion "));
++ }
++ else
++ message(1,"Warning",_("Recoding works only with COPY or MOVE operation"));
++ goto ask_file_mask;
++ }
++
++ errmsg=my_init_tt(ctx->to_codepage,ctx->from_codepage,ctx->tr_table);
++ if(errmsg) {
++ my_reset_tt(ctx->tr_table,256);
++ message( 1, MSG_ERROR, "%s", errmsg);
++ }
++#endif
++
++ g_free(def_text_secure);
+ g_free(def_text);
+ return dest_dir;
+ }
+diff -urN mc-4.6.1-orig/src/fileopctx.c mc-4.6.1/src/fileopctx.c
+--- mc-4.6.1-orig/src/fileopctx.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/src/fileopctx.c 2005-07-31 00:01:14.000000000 +0700
+@@ -24,8 +24,12 @@
+ #include <unistd.h>
+
+ #include "global.h"
+-#include "fileopctx.h"
+
++#ifdef HAVE_CHARSET
++#include "recode.h"
++#endif
++
++#include "fileopctx.h"
+
+ /**
+ * file_op_context_new:
+@@ -52,6 +56,12 @@
+ ctx->umask_kill = 0777777;
+ ctx->erase_at_end = TRUE;
+
++#ifdef HAVE_CHARSET
++ ctx->from_codepage=-1;
++ ctx->to_codepage=-1;
++ my_reset_tt(ctx->tr_table,256);
++#endif
++
+ return ctx;
+ }
+
+diff -urN mc-4.6.1-orig/src/fileopctx.h mc-4.6.1/src/fileopctx.h
+--- mc-4.6.1-orig/src/fileopctx.h 2004-10-07 01:06:26.000000000 +0700
++++ mc-4.6.1/src/fileopctx.h 2005-07-31 00:03:00.000000000 +0700
+@@ -108,6 +108,14 @@
+ /* User interface data goes here */
+
+ void *ui;
++
++#ifdef HAVE_CHARSET
++ /* Recode data */
++ int from_codepage, to_codepage;
++ unsigned char tr_table[256];
++ unsigned char recode_buf[MC_MAXPATHLEN];
++#endif
++
+ } FileOpContext;
+
+
+diff -urN mc-4.6.1-orig/src/main.c mc-4.6.1/src/main.c
+--- mc-4.6.1-orig/src/main.c 2005-07-23 23:52:02.000000000 +0700
++++ mc-4.6.1/src/main.c 2005-07-31 00:08:01.000000000 +0700
+@@ -86,6 +86,7 @@
+
+ #ifdef HAVE_CHARSET
+ #include "charsets.h"
++#include "recode.h"
+ #endif /* HAVE_CHARSET */
+
+ #ifdef USE_VFS
+@@ -102,6 +103,7 @@
+ /* The structures for the panels */
+ WPanel *left_panel = NULL;
+ WPanel *right_panel = NULL;
++WPanel* ret_panel=NULL;
+
+ /* The pointer to the tree */
+ WTree *the_tree = NULL;
+@@ -585,6 +587,7 @@
+ }
+ directory = *new_dir ? new_dir : home_dir;
+
++ ret_panel=panel;
+ if (mc_chdir (directory) == -1) {
+ strcpy (panel->cwd, olddir);
+ g_free (olddir);
+@@ -798,6 +801,10 @@
+ {' ', N_("&Quick view C-x q"), 'Q', quick_view_cmd},
+ {' ', N_("&Info C-x i"), 'I', info_cmd},
+ {' ', N_("&Tree"), 'T', tree_cmd},
++#ifdef HAVE_CHARSET
++ {' ', "", ' ', 0},
++ {' ', N_("Panel &codepage"), 'C', fnc_l_cmd},
++#endif
+ {' ', "", ' ', 0},
+ {' ', N_("&Sort order..."), 'S', sort_cmd},
+ {' ', "", ' ', 0},
+@@ -822,6 +829,10 @@
+ {' ', N_("&Quick view C-x q"), 'Q', quick_view_cmd},
+ {' ', N_("&Info C-x i"), 'I', info_cmd},
+ {' ', N_("&Tree"), 'T', tree_cmd},
++#ifdef HAVE_CHARSET
++ {' ', "", ' ', 0},
++ {' ', N_("Panel &codepage"), 'C', fnc_r_cmd},
++#endif
+ {' ', "", ' ', 0},
+ {' ', N_("&Sort order..."), 'S', sort_cmd},
+ {' ', "", ' ', 0},
+diff -urN mc-4.6.1-orig/src/Makefile.am mc-4.6.1/src/Makefile.am
+--- mc-4.6.1-orig/src/Makefile.am 2005-06-08 19:27:19.000000000 +0700
++++ mc-4.6.1/src/Makefile.am 2005-07-31 01:30:09.000000000 +0700
+@@ -40,7 +40,8 @@
+ mc_LDADD = $(EDITLIB) $(SLANGLIB) $(VFSLIB) \
+ $(INTLLIBS) $(GLIB_LIBS) $(MCLIBS) $(LIBICONV)
+
+-CHARSET_SRC = charsets.c charsets.h selcodepage.c selcodepage.h
++CHARSET_SRC = charsets.c charsets.h selcodepage.c selcodepage.h \
++ recode.c recode.h
+
+ SRCS = achown.c achown.h background.c background.h boxes.c boxes.h \
+ chmod.c chmod.h chown.c chown.h cmd.c cmd.h color.c color.h \
+@@ -55,8 +56,8 @@
+ menu.c menu.h mountlist.c mountlist.h mouse.c mouse.h myslang.h \
+ option.c option.h panel.h panelize.c panelize.h poptalloca.h \
+ popt.c poptconfig.c popt.h popthelp.c poptint.h poptparse.c \
+- profile.c profile.h regex.c rxvt.c screen.c setup.c setup.h \
+- slint.c subshell.c subshell.h textconf.c textconf.h \
++ profile.c profile.h regex.c rxvt.c screen.c screen.h setup.c \
++ setup.h slint.c subshell.c subshell.h textconf.c textconf.h \
+ tree.c tree.h treestore.c treestore.h tty.h user.c user.h \
+ util.c util.h utilunix.c view.c view.h vfsdummy.h widget.c \
+ widget.h win.c win.h wtools.c wtools.h \
+diff -urN mc-4.6.1-orig/src/Makefile.in mc-4.6.1/src/Makefile.in
+--- mc-4.6.1-orig/src/Makefile.in 2005-07-23 23:53:15.000000000 +0700
++++ mc-4.6.1/src/Makefile.in 2005-07-31 01:47:59.000000000 +0700
+@@ -84,12 +84,12 @@
+ mouse.c mouse.h myslang.h option.c option.h panel.h panelize.c \
+ panelize.h poptalloca.h popt.c poptconfig.c popt.h popthelp.c \
+ poptint.h poptparse.c profile.c profile.h regex.c rxvt.c \
+- screen.c setup.c setup.h slint.c subshell.c subshell.h \
++ screen.c screen.h setup.c setup.h slint.c subshell.c subshell.h \
+ textconf.c textconf.h tree.c tree.h treestore.c treestore.h \
+ tty.h user.c user.h util.c util.h utilunix.c view.c view.h \
+ vfsdummy.h widget.c widget.h win.c win.h wtools.c wtools.h \
+ x11conn.h x11conn.c charsets.c charsets.h selcodepage.c \
+- selcodepage.h
++ selcodepage.h recode.c recode.h
+ am__objects_1 = achown.$(OBJEXT) background.$(OBJEXT) boxes.$(OBJEXT) \
+ chmod.$(OBJEXT) chown.$(OBJEXT) cmd.$(OBJEXT) color.$(OBJEXT) \
+ command.$(OBJEXT) complete.$(OBJEXT) cons.handler.$(OBJEXT) \
+@@ -109,7 +109,8 @@
+ util.$(OBJEXT) utilunix.$(OBJEXT) view.$(OBJEXT) \
+ widget.$(OBJEXT) win.$(OBJEXT) wtools.$(OBJEXT) \
+ x11conn.$(OBJEXT)
+-am__objects_2 = charsets.$(OBJEXT) selcodepage.$(OBJEXT)
++am__objects_2 = charsets.$(OBJEXT) selcodepage.$(OBJEXT) recode.$(OBJEXT)
++
+ @CHARSET_FALSE at am_mc_OBJECTS = $(am__objects_1)
+ @CHARSET_TRUE at am_mc_OBJECTS = $(am__objects_1) $(am__objects_2)
+ mc_OBJECTS = $(am_mc_OBJECTS)
+@@ -342,7 +343,8 @@
+ mc_LDADD = $(EDITLIB) $(SLANGLIB) $(VFSLIB) \
+ $(INTLLIBS) $(GLIB_LIBS) $(MCLIBS) $(LIBICONV)
+
+-CHARSET_SRC = charsets.c charsets.h selcodepage.c selcodepage.h
++CHARSET_SRC = charsets.c charsets.h selcodepage.c selcodepage.h \
++ recode.c recode.h
+ SRCS = achown.c achown.h background.c background.h boxes.c boxes.h \
+ chmod.c chmod.h chown.c chown.h cmd.c cmd.h color.c color.h \
+ command.c command.h complete.c complete.h cons.handler.c \
+@@ -356,8 +358,8 @@
+ menu.c menu.h mountlist.c mountlist.h mouse.c mouse.h myslang.h \
+ option.c option.h panel.h panelize.c panelize.h poptalloca.h \
+ popt.c poptconfig.c popt.h popthelp.c poptint.h poptparse.c \
+- profile.c profile.h regex.c rxvt.c screen.c setup.c setup.h \
+- slint.c subshell.c subshell.h textconf.c textconf.h \
++ profile.c profile.h regex.c rxvt.c screen.c screen.h setup.c \
++ setup.h slint.c subshell.c subshell.h textconf.c textconf.h \
+ tree.c tree.h treestore.c treestore.h tty.h user.c user.h \
+ util.c util.h utilunix.c view.c view.h vfsdummy.h widget.c \
+ widget.h win.c win.h wtools.c wtools.h \
+diff -urN mc-4.6.1-orig/src/panel.h mc-4.6.1/src/panel.h
+--- mc-4.6.1-orig/src/panel.h 2004-08-29 23:55:51.000000000 +0700
++++ mc-4.6.1/src/panel.h 2005-07-31 00:12:04.000000000 +0700
+@@ -71,6 +71,19 @@
+
+ int searching;
+ char search_buffer [256];
++
++#ifdef HAVE_CHARSET
++ int src_codepage;
++ unsigned char tr_table[256], tr_table_input[256];
++#endif
++
++#ifdef USE_VFS
++ #ifdef HAVE_CHARSET
++ int ret_codepage;
++ #endif
++ int is_return;
++ char retdir[MC_MAXPATHLEN];
++#endif
+ } WPanel;
+
+ WPanel *panel_new (const char *panel_name);
+@@ -96,6 +109,7 @@
+ extern WPanel *left_panel;
+ extern WPanel *right_panel;
+ extern WPanel *current_panel;
++extern WPanel* ret_panel;
+
+ void try_to_select (WPanel *panel, const char *name);
+
+diff -urN mc-4.6.1-orig/src/recode.c mc-4.6.1/src/recode.c
+--- mc-4.6.1-orig/src/recode.c 1970-01-01 07:00:00.000000000 +0700
++++ mc-4.6.1/src/recode.c 2005-07-31 02:39:42.000000000 +0700
+@@ -0,0 +1,153 @@
++#include "recode.h"
++#ifdef HAVE_CHARSET
++
++char *lang;
++char lang_codepage_name[256];
++int lang_codepage;
++
++int ftp_codepage=-1;
++
++// recode buffer for displaying file names
++unsigned char recode_buf[MC_MAXPATHLEN];
++
++WPanel* recode_panel;
++
++//--- get codepage from $LANG
++void get_locale_codepage() {
++ char* a;
++ char* b;
++ int len;
++
++ lang=getenv("LANG");
++ if(!lang) {
++ strncpy(lang_codepage_name,OTHER_8BIT, sizeof(OTHER_8BIT));
++ lang_codepage=-1;
++ return;
++ }
++
++ a=strchr(lang,'.');
++ if(!a) {
++ strncpy(lang_codepage_name,OTHER_8BIT, sizeof(OTHER_8BIT));
++ lang_codepage=-1;
++ return;
++ }
++ ++a;
++
++ b=strchr(lang,'@');
++ if(!b) b=lang+strlen(lang);
++
++ len=b-a;
++ if(len>=sizeof(lang_codepage_name)) len=sizeof(lang_codepage_name)-1;
++
++ memcpy(lang_codepage_name,a, len);
++ lang_codepage_name[len]='\0';
++ lang_codepage=get_codepage_index(lang_codepage_name);
++ if(lang_codepage<0) strncpy(lang_codepage_name,OTHER_8BIT, sizeof(OTHER_8BIT));
++}
++
++//--- reset translation table
++void my_reset_tt(unsigned char *table,int n) {
++ int i;
++ for(i=0;i<n;i++) table[i]=i;
++}
++
++//--- reset panel codepage
++void panel_reset_codepage(WPanel *p) {
++ p->src_codepage=-1;
++ my_reset_tt(p->tr_table,256);
++ my_reset_tt(p->tr_table_input,256);
++}
++
++//--- Initialize translation table
++// i need this function because init_translation_table from
++// charsets.c fills only fixed translation tables conv_displ and conv_input
++//---
++char* my_init_tt( int from, int to, unsigned char *table) {
++ int i;
++ iconv_t cd;
++ char *cpfrom, *cpto;
++
++ if(from < 0 || to < 0 || from == to) {
++ my_reset_tt(table,256);
++ return NULL;
++ }
++ my_reset_tt(table,128);
++ cpfrom=codepages[from ].id;
++ cpto=codepages[to].id;
++ cd=iconv_open(cpfrom, cpto);
++ if(cd==(iconv_t)-1) {
++ snprintf(errbuf, 255, _("Cannot translate from %s to %s"), cpfrom, cpto);
++ return errbuf;
++ }
++ for(i=128; i<=255; ++i) table[i] = translate_character(cd, i);
++ iconv_close(cd);
++ return NULL;
++}
++
++//--- Translate string from one codepage to another
++void my_translate_string(unsigned char *s1,int l1, unsigned char *s2, unsigned char *table) {
++ int i=0;
++ if(!s1) return;
++ while(i<l1) {
++ s2[i]=table[s1[i]];
++ i++;
++ }
++ s2[i]=0;
++}
++
++//--- Recode filename and concat in to dir
++char* concat_dir_and_recoded_fname(const char *dir, const char *fname, FileOpContext *ctx) {
++ int i = strlen (dir);
++
++ my_translate_string((unsigned char*)fname,strlen(fname),ctx->recode_buf,ctx->tr_table);
++ if (dir [i-1] == PATH_SEP)
++ return g_strconcat (dir, ctx->recode_buf, NULL);
++ else
++ return g_strconcat (dir, PATH_SEP_STR, ctx->recode_buf, NULL);
++ return 0;
++}
++
++
++//--- Internal handler for "Panel codepage"
++static void fnc_cmd(WPanel *p) {
++ char *errmsg;
++ if(display_codepage > 0) {
++ p->src_codepage=select_charset(p->src_codepage, 0, _(" Choose panel codepage "));
++ errmsg=my_init_tt(display_codepage,p->src_codepage,p->tr_table);
++ if(errmsg) {
++ panel_reset_codepage(p);
++ message( 1, MSG_ERROR, "%s", errmsg);
++ }
++ errmsg=my_init_tt(p->src_codepage,display_codepage,p->tr_table_input);
++ if (errmsg) {
++ panel_reset_codepage(p);
++ message( 1, MSG_ERROR, "%s", errmsg );
++ }
++ paint_dir(p);
++ show_dir(p);
++ display_mini_info(p);
++ }
++ else {
++ message( 1, _(" Warning "),
++ _("To use this feature select your codepage in\n"
++ "Setup / Display Bits dialog!\n"
++ "Do not forget to save options." ));
++ }
++}
++
++//--- Menu handlers for "Panel codepage" for left and right panel menu
++
++void fnc_l_cmd() {
++ fnc_cmd(left_panel);
++}
++
++void fnc_r_cmd() {
++ fnc_cmd(right_panel);
++}
++
++//--- screen handler for "Panel codepage"
++void fnc_c_cmd(WPanel *panel) {
++ fnc_cmd(current_panel);
++}
++
++#endif //HAVE_CHARSET
+diff -urN mc-4.6.1-orig/src/recode.h mc-4.6.1/src/recode.h
+--- mc-4.6.1-orig/src/recode.h 1970-01-01 07:00:00.000000000 +0700
++++ mc-4.6.1/src/recode.h 2005-07-31 02:39:13.000000000 +0700
+@@ -0,0 +1,48 @@
++#ifndef __RECODE_H__
++#define __RECODE_H__
++#include <config.h>
++#ifdef HAVE_CHARSET
++
++#include <stdio.h>
++#include <locale.h>
++#include <iconv.h>
++
++#include "global.h"
++#include "wtools.h"
++#include "panel.h"
++#include "charsets.h"
++#include "selcodepage.h"
++#include "screen.h"
++#include "main.h"
++#include "fileopctx.h"
++
++extern char *lang;
++extern char lang_codepage_name[256];
++extern int lang_codepage;
++
++extern int ftp_codepage;
++
++// recode buffer for displaying file names
++extern unsigned char recode_buf[MC_MAXPATHLEN];
++extern WPanel* recode_panel;
++
++//--- get codepage from $LANG
++extern void get_locale_codepage();
++
++//--- reset translation table
++extern void my_reset_tt(unsigned char *table,int n);
++//--- reset panel codepage
++extern void panel_reset_codepage(WPanel *p);
++//--- Initialize translation table
++extern char* my_init_tt( int from, int to, unsigned char *table);
++//--- Translate string from one codepage to another
++extern void my_translate_string(unsigned char *s1,int l1, unsigned char *s2, unsigned char *table);
++//--- Recode filename and concat in to dir
++extern char* concat_dir_and_recoded_fname(const char *dir, const char *fname, FileOpContext *ctx);
++//--- handlers for "Panel codepage"
++extern void fnc_l_cmd();
++extern void fnc_r_cmd();
++extern void fnc_c_cmd(WPanel *panel);
++
++#endif // HAVE_CHARSET
++#endif //__RECODE_H__
+diff -urN mc-4.6.1-orig/src/screen.c mc-4.6.1/src/screen.c
+--- mc-4.6.1-orig/src/screen.c 2006-06-13 00:21:48.000000000 +0700
++++ mc-4.6.1/src/screen.c 2006-06-13 00:42:17.000000000 +0700
+@@ -48,6 +48,10 @@
+ #define WANT_WIDGETS
+ #include "main.h" /* the_menubar */
+
++#ifdef HAVE_CHARSET
++#include "recode.h"
++#endif
++
+ #define ELEMENTS(arr) ( sizeof(arr) / sizeof((arr)[0]) )
+
+ #define J_LEFT 1
+@@ -170,6 +174,7 @@
+ string_file_name (file_entry *fe, int len)
+ {
+ size_t i;
++ char* filename;
+ #ifdef UTF8
+ static char buffer [BUF_SMALL * 4];
+ mbstate_t s;
+@@ -181,6 +186,13 @@
+ static char buffer [BUF_SMALL];
+ #endif
+
++#ifdef HAVE_CHARSET
++ my_translate_string(fe->fname,fe->fnamelen, recode_buf, recode_panel->tr_table);
++ filename= recode_buf;
++#else
++ filename=fe->fname;
++#endif
++
+ #ifdef UTF8
+ if (SLsmg_Is_Unicode)
+ for (i = 0; i < sizeof (buffer) - 1; i++) {
+@@ -212,7 +224,7 @@
+ for (i = 0; i < sizeof(buffer) - 1; i++) {
+ char c;
+
+- c = fe->fname[i];
++ c= filename[i];
+
+ if (!c)
+ break;
+@@ -698,6 +710,10 @@
+ int second_column = 0;
+ int width, offset;
+
++#ifdef HAVE_CHARSET
++ recode_panel=panel;
++#endif
++
+ offset = 0;
+ if (!isstatus && panel->split){
+
+@@ -737,7 +753,7 @@
+ }
+ }
+
+-static void
++void
+ display_mini_info (WPanel *panel)
+ {
+ if (!show_mini_info)
+@@ -798,7 +814,7 @@
+ return;
+ }
+
+-static void
++void
+ paint_dir (WPanel *panel)
+ {
+ int i;
+@@ -836,7 +852,7 @@
+ #endif /* !HAVE_SLANG */
+ }
+
+-static void
++void
+ show_dir (WPanel *panel)
+ {
+ char *tmp;
+@@ -864,8 +880,15 @@
+ tmp = g_malloc (panel->widget.cols + 1);
+ tmp[panel->widget.cols] = '\0';
+
++#ifdef HAVE_CHARSET
++ my_translate_string(panel->cwd,strlen(panel->cwd),recode_buf, panel->tr_table);
++ trim (strip_home_and_password (recode_buf), tmp,
++ min (max (panel->widget.cols - 7, 0), panel->widget.cols) );
++#else
+ trim (strip_home_and_password (panel->cwd), tmp,
+ min (max (panel->widget.cols - 7, 0), panel->widget.cols) );
++#endif
++
+ addstr (tmp);
+ g_free (tmp);
+ widget_move (&panel->widget, 0, 1);
+@@ -1077,6 +1100,17 @@
+ mc_get_current_wd (panel->cwd, sizeof (panel->cwd) - 2);
+ strcpy (panel->lwd, ".");
+
++#ifdef HAVE_CHARSET
++ panel_reset_codepage(panel);
++#endif
++
++#ifdef USE_VFS
++ panel->is_return=0;
++ #ifdef HAVE_CHARSET
++ panel->ret_codepage=-1;
++ #endif
++#endif
++
+ panel->hist_name = g_strconcat ("Dir Hist ", panel_name, (char *) NULL);
+ panel->dir_history = history_get (panel->hist_name);
+ directory_history_add (panel, panel->cwd);
+@@ -2234,7 +2268,12 @@
+ { XCTRL('n'), move_down }, /* C-n like emacs */
+ { XCTRL('s'), start_search }, /* C-s like emacs */
+ { ALT('s'), start_search }, /* M-s not like emacs */
++#ifndef HAVE_CHARSET
+ { XCTRL('t'), mark_file },
++#endif
++#ifdef HAVE_CHARSET
++ { XCTRL('t'), mark_file }, /* was 'fnc_c_cmd' */
++#endif
+ { ALT('o'), chdir_other_panel },
+ { ALT('l'), chdir_to_readlink },
+ { ALT('H'), directory_history_list },
+diff -urN mc-4.6.1-orig/src/screen.h mc-4.6.1/src/screen.h
+--- mc-4.6.1-orig/src/screen.h 1970-01-01 07:00:00.000000000 +0700
++++ mc-4.6.1/src/screen.h 2005-07-31 00:26:59.000000000 +0700
+@@ -0,0 +1,11 @@
++#ifndef __SCREEN_H__
++#define __SCREEN_H__
++#include <config.h>
++
++#include "global.h"
++
++extern void paint_dir (WPanel *panel);
++extern void display_mini_info (WPanel *panel);
++extern void show_dir(WPanel *panel);
++#endif //__SCREEN_H__
++
+diff -urN mc-4.6.1-orig/src/selcodepage.c mc-4.6.1/src/selcodepage.c
+--- mc-4.6.1-orig/src/selcodepage.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/src/selcodepage.c 2005-07-31 00:31:43.000000000 +0700
+@@ -44,14 +44,16 @@
+ }
+
+ int
+-select_charset (int current_charset, int seldisplay)
++select_charset (int current_charset, int seldisplay, const char *title)
+ {
++ int new_charset;
++
+ int i, menu_lines = n_codepages + 1;
+ char buffer[255];
+
+ /* Create listbox */
+ Listbox *listbox = create_listbox_window (ENTRY_LEN + 2, menu_lines,
+- _(" Choose input codepage "),
++ title,
+ "[Codepages Translation]");
+
+ if (!seldisplay)
+@@ -81,20 +83,26 @@
+
+ i = run_listbox (listbox);
+
+- return (seldisplay) ? ((i >= n_codepages) ? -1 : i)
+- : (i - 1);
++ if(i==-1)
++ i = (seldisplay)
++ ? ((current_charset < 0) ? n_codepages : current_charset)
++ : (current_charset + 1);
++
++ new_charset =(seldisplay) ? ( (i >= n_codepages) ? -1 : i ) : ( i-1 );
++ new_charset = (new_charset==-2) ? current_charset:new_charset;
++ return new_charset;
+ }
+
+ /* Helper functions for codepages support */
+
+
+ int
+-do_select_codepage (void)
++do_select_codepage (const char *title)
+ {
+ const char *errmsg;
+
+ if (display_codepage > 0) {
+- source_codepage = select_charset (source_codepage, 0);
++ source_codepage = select_charset (source_codepage, 0, title);
+ errmsg =
+ init_translation_table (source_codepage, display_codepage);
+ if (errmsg) {
+diff -urN mc-4.6.1-orig/src/selcodepage.h mc-4.6.1/src/selcodepage.h
+--- mc-4.6.1-orig/src/selcodepage.h 2002-10-31 05:16:16.000000000 +0600
++++ mc-4.6.1/src/selcodepage.h 2005-07-31 00:31:33.000000000 +0700
+@@ -2,8 +2,8 @@
+ #ifndef __SELCODEPAGE_H__
+ #define __SELCODEPAGE_H__
+
+-int select_charset (int current_charset, int seldisplay);
+-int do_select_codepage (void);
++int select_charset (int current_charset, int seldisplay, const char *title);
++int do_select_codepage (const char *title);
+
+ #endif /* __SELCODEPAGE_H__ */
+ #endif /* HAVE_CHARSET */
+diff -urN mc-4.6.1-orig/src/setup.c mc-4.6.1/src/setup.c
+--- mc-4.6.1-orig/src/setup.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/src/setup.c 2005-07-31 00:36:33.000000000 +0700
+@@ -47,6 +47,8 @@
+
+ #ifdef HAVE_CHARSET
+ #include "charsets.h"
++#include"recode.h"
++#include "wtools.h"
+ #endif
+
+ #ifdef USE_NETCODE
+@@ -255,6 +257,11 @@
+ g_snprintf (buffer, sizeof (buffer), "%d", panel->user_mini_status);
+ save_string (section, "user_mini_status", buffer,
+ profile_name);
++
++#ifdef HAVE_CHARSET
++ // save panel codepage
++ save_string(section, "panel_display_codepage", get_codepage_id(panel->src_codepage), profile_name);
++#endif
+ }
+
+ void
+@@ -352,6 +359,7 @@
+ #ifdef HAVE_CHARSET
+ save_string( "Misc", "display_codepage",
+ get_codepage_id( display_codepage ), profile_name );
++ save_string( "Misc", "ftp_codepage", get_codepage_id(ftp_codepage), profile_name);
+ #endif /* HAVE_CHARSET */
+
+ g_free (profile);
+@@ -401,6 +409,31 @@
+ panel->user_mini_status =
+ load_int (section, "user_mini_status", 0);
+
++#ifdef HAVE_CHARSET
++//--- Loading panel codepage
++ panel_reset_codepage(panel);
++ if(load_codepages_list()>0) {
++ char cpname[128];
++ char *errmsg;
++
++
++ if(display_codepage>=0) {
++ load_string(section, "panel_display_codepage", "", cpname, sizeof(cpname));
++ if(cpname[0]!='\0') panel->src_codepage = get_codepage_index(cpname);
++ }
++
++ errmsg=my_init_tt(display_codepage,panel->src_codepage,panel->tr_table);
++ if(errmsg) {
++ panel_reset_codepage(panel);
++ message( 1, MSG_ERROR, "%s", errmsg );
++ }
++ errmsg=my_init_tt(panel->src_codepage,display_codepage,panel->tr_table_input);
++ if(errmsg) {
++ panel_reset_codepage(panel);
++ message( 1, MSG_ERROR, "%s", errmsg );
++ }
++ }
++#endif
+ }
+
+ static void
+@@ -543,12 +576,18 @@
+ #endif /* USE_VFS && USE_NETCODE */
+
+ #ifdef HAVE_CHARSET
+- if ( load_codepages_list() > 0 ) {
+- char cpname[128];
+- load_string( "Misc", "display_codepage", "",
+- cpname, sizeof(cpname) );
+- if ( cpname[0] != '\0' )
+- display_codepage = get_codepage_index( cpname );
++ if(load_codepages_list() > 0) {
++ char cpname[128];
++ get_locale_codepage();
++ load_string("Misc", "display_codepage", "", cpname, sizeof(cpname));
++ if(cpname[0] != '\0') display_codepage=get_codepage_index(cpname);
++ else display_codepage=lang_codepage;
++
++ ftp_codepage=-1;
++ if(display_codepage >= 0) {
++ load_string( "Misc", "ftp_codepage", "", cpname, sizeof(cpname));
++ if(cpname[0] != '\0') ftp_codepage=get_codepage_index(cpname);
++ }
+ }
+
+ init_translation_table( source_codepage, display_codepage );
+diff -urN mc-4.6.1-orig/src/view.c mc-4.6.1/src/view.c
+--- mc-4.6.1-orig/src/view.c 2005-05-27 21:19:18.000000000 +0700
++++ mc-4.6.1/src/view.c 2005-07-31 00:37:29.000000000 +0700
+@@ -2534,7 +2534,7 @@
+
+ #ifdef HAVE_CHARSET
+ case XCTRL ('t'):
+- do_select_codepage ();
++ do_select_codepage (_(" Choose codepage "));
+ view->dirty++;
+ view_update (view, TRUE);
+ return MSG_HANDLED;
+diff -urN mc-4.6.1-orig/vfs/vfs.c mc-4.6.1/vfs/vfs.c
+--- mc-4.6.1-orig/vfs/vfs.c 2005-05-27 21:19:19.000000000 +0700
++++ mc-4.6.1/vfs/vfs.c 2005-07-31 00:42:45.000000000 +0700
+@@ -49,6 +49,11 @@
+ #include "smbfs.h"
+ #include "local.h"
+
++#include "../src/panel.h"
++#ifdef HAVE_CHARSET
++#include "../src/recode.h"
++#endif
++
+ /* They keep track of the current directory */
+ static struct vfs_class *current_vfs;
+ static char *current_dir;
+@@ -681,8 +686,66 @@
+ vfsid old_vfsid;
+ int result;
+
++#ifdef HAVE_CHARSET
++ char* errmsg;
++#endif
++ WPanel* p=ret_panel;
++
+ new_dir = vfs_canon (path);
+ new_vfs = vfs_get_class (new_dir);
++ old_vfsid = vfs_getid (current_vfs, current_dir);
++ old_vfs = current_vfs;
++
++ if(p) {
++
++ // Change from localfs to ftpfs
++ ret_panel=NULL;
++ if( (strcmp(old_vfs->name,"localfs")==0) &&
++ (strcmp(new_vfs->name,"ftpfs")==0)){
++ p->is_return=1;
++ strncpy(p->retdir,current_dir, MC_MAXPATHLEN);
++#ifdef HAVE_CHARSET
++ p->ret_codepage=p->src_codepage;
++ p->src_codepage=ftp_codepage;
++ errmsg=my_init_tt(display_codepage,p->src_codepage,p->tr_table);
++ if(errmsg) {
++ panel_reset_codepage(p);
++ message( 1, MSG_ERROR, "%s", errmsg );
++ }
++ errmsg=my_init_tt(p->src_codepage,display_codepage,p->tr_table_input);
++ if(errmsg) {
++ panel_reset_codepage(p);
++ message( 1, MSG_ERROR, "%s", errmsg );
++ }
++#endif
++ }
++
++ // Change from ftpfs to localfs
++ if( (strcmp(old_vfs->name,"ftpfs")==0) &&
++ (strcmp(new_vfs->name,"localfs")==0) &&
++ p->is_return){
++ p->is_return=0;
++ g_free(new_dir);
++ new_dir = vfs_canon (p->retdir);
++ new_vfs = vfs_get_class (new_dir);
++#ifdef HAVE_CHARSET
++ p->src_codepage=p->ret_codepage;
++ errmsg=my_init_tt(display_codepage,p->src_codepage,p->tr_table);
++ if(errmsg) {
++ panel_reset_codepage(p);
++ message( 1, MSG_ERROR, "%s", errmsg );
++ }
++ errmsg=my_init_tt(p->src_codepage,display_codepage,p->tr_table_input);
++ if(errmsg) {
++ panel_reset_codepage(p);
++ message( 1, MSG_ERROR, "%s", errmsg );
++ }
++#endif
++ }
++ }
++
++
++
+ if (!new_vfs->chdir) {
+ g_free (new_dir);
+ return -1;
+@@ -696,9 +759,6 @@
+ return -1;
+ }
+
+- old_vfsid = vfs_getid (current_vfs, current_dir);
+- old_vfs = current_vfs;
+-
+ /* Actually change directory */
+ g_free (current_dir);
+ current_dir = new_dir;
Added: trunk/debian/rocks
===================================================================
--- trunk/debian/rocks (rev 0)
+++ trunk/debian/rocks 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,45 @@
+# custom tweaks to cbs' debian/rules
+
+DEB_CONFIGURE_EXTRA_FLAGS := --with-glib2 --without-ext2undel \
+ --enable-charset --with-samba --with-screen=slang
+
+deb-extra-clean::
+ rm -f config.sub config.guess
+ rm -f po/ru.gmo
+
+deb-binary-hook-mc:
+ cp debian/extra/icon.xpm debian/mc/usr/share/pixmaps/mc.xpm
+
+ cp debian/extra/mcview-debian debian/mc/usr/bin/
+ cp debian/extra/mcedit-debian debian/mc/usr/bin/
+
+ chmod a+x debian/mc/usr/share/mc/edit.spell.rc
+ chmod a+x debian/mc/usr/share/mc/edit.indent.rc
+ chmod a-x debian/mc/usr/share/mc/bin/*
+
+ -mv debian/mc/usr/share/mc/mc.ext debian/mc/etc/mc/mc.ext
+ -mv debian/mc/usr/share/mc/mc.menu debian/mc/etc/mc/mc.menu
+ -mv debian/mc/usr/share/mc/mc.lib debian/mc/etc/mc/mc.lib
+
+ # convert docs to UTF8
+ cd debian/mc/usr/share/mc && \
+ iconv -f ISO-8859-1 -t UTF-8 mc.hint > tmp && mv tmp mc.hint && \
+ iconv -f ISO-8859-1 -t UTF-8 mc.hlp > tmp && mv tmp mc.hlp && \
+ iconv -f ISO-8859-1 -t UTF-8 mc.hint.es > tmp && mv tmp mc.hint.es && \
+ iconv -f ISO-8859-1 -t UTF-8 mc.hlp.es > tmp && mv tmp mc.hlp.es && \
+ iconv -f ISO-8859-1 -t UTF-8 mc.hint.it > tmp && mv tmp mc.hint.it && \
+ iconv -f ISO-8859-1 -t UTF-8 mc.hlp.it > tmp && mv tmp mc.hlp.it && \
+ iconv -f ISO-8859-1 -t UTF-8 mc.hint.nl > tmp && mv tmp mc.hint.nl && \
+ iconv -f ISO-8859-2 -t UTF-8 mc.hint.cs > tmp && mv tmp mc.hint.cs && \
+ iconv -f ISO-8859-2 -t UTF-8 mc.hint.hu > tmp && mv tmp mc.hint.hu && \
+ iconv -f ISO-8859-2 -t UTF-8 mc.hlp.hu > tmp && mv tmp mc.hlp.hu && \
+ iconv -f ISO-8859-2 -t UTF-8 mc.hint.pl > tmp && mv tmp mc.hint.pl && \
+ iconv -f ISO-8859-2 -t UTF-8 mc.hlp.pl > tmp && mv tmp mc.hlp.pl && \
+ iconv -f ISO-8859-5 -t UTF-8 mc.hint.sr > tmp && mv tmp mc.hint.sr && \
+ iconv -f ISO-8859-5 -t UTF-8 mc.hlp.sr > tmp && mv tmp mc.hlp.sr && \
+ iconv -f ISO-8859-5 -t UTF-8 mc.menu.sr > tmp && mv tmp mc.menu.sr && \
+ iconv -f koi8-r -t UTF-8 mc.hint.ru > tmp && mv tmp mc.hint.ru && \
+ iconv -f koi8-r -t UTF-8 mc.hlp.ru > tmp && mv tmp mc.hlp.ru && \
+ iconv -f koi8-u -t UTF-8 mc.hint.uk > tmp && mv tmp mc.hint.uk && \
+ iconv -f big5 -t UTF-8 mc.hint.zh > tmp && mv tmp mc.hint.zh
+
Added: trunk/debian/rules
===================================================================
--- trunk/debian/rules (rev 0)
+++ trunk/debian/rules 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,551 @@
+#!/usr/bin/make -f
+# -*- mode: makefile; coding: utf-8 -*-
+# Colin's Build System
+# Copyright © 2002 Colin Walters <walters at debian.org>
+# $Id: rules,v 1.3 2005/10/16 15:03:43 ldrolez Exp $
+
+####################################
+# DO NOT MODIFY THIS FILE DIRECTLY #
+####################################
+
+### Introduction to Colin's Build System #############################
+# This file is shared between all the packages which use Colin's Build
+# System. The idea is that this file contains sane defaults, and
+# stuff specific to a package should go into the debian/rocks Makefile
+# fragment. There generic hooks where you can override and add
+# functionality for a specific package.
+
+# The big motivating factor for CBS was originally that more and more
+# programs today are created using GNU configure scripts and GNU
+# automake, and as such they are all very similar to configure and
+# build. CBS takes advantage of this by doing stuff like looking for
+# an executable file named "configure"; if it exists, CBS tries
+# treating it like a GNU configure script, and passes it sane
+# arguments (like --prefix=/usr). This will work for like 90% of the
+# cases out there (including at least all my packages). But if it
+# doesn't work, no problem; you can customize or just completely
+# override it the debian/rocks file. For example, suppose that you
+# need to pass "--enable-foo" to the configure script. In that case,
+# all you need to do is create a file named debian/rocks, which
+# contains:
+
+# DEB_CONFIGURE_EXTRA_FLAGS := --enable-foo
+
+# And that's it! Everything else happens automagically. However,
+# suppose that your "configure" script isn't made by autoconf, and
+# instead expects the user to interactively configure the program
+# (e.g. Perl). In that case, you can just override the
+# "deb-common-configure" rule, by putting something like the following
+# in your debian/rocks:
+
+# deb-common-configure:
+# ./configure --blah --blargh < debian/answers
+
+# All of the rules which are overridable are listed below, up to the
+# line "-include debian/rocks". There are also a large group of
+# variables you may customize to affect a default rule, instead of of
+# just overriding the rule completely.
+
+# CBS also helps you keep up-to-date with the latest policy; when
+# there is a new DEB_BUILD_OPTIONS entry, or they change semantics (as
+# in the latest "debug" => "noopt" change), you shouldn't have to
+# change anything in your packages (besides rebuilding them with the
+# latest CBS version); CBS will just handle it.
+
+### CBS and Debhelper ################################################
+# Colin's Build System currently relies heavily on debhelper version
+# 4, so you must have a Build-Depends: debhelper (>= 4.0.0).
+
+### Single vs. Multi Binary packages #################################
+# If you have a single binary package, CBS tries to use the upstream
+# Makefile to install everything into debian/packagename, so it will
+# all appear in the binary package. To remove files, move them
+# around, just override the deb-binary-hook-<packagename> target in
+# the debian/rocks file, like:
+
+# deb-binary-hook-mypackage:
+# mv debian/mypackage/usr/sbin/myprogram debian/mypackage/usr/bin/myprogram
+# rm debian/mypackage/usr/share/doc/mypackage/INSTALL
+
+# If you have a multi-binary package, CBS (by default) uses the
+# upstream Makefile to install everything in debian/tmp. After this,
+# the recommended method is to use dh_install to copy these files into
+# the appropriate package. To do this, just create
+# "packagename.install" files; see the dh_install man page.
+
+### Common Problems ##################################################
+
+# Are you having problems with your package not building with the
+# default deb-common-build rule? This could be because of CFLAGS
+# issues. If it doesn't work, then your upstream's build system is
+# broken. You should be able to set CFLAGS to contain the
+# optimization and debugging settings you want, and this shouldn't
+# frob any -I or other internal arguments the upstream build system
+# needs. One way to fix this is to have upstream fix their Makefile
+# to do something like:
+
+# # This is the default set of optimization and debugging flags, which
+# # can be overridden with a CFLAGS passed to the make invocation.
+# CFLAGS = -g -O2
+# # Now add specific stuff we need.
+# override CFLAGS += -I. -I.. -ffrob-stuff
+
+# On a related note, if you want to have a nice, easy-to-maintain,
+# working build system, try to convince your upstream to switch to
+# automake, autoconf, and libtool.
+
+### The latest version of CBS ########################################
+# The canonical source for Colin's Build System is:
+# http://cvs.verbum.org/debian/rules
+
+# Note that you can easily update your current version by running:
+# debian/rules update
+
+# Are you keeping your Debian packages in CVS? In that case, it would
+# probably be a good idea to disable keyword expansion for this file,
+# so debian/rules update won't get confused. Run:
+# cvs admin -ko debian/rules
+
+### Hooks which are overridable ######################################
+
+## This target is called before almost anything else; in particular,
+## it is called even before patches are applied. This is a good place
+## to do stuff like generate a debian/control from debian/control.xml,
+## etc.
+deb-pre-build:
+ if [ -x $(CURDIR)/autogen.sh ]; then \
+ $(CURDIR)/autogen.sh || echo -n "Failed to run autogen.sh script"; \
+ fi
+
+## This target is called after patches are applied, but before
+## configure scripts or anything else are run. This is a good place
+## to do wacky stuff like:
+## 'find . -name 'Makefile.in' -exec touch {} \;'.
+deb-post-patches:
+ # Nothing to do by default.
+
+## This target is called after patches are applied (i.e. after
+## deb-post-patches). It is, as its name implies, a good place to run
+## GNU configure scripts or the like.
+deb-common-configure:
+ if [ -x ./configure ]; then $(DEB_CONFIGURE_INVOKE) --prefix=$(DEB_CONFIGURE_PREFIX) --mandir=$(DEB_CONFIGURE_MANDIR) --infodir=$(DEB_CONFIGURE_INFODIR) --sysconfdir=$(DEB_CONFIGURE_SYSCONFDIR) --localstatedir=$(DEB_CONFIGURE_LOCALSTATEDIR) --libexecdir=$(DEB_CONFIGURE_LIBEXECDIR) --disable-maintainer-mode $(DEB_CONFIGURE_EXTRA_FLAGS) $(DEB_USER_CONFIGURE_FLAGS); fi
+
+## This target is for configuring a specific package. It is called
+## once for each package.
+deb-configure-%:
+ # Nothing to do by default.
+
+## This is an "extra" rule, where you may prefix arbitrary commands to
+## the general build, but not override the default. It is called
+## before deb-common-build.
+deb-extra-pre-common-build::
+ # Nothing to do by default.
+
+## This target is called after common configuration (but not
+## necessarily after package-specific configuration). Generally, this
+## is a good place to invoke make and the like. Note that if you do
+## package-specific configuration, you should likely override this
+## rule to do nothing, and then do package-specific building in
+## deb-build-<package>.
+deb-common-build:
+ if [ -f Makefile ]; then \
+ $(DEB_MAKE_ENVVARS) $(MAKE) CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" $(DEB_BUILD_MAKE_TARGET); \
+ fi
+
+## This is an "extra" rule, where you may add arbitrary commands to
+## the general build, but not override the default. It is called
+## after deb-common-build.
+deb-extra-common-build:: deb-common-build
+ # Nothing to do by default.
+
+## This target is called once for each package, after package-specific
+## configuration; it is for doing any building to a specific package.
+deb-build-%:
+ # Nothing to do by default.
+
+## This is an "extra" rule, where you may add arbitrary commands to
+## the package-specific build, but not override the default. It is
+## called after deb-build-<package>.
+deb-extra-build-%: deb-build-%
+ # Nothing to do by default.
+
+## This target is called after pre-build, and before any configuration
+## takes place. It is designed to automatically update
+## config.{sub,guess} files which are used by packages which use GNU
+## autoconf. You should not generally need to override this target.
+## You may need to set DEB_AC_AUX_DIR if upstream used the autoconf
+## macro AC_CONFIG_AUX_DIR.
+deb-autotools-setup:
+ if [ -r /usr/share/misc/config.sub ]; then \
+ if [ -r $(DEB_AC_AUX_DIR)/config.sub -a ! -f $(DEB_AC_AUX_DIR)/config.sub.orig-cbs ]; then \
+ mv $(DEB_AC_AUX_DIR)/config.sub $(DEB_AC_AUX_DIR)/config.sub.orig-cbs; \
+ cp -f /usr/share/misc/config.sub $(DEB_AC_AUX_DIR)/config.sub; \
+ fi; \
+ fi
+ if [ -r /usr/share/misc/config.guess ]; then \
+ if [ -r $(DEB_AC_AUX_DIR)/config.guess -a ! -f $(DEB_AC_AUX_DIR)/config.guess.orig-cbs ]; then \
+ mv $(DEB_AC_AUX_DIR)/config.guess $(DEB_AC_AUX_DIR)/config.guess.orig-cbs; \
+ cp -f /usr/share/misc/config.guess $(DEB_AC_AUX_DIR)/config.guess; \
+ fi; \
+ fi
+
+## This target is called during the clean process; it is designed to
+## undo the effects of deb-autotools-setup, so that you won't get
+## spurious bits in your Debian diff. You should not generally need
+## to override this target.
+deb-autotools-clean:
+ if [ -r $(DEB_AC_AUX_DIR)/config.sub.orig-cbs ]; then \
+ mv $(DEB_AC_AUX_DIR)/config.sub.orig-cbs $(DEB_AC_AUX_DIR)/config.sub; \
+ fi
+ if [ -r $(DEB_AC_AUX_DIR)/config.guess.orig-cbs ]; then \
+ mv $(DEB_AC_AUX_DIR)/config.guess.orig-cbs $(DEB_AC_AUX_DIR)/config.guess; \
+ fi
+
+## This target is called during the cleaning process.
+deb-clean:
+ if [ -f Makefile ]; then $(MAKE) distclean || $(MAKE) clean || true; fi
+ if test -f config.log; then \
+ if grep -i -q 'generated by GNU Autoconf' config.log || grep -i -q 'to aid debugging if configure ' config.log; then \
+ rm -f config.log; \
+ fi; \
+ fi
+ if test -f config.status && grep -i -q 'Generated.*by configure.' config.status; then rm -f config.status; fi
+ if test -f config.cache && grep -i -q 'shell.*script.*caches.*results.*configure' config.cache; then rm -f config.cache; fi
+ rm -f po/it.gmo po/de.gmo
+
+## This is an "extra" rule, where you may add arbitrary commands to
+## the cleaning process, but not override the default.
+deb-extra-clean:: deb-clean
+ # Nothing to do by default.
+
+## This target is called after the common installation step. It
+## should install your package into its destination, e.g. debian/tmp
+## (for single-binary packages, into debian/<packagename>).
+deb-common-install:
+ if [ -f Makefile ]; then \
+ if grep -q DESTDIR Makefile || grep -q -i 'generated.*by.*automake' Makefile; then \
+ $(DEB_MAKE_ENVVARS) $(MAKE) install DESTDIR=$(DEB_DESTDIR); \
+ else \
+ echo "This Makefile doesn't appear to support DESTDIR; you must override $@ in debian/rocks"; \
+ exit 1; \
+ fi; \
+ else \
+ echo "No default install action, you must override $@ in debian/rocks"; \
+ exit 1; \
+ fi
+
+## This is an "extra" rule, where you may add arbitrary commands to
+## the common installation process, but not override the default.
+deb-extra-common-install:: deb-common-install
+ # Nothing to do by default.
+
+## This target is called once for each package, after that package's
+## specific build step.
+deb-install-%:
+ # Nothing to do by default.
+
+## This is an "extra" rule, where you may add arbitrary commands to
+## the installation process for a specific package, but not override
+## the default.
+deb-extra-install-%: deb-install-%
+ # Nothing to do by default.
+
+## This is a sort of "catchall" rule to do post-installation cleanup.
+## It is called by deb-binary-<packagename> after everything should be
+## installed in debian/tmp or debian/<packagename>. This is a good
+## place to do things like move binaries from debian/tmp/usr/bin to
+## debian/tmp/usr/sbin, convert HTML documentation into plain text,
+## etc.
+deb-binary-hook-%:
+ # Nothing to do by default.
+
+## This rule is called after the installation for a package. It does
+## all the work of installing things like changelogs, README.Debian
+## files, etc., and also actually builds the .deb files. It relies
+## heavily on Debhelper, so please see the docs for those commands to
+## understand how it works and to customize things more. You may
+## override this target if you have special needs, but it is not
+## recommended. It is better instead to use one of the provided
+## hooks, or add a hook where necessary and send in a patch for CBS.
+deb-binary-%:
+ dh_installdocs $(DEB_ALL_DOCS) $(DEB_INSTALL_DOCS_$(DEB_CURPACKAGE)) -p$(DEB_CURPACKAGE)
+ dh_installexamples $(DEB_INSTALL_EXAMPLES_$(DEB_CURPACKAGE)) -p$(DEB_CURPACKAGE)
+ dh_installman $(DEB_INSTALL_MANPAGES_$(DEB_CURPACKAGE)) -p$(DEB_CURPACKAGE)
+ dh_installinfo $(DEB_INSTALL_INFO_$(DEB_CURPACKAGE)) -p$(DEB_CURPACKAGE)
+ dh_installmenu -p$(DEB_CURPACKAGE)
+ dh_installcron -p$(DEB_CURPACKAGE)
+ dh_installdebconf -p$(DEB_CURPACKAGE)
+ dh_installpam -p$(DEB_CURPACKAGE)
+ dh_installchangelogs -p$(DEB_CURPACKAGE)
+ dh_install -p$(DEB_CURPACKAGE)
+ $(internal_invoke) deb-binary-hook-$(DEB_CURPACKAGE)
+ $(internal_invoke) deb-strip-$(DEB_CURPACKAGE)
+ dh_link -p$(DEB_CURPACKAGE)
+ dh_compress -p$(DEB_CURPACKAGE) $(foreach entry,$(DEB_COMPRESS_EXCLUDE),$(patsubst %,-X %,$(entry))) \
+ $(foreach entry,$(DEB_COMPRESS_EXCLUDE_$(DEB_CURPACKAGE)),$(patsubst %,-X %,$(entry)))
+ dh_fixperms -p$(DEB_CURPACKAGE) $(foreach entry,$(DEB_FIXPERMS_EXCLUDE),$(patsubst %,-X %,$(entry))) \
+ $(foreach entry,$(DEB_FIXPERMS_EXCLUDE_$(DEB_CURPACKAGE)),$(patsubst %,-X %,$(entry)))
+ $(internal_invoke) deb-makeshlibs-$(DEB_CURPACKAGE)
+ $(internal_invoke) deb-post-fixperms-binary-$(DEB_CURPACKAGE)
+ dh_installdeb -p$(DEB_CURPACKAGE)
+ $(internal_invoke) deb-shlibdeps-$(DEB_CURPACKAGE)
+ dh_gencontrol -p$(DEB_CURPACKAGE)
+ dh_md5sums -p$(DEB_CURPACKAGE)
+ dh_builddeb -p$(DEB_CURPACKAGE)
+
+## This rule is called by the default deb-binary-<package>
+## implementation, after all package data has been installed, and
+## after the deb-binary-hook-<packagename> has been called. As its
+## name implies, it is where you should strip binaries.
+deb-strip-%:
+ dh_strip -p$(DEB_CURPACKAGE)
+
+## This rule is called by the default deb-binary-<package>
+## implementation, *after* permissions have been sanitized. This is
+## an excellent place to make binaries setuid where necessary, for
+## example.
+deb-post-fixperms-binary-%:
+ # Nothing to do by default.
+
+## This rule is called by the default deb-binary-<package>
+## implementation, right before the final Debian package building
+## process. This is where you should generate a "shlibs" file for
+## your package, if necessary.
+deb-makeshlibs-%:
+ dh_makeshlibs -p$(DEB_CURPACKAGE)
+
+## This rule is called by the default deb-binary-<package>
+## implementation, during the final Debian package building
+## process. This is where you should determine
+deb-shlibdeps-%:
+ dh_shlibdeps -p$(DEB_CURPACKAGE) $(if $(DEB_SHLIBDEPS_LIBRARY_$(DEB_CURPACKAGE)),-L $(DEB_SHLIBDEPS_LIBRARY_$(DEB_CURPACKAGE))) $(if $(DEB_SHLIBDEPS_INCLUDE_$(DEB_CURPACKAGE))$(DEB_SHLIBDEPS_INCLUDE),-l $(DEB_SHLIBDEPS_INCLUDE_$(DEB_CURPACKAGE)):$(DEB_SHLIBDEPS_INCLUDE))
+
+-include debian/rocks
+
+### Overridable variables #######################################
+
+# Some common variables; usually you shouldn't have to set these.
+DEB_ARCH_PACKAGES ?= $(shell dh_listpackages -a 2>/dev/null || true)
+DEB_INDEP_PACKAGES ?= $(shell dh_listpackages -i 2>/dev/null || true)
+DEB_ALL_PACKAGES ?= $(DEB_ARCH_PACKAGES) $(DEB_INDEP_PACKAGES)
+DEB_SOURCE_PACKAGE ?= $(strip $(shell egrep '^Source: ' debian/control | cut -f 2 -d ':'))
+
+export DH_COMPAT=4
+
+DEB_VERSION ?= $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ')
+
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
+DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
+
+DEB_C_DEFAULT_OPT ?= -O2
+DEB_CXX_DEFAULT_OPT ?= $(DEB_C_DEFAULT_OPT)
+CFLAGS ?= -Wall -g
+CXXFLAGS ?= -Wall -g
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+ CXXFLAGS += -O0
+else
+ CFLAGS += $(DEB_C_DEFAULT_OPT)
+ CXXFLAGS += $(DEB_CXX_DEFAULT_OPT)
+endif
+
+DEB_PATCHDIRS ?= debian/patches
+DEB_PATCHES ?= $(foreach dir,$(DEB_PATCHDIRS),$(shell echo $(wildcard $(dir)/*.patch) $(wildcard $(dir)/*.diff)))
+
+DEB_CONFIGURE_INVOKE ?= ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)
+DEB_CONFIGURE_PREFIX ?=/usr
+DEB_CONFIGURE_MANDIR ?="\$${prefix}/share/man"
+DEB_CONFIGURE_INFODIR ?="\$${prefix}/share/info"
+DEB_CONFIGURE_SYSCONFDIR ?=/etc
+DEB_CONFIGURE_LOCALSTATEDIR ?=/var
+DEB_CONFIGURE_LIBEXECDIR ?="\$${prefix}/lib/$(DEB_SOURCE_PACKAGE)"
+DEB_CONFIGURE_EXTRA_FLAGS ?=
+DEB_MAKE_ENVVARS ?=
+DEB_BUILD_MAKE_TARGET ?=
+DEB_DIRS ?=
+DEB_CLEAN ?=
+DEB_CLEAN_EXCLUDE ?=
+DEB_ALL_DOCS ?=
+DEB_KEEP_CHANGELOG_NAME ?=
+DEB_ALL_CHANGELOG ?= $(if $(DEB_ISNATIVE),,$(shell if test -r ChangeLog; then echo ChangeLog; fi))
+DEB_FIXPERMS_EXCLUDE ?=
+DEB_COMPRESS_EXCLUDE ?=
+# This variable should be a colon-separated list of paths
+DEB_SHLIBDEPS_INCLUDE ?=
+DEB_EXAMPLES ?=
+DEB_CHANGELOGS ?=
+DEB_AC_AUX_DIR ?=.
+
+DEB_PHONY_RULES ?=
+
+ifeq ($(strip $(shell echo $(DEB_ALL_PACKAGES) | wc -w)),1)
+ DEB_DESTDIR ?= `pwd`/debian/$(strip $(DEB_ALL_PACKAGES))
+else
+ DEB_DESTDIR ?= `pwd`/debian/tmp
+endif
+
+### Other variables ##################################################
+
+DEB_ISNATIVE := $(shell dpkg-parsechangelog | egrep '^Version:' | perl -ne 'print if not /^Version:\s*.*-/;')
+
+### Internal implementation ##########################################
+update:
+ @if [ -f debian/rules ]; then \
+ curversion=`head debian/rules | perl -lne 'if (/Id: rules,v (.*?) /) { print $$1; }'`; \
+ echo "Installed version: " $$curversion; \
+ rm -rf debian/cbs-update ; mkdir -p debian/cbs-update && cd debian/cbs-update; \
+ echo -n "Downloading latest version from :pserver:anoncvs at cvs.verbum.org:/cvs..."; \
+ cvs -Q -d :pserver:anoncvs at cvs.verbum.org:/cvs co debian/rules; \
+ echo "done."; \
+ newversion=`head debian/rules | perl -lne 'if (/Id: rules,v (.*?) /) { print $$1; }'`; \
+ if [ "$$newversion" != "$$curversion" ]; then \
+ echo "Retrieving log for revisions $$curversion to $$newversion..."; \
+ cvs -q -d :pserver:anoncvs at cvs.verbum.org:/cvs log "-r$$curversion:$$newversion" debian/rules; \
+ else \
+ echo "No changes."; \
+ fi; \
+ mv debian/rules .. ; cd .. ; rm -rf cbs-update ; chmod a+x rules; \
+ else \
+ echo "Couldn't find debian/rules; you must execute this target as debian/rules update"; \
+ fi
+
+internal_invoke := debian/rules "DEB_ARCH_PACKAGES=$(DEB_ARCH_PACKAGES)" "DEB_INDEP_PACKAGES=$(DEB_INDEP_PACKAGES)" "DEB_ALL_PACKAGES=$(DEB_ALL_PACKAGES)" "DEB_VERSION=$(DEB_VERSION)" "DEB_HOST_GNU_TYPE=$(DEB_HOST_GNU_TYPE)" "DEB_BUILD_GNU_TYPE=$(DEB_BUILD_GNU_TYPE)" "DEB_DESTDIR=$(DEB_DESTDIR)" "DEB_PATCHES=$(DEB_PATCHES)"
+
+pre-build: debian/stamp-pre-build
+debian/stamp-pre-build:
+ $(internal_invoke) deb-pre-build
+ touch $@
+
+# The patch subsystem
+apply-patches: pre-build debian/stamp-patched
+debian/stamp-patched: $(DEB_PATCHES)
+debian/stamp-patched reverse-patches:
+ @echo "patches: $(DEB_PATCHES)"
+ @set -e ; \
+ DPATCHES="$(DEB_PATCHES)"; \
+ [ "$@" = "reverse-patches" ] && DPATCHES="`ls -r $(DEB_PATCHES)`"; \
+ for patch in $$DPATCHES; do \
+ level=$(head $$patch | egrep '^#DPATCHLEVEL=' | cut -f 2 -d '='); \
+ reverse=""; \
+ if [ "$@" = "reverse-patches" ]; then reverse="-R"; fi; \
+ success=""; \
+ if [ -z "$$level" ]; then \
+ echo -n "Trying "; if test -n "$$reverse"; then echo -n "reversed "; fi; echo -n "patch $$patch at level "; \
+ for level in 0 1 2; do \
+ if test -z "$$success"; then \
+ echo -n "$$level..."; \
+ if cat $$patch | patch $$reverse --dry-run -p$$level --verbose 1>$$patch.level-$$level.log 2>&1; then \
+ if cat $$patch | patch $$reverse --no-backup-if-mismatch -V never -p$$level 1>$$patch.level-$$level.log 2>&1; then \
+ success=yes; \
+ touch debian/stamp-patch-$$(basename $$patch); \
+ echo "success."; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ if test -z "$$success"; then \
+ if test -z "$$reverse"; then \
+ echo "failure."; \
+ exit 1; \
+ else \
+ echo "failure (ignored)."; \
+ fi \
+ fi; \
+ else \
+ echo -n "Trying patch $$patch at level $$level..."; \
+ if cat $$patch | patch $$reverse --no-backup-if-mismatch -V never -p$$level 1>$$patch.log 2>&1; then \
+ touch debian/stamp-patch-$$(basename $$patch); \
+ echo "success."; \
+ else \
+ echo "failure:"; \
+ cat $$patch.log; \
+ if test -z "$$reverse"; then exit 1; fi; \
+ fi; \
+ fi; \
+ done
+ if [ "$@" = "debian/stamp-patched" ]; then touch debian/stamp-patched; fi
+
+post-patches: debian/stamp-post-patches
+debian/stamp-post-patches: apply-patches
+ $(internal_invoke) deb-post-patches
+ touch $@
+
+# The general targets
+common-configure: post-patches debian/stamp-common-configure
+debian/stamp-common-configure:
+ dh_testdir
+ $(internal_invoke) deb-autotools-setup
+ $(internal_invoke) deb-common-configure
+ touch $@
+$(patsubst %,configure-%,$(DEB_ALL_PACKAGES)) : configure-% : common-configure debian/stamp-configure-%
+$(patsubst %,debian/stamp-configure-%,$(DEB_ALL_PACKAGES)) : debian/stamp-configure-%: debian/stamp-patched
+ dh_testdir
+ $(internal_invoke) deb-configure-package-$(patsubst debian/stamp-configure-%,%,$@) DEB_CURPACKAGE=$(patsubst debian/stamp-configure-%,%,$@)
+ touch $@
+
+# Required Debian target
+build: build-arch build-indep
+
+common-build: debian/stamp-common-build
+debian/stamp-common-build: $(patsubst %,configure-%,$(DEB_ALL_PACKAGES))
+ dh_testdir
+ $(internal_invoke) deb-extra-pre-common-build
+ $(internal_invoke) deb-extra-common-build
+ touch $@
+$(patsubst %,build-%,$(DEB_ALL_PACKAGES)) :: build-% : debian/stamp-build-%
+$(patsubst %,debian/stamp-build-%,$(DEB_ALL_PACKAGES)) : debian/stamp-build-% : common-build configure-%
+ dh_testdir
+ $(internal_invoke) deb-extra-build-$(patsubst debian/stamp-build-%,%,$@) DEB_CURPACKAGE=$(patsubst debian/stamp-build-%,%,$@)
+ touch $@
+
+build-arch: $(patsubst %,build-%,$(DEB_ARCH_PACKAGES))
+build-indep: $(patsubst %,build-%,$(DEB_INDEP_PACKAGES))
+
+# Required Debian target
+clean: clean-dh-tests reverse-patches clean-impl
+clean-dh-tests:
+ dh_testdir
+ dh_testroot
+clean-impl:
+ $(internal_invoke) deb-autotools-clean
+ $(internal_invoke) deb-extra-clean
+ for dir in $(DEB_PATCHDIRS); do rm -f $$dir/*.log; done
+ rm -f debian/stamp-*
+ dh_clean $(DEB_CLEAN) $(foreach entry,$(DEB_CLEAN_EXCLUDE),$(patsubst %,-X %,$(entry)))
+
+common-install: debian/stamp-common-install
+debian/stamp-common-install: $(patsubst %,build-%,$(DEB_ALL_PACKAGES))
+ dh_testdir
+ dh_clean -k
+ dh_installdirs -A $(DEB_DIRS)
+ $(internal_invoke) deb-extra-common-install DEB_CURPACKAGE=
+ touch $@
+install-arch: $(patsubst %,install-%,$(DEB_ARCH_PACKAGES))
+install-indep: $(patsubst %,install-%,$(DEB_INDEP_PACKAGES))
+$(patsubst %,install-%,$(DEB_ALL_PACKAGES)) :: install-% : common-install build-%
+ dh_testdir
+ dh_testroot
+ $(internal_invoke) deb-extra-install-$(patsubst install-%,%,$@) DEB_CURPACKAGE=$(patsubst install-%,%,$@)
+
+common-binary: debian/stamp-common-binary
+debian/stamp-common-binary: $(patsubst %,install-%,$(DEB_ALL_PACKAGES)) common-install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs $(if $(DEB_KEEP_CHANGELOG_NAME),-k) $(DEB_ALL_CHANGELOG)
+ touch $@
+
+# Required Debian targets
+binary-indep: common-binary $(patsubst %,binary-%,$(DEB_INDEP_PACKAGES))
+binary-arch: common-binary $(patsubst %,binary-%,$(DEB_ARCH_PACKAGES))
+
+binary-% :: common-binary install-%
+ dh_testdir
+ dh_testroot
+ $(internal_invoke) deb-binary-$(patsubst binary-%,%,$@) DEB_CURPACKAGE=$(patsubst binary-%,%,$@)
+
+# Required Debian target
+binary: binary-indep binary-arch
+
+.PHONY: pre-build apply-patches reverse-patches post-patches common-configure build common-build build-% build-arch build-indep clean clean-dh-tests clean-impl common-install install-arch install-indep install-% common-binary binary-% binary-indep binary-arch binary deb-common-configure deb-common-build deb-clean deb-common-install deb-strip deb-makeshlibs $(DEB_PHONY_RULES)
Property changes on: trunk/debian/rules
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/debian/slang.c
===================================================================
--- trunk/debian/slang.c (rev 0)
+++ trunk/debian/slang.c 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <slang.h>
+
+void main(void)
+{
+ SLtt_get_terminfo ();
+ SLang_init_tty (-1, 0, 0);
+ SLsmg_init_smg ();
+
+ /* do stuff .... */
+ SLsmg_write_nchars("éàç", 3);
+ SLsmg_printf (" éàç ");
+ SLsmg_write_char ('à');
+ SLsmg_refresh();
+ sleep(5);
+
+ SLsmg_reset_smg ();
+ SLang_reset_tty ();
+}
Added: trunk/debian/watch
===================================================================
--- trunk/debian/watch (rev 0)
+++ trunk/debian/watch 2008-01-14 15:38:09 UTC (rev 6)
@@ -0,0 +1,2 @@
+version=3
+http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/ mc-([0-9\-\.pre]+).tar.gz
More information about the Pkg-mc-commits
mailing list